diff --git a/DEPS b/DEPS index 9d176958..a15e5c4 100644 --- a/DEPS +++ b/DEPS
@@ -127,11 +127,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': '5bbd02d6bb3d933fbe73d6b8fc915caa120bbcaf', + 'skia_revision': 'e3b205b1202fe9e53ee98994a6e777816406211e', # 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': '2f408608876b015b5c40977a6e3bf3984ce8cbe8', + 'v8_revision': 'd7d9726de58afdf80af43a04b731ab0247d9a42d', # 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. @@ -143,7 +143,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': 'b47c816ad7e6b7643b5491d6b0b3f373e316844c', + 'swiftshader_revision': '5efe611882433a634d2a9dc662f2940d0dca3d83', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. @@ -238,7 +238,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'spv_tools_revision': 'a006cbc1d04c0bd51489ef9b56976507ff72511e', + 'spv_tools_revision': 'fc3897b5f585b53291c75f5da7060acd7638ef18', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -254,7 +254,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': '8deadd8d022c80dfe85328da28dc3ef8e354453f', + 'dawn_revision': 'b92fa105572a598968764e578b95fe0b693c945b', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -701,7 +701,7 @@ }, 'src/third_party/breakpad/breakpad': - Var('chromium_git') + '/breakpad/breakpad.git' + '@' + '37a60998cade967809391d0986aa4af05d18a8ab', + Var('chromium_git') + '/breakpad/breakpad.git' + '@' + '30153b4eb581710faa298ee35f027dba11f930cc', 'src/third_party/byte_buddy': { 'packages': [ @@ -1091,7 +1091,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + 'fd734301165726c46786e8c3895e07007c78f0d6', + Var('android_git') + '/platform/external/perfetto.git' + '@' + 'afb82004c0bec36b4a46840bfe58840bacabff17', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + 'ac0d98b5cee6c024b0cffeb4f8f45b6fc5ccdb78', @@ -1265,7 +1265,7 @@ Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'a0f51b2e123f39c9ff12e621b0b47dd28dd64424', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '19d0104abbeb808e0ba27c56dc37916bbe5375ce', + Var('webrtc_git') + '/src.git' + '@' + '3812fa949a496498ea6030360089216294a38680', 'src/third_party/xdg-utils': { 'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d', @@ -1306,7 +1306,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@48d5237abd4dda469d49bb8a92a52b62e0047e38', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@9eb111e85e7e41b16a1144bc6108f127ba2c3e0d', 'condition': 'checkout_src_internal', },
diff --git a/android_webview/browser/cookie_manager.cc b/android_webview/browser/cookie_manager.cc index aecaa35..903aac7c 100644 --- a/android_webview/browser/cookie_manager.cc +++ b/android_webview/browser/cookie_manager.cc
@@ -379,13 +379,13 @@ if (base::FeatureList::IsEnabled(network::features::kNetworkService)) { // *cc.get() is safe, because network::CookieManager::SetCanonicalCookie // will make a copy before our smart pointer goes out of scope. - GetCookieManagerWrapper()->SetCanonicalCookie( - *cc.get(), new_host.SchemeIsCryptographic(), - !options.exclude_httponly(), std::move(callback)); + GetCookieManagerWrapper()->SetCanonicalCookie(*cc.get(), new_host.scheme(), + !options.exclude_httponly(), + std::move(callback)); } else { - GetCookieStore()->SetCanonicalCookieAsync( - std::move(cc), new_host.SchemeIsCryptographic(), - !options.exclude_httponly(), StatusToBool(callback)); + GetCookieStore()->SetCanonicalCookieAsync(std::move(cc), new_host.scheme(), + !options.exclude_httponly(), + StatusToBool(callback)); } }
diff --git a/android_webview/browser/net/aw_cookie_store_wrapper.cc b/android_webview/browser/net/aw_cookie_store_wrapper.cc index 33fc9ac..2fdb2392 100644 --- a/android_webview/browser/net/aw_cookie_store_wrapper.cc +++ b/android_webview/browser/net/aw_cookie_store_wrapper.cc
@@ -27,11 +27,12 @@ void SetCanonicalCookieAsyncOnCookieThread( std::unique_ptr<net::CanonicalCookie> cookie, - bool secure_source, + std::string source_scheme, bool modify_http_only, net::CookieStore::SetCookiesCallback callback) { GetCookieStore()->SetCanonicalCookieAsync( - std::move(cookie), secure_source, modify_http_only, std::move(callback)); + std::move(cookie), std::move(source_scheme), modify_http_only, + std::move(callback)); } void GetCookieListWithOptionsAsyncOnCookieThread( @@ -102,13 +103,13 @@ void AwCookieStoreWrapper::SetCanonicalCookieAsync( std::unique_ptr<net::CanonicalCookie> cookie, - bool secure_source, + std::string source_scheme, bool modify_http_only, SetCookiesCallback callback) { DCHECK(client_task_runner_->RunsTasksInCurrentSequence()); PostTaskToCookieStoreTaskRunner(base::BindOnce( - &SetCanonicalCookieAsyncOnCookieThread, std::move(cookie), secure_source, - modify_http_only, + &SetCanonicalCookieAsyncOnCookieThread, std::move(cookie), + std::move(source_scheme), modify_http_only, CreateWrappedCallback<net::CanonicalCookie::CookieInclusionStatus>( std::move(callback)))); }
diff --git a/android_webview/browser/net/aw_cookie_store_wrapper.h b/android_webview/browser/net/aw_cookie_store_wrapper.h index dc55e5a..7436105 100644 --- a/android_webview/browser/net/aw_cookie_store_wrapper.h +++ b/android_webview/browser/net/aw_cookie_store_wrapper.h
@@ -48,7 +48,7 @@ const net::CookieOptions& options, SetCookiesCallback callback) override; void SetCanonicalCookieAsync(std::unique_ptr<net::CanonicalCookie> cookie, - bool secure_source, + std::string source_scheme, bool modify_http_only, SetCookiesCallback callback) override; void GetCookieListWithOptionsAsync(const GURL& url,
diff --git a/android_webview/browser/net_network_service/aw_cookie_manager_wrapper.cc b/android_webview/browser/net_network_service/aw_cookie_manager_wrapper.cc index 972b2bd..1b61366 100644 --- a/android_webview/browser/net_network_service/aw_cookie_manager_wrapper.cc +++ b/android_webview/browser/net_network_service/aw_cookie_manager_wrapper.cc
@@ -32,13 +32,13 @@ void AwCookieManagerWrapper::SetCanonicalCookie( const net::CanonicalCookie& cc, - bool secure_source, + std::string source_scheme, bool modify_http_only, SetCanonicalCookieCallback callback) { // TODO(ntfschr): handle the case where content layer isn't initialized yet // (http://crbug.com/933461). - cookie_manager_->SetCanonicalCookie(cc, secure_source, modify_http_only, - std::move(callback)); + cookie_manager_->SetCanonicalCookie(cc, std::move(source_scheme), + modify_http_only, std::move(callback)); } void AwCookieManagerWrapper::DeleteCookies(
diff --git a/android_webview/browser/net_network_service/aw_cookie_manager_wrapper.h b/android_webview/browser/net_network_service/aw_cookie_manager_wrapper.h index ad8cc20..b602814d 100644 --- a/android_webview/browser/net_network_service/aw_cookie_manager_wrapper.h +++ b/android_webview/browser/net_network_service/aw_cookie_manager_wrapper.h
@@ -43,7 +43,7 @@ GetCookieListCallback callback); void SetCanonicalCookie(const net::CanonicalCookie& cc, - bool secure_source, + std::string source_scheme, bool modify_http_only, SetCanonicalCookieCallback);
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd index b228fcc..3ecad4d 100644 --- a/ash/ash_strings.grd +++ b/ash/ash_strings.grd
@@ -1826,6 +1826,9 @@ <message name="IDS_ASH_MESSAGE_CENTER_UNLOCK_TO_PERFORM_ACTION_WITH_USER_ID" desc="The short message to encourage user to unlock the device so that Chrome OS can perform the notification action selected by user after unlocking."> Unlock device as <ph name="login_id">$1<ex>example@gmail.com</ex></ph> to perform the notification action </message> + <message name="IDS_ASH_MESSAGE_CENTER_UNLOCK_TO_CHANGE_SETTING" desc="The short message to encourage user to unlock the device to change the lock screen notification setting, so that Chrome OS can show the setting window after unlocking."> + To see notifications on your lock screen, unlock to change the setting + </message> </messages> </release> </grit>
diff --git a/ash/ash_strings_grd/IDS_ASH_MESSAGE_CENTER_UNLOCK_TO_CHANGE_SETTING.png.sha1 b/ash/ash_strings_grd/IDS_ASH_MESSAGE_CENTER_UNLOCK_TO_CHANGE_SETTING.png.sha1 new file mode 100644 index 0000000..6aebe0c --- /dev/null +++ b/ash/ash_strings_grd/IDS_ASH_MESSAGE_CENTER_UNLOCK_TO_CHANGE_SETTING.png.sha1
@@ -0,0 +1 @@ +e09cf86b689a4c2f1b897737df6f9a229b66944f \ No newline at end of file
diff --git a/ash/system/message_center/ash_message_center_lock_screen_controller.cc b/ash/system/message_center/ash_message_center_lock_screen_controller.cc index 524f10b..a75e8730 100644 --- a/ash/system/message_center/ash_message_center_lock_screen_controller.cc +++ b/ash/system/message_center/ash_message_center_lock_screen_controller.cc
@@ -87,7 +87,8 @@ void AshMessageCenterLockScreenController::DismissLockScreenThenExecute( base::OnceClosure pending_callback, - base::OnceClosure cancel_callback) { + base::OnceClosure cancel_callback, + int message_id) { if (locked_) { // Invokes the previous cancel task if any. if (cancel_task_) @@ -97,7 +98,7 @@ pending_task_ = std::move(pending_callback); cancel_task_ = std::move(cancel_callback); - EncourageUserToUnlock(); + EncourageUserToUnlock(message_id); } else { DCHECK(pending_task_.is_null()); DCHECK(cancel_task_.is_null()); @@ -110,7 +111,8 @@ return locked_; } -void AshMessageCenterLockScreenController::EncourageUserToUnlock() { +void AshMessageCenterLockScreenController::EncourageUserToUnlock( + int message_id) { DCHECK(locked_); DCHECK(LockScreen::Get()); @@ -124,18 +126,24 @@ unified_system_tray->CloseBubble(); } + base::string16 message; + if (message_id != -1) { + message = l10n_util::GetStringUTF16(message_id); + } else { + message = + (Shell::Get()->session_controller()->NumberOfLoggedInUsers() == 1 || + active_account_id_.empty()) + ? l10n_util::GetStringUTF16( + IDS_ASH_MESSAGE_CENTER_UNLOCK_TO_PERFORM_ACTION) + : l10n_util::GetStringFUTF16( + IDS_ASH_MESSAGE_CENTER_UNLOCK_TO_PERFORM_ACTION_WITH_USER_ID, + base::UTF8ToUTF16(active_account_id_.GetUserEmail())); + } + // TODO(yoshiki): Update UI after the UX finalizes. - Shell::Get()->toast_manager()->Show(ToastData( - kToastId, - (Shell::Get()->session_controller()->NumberOfLoggedInUsers() == 1 || - active_account_id_.empty()) - ? l10n_util::GetStringUTF16( - IDS_ASH_MESSAGE_CENTER_UNLOCK_TO_PERFORM_ACTION) - : l10n_util::GetStringFUTF16( - IDS_ASH_MESSAGE_CENTER_UNLOCK_TO_PERFORM_ACTION_WITH_USER_ID, - base::UTF8ToUTF16(active_account_id_.GetUserEmail())), - ToastData::kInfiniteDuration, base::nullopt, - /*visible_on_lock_screen=*/true)); + Shell::Get()->toast_manager()->Show( + ToastData(kToastId, message, ToastData::kInfiniteDuration, base::nullopt, + /*visible_on_lock_screen=*/true)); } void AshMessageCenterLockScreenController::OnLockStateChanged(bool locked) {
diff --git a/ash/system/message_center/ash_message_center_lock_screen_controller.h b/ash/system/message_center/ash_message_center_lock_screen_controller.h index d5e4b6b..b11d4e71 100644 --- a/ash/system/message_center/ash_message_center_lock_screen_controller.h +++ b/ash/system/message_center/ash_message_center_lock_screen_controller.h
@@ -32,7 +32,8 @@ // message_center::LockScreenController: void DismissLockScreenThenExecute(base::OnceClosure pending_callback, - base::OnceClosure cancel_callback) override; + base::OnceClosure cancel_callback, + int message_id) override; bool IsScreenLocked() const override; private: @@ -62,7 +63,7 @@ void OnActiveUserSessionChanged(const AccountId& account_id) override; // Shows a message that asks a user to unlock the device. - void EncourageUserToUnlock(); + void EncourageUserToUnlock(int message_id); bool locked_; AccountId active_account_id_ = EmptyAccountId();
diff --git a/ash/system/unified/notification_hidden_view.cc b/ash/system/unified/notification_hidden_view.cc index e83f781d..99ca5be 100644 --- a/ash/system/unified/notification_hidden_view.cc +++ b/ash/system/unified/notification_hidden_view.cc
@@ -82,7 +82,7 @@ ->lock_screen_controller() ->DismissLockScreenThenExecute( base::BindOnce(&ShowLockScreenNotificationSettings), - base::DoNothing()); + base::DoNothing(), IDS_ASH_MESSAGE_CENTER_UNLOCK_TO_CHANGE_SETTING); } } // namespace ash
diff --git a/ash/wm/overview/overview_grid.cc b/ash/wm/overview/overview_grid.cc index 8d59c7d..8f2780cd 100644 --- a/ash/wm/overview/overview_grid.cc +++ b/ash/wm/overview/overview_grid.cc
@@ -463,8 +463,7 @@ // Fade out the shield widget. This animation continues past the lifetime // of |this|. FadeOutWidgetAndMaybeSlideOnExit(std::move(shield_widget_), - OVERVIEW_ANIMATION_RESTORE_WINDOW, - /*slide=*/false); + OVERVIEW_ANIMATION_RESTORE_WINDOW); } }
diff --git a/ash/wm/overview/overview_item.cc b/ash/wm/overview/overview_item.cc index 6cdc42e6..3a3a86d 100644 --- a/ash/wm/overview/overview_item.cc +++ b/ash/wm/overview/overview_item.cc
@@ -136,9 +136,7 @@ void OverviewItem::RestoreWindow(bool reset_transform) { caption_container_view_->ResetListener(); transform_window_.RestoreWindow( - reset_transform, - overview_session_->enter_exit_overview_type() == - OverviewSession::EnterExitOverviewType::kWindowsMinimized); + reset_transform, overview_session_->enter_exit_overview_type()); } void OverviewItem::EnsureVisible() {
diff --git a/ash/wm/overview/overview_utils.cc b/ash/wm/overview/overview_utils.cc index 7c10558..8d688ab 100644 --- a/ash/wm/overview/overview_utils.cc +++ b/ash/wm/overview/overview_utils.cc
@@ -148,8 +148,7 @@ } void FadeOutWidgetAndMaybeSlideOnExit(std::unique_ptr<views::Widget> widget, - OverviewAnimationType animation_type, - bool slide) { + OverviewAnimationType animation_type) { // The overview controller may be nullptr on shutdown. OverviewController* controller = Shell::Get()->overview_controller(); if (!controller) { @@ -171,7 +170,9 @@ animation_settings.AddObserver(observer.get()); controller->AddDelayedAnimationObserver(std::move(observer)); widget_ptr->SetOpacity(0.f); - if (slide) { + + // Slide |widget| towards to top of screen if exit overview to home launcher. + if (animation_type == OVERVIEW_ANIMATION_EXIT_TO_HOME_LAUNCHER) { gfx::Transform new_transform = widget_ptr->GetNativeWindow()->transform(); new_transform.ConcatTransform(GetShiftTransform()); widget_ptr->GetNativeWindow()->SetTransform(new_transform);
diff --git a/ash/wm/overview/overview_utils.h b/ash/wm/overview/overview_utils.h index 99633b2..5d412d8 100644 --- a/ash/wm/overview/overview_utils.h +++ b/ash/wm/overview/overview_utils.h
@@ -37,11 +37,9 @@ // Fades |widget| to opacity zero with animation settings depending on // |animation_type|. Used by several classes which need to be destroyed on // exiting overview, but have some widgets which need to continue animating. -// |widget| is destroyed after finishing animation. Additionally slide |widget| -// towards the top of screen if |slide| is true. +// |widget| is destroyed after finishing animation. void FadeOutWidgetAndMaybeSlideOnExit(std::unique_ptr<views::Widget> widget, - OverviewAnimationType animation_type, - bool slide); + OverviewAnimationType animation_type); // Creates and returns a background translucent widget parented in // |root_window|'s default container and having |background_color|.
diff --git a/ash/wm/overview/scoped_overview_transform_window.cc b/ash/wm/overview/scoped_overview_transform_window.cc index ae3f814..7bfc61c 100644 --- a/ash/wm/overview/scoped_overview_transform_window.cc +++ b/ash/wm/overview/scoped_overview_transform_window.cc
@@ -14,10 +14,10 @@ #include "ash/wm/overview/overview_controller.h" #include "ash/wm/overview/overview_grid.h" #include "ash/wm/overview/overview_item.h" -#include "ash/wm/overview/overview_session.h" #include "ash/wm/overview/overview_utils.h" #include "ash/wm/overview/scoped_overview_animation_settings.h" #include "ash/wm/overview/start_animation_observer.h" +#include "ash/wm/tablet_mode/tablet_mode_controller.h" #include "ash/wm/window_preview_view.h" #include "ash/wm/window_state.h" #include "ash/wm/window_transient_descendant_iterator.h" @@ -66,6 +66,21 @@ return ScopedOverviewTransformWindow::GridWindowFillMode::kNormal; } +OverviewAnimationType GetExitOverviewAnimationTypeForMinimizedWindow( + OverviewSession::EnterExitOverviewType type) { + // EnterExitOverviewType can only be set to kWindowMinimized in talbet mode. + // Fade out the minimized window without animation if switch from tablet mode + // to clamshell mode. + if (type == OverviewSession::EnterExitOverviewType::kWindowsMinimized) { + return Shell::Get() + ->tablet_mode_controller() + ->IsTabletModeWindowManagerEnabled() + ? OVERVIEW_ANIMATION_EXIT_TO_HOME_LAUNCHER + : OVERVIEW_ANIMATION_NONE; + } + return OVERVIEW_ANIMATION_EXIT_OVERVIEW_MODE_FADE_OUT; +} + } // namespace class ScopedOverviewTransformWindow::LayerCachingAndFilteringObserver @@ -208,8 +223,9 @@ return transform; } -void ScopedOverviewTransformWindow::RestoreWindow(bool reset_transform, - bool use_slide_animation) { +void ScopedOverviewTransformWindow::RestoreWindow( + bool reset_transform, + OverviewSession::EnterExitOverviewType type) { // Shadow controller may be null on shutdown. if (Shell::Get()->shadow_controller()) Shell::Get()->shadow_controller()->UpdateShadowForWindow(window_); @@ -218,9 +234,7 @@ // lifetime of |this|. FadeOutWidgetAndMaybeSlideOnExit( std::move(minimized_widget_), - use_slide_animation ? OVERVIEW_ANIMATION_EXIT_TO_HOME_LAUNCHER - : OVERVIEW_ANIMATION_EXIT_OVERVIEW_MODE_FADE_OUT, - use_slide_animation); + GetExitOverviewAnimationTypeForMinimizedWindow(type)); return; }
diff --git a/ash/wm/overview/scoped_overview_transform_window.h b/ash/wm/overview/scoped_overview_transform_window.h index 219ab4d8..624c68c1 100644 --- a/ash/wm/overview/scoped_overview_transform_window.h +++ b/ash/wm/overview/scoped_overview_transform_window.h
@@ -10,6 +10,7 @@ #include "ash/ash_export.h" #include "ash/wm/overview/overview_animation_type.h" +#include "ash/wm/overview/overview_session.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/optional.h" @@ -109,7 +110,8 @@ // If |reset_transform| equals false, the window's transform will not be reset // to identity transform when exiting the overview mode. See // OverviewItem::RestoreWindow() for details why we need this. - void RestoreWindow(bool reset_transform, bool use_slide_animation); + void RestoreWindow(bool reset_transform, + OverviewSession::EnterExitOverviewType type); // Informs the ScopedOverviewTransformWindow that the window being watched was // destroyed. This resets the internal window pointer.
diff --git a/base/BUILD.gn b/base/BUILD.gn index 443c4cf..ee4face 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -724,6 +724,8 @@ "task/scoped_set_task_priority_for_current_thread.h", "task/sequence_manager/associated_thread_id.cc", "task/sequence_manager/associated_thread_id.h", + "task/sequence_manager/atomic_flag_set.cc", + "task/sequence_manager/atomic_flag_set.h", "task/sequence_manager/enqueue_order.cc", "task/sequence_manager/enqueue_order.h", "task/sequence_manager/lazily_deallocated_deque.h", @@ -2501,6 +2503,7 @@ "task/lazy_task_runner_unittest.cc", "task/post_task_unittest.cc", "task/scoped_set_task_priority_for_current_thread_unittest.cc", + "task/sequence_manager/atomic_flag_set_unittest.cc", "task/sequence_manager/lazily_deallocated_deque_unittest.cc", "task/sequence_manager/sequence_manager_impl_unittest.cc", "task/sequence_manager/task_queue_selector_unittest.cc",
diff --git a/base/task/sequence_manager/atomic_flag_set.cc b/base/task/sequence_manager/atomic_flag_set.cc new file mode 100644 index 0000000..98efafe67 --- /dev/null +++ b/base/task/sequence_manager/atomic_flag_set.cc
@@ -0,0 +1,209 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/task/sequence_manager/atomic_flag_set.h" + +#include <utility> + +#include "base/bits.h" +#include "base/callback.h" +#include "base/logging.h" + +namespace base { +namespace sequence_manager { +namespace internal { + +AtomicFlagSet::AtomicFlagSet( + scoped_refptr<AssociatedThreadId> associated_thread) + : associated_thread_(std::move(associated_thread)) {} + +AtomicFlagSet::~AtomicFlagSet() { + DCHECK(!alloc_list_head_); + DCHECK(!partially_free_list_head_); +} + +AtomicFlagSet::AtomicFlag::AtomicFlag() = default; + +AtomicFlagSet::AtomicFlag::~AtomicFlag() { + ReleaseAtomicFlag(); +} + +AtomicFlagSet::AtomicFlag::AtomicFlag(AtomicFlagSet* outer, + Group* element, + size_t flag_bit) + : outer_(outer), group_(element), flag_bit_(flag_bit) {} + +AtomicFlagSet::AtomicFlag::AtomicFlag(AtomicFlag&& other) + : outer_(other.outer_), group_(other.group_), flag_bit_(other.flag_bit_) { + other.outer_ = nullptr; + other.group_ = nullptr; +} + +void AtomicFlagSet::AtomicFlag::SetActive(bool active) { + DCHECK(group_); + // Release semantics are required to ensure that all memory accesses made on + // this thread happen-before any others done on the thread running the active + // callbacks. + if (active) { + group_->flags.fetch_or(flag_bit_, std::memory_order_release); + } else { + group_->flags.fetch_and(~flag_bit_, std::memory_order_release); + } +} + +void AtomicFlagSet::AtomicFlag::ReleaseAtomicFlag() { + if (!group_) + return; + + DCHECK_CALLED_ON_VALID_THREAD(outer_->associated_thread_->thread_checker); + SetActive(false); + + // If |group_| was full then add it on the partially free list. + if (group_->IsFull()) + outer_->AddToPartiallyFreeList(group_); + + int index = Group::IndexOfFirstFlagSet(flag_bit_); + DCHECK(!group_->flag_callbacks[index].is_null()); + group_->flag_callbacks[index] = RepeatingClosure(); + group_->allocated_flags &= ~flag_bit_; + + // If |group_| has become empty delete it. + if (group_->IsEmpty()) { + outer_->RemoveFromPartiallyFreeList(group_); + outer_->RemoveFromAllocList(group_); + } + + outer_ = nullptr; + group_ = nullptr; +} + +AtomicFlagSet::AtomicFlag AtomicFlagSet::AddFlag(RepeatingClosure callback) { + DCHECK_CALLED_ON_VALID_THREAD(associated_thread_->thread_checker); + // Allocate a new Group if needed. + if (!partially_free_list_head_) { + AddToAllocList(std::make_unique<Group>()); + AddToPartiallyFreeList(alloc_list_head_.get()); + } + + DCHECK(partially_free_list_head_); + Group* group = partially_free_list_head_; + size_t first_unoccupied_index = + static_cast<size_t>(group->FindFirstUnallocatedFlag()); + DCHECK(!group->flag_callbacks[first_unoccupied_index]); + group->flag_callbacks[first_unoccupied_index] = std::move(callback); + + size_t flag_bit = size_t{1} << first_unoccupied_index; + group->allocated_flags |= flag_bit; + + if (group->IsFull()) + RemoveFromPartiallyFreeList(group); + + return AtomicFlag(this, group, flag_bit); +} + +void AtomicFlagSet::RunActiveCallbacks() const { + DCHECK_CALLED_ON_VALID_THREAD(associated_thread_->thread_checker); + for (Group* iter = alloc_list_head_.get(); iter; iter = iter->next_.get()) { + // Acquire semantics are required to guarantee that all memory side-effects + // made by other threads that were allowed to perform operations are + // synchronized with this thread before it returns from this method. + size_t active_flags = std::atomic_exchange_explicit( + &iter->flags, size_t{0}, std::memory_order_acquire); + // This is O(number of bits set). + while (active_flags) { + int index = Group::IndexOfFirstFlagSet(active_flags); + // Clear the flag. + active_flags ^= size_t{1} << index; + iter->flag_callbacks[index].Run(); + } + } +} + +AtomicFlagSet::Group::Group() = default; + +AtomicFlagSet::Group::~Group() { + DCHECK_EQ(allocated_flags, 0u); + DCHECK(!partially_free_list_prev_); + DCHECK(!partially_free_list_next_); +} + +bool AtomicFlagSet::Group::IsFull() const { + return (~allocated_flags) == 0u; +} + +bool AtomicFlagSet::Group::IsEmpty() const { + return allocated_flags == 0u; +} + +int AtomicFlagSet::Group::FindFirstUnallocatedFlag() const { + size_t unallocated_flags = ~allocated_flags; + DCHECK_NE(unallocated_flags, 0u); + int index = IndexOfFirstFlagSet(unallocated_flags); + DCHECK_LT(index, kNumFlags); + return index; +} + +// static +int AtomicFlagSet::Group::IndexOfFirstFlagSet(size_t flag) { + return kNumFlags - 1 - bits::CountLeadingZeroBits(flag); +} + +void AtomicFlagSet::AddToAllocList(std::unique_ptr<Group> group) { + DCHECK_CALLED_ON_VALID_THREAD(associated_thread_->thread_checker); + if (alloc_list_head_) + alloc_list_head_->prev_ = group.get(); + + group->next_ = std::move(alloc_list_head_); + alloc_list_head_ = std::move(group); +} + +void AtomicFlagSet::RemoveFromAllocList(Group* group) { + DCHECK_CALLED_ON_VALID_THREAD(associated_thread_->thread_checker); + if (group->next_) + group->next_->prev_ = group->prev_; + + if (group->prev_) { + group->prev_->next_ = std::move(group->next_); + } else { + alloc_list_head_ = std::move(group->next_); + } +} + +void AtomicFlagSet::AddToPartiallyFreeList(Group* element) { + DCHECK_CALLED_ON_VALID_THREAD(associated_thread_->thread_checker); + DCHECK_NE(partially_free_list_head_, element); + DCHECK(!element->partially_free_list_prev_); + DCHECK(!element->partially_free_list_next_); + if (partially_free_list_head_) + partially_free_list_head_->partially_free_list_prev_ = element; + + element->partially_free_list_next_ = partially_free_list_head_; + partially_free_list_head_ = element; +} + +void AtomicFlagSet::RemoveFromPartiallyFreeList(Group* element) { + DCHECK_CALLED_ON_VALID_THREAD(associated_thread_->thread_checker); + DCHECK(partially_free_list_head_); + // Check |element| is in the list. + DCHECK(partially_free_list_head_ == element || + element->partially_free_list_prev_); + if (element->partially_free_list_next_) { + element->partially_free_list_next_->partially_free_list_prev_ = + element->partially_free_list_prev_; + } + + if (element->partially_free_list_prev_) { + element->partially_free_list_prev_->partially_free_list_next_ = + element->partially_free_list_next_; + } else { + partially_free_list_head_ = element->partially_free_list_next_; + } + + element->partially_free_list_prev_ = nullptr; + element->partially_free_list_next_ = nullptr; +} + +} // namespace internal +} // namespace sequence_manager +} // namespace base
diff --git a/base/task/sequence_manager/atomic_flag_set.h b/base/task/sequence_manager/atomic_flag_set.h new file mode 100644 index 0000000..c6a2f2d --- /dev/null +++ b/base/task/sequence_manager/atomic_flag_set.h
@@ -0,0 +1,142 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_TASK_SEQUENCE_MANAGER_ATOMIC_FLAG_SET_H_ +#define BASE_TASK_SEQUENCE_MANAGER_ATOMIC_FLAG_SET_H_ + +#include <atomic> +#include <memory> + +#include "base/base_export.h" +#include "base/callback.h" +#include "base/task/sequence_manager/associated_thread_id.h" + +namespace base { +namespace sequence_manager { +namespace internal { + +// This class maintains a set of AtomicFlags which can be activated or +// deactivated at any time by any thread. When a flag is created a callback is +// specified and the RunActiveCallbacks method can be invoked to fire callbacks +// for all active flags. Creating releasing or destroying an AtomicFlag must be +// done on the associated thread, as must calling RunActiveCallbacks. This +// class is thread-compatible. +class BASE_EXPORT AtomicFlagSet { + protected: + struct Group; + + public: + explicit AtomicFlagSet(scoped_refptr<AssociatedThreadId> associated_thread); + + // AtomicFlags need to be released (or deleted) before this can be deleted. + ~AtomicFlagSet(); + + // This class is thread-compatible in addition SetActive can be called + // concurrently from any thread. + class BASE_EXPORT AtomicFlag { + public: + AtomicFlag(); + + // Automatically releases the AtomicFlag. + ~AtomicFlag(); + + AtomicFlag(const AtomicFlag&) = delete; + AtomicFlag(AtomicFlag&& other); + + // Can be called on any thread. Marks whether the flag is active or not, + // which controls whether RunActiveCallbacks() will fire the associated + // callback or not. In the absence of external synchronization, the value + // set by this call might not immediately be visible to a thread calling + // RunActiveCallbacks(); the only guarantee is that a value set by this will + // eventually be visible to other threads due to cache coherency. Release / + // acquire semantics are used on the underlying atomic operations so if + // RunActiveCallbacks sees the value set by a call to SetActive(), it will + // also see the memory changes that happened prior to that SetActive() call. + void SetActive(bool active); + + // Releases the flag. Must be called on the associated thread. SetActive + // can't be called after this. + void ReleaseAtomicFlag(); + + private: + friend AtomicFlagSet; + + AtomicFlag(AtomicFlagSet* outer, Group* element, size_t flag_bit); + + AtomicFlagSet* outer_ = nullptr; + Group* group_ = nullptr; // Null when AtomicFlag is invalid. + size_t flag_bit_ = 0; // This is 1 << index of this flag within the group. + }; + + // Adds a new flag to the set. The |callback| will be fired by + // RunActiveCallbacks if the flag is active. Must be called on the associated + // thread. + AtomicFlag AddFlag(RepeatingClosure callback); + + // Runs the registered callback for all flags marked as active and resets all + // flags to inactive. Must be called on the associated thread. + void RunActiveCallbacks() const; + + protected: + Group* GetAllocListForTesting() const { return alloc_list_head_.get(); } + + Group* GetPartiallyFreeListForTesting() const { + return partially_free_list_head_; + } + + // Wraps a single std::atomic<size_t> which is shared by a number of + // AtomicFlag's with one bit per flag. + struct BASE_EXPORT Group { + Group(); + ~Group(); + + static constexpr int kNumFlags = sizeof(size_t) * 8; + + std::atomic<size_t> flags = {0}; + size_t allocated_flags = 0; + RepeatingClosure flag_callbacks[kNumFlags]; + Group* prev_ = nullptr; + std::unique_ptr<Group> next_; + Group* partially_free_list_prev_ = nullptr; + Group* partially_free_list_next_ = nullptr; + + bool IsFull() const; + + bool IsEmpty() const; + + // Returns the index of the first unallocated flag. Must not be called when + // all flags are set. + int FindFirstUnallocatedFlag() const; + + // Computes the index of the |flag_callbacks| based on the number of leading + // zero bits in |flag|. + static int IndexOfFirstFlagSet(size_t flag); + + private: + DISALLOW_COPY_AND_ASSIGN(Group); + }; + + private: + void AddToAllocList(std::unique_ptr<Group> element); + + // This deletes |element|. + void RemoveFromAllocList(Group* element); + + void AddToPartiallyFreeList(Group* element); + + // This does not delete |element|. + void RemoveFromPartiallyFreeList(Group* element); + + scoped_refptr<AssociatedThreadId> associated_thread_; + std::unique_ptr<Group> alloc_list_head_; + Group* partially_free_list_head_ = nullptr; + + DISALLOW_COPY_AND_ASSIGN(AtomicFlagSet); +}; + +} // namespace internal +} // namespace sequence_manager +} // namespace base + +#endif // BASE_TASK_SEQUENCE_MANAGER_ATOMIC_FLAG_SET_H_
diff --git a/base/task/sequence_manager/atomic_flag_set_unittest.cc b/base/task/sequence_manager/atomic_flag_set_unittest.cc new file mode 100644 index 0000000..5852214 --- /dev/null +++ b/base/task/sequence_manager/atomic_flag_set_unittest.cc
@@ -0,0 +1,325 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/task/sequence_manager/atomic_flag_set.h" + +#include <set> +#include <utility> +#include <vector> + +#include "base/test/bind_test_util.h" +#include "testing/gmock/include/gmock/gmock.h" + +using testing::ElementsAre; +using testing::IsNull; +using testing::NotNull; + +namespace base { +namespace sequence_manager { +namespace internal { + +class AtomicFlagSetForTest : public AtomicFlagSet { + public: + explicit AtomicFlagSetForTest( + scoped_refptr<AssociatedThreadId> associated_thread) + : AtomicFlagSet(std::move(associated_thread)) {} + + using AtomicFlagSet::GetAllocListForTesting; + using AtomicFlagSet::GetPartiallyFreeListForTesting; + using AtomicFlagSet::Group; +}; + +class AtomicFlagSetTest : public testing::Test { + public: + void CreateFlags(size_t number_of_flags, + RepeatingCallback<void(size_t index)> callback) { + atomic_flags_.reserve(number_of_flags); + for (size_t i = 0; i < number_of_flags; i++) { + atomic_flags_.push_back(atomic_flag_set_.AddFlag( + base::BindRepeating([](RepeatingCallback<void(size_t index)> callback, + size_t i) { callback.Run(i); }, + callback, i))); + } + } + + AtomicFlagSetForTest atomic_flag_set_{AssociatedThreadId::CreateBound()}; + std::vector<AtomicFlagSet::AtomicFlag> atomic_flags_; +}; + +TEST_F(AtomicFlagSetTest, VisitEmptyAtomicFlagSet) { + atomic_flag_set_.RunActiveCallbacks(); // Shouldn't crash. +} + +TEST_F(AtomicFlagSetTest, SetActiveOneFlag) { + std::vector<size_t> flags_visited; + + CreateFlags(3, BindLambdaForTesting( + [&](size_t index) { flags_visited.push_back(index); })); + + atomic_flags_[1].SetActive(true); + EXPECT_TRUE(flags_visited.empty()); + + atomic_flag_set_.RunActiveCallbacks(); + EXPECT_THAT(flags_visited, ElementsAre(1)); + + // A subsequent call to RunActiveCallbacks should not visit anything. + flags_visited.clear(); + atomic_flag_set_.RunActiveCallbacks(); + EXPECT_TRUE(flags_visited.empty()); +} + +TEST_F(AtomicFlagSetTest, SetActiveManyFlags) { + constexpr size_t num_flags = 1000; + std::set<size_t> flags_visited; + + CreateFlags(num_flags, BindLambdaForTesting([&](size_t index) { + flags_visited.insert(index); + })); + + // Set active all even numbered flags. + for (size_t i = 0; i < num_flags; i += 2) { + atomic_flags_[i].SetActive(true); + } + + atomic_flag_set_.RunActiveCallbacks(); + + ASSERT_EQ(flags_visited.size(), num_flags / 2); + for (size_t i = 0; i < flags_visited.size(); i++) { + ASSERT_EQ(flags_visited.count(i * 2), 1u); + } +} + +TEST_F(AtomicFlagSetTest, SetActiveFalse) { + std::vector<size_t> flags_visited; + + CreateFlags(3, BindLambdaForTesting( + [&](size_t index) { flags_visited.push_back(index); })); + + atomic_flags_[1].SetActive(true); + atomic_flags_[1].SetActive(false); + + atomic_flag_set_.RunActiveCallbacks(); + EXPECT_TRUE(flags_visited.empty()); +} + +TEST_F(AtomicFlagSetTest, ReleaseAtomicFlag) { + constexpr size_t num_flags = 1000; + constexpr size_t half_num_flags = num_flags / 2; + std::set<size_t> flags_visited; + + CreateFlags(num_flags, BindLambdaForTesting([&](size_t index) { + flags_visited.insert(index); + })); + + // Set active all flags. + for (size_t i = 0; i < num_flags; i++) { + atomic_flags_[i].SetActive(true); + } + + // Release half the AtomicFlags. + for (size_t i = 0; i < half_num_flags; i++) { + atomic_flags_[i].ReleaseAtomicFlag(); + } + + atomic_flag_set_.RunActiveCallbacks(); + + // We should only have visited the unreleased half. + ASSERT_EQ(flags_visited.size(), half_num_flags); + for (size_t i = 0; i < flags_visited.size(); i++) { + ASSERT_EQ(flags_visited.count(i + half_num_flags), 1u); + } +} + +TEST_F(AtomicFlagSetTest, GroupBecomesFull) { + CreateFlags(AtomicFlagSetForTest::Group::kNumFlags - 1, + BindLambdaForTesting([](size_t index) {})); + AtomicFlagSetForTest::Group* group1 = + atomic_flag_set_.GetAllocListForTesting(); + EXPECT_THAT(group1->next_.get(), IsNull()); + EXPECT_EQ(group1, atomic_flag_set_.GetPartiallyFreeListForTesting()); + EXPECT_FALSE(group1->IsFull()); + EXPECT_FALSE(group1->IsEmpty()); + + // Add an extra flag to fill up the group. + atomic_flags_.push_back( + atomic_flag_set_.AddFlag(base::BindRepeating([]() {}))); + + EXPECT_TRUE(group1->IsFull()); + EXPECT_THAT(atomic_flag_set_.GetPartiallyFreeListForTesting(), IsNull()); +} + +TEST_F(AtomicFlagSetTest, GroupBecomesEmptyOnlyEntryInPartiallyFreeList) { + CreateFlags(AtomicFlagSetForTest::Group::kNumFlags + 1, + BindLambdaForTesting([](size_t index) {})); + + AtomicFlagSetForTest::Group* group1 = + atomic_flag_set_.GetAllocListForTesting(); + ASSERT_THAT(group1, NotNull()); + EXPECT_FALSE(group1->IsFull()); + EXPECT_FALSE(group1->IsEmpty()); + EXPECT_EQ(group1, atomic_flag_set_.GetPartiallyFreeListForTesting()); + AtomicFlagSetForTest::Group* group2 = group1->next_.get(); + ASSERT_THAT(group2, NotNull()); + EXPECT_THAT(group2->next_.get(), IsNull()); + EXPECT_TRUE(group2->IsFull()); + + // This will release |group1|. + atomic_flags_[AtomicFlagSetForTest::Group::kNumFlags].ReleaseAtomicFlag(); + + EXPECT_THAT(group2->next_.get(), IsNull()); + EXPECT_THAT(atomic_flag_set_.GetPartiallyFreeListForTesting(), IsNull()); +} + +TEST_F(AtomicFlagSetTest, GroupBecomesEmptyHeadOfPartiallyFreeList) { + CreateFlags(AtomicFlagSetForTest::Group::kNumFlags * 2 + 1, + BindLambdaForTesting([](size_t index) {})); + + AtomicFlagSetForTest::Group* group1 = + atomic_flag_set_.GetAllocListForTesting(); + ASSERT_THAT(group1, NotNull()); + EXPECT_FALSE(group1->IsFull()); + EXPECT_FALSE(group1->IsEmpty()); + AtomicFlagSetForTest::Group* group2 = group1->next_.get(); + ASSERT_THAT(group2, NotNull()); + EXPECT_TRUE(group2->IsFull()); + AtomicFlagSetForTest::Group* group3 = group2->next_.get(); + ASSERT_THAT(group3, NotNull()); + EXPECT_THAT(group3->next_.get(), IsNull()); + EXPECT_TRUE(group3->IsFull()); + + // |group1| is on the head of the partially free list, now add groups 2 and 3. + atomic_flags_[AtomicFlagSetForTest::Group::kNumFlags].ReleaseAtomicFlag(); + EXPECT_FALSE(group2->IsFull()); + atomic_flags_[0].ReleaseAtomicFlag(); + EXPECT_FALSE(group3->IsFull()); + + EXPECT_EQ(group3, atomic_flag_set_.GetPartiallyFreeListForTesting()); + EXPECT_EQ(group3->partially_free_list_prev_, nullptr); + EXPECT_EQ(group3->partially_free_list_next_, group2); + EXPECT_EQ(group2->partially_free_list_prev_, group3); + EXPECT_EQ(group2->partially_free_list_next_, group1); + EXPECT_EQ(group1->partially_free_list_prev_, group2); + EXPECT_EQ(group1->partially_free_list_next_, nullptr); + EXPECT_EQ(group1->prev_, nullptr); + EXPECT_EQ(group2->prev_, group1); + EXPECT_EQ(group3->prev_, group2); + + // This will release |group3|. + for (size_t i = 0; i < AtomicFlagSetForTest::Group::kNumFlags; i++) { + atomic_flags_[i].ReleaseAtomicFlag(); + } + EXPECT_EQ(group2, atomic_flag_set_.GetPartiallyFreeListForTesting()); + EXPECT_EQ(group2->partially_free_list_prev_, nullptr); + EXPECT_EQ(group2->partially_free_list_next_, group1); + EXPECT_EQ(group1->partially_free_list_prev_, group2); + EXPECT_EQ(group1->partially_free_list_next_, nullptr); + EXPECT_EQ(group1, atomic_flag_set_.GetAllocListForTesting()); + EXPECT_EQ(group1->next_.get(), group2); + EXPECT_EQ(group1->prev_, nullptr); + EXPECT_EQ(group2->prev_, group1); + EXPECT_EQ(group2->next_.get(), nullptr); +} + +TEST_F(AtomicFlagSetTest, GroupBecomesEmptyMiddleOfPartiallyFreeList) { + CreateFlags(AtomicFlagSetForTest::Group::kNumFlags * 2 + 1, + BindLambdaForTesting([](size_t index) {})); + + AtomicFlagSetForTest::Group* group1 = + atomic_flag_set_.GetAllocListForTesting(); + ASSERT_THAT(group1, NotNull()); + EXPECT_FALSE(group1->IsFull()); + EXPECT_FALSE(group1->IsEmpty()); + AtomicFlagSetForTest::Group* group2 = group1->next_.get(); + ASSERT_THAT(group2, NotNull()); + EXPECT_TRUE(group2->IsFull()); + AtomicFlagSetForTest::Group* group3 = group2->next_.get(); + ASSERT_THAT(group3, NotNull()); + EXPECT_THAT(group3->next_.get(), IsNull()); + EXPECT_TRUE(group3->IsFull()); + + // |group1| is on the head of the partially free list, now add groups 2 and 3. + atomic_flags_[AtomicFlagSetForTest::Group::kNumFlags].ReleaseAtomicFlag(); + EXPECT_FALSE(group2->IsFull()); + atomic_flags_[0].ReleaseAtomicFlag(); + EXPECT_FALSE(group3->IsFull()); + + EXPECT_EQ(group3, atomic_flag_set_.GetPartiallyFreeListForTesting()); + EXPECT_EQ(group3->partially_free_list_prev_, nullptr); + EXPECT_EQ(group3->partially_free_list_next_, group2); + EXPECT_EQ(group2->partially_free_list_prev_, group3); + EXPECT_EQ(group2->partially_free_list_next_, group1); + EXPECT_EQ(group1->partially_free_list_prev_, group2); + EXPECT_EQ(group1->partially_free_list_next_, nullptr); + EXPECT_EQ(group1->prev_, nullptr); + EXPECT_EQ(group2->prev_, group1); + EXPECT_EQ(group3->prev_, group2); + + // This will release |group2|. + for (size_t i = AtomicFlagSetForTest::Group::kNumFlags; + i < AtomicFlagSetForTest::Group::kNumFlags * 2; i++) { + atomic_flags_[i].ReleaseAtomicFlag(); + } + EXPECT_EQ(group3, atomic_flag_set_.GetPartiallyFreeListForTesting()); + EXPECT_EQ(group3->partially_free_list_prev_, nullptr); + EXPECT_EQ(group3->partially_free_list_next_, group1); + EXPECT_EQ(group1->partially_free_list_prev_, group3); + EXPECT_EQ(group1->partially_free_list_next_, nullptr); + EXPECT_EQ(group1, atomic_flag_set_.GetAllocListForTesting()); + EXPECT_EQ(group1->prev_, nullptr); + EXPECT_EQ(group1->next_.get(), group3); + EXPECT_EQ(group3->prev_, group1); + EXPECT_EQ(group3->next_.get(), nullptr); +} + +TEST_F(AtomicFlagSetTest, GroupBecomesEmptyTailOfPartiallyFreeList) { + CreateFlags(AtomicFlagSetForTest::Group::kNumFlags * 2 + 1, + BindLambdaForTesting([](size_t index) {})); + + AtomicFlagSetForTest::Group* group1 = + atomic_flag_set_.GetAllocListForTesting(); + ASSERT_THAT(group1, NotNull()); + EXPECT_FALSE(group1->IsFull()); + EXPECT_FALSE(group1->IsEmpty()); + AtomicFlagSetForTest::Group* group2 = group1->next_.get(); + ASSERT_THAT(group2, NotNull()); + EXPECT_TRUE(group2->IsFull()); + AtomicFlagSetForTest::Group* group3 = group2->next_.get(); + ASSERT_THAT(group3, NotNull()); + EXPECT_THAT(group3->next_.get(), IsNull()); + EXPECT_TRUE(group3->IsFull()); + + // |group1| is on the head of the partially free list, now add groups 2 and 3. + atomic_flags_[AtomicFlagSetForTest::Group::kNumFlags].ReleaseAtomicFlag(); + EXPECT_FALSE(group2->IsFull()); + atomic_flags_[0].ReleaseAtomicFlag(); + EXPECT_FALSE(group3->IsFull()); + + EXPECT_EQ(group3, atomic_flag_set_.GetPartiallyFreeListForTesting()); + EXPECT_EQ(group3->partially_free_list_prev_, nullptr); + EXPECT_EQ(group3->partially_free_list_next_, group2); + EXPECT_EQ(group2->partially_free_list_prev_, group3); + EXPECT_EQ(group2->partially_free_list_next_, group1); + EXPECT_EQ(group1->partially_free_list_prev_, group2); + EXPECT_EQ(group1->partially_free_list_next_, nullptr); + EXPECT_EQ(group1->prev_, nullptr); + EXPECT_EQ(group2->prev_, group1); + EXPECT_EQ(group3->prev_, group2); + + // This will release |group1|. + atomic_flags_[AtomicFlagSetForTest::Group::kNumFlags * 2].ReleaseAtomicFlag(); + EXPECT_EQ(group3, atomic_flag_set_.GetPartiallyFreeListForTesting()); + EXPECT_EQ(group3->partially_free_list_prev_, nullptr); + EXPECT_EQ(group3->partially_free_list_next_, group2); + EXPECT_EQ(group2->partially_free_list_prev_, group3); + EXPECT_EQ(group2->partially_free_list_next_, nullptr); + EXPECT_EQ(group2, atomic_flag_set_.GetAllocListForTesting()); + EXPECT_EQ(group2->prev_, nullptr); + EXPECT_EQ(group2->next_.get(), group3); + EXPECT_EQ(group3->prev_, group2); + EXPECT_EQ(group3->next_.get(), nullptr); +} + +} // namespace internal +} // namespace sequence_manager +} // namespace base
diff --git a/base/task/sequence_manager/sequence_manager_impl.cc b/base/task/sequence_manager/sequence_manager_impl.cc index b4b82e3..69dc1d53 100644 --- a/base/task/sequence_manager/sequence_manager_impl.cc +++ b/base/task/sequence_manager/sequence_manager_impl.cc
@@ -103,6 +103,7 @@ type_(settings.message_loop_type), metric_recording_settings_(InitializeMetricRecordingSettings( settings.randomised_sampling_enabled)), + empty_queues_to_reload_(associated_thread_), memory_corruption_sentinel_(kMemoryCorruptionSentinelValue), main_thread_only_(associated_thread_, settings.randomised_sampling_enabled), @@ -155,10 +156,6 @@ MessageLoopCurrent::UnbindFromCurrentThreadInternal(this); } -SequenceManagerImpl::AnyThread::AnyThread() = default; - -SequenceManagerImpl::AnyThread::~AnyThread() = default; - SequenceManagerImpl::MainThreadOnly::MainThreadOnly( const scoped_refptr<AssociatedThreadId>& associated_thread, bool randomised_sampling_enabled) @@ -253,8 +250,6 @@ std::make_unique<internal::TaskQueueImpl>(this, time_domain, spec); main_thread_only().active_queues.insert(task_queue.get()); main_thread_only().selector.AddQueue(task_queue.get()); - main_thread_only().queues_to_reload.resize( - main_thread_only().active_queues.size()); return task_queue; } @@ -270,41 +265,6 @@ main_thread_only().observer = observer; } -bool SequenceManagerImpl::AddToEmptyQueuesToReloadList( - internal::TaskQueueImpl* task_queue, - internal::EnqueueOrder enqueue_order) { - AutoLock lock(any_thread_lock_); - // Check if |task_queue| is already in the linked list. - if (task_queue->empty_queues_to_reload_list_storage()->queue) - return false; - - // Insert into the linked list. - task_queue->empty_queues_to_reload_list_storage()->queue = task_queue; - task_queue->empty_queues_to_reload_list_storage()->order = enqueue_order; - task_queue->empty_queues_to_reload_list_storage()->next = - any_thread().empty_queues_to_reload_list; - any_thread().empty_queues_to_reload_list = - task_queue->empty_queues_to_reload_list_storage(); - return true; -} - -void SequenceManagerImpl::RemoveFromEmptyQueuesToReloadList( - internal::TaskQueueImpl* task_queue) { - AutoLock lock(any_thread_lock_); - internal::EmptyQueuesToReloadList** prev = - &any_thread().empty_queues_to_reload_list; - while (*prev) { - if ((*prev)->queue == task_queue) { - *prev = (*prev)->next; - break; - } - prev = &(*prev)->next; - } - - task_queue->empty_queues_to_reload_list_storage()->next = nullptr; - task_queue->empty_queues_to_reload_list_storage()->queue = nullptr; -} - void SequenceManagerImpl::ShutdownTaskQueueGracefully( std::unique_ptr<internal::TaskQueueImpl> task_queue) { main_thread_only().queues_to_gracefully_shutdown[task_queue.get()] = @@ -325,51 +285,28 @@ // when posting a task. task_queue->UnregisterTaskQueue(); - // Remove |task_queue| from the linked list if present. - // This is O(n). We assume this will be a relatively infrequent operation. - RemoveFromEmptyQueuesToReloadList(task_queue.get()); - // Add |task_queue| to |main_thread_only().queues_to_delete| so we can prevent // it from being freed while any of our structures hold hold a raw pointer to // it. main_thread_only().active_queues.erase(task_queue.get()); main_thread_only().queues_to_delete[task_queue.get()] = std::move(task_queue); - main_thread_only().queues_to_reload.resize( - main_thread_only().active_queues.size()); } -void SequenceManagerImpl::ReloadEmptyWorkQueues() { - size_t num_queues_to_reload = 0; +AtomicFlagSet::AtomicFlag +SequenceManagerImpl::GetFlagToRequestReloadForEmptyQueue( + TaskQueueImpl* task_queue) { + return empty_queues_to_reload_.AddFlag(BindRepeating( + &TaskQueueImpl::ReloadEmptyImmediateWorkQueue, Unretained(task_queue))); +} - DCHECK_EQ(main_thread_only().active_queues.size(), - main_thread_only().queues_to_reload.size()); - { - AutoLock lock(any_thread_lock_); - - for (internal::EmptyQueuesToReloadList* iter = - any_thread().empty_queues_to_reload_list; - iter; iter = iter->next) { - DCHECK_LT(num_queues_to_reload, - main_thread_only().queues_to_reload.size()); - main_thread_only().queues_to_reload[num_queues_to_reload++] = iter->queue; - iter->queue = nullptr; - } - - any_thread().empty_queues_to_reload_list = nullptr; - } - +void SequenceManagerImpl::ReloadEmptyWorkQueues() const { // There are two cases where a queue needs reloading. First, it might be // completely empty and we've just posted a task (this method handles that // case). Secondly if the work queue becomes empty in when calling // WorkQueue::TakeTaskFromWorkQueue (handled there). - for (size_t i = 0; i < num_queues_to_reload; i++) { - // It's important we call - // ReloadEmptyImmediateWorkQueue out side of - // |any_thread_lock_| to avoid lock order inversion. - main_thread_only().queues_to_reload[i]->ReloadEmptyImmediateWorkQueue(); - main_thread_only().queues_to_reload[i] = - nullptr; // Not strictly necessary. - } + // + // Invokes callbacks created by GetFlagToRequestReloadForEmptyQueue above. + empty_queues_to_reload_.RunActiveCallbacks(); } void SequenceManagerImpl::WakeUpReadyDelayedQueues(LazyNow* lazy_now) { @@ -411,16 +348,6 @@ main_thread_only().observer->OnExitNestedRunLoop(); } -void SequenceManagerImpl::OnEmptyQueueHasIncomingImmediateWork( - internal::TaskQueueImpl* queue, - internal::EnqueueOrder enqueue_order, - bool schedule_work) { - bool success = AddToEmptyQueuesToReloadList(queue, enqueue_order); - DCHECK(success); - if (schedule_work) - controller_->ScheduleWork(); -} - void SequenceManagerImpl::ScheduleWork() { controller_->ScheduleWork(); } @@ -521,17 +448,12 @@ if (!main_thread_only().selector.AllEnabledWorkQueuesAreEmpty()) return TimeDelta(); - // Its possible the selectors state is dirty because ReloadEmptyWorkQueues - // hasn't been called yet. This check catches the case of fresh incoming work. - { - AutoLock lock(any_thread_lock_); - for (const internal::EmptyQueuesToReloadList* iter = - any_thread().empty_queues_to_reload_list; - iter; iter = iter->next) { - if (iter->queue->CouldTaskRun(iter->order)) - return TimeDelta(); - } - } + // There may be some incoming immediate work which we haven't accounted for. + // NB ReloadEmptyWorkQueues involves a memory barrier, so it's fastest to not + // do this always. + ReloadEmptyWorkQueues(); + if (!main_thread_only().selector.AllEnabledWorkQueuesAreEmpty()) + return TimeDelta(); // Otherwise we need to find the shortest delay, if any. NB we don't need to // call WakeUpReadyDelayedQueues because it's assumed DelayTillNextTask will @@ -775,16 +697,6 @@ for (auto* time_domain : main_thread_only().time_domains) time_domain->AsValueInto(state.get()); state->EndArray(); - { - AutoLock lock(any_thread_lock_); - state->BeginArray("has_incoming_immediate_work"); - for (const internal::EmptyQueuesToReloadList* iter = - any_thread().empty_queues_to_reload_list; - iter; iter = iter->next) { - state->AppendString(iter->queue->GetName()); - } - state->EndArray(); - } return std::move(state); } @@ -808,7 +720,6 @@ for (auto it = main_thread_only().queues_to_gracefully_shutdown.begin(); it != main_thread_only().queues_to_gracefully_shutdown.end();) { if (it->first->IsEmpty()) { - // Will resize |main_thread_only().queues_to_reload|. UnregisterTaskQueueImpl(std::move(it->second)); main_thread_only().active_queues.erase(it->first); main_thread_only().queues_to_gracefully_shutdown.erase(it++);
diff --git a/base/task/sequence_manager/sequence_manager_impl.h b/base/task/sequence_manager/sequence_manager_impl.h index 5c9f83f..90db1ee6 100644 --- a/base/task/sequence_manager/sequence_manager_impl.h +++ b/base/task/sequence_manager/sequence_manager_impl.h
@@ -204,14 +204,6 @@ kSequenceManagerDeleted, }; - struct AnyThread { - AnyThread(); - ~AnyThread(); - - // Task queues with newly available work on the incoming queue. - internal::EmptyQueuesToReloadList* empty_queues_to_reload_list = nullptr; - }; - // SequenceManager maintains a queue of non-nestable tasks since they're // uncommon and allocating an extra deque per TaskQueue will waste the memory. using NonNestableTaskDeque = @@ -269,12 +261,6 @@ // internal scheduling code does not expect queues to be pulled // from underneath. - // Scratch space used to store the contents of - // any_thread().empty_queues_to_reload_list for use by - // ReloadEmptyWorkQueues. We keep hold of this vector to avoid unnecessary - // memory allocations. This should have the same size as |active_queues|. - // DO NOT RELY ON THE VALIDITY OF THE POINTERS WITHIN! - std::vector<internal::TaskQueueImpl*> queues_to_reload; std::set<internal::TaskQueueImpl*> active_queues; std::map<internal::TaskQueueImpl*, std::unique_ptr<internal::TaskQueueImpl>> @@ -323,24 +309,12 @@ AsValueWithSelectorResult(internal::WorkQueue* selected_work_queue, bool force_verbose) const; - // Adds |queue| to |any_thread().has_incoming_immediate_work_| and if - // |schedule_work| is true it makes sure a DoWork is posted. - // Can be called from any thread. - void OnEmptyQueueHasIncomingImmediateWork( - internal::TaskQueueImpl* queue, - internal::EnqueueOrder enqueue_order, - bool schedule_work); + AtomicFlagSet::AtomicFlag GetFlagToRequestReloadForEmptyQueue( + TaskQueueImpl* task_queue); - // Returns true if |task_queue| was added to the list, or false if it was - // already in the list. If |task_queue| was inserted, the |order| is set - // with |enqueue_order|. - bool AddToEmptyQueuesToReloadList(internal::TaskQueueImpl* task_queue, - internal::EnqueueOrder enqueue_order); - void RemoveFromEmptyQueuesToReloadList(internal::TaskQueueImpl* task_queue); - - // Calls |TakeImmediateIncomingQueueTasks| on all queues in - // |main_thread_only().queues_to_reload|. - void ReloadEmptyWorkQueues(); + // Calls |TakeImmediateIncomingQueueTasks| on all queues with their reload + // flag set in |empty_queues_to_reload_|. + void ReloadEmptyWorkQueues() const; std::unique_ptr<internal::TaskQueueImpl> CreateTaskQueueImpl( const TaskQueue::Spec& spec) override; @@ -369,23 +343,13 @@ const std::unique_ptr<internal::ThreadController> controller_; const MessageLoop::Type type_; - mutable Lock any_thread_lock_; - AnyThread any_thread_; - - struct AnyThread& any_thread() { - any_thread_lock_.AssertAcquired(); - return any_thread_; - } - const struct AnyThread& any_thread() const { - any_thread_lock_.AssertAcquired(); - return any_thread_; - } - const MetricRecordingSettings metric_recording_settings_; // Whether to add the queue time to tasks. base::subtle::Atomic32 add_queue_time_to_tasks_ = 0; + AtomicFlagSet empty_queues_to_reload_; + // A check to bail out early during memory corruption. // https://crbug.com/757940 bool Validate();
diff --git a/base/task/sequence_manager/task_queue_impl.cc b/base/task/sequence_manager/task_queue_impl.cc index 803b69c..ad5f0a7c 100644 --- a/base/task/sequence_manager/task_queue_impl.cc +++ b/base/task/sequence_manager/task_queue_impl.cc
@@ -97,6 +97,10 @@ task_poster_(MakeRefCounted<GuardedTaskPoster>(this)), any_thread_(time_domain), main_thread_only_(this, time_domain), + empty_queues_to_reload_handle_( + sequence_manager + ? sequence_manager->GetFlagToRequestReloadForEmptyQueue(this) + : AtomicFlagSet::AtomicFlag()), should_monitor_quiescence_(spec.should_monitor_quiescence), should_notify_observers_(spec.should_notify_observers), delayed_fence_allowed_(spec.delayed_fence_allowed) { @@ -170,6 +174,8 @@ main_thread_only().on_next_wake_up_changed_callback = OnNextWakeUpChangedCallback(); immediate_incoming_queue.swap(immediate_incoming_queue_); + + empty_queues_to_reload_handle_.ReleaseAtomicFlag(); } // It is possible for a task to hold a scoped_refptr to this, which @@ -248,8 +254,9 @@ // TaskQueueSelector which can only be done from the main thread. In // addition it may need to schedule a DoWork if this queue isn't blocked. if (was_immediate_incoming_queue_empty && immediate_work_queue_empty_) { - sequence_manager_->OnEmptyQueueHasIncomingImmediateWork( - this, sequence_number, post_immediate_task_should_schedule_work_); + empty_queues_to_reload_handle_.SetActive(true); + if (post_immediate_task_should_schedule_work_) + sequence_manager_->ScheduleWork(); } } @@ -883,12 +890,12 @@ std::move(task.task)); } else { // We're about to push |task| onto an empty |immediate_work_queue|. This - // may mean we'd be violating the contract of EmptyQueuesToReloadList, it's + // may mean we'd be violating the contract of AtomicFlagSet, it's // only supposed to contain queues where |immediate_incoming_queue_| is // non empty but |immediate_work_queue| is empty. We remedy that by removing // ourselves from that list (a NOP if we're not in the list). if (main_thread_only().immediate_work_queue->Empty()) { - sequence_manager_->RemoveFromEmptyQueuesToReloadList(this); + empty_queues_to_reload_handle_.SetActive(false); { AutoLock lock(immediate_incoming_queue_lock_); @@ -1009,7 +1016,7 @@ // TODO(altimin): Add clear() method to DelayedIncomingQueue. DelayedIncomingQueue queue_to_delete; main_thread_only().delayed_incoming_queue.swap(&queue_to_delete); - sequence_manager_->RemoveFromEmptyQueuesToReloadList(this); + empty_queues_to_reload_handle_.SetActive(false); TaskDeque deque; {
diff --git a/base/task/sequence_manager/task_queue_impl.h b/base/task/sequence_manager/task_queue_impl.h index 9810251..c4f3e2e 100644 --- a/base/task/sequence_manager/task_queue_impl.h +++ b/base/task/sequence_manager/task_queue_impl.h
@@ -19,6 +19,7 @@ #include "base/task/common/intrusive_heap.h" #include "base/task/common/operations_controller.h" #include "base/task/sequence_manager/associated_thread_id.h" +#include "base/task/sequence_manager/atomic_flag_set.h" #include "base/task/sequence_manager/enqueue_order.h" #include "base/task/sequence_manager/lazily_deallocated_deque.h" #include "base/task/sequence_manager/sequenced_task_source.h" @@ -39,15 +40,6 @@ class WorkQueue; class WorkQueueSets; -// The SequenceManagerImpl maintains a list of TaskQueueImpl's with empty -// |immediate_incoming_queue_| and non-empty immediate_work_queue| which it -// should reload before task selection. This struct backs that list. -struct EmptyQueuesToReloadList { - EmptyQueuesToReloadList* next = nullptr; - TaskQueueImpl* queue = nullptr; - internal::EnqueueOrder order; -}; - // TaskQueueImpl has four main queues: // // Immediate (non-delayed) tasks: @@ -175,11 +167,6 @@ return main_thread_only().immediate_work_queue.get(); } - // Protected by SequenceManagerImpl's AnyThread lock. - EmptyQueuesToReloadList* empty_queues_to_reload_list_storage() { - return &empty_queues_to_reload_list_storage_; - } - // Enqueues any delayed tasks which should be run now on the // |delayed_work_queue|. // Must be called from the main thread. @@ -462,12 +449,9 @@ bool post_immediate_task_should_schedule_work_ GUARDED_BY(immediate_incoming_queue_lock_) = true; - // Protected by SequenceManagerImpl's AnyThread lock. - // Pre-allocated struct used by - // SequenceManagerImpl::AddToEmptyQueuesToReloadList to reduce overhead of - // new & delete when posting immediate tasks. Queues added to this list will - // be reloaded before task selection. - EmptyQueuesToReloadList empty_queues_to_reload_list_storage_; + // Handle to our entry within the SequenceManagers |empty_queues_to_reload_| + // atomic flag set. Used to signal that this queue needs to be reloaded. + AtomicFlagSet::AtomicFlag empty_queues_to_reload_handle_; const bool should_monitor_quiescence_; const bool should_notify_observers_;
diff --git a/base/task/sequence_manager/test/sequence_manager_for_test.h b/base/task/sequence_manager/test/sequence_manager_for_test.h index a27ecba..0b6afe4 100644 --- a/base/task/sequence_manager/test/sequence_manager_for_test.h +++ b/base/task/sequence_manager/test/sequence_manager_for_test.h
@@ -45,7 +45,6 @@ using internal::SequenceManagerImpl::GetNextSequenceNumber; using internal::SequenceManagerImpl::ReloadEmptyWorkQueues; - using internal::SequenceManagerImpl::RemoveFromEmptyQueuesToReloadList; using internal::SequenceManagerImpl::WakeUpReadyDelayedQueues; private:
diff --git a/base/test/BUILD.gn b/base/test/BUILD.gn index dea5aa2b..ef351155 100644 --- a/base/test/BUILD.gn +++ b/base/test/BUILD.gn
@@ -377,12 +377,24 @@ "fontconfig_util_linux.cc", "fontconfig_util_linux.h", ] + data_deps = [ + ":fonts_conf", + ] deps = [ "//base", "//third_party/fontconfig", ] } + copy("fonts_conf") { + sources = [ + "fonts.conf", + ] + outputs = [ + "${root_build_dir}/etc/fonts/{{source_file_part}}", + ] + } + if (current_toolchain == host_toolchain) { executable("generate_fontconfig_caches") { testonly = true
diff --git a/base/test/fontconfig_util_linux.cc b/base/test/fontconfig_util_linux.cc index 9ed03c4e..4220611b2 100644 --- a/base/test/fontconfig_util_linux.cc +++ b/base/test/fontconfig_util_linux.cc
@@ -6,399 +6,24 @@ #include <fontconfig/fontconfig.h> +#include <memory> + #include "base/base_paths.h" #include "base/environment.h" #include "base/files/file_path.h" -#include "base/files/file_util.h" #include "base/logging.h" -#include "base/macros.h" #include "base/path_service.h" -#include "base/strings/string_util.h" namespace base { -namespace { - -const char kFontsConfTemplate[] = R"(<?xml version="1.0"?> -<!DOCTYPE fontconfig SYSTEM "fonts.dtd"> -<fontconfig> - - <!-- Cache location. --> - <cachedir>$1</cachedir> - - <!-- GCS-synced fonts. --> - <dir>$2</dir> - - <!-- Default properties. --> - <match target="font"> - <edit name="embeddedbitmap" mode="append_last"> - <bool>false</bool> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>Times</string> - </test> - <edit name="family" mode="assign"> - <string>Tinos</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>sans</string> - </test> - <edit name="family" mode="assign"> - <string>DejaVu Sans</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>sans serif</string> - </test> - <edit name="family" mode="assign"> - <string>Arimo</string> - </edit> - </match> - - <!-- Some layout tests specify Helvetica as a family and we need to make sure - that we don't fallback to Tinos for them --> - <match target="pattern"> - <test qual="any" name="family"> - <string>Helvetica</string> - </test> - <edit name="family" mode="assign"> - <string>Arimo</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>sans-serif</string> - </test> - <edit name="family" mode="assign"> - <string>Arimo</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>serif</string> - </test> - <edit name="family" mode="assign"> - <string>Tinos</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>mono</string> - </test> - <edit name="family" mode="assign"> - <string>Cousine</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>monospace</string> - </test> - <edit name="family" mode="assign"> - <string>Cousine</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>Courier</string> - </test> - <edit name="family" mode="assign"> - <string>Cousine</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>cursive</string> - </test> - <edit name="family" mode="assign"> - <string>Comic Sans MS</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>fantasy</string> - </test> - <edit name="family" mode="assign"> - <string>Impact</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>Monaco</string> - </test> - <edit name="family" mode="assign"> - <string>Tinos</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>Arial</string> - </test> - <edit name="family" mode="assign"> - <string>Arimo</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>Courier New</string> - </test> - <edit name="family" mode="assign"> - <string>Cousine</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>Georgia</string> - </test> - <edit name="family" mode="assign"> - <string>Gelasio</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>Times New Roman</string> - </test> - <edit name="family" mode="assign"> - <string>Tinos</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>Verdana</string> - </test> - <!-- NOT metrically compatible! --> - <edit name="family" mode="assign"> - <string>Arimo</string> - </edit> - </match> - - <!-- TODO(thomasanderson): Move these configs to be test-specific. --> - <match target="pattern"> - <test name="family" compare="eq"> - <string>NonAntiAliasedSans</string> - </test> - <edit name="family" mode="assign"> - <string>Arimo</string> - </edit> - <edit name="antialias" mode="assign"> - <bool>false</bool> - </edit> - </match> - - <match target="pattern"> - <test name="family" compare="eq"> - <string>SlightHintedGeorgia</string> - </test> - <edit name="family" mode="assign"> - <string>Gelasio</string> - </edit> - <edit name="hintstyle" mode="assign"> - <const>hintslight</const> - </edit> - </match> - - <match target="pattern"> - <test name="family" compare="eq"> - <string>NonHintedSans</string> - </test> - <edit name="family" mode="assign"> - <string>Arimo</string> - </edit> - <!-- These deliberately contradict each other. The 'hinting' preference - should take priority --> - <edit name="hintstyle" mode="assign"> - <const>hintfull</const> - </edit> - <edit name="hinting" mode="assign"> - <bool>false</bool> - </edit> - </match> - - <match target="pattern"> - <test name="family" compare="eq"> - <string>AutohintedSerif</string> - </test> - <edit name="family" mode="assign"> - <string>Arimo</string> - </edit> - <edit name="autohint" mode="assign"> - <bool>true</bool> - </edit> - <edit name="hintstyle" mode="assign"> - <const>hintmedium</const> - </edit> - </match> - - <match target="pattern"> - <test name="family" compare="eq"> - <string>HintedSerif</string> - </test> - <edit name="family" mode="assign"> - <string>Arimo</string> - </edit> - <edit name="autohint" mode="assign"> - <bool>false</bool> - </edit> - <edit name="hintstyle" mode="assign"> - <const>hintmedium</const> - </edit> - </match> - - <match target="pattern"> - <test name="family" compare="eq"> - <string>FullAndAutoHintedSerif</string> - </test> - <edit name="family" mode="assign"> - <string>Arimo</string> - </edit> - <edit name="autohint" mode="assign"> - <bool>true</bool> - </edit> - <edit name="hintstyle" mode="assign"> - <const>hintfull</const> - </edit> - </match> - - <match target="pattern"> - <test name="family" compare="eq"> - <string>SubpixelEnabledArial</string> - </test> - <edit name="family" mode="assign"> - <string>Arimo</string> - </edit> - <edit name="rgba" mode="assign"> - <const>rgb</const> - </edit> - </match> - - <match target="pattern"> - <test name="family" compare="eq"> - <string>SubpixelDisabledArial</string> - </test> - <edit name="family" mode="assign"> - <string>Arimo</string> - </edit> - <edit name="rgba" mode="assign"> - <const>none</const> - </edit> - </match> - - <match target="pattern"> - <!-- FontConfig doesn't currently provide a well-defined way to turn on - subpixel positioning. This is just an arbitrary pattern to use after - turning subpixel positioning on globally to ensure that we don't have - issues with our style getting cached for other tests. --> - <test name="family" compare="eq"> - <string>SubpixelPositioning</string> - </test> - <edit name="family" mode="assign"> - <string>Tinos</string> - </edit> - </match> - - <match target="pattern"> - <!-- See comments above --> - <test name="family" compare="eq"> - <string>SubpixelPositioningAhem</string> - </test> - <edit name="family" mode="assign"> - <string>ahem</string> - </edit> - </match> - - <match target="pattern"> - <test name="family" compare="eq"> - <string>SlightHintedTimesNewRoman</string> - </test> - <edit name="family" mode="assign"> - <string>Tinos</string> - </edit> - <edit name="hintstyle" mode="assign"> - <const>hintslight</const> - </edit> - </match> - - <!-- When we encounter a character that the current font doesn't - support, gfx::GetFallbackFontForChar() returns the first font - that does have a glyph for the character. The list of fonts is - sorted by a pattern that includes the current locale, but doesn't - include a font family (which means that the fallback font depends - on the locale but not on the current font). - - DejaVu Sans is commonly the only font that supports some - characters, such as "⇧", and even when other candidates are - available, DejaVu Sans is commonly first among them, because of - the way Fontconfig is ordinarily configured. For example, the - configuration in the Fonconfig source lists DejaVu Sans under the - sans-serif generic family, and appends sans-serif to patterns - that don't already include a generic family (such as the pattern - in gfx::GetFallbackFontForChar()). - - To get the same fallback font in the layout tests, we could - duplicate this configuration here, or more directly, simply - append DejaVu Sans to all patterns. --> - <match target="pattern"> - <edit name="family" mode="append_last"> - <string>DejaVu Sans</string> - </edit> - </match> - -</fontconfig> -)"; - -} // namespace - void SetUpFontconfig() { - // TODO(thomasanderson): Use FONTCONFIG_SYSROOT to avoid having to write - // a new fonts.conf with updated paths. - std::unique_ptr<Environment> env = Environment::Create(); - if (!env->HasVar("FONTCONFIG_FILE")) { - // fonts.conf must be generated on-the-fly since it contains absolute paths - // which may be different if - // 1. The user moves/renames their build directory (or any parent dirs). - // 2. The build directory is mapped on a swarming bot at a location - // different from the one the buildbot used. - FilePath dir_module; - PathService::Get(DIR_MODULE, &dir_module); - FilePath font_cache = dir_module.Append("fontconfig_caches"); - FilePath test_fonts = dir_module.Append("test_fonts"); - std::string fonts_conf = ReplaceStringPlaceholders( - kFontsConfTemplate, {font_cache.value(), test_fonts.value()}, nullptr); + FilePath dir_module; + CHECK(PathService::Get(DIR_MODULE, &dir_module)); - // Write the data to a different file and then atomically rename it to - // fonts.conf. This avoids the file being in a bad state when different - // parallel tests call this function at the same time. - FilePath fonts_conf_file_temp; - if(!CreateTemporaryFileInDir(dir_module, &fonts_conf_file_temp)) - CHECK(CreateTemporaryFile(&fonts_conf_file_temp)); - CHECK( - WriteFile(fonts_conf_file_temp, fonts_conf.c_str(), fonts_conf.size())); - FilePath fonts_conf_file = dir_module.Append("fonts.conf"); - if (ReplaceFile(fonts_conf_file_temp, fonts_conf_file, nullptr)) - env->SetVar("FONTCONFIG_FILE", fonts_conf_file.value()); - else - env->SetVar("FONTCONFIG_FILE", fonts_conf_file_temp.value()); - } + std::unique_ptr<Environment> env(Environment::Create()); + // TODO(thomasanderson): This still stat()'s the real /etc/fonts/fonts.conf. + // Prevent fontconfig from doing this. + CHECK(env->SetVar("FONTCONFIG_SYSROOT", dir_module.value().c_str())); CHECK(FcInit()); }
diff --git a/base/test/fonts.conf b/base/test/fonts.conf new file mode 100644 index 0000000..7fd5eed --- /dev/null +++ b/base/test/fonts.conf
@@ -0,0 +1,345 @@ +<?xml version="1.0"?> +<!DOCTYPE fontconfig SYSTEM "fonts.dtd"> +<fontconfig> + + <!-- Cache location. --> + <cachedir>/fontconfig_caches</cachedir> + + <!-- GCS-synced fonts. --> + <dir>/test_fonts</dir> + + <!-- Default properties. --> + <match target="font"> + <edit name="embeddedbitmap" mode="append_last"> + <bool>false</bool> + </edit> + </match> + + <match target="pattern"> + <test qual="any" name="family"> + <string>Times</string> + </test> + <edit name="family" mode="assign"> + <string>Tinos</string> + </edit> + </match> + + <match target="pattern"> + <test qual="any" name="family"> + <string>sans</string> + </test> + <edit name="family" mode="assign"> + <string>DejaVu Sans</string> + </edit> + </match> + + <match target="pattern"> + <test qual="any" name="family"> + <string>sans serif</string> + </test> + <edit name="family" mode="assign"> + <string>Arimo</string> + </edit> + </match> + + <!-- Some layout tests specify Helvetica as a family and we need to make sure + that we don't fallback to Tinos for them --> + <match target="pattern"> + <test qual="any" name="family"> + <string>Helvetica</string> + </test> + <edit name="family" mode="assign"> + <string>Arimo</string> + </edit> + </match> + + <match target="pattern"> + <test qual="any" name="family"> + <string>sans-serif</string> + </test> + <edit name="family" mode="assign"> + <string>Arimo</string> + </edit> + </match> + + <match target="pattern"> + <test qual="any" name="family"> + <string>serif</string> + </test> + <edit name="family" mode="assign"> + <string>Tinos</string> + </edit> + </match> + + <match target="pattern"> + <test qual="any" name="family"> + <string>mono</string> + </test> + <edit name="family" mode="assign"> + <string>Cousine</string> + </edit> + </match> + + <match target="pattern"> + <test qual="any" name="family"> + <string>monospace</string> + </test> + <edit name="family" mode="assign"> + <string>Cousine</string> + </edit> + </match> + + <match target="pattern"> + <test qual="any" name="family"> + <string>Courier</string> + </test> + <edit name="family" mode="assign"> + <string>Cousine</string> + </edit> + </match> + + <match target="pattern"> + <test qual="any" name="family"> + <string>cursive</string> + </test> + <edit name="family" mode="assign"> + <string>Comic Sans MS</string> + </edit> + </match> + + <match target="pattern"> + <test qual="any" name="family"> + <string>fantasy</string> + </test> + <edit name="family" mode="assign"> + <string>Impact</string> + </edit> + </match> + + <match target="pattern"> + <test qual="any" name="family"> + <string>Monaco</string> + </test> + <edit name="family" mode="assign"> + <string>Tinos</string> + </edit> + </match> + + <match target="pattern"> + <test qual="any" name="family"> + <string>Arial</string> + </test> + <edit name="family" mode="assign"> + <string>Arimo</string> + </edit> + </match> + + <match target="pattern"> + <test qual="any" name="family"> + <string>Courier New</string> + </test> + <edit name="family" mode="assign"> + <string>Cousine</string> + </edit> + </match> + + <match target="pattern"> + <test qual="any" name="family"> + <string>Georgia</string> + </test> + <edit name="family" mode="assign"> + <string>Gelasio</string> + </edit> + </match> + + <match target="pattern"> + <test qual="any" name="family"> + <string>Times New Roman</string> + </test> + <edit name="family" mode="assign"> + <string>Tinos</string> + </edit> + </match> + + <match target="pattern"> + <test qual="any" name="family"> + <string>Verdana</string> + </test> + <!-- NOT metrically compatible! --> + <edit name="family" mode="assign"> + <string>Arimo</string> + </edit> + </match> + + <!-- TODO(thomasanderson): Move these configs to be test-specific. --> + <match target="pattern"> + <test name="family" compare="eq"> + <string>NonAntiAliasedSans</string> + </test> + <edit name="family" mode="assign"> + <string>Arimo</string> + </edit> + <edit name="antialias" mode="assign"> + <bool>false</bool> + </edit> + </match> + + <match target="pattern"> + <test name="family" compare="eq"> + <string>SlightHintedGeorgia</string> + </test> + <edit name="family" mode="assign"> + <string>Gelasio</string> + </edit> + <edit name="hintstyle" mode="assign"> + <const>hintslight</const> + </edit> + </match> + + <match target="pattern"> + <test name="family" compare="eq"> + <string>NonHintedSans</string> + </test> + <edit name="family" mode="assign"> + <string>Arimo</string> + </edit> + <!-- These deliberately contradict each other. The 'hinting' preference + should take priority --> + <edit name="hintstyle" mode="assign"> + <const>hintfull</const> + </edit> + <edit name="hinting" mode="assign"> + <bool>false</bool> + </edit> + </match> + + <match target="pattern"> + <test name="family" compare="eq"> + <string>AutohintedSerif</string> + </test> + <edit name="family" mode="assign"> + <string>Arimo</string> + </edit> + <edit name="autohint" mode="assign"> + <bool>true</bool> + </edit> + <edit name="hintstyle" mode="assign"> + <const>hintmedium</const> + </edit> + </match> + + <match target="pattern"> + <test name="family" compare="eq"> + <string>HintedSerif</string> + </test> + <edit name="family" mode="assign"> + <string>Arimo</string> + </edit> + <edit name="autohint" mode="assign"> + <bool>false</bool> + </edit> + <edit name="hintstyle" mode="assign"> + <const>hintmedium</const> + </edit> + </match> + + <match target="pattern"> + <test name="family" compare="eq"> + <string>FullAndAutoHintedSerif</string> + </test> + <edit name="family" mode="assign"> + <string>Arimo</string> + </edit> + <edit name="autohint" mode="assign"> + <bool>true</bool> + </edit> + <edit name="hintstyle" mode="assign"> + <const>hintfull</const> + </edit> + </match> + + <match target="pattern"> + <test name="family" compare="eq"> + <string>SubpixelEnabledArial</string> + </test> + <edit name="family" mode="assign"> + <string>Arimo</string> + </edit> + <edit name="rgba" mode="assign"> + <const>rgb</const> + </edit> + </match> + + <match target="pattern"> + <test name="family" compare="eq"> + <string>SubpixelDisabledArial</string> + </test> + <edit name="family" mode="assign"> + <string>Arimo</string> + </edit> + <edit name="rgba" mode="assign"> + <const>none</const> + </edit> + </match> + + <match target="pattern"> + <!-- FontConfig doesn't currently provide a well-defined way to turn on + subpixel positioning. This is just an arbitrary pattern to use after + turning subpixel positioning on globally to ensure that we don't have + issues with our style getting cached for other tests. --> + <test name="family" compare="eq"> + <string>SubpixelPositioning</string> + </test> + <edit name="family" mode="assign"> + <string>Tinos</string> + </edit> + </match> + + <match target="pattern"> + <!-- See comments above --> + <test name="family" compare="eq"> + <string>SubpixelPositioningAhem</string> + </test> + <edit name="family" mode="assign"> + <string>ahem</string> + </edit> + </match> + + <match target="pattern"> + <test name="family" compare="eq"> + <string>SlightHintedTimesNewRoman</string> + </test> + <edit name="family" mode="assign"> + <string>Tinos</string> + </edit> + <edit name="hintstyle" mode="assign"> + <const>hintslight</const> + </edit> + </match> + + <!-- When we encounter a character that the current font doesn't + support, gfx::GetFallbackFontForChar() returns the first font + that does have a glyph for the character. The list of fonts is + sorted by a pattern that includes the current locale, but doesn't + include a font family (which means that the fallback font depends + on the locale but not on the current font). + + DejaVu Sans is commonly the only font that supports some + characters, such as "⇧", and even when other candidates are + available, DejaVu Sans is commonly first among them, because of + the way Fontconfig is ordinarily configured. For example, the + configuration in the Fonconfig source lists DejaVu Sans under the + sans-serif generic family, and appends sans-serif to patterns + that don't already include a generic family (such as the pattern + in gfx::GetFallbackFontForChar()). + + To get the same fallback font in the layout tests, we could + duplicate this configuration here, or more directly, simply + append DejaVu Sans to all patterns. --> + <match target="pattern"> + <edit name="family" mode="append_last"> + <string>DejaVu Sans</string> + </edit> + </match> + +</fontconfig>
diff --git a/base/third_party/dynamic_annotations/README.chromium b/base/third_party/dynamic_annotations/README.chromium index c029f8ed..447fcf19 100644 --- a/base/third_party/dynamic_annotations/README.chromium +++ b/base/third_party/dynamic_annotations/README.chromium
@@ -21,3 +21,4 @@ Local modifications: * made lineno an unsigned short (for -Wconstant-conversion warning fixes) +* remove two superfluous semicolons for -Wextra-semi
diff --git a/base/third_party/dynamic_annotations/dynamic_annotations.c b/base/third_party/dynamic_annotations/dynamic_annotations.c index 4313ecc..4b841d5 100644 --- a/base/third_party/dynamic_annotations/dynamic_annotations.c +++ b/base/third_party/dynamic_annotations/dynamic_annotations.c
@@ -118,11 +118,11 @@ void DYNAMIC_ANNOTATIONS_NAME(AnnotateHappensBefore)( const char *file, int line, const volatile void *obj) -{DYNAMIC_ANNOTATIONS_IMPL}; +{DYNAMIC_ANNOTATIONS_IMPL} void DYNAMIC_ANNOTATIONS_NAME(AnnotateHappensAfter)( const char *file, int line, const volatile void *obj) -{DYNAMIC_ANNOTATIONS_IMPL}; +{DYNAMIC_ANNOTATIONS_IMPL} void DYNAMIC_ANNOTATIONS_NAME(AnnotatePublishMemoryRange)( const char *file, int line, const volatile void *address, long size)
diff --git a/build/android/apk_operations.py b/build/android/apk_operations.py index 9e2f1c6..c1e6a7fa 100755 --- a/build/android/apk_operations.py +++ b/build/android/apk_operations.py
@@ -151,6 +151,11 @@ try: temp_path = tempfile.mkdtemp() + if not fake_modules: + # Push empty temp_path to clear folder on device and update the cache. + device.PushChangedFiles([(temp_path, MODULES_SRC_DIRECTORY_PATH)]) + return + # Device-spec JSON is needed, so create that first. device_spec_filename = os.path.join(temp_path, 'device_spec.json') get_device_spec_cmd_args = [ @@ -159,9 +164,9 @@ ] bundletool.RunBundleTool(get_device_spec_cmd_args) - # Extract fake modules to temp directory. For now, installation requires - # running 'bundletool extract-apks'. Unfortunately, this leads to unneeded - # compression of module files. + # Extract fake modules to temp directory. For now, installation + # requires running 'bundletool extract-apks'. Unfortunately, this leads + # to unneeded compression of module files. extract_apks_cmd_args = [ 'extract-apks', '--apks=' + bundle_apks, '--device-spec=' + device_spec_filename, @@ -179,23 +184,24 @@ match = re.match(r'%s-([a-z_0-9]+)\.apk' % fake_module, filename) local_path = os.path.join(temp_path, filename) - if match is not None: - module_suffix = match.group(1) - remote = os.path.join( - temp_path, '%s.config.%s.apk' % (fake_module, module_suffix)) - # Check if filename matches a master apk. - if 'master' in module_suffix: - if found_master: - raise Exception('Expect 1 master apk file for %s' % fake_module) - else: - found_master = True - remote = os.path.join(temp_path, '%s.apk' % fake_module) - os.rename(local_path, remote) - else: + if not match: # File doesn't match - remove from directory. os.remove(local_path) + continue - device.PushChangedFiles([(temp_path, MODULES_SRC_DIRECTORY_PATH)]) + module_suffix = match.group(1) + remote = os.path.join( + temp_path, '%s.config.%s.apk' % (fake_module, module_suffix)) + # Check if filename matches a master apk. + if 'master' in module_suffix: + if found_master: + raise Exception('Expect 1 master apk file for %s' % fake_module) + found_master = True + remote = os.path.join(temp_path, '%s.apk' % fake_module) + + os.rename(local_path, remote) + + device.PushChangedFiles([(temp_path, MODULES_SRC_DIRECTORY_PATH)]) finally: shutil.rmtree(temp_path, ignore_errors=True)
diff --git a/build/android/resource_sizes.py b/build/android/resource_sizes.py index a5fa46c..30064c1 100755 --- a/build/android/resource_sizes.py +++ b/build/android/resource_sizes.py
@@ -421,7 +421,7 @@ if group is java_code and is_shared_apk: # Updates are compiled using quicken, but system image uses speed-profile. - extracted_size = uncompressed_size * speed_profile_dex_multiplier + extracted_size = int(uncompressed_size * speed_profile_dex_multiplier) total_install_size_android_go += extracted_size report_func('InstallBreakdownGo', group.name + ' size', actual_size + extracted_size, 'bytes')
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index 3cf7b86..255cb5de 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn
@@ -1591,7 +1591,7 @@ # TODO(thakis): Enable this for more platforms, https://crbug.com/926235 has_dchecks = is_debug || dcheck_always_on if (has_dchecks && is_linux && target_os != "chromeos" && !is_chromecast && - !use_libfuzzer && !is_debug) { + !use_libfuzzer) { cflags += [ "-Wextra-semi" ] } }
diff --git a/cc/paint/paint_op_buffer_serializer.cc b/cc/paint/paint_op_buffer_serializer.cc index 72ff184..c8079173 100644 --- a/cc/paint/paint_op_buffer_serializer.cc +++ b/cc/paint/paint_op_buffer_serializer.cc
@@ -6,7 +6,6 @@ #include "base/bind.h" #include "cc/paint/scoped_raster_flags.h" -#include "third_party/skia/include/core/SkColorSpaceXformCanvas.h" #include "ui/gfx/skia_util.h" namespace cc { @@ -91,16 +90,6 @@ max_texture_size, max_texture_bytes)) { DCHECK(serialize_cb_); - if (color_space->isSRGB()) { - // Colorspace converting every paint is not free. Only images have a - // non-srgb colorspace and this serializer does not handle images. - // Therefore, it's correct to just ignore the conversion for srgb. - canvas_ = &text_blob_canvas_; - } else { - color_canvas_ = SkCreateColorSpaceXformCanvas( - &text_blob_canvas_, sk_ref_sp<SkColorSpace>(color_space)); - canvas_ = color_canvas_.get(); - } } PaintOpBufferSerializer::~PaintOpBufferSerializer() = default; @@ -108,16 +97,16 @@ void PaintOpBufferSerializer::Serialize(const PaintOpBuffer* buffer, const std::vector<size_t>* offsets, const Preamble& preamble) { - DCHECK(canvas_->getTotalMatrix().isIdentity()); + DCHECK(text_blob_canvas_.getTotalMatrix().isIdentity()); static const int kInitialSaveCount = 1; - DCHECK_EQ(kInitialSaveCount, canvas_->getSaveCount()); + DCHECK_EQ(kInitialSaveCount, text_blob_canvas_.getSaveCount()); // These SerializeOptions and PlaybackParams use the initial (identity) canvas // matrix, as they are only used for serializing the preamble and the initial // save / final restore. SerializeBuffer will create its own SerializeOptions // and PlaybackParams based on the post-preamble canvas. PaintOp::SerializeOptions options = MakeSerializeOptions(); - PlaybackParams params = MakeParams(canvas_); + PlaybackParams params = MakeParams(&text_blob_canvas_); Save(options, params); SerializePreamble(preamble, options, params); @@ -126,7 +115,7 @@ } void PaintOpBufferSerializer::Serialize(const PaintOpBuffer* buffer) { - DCHECK(canvas_->getTotalMatrix().isIdentity()); + DCHECK(text_blob_canvas_.getTotalMatrix().isIdentity()); SerializeBuffer(buffer, nullptr); } @@ -136,10 +125,10 @@ const gfx::Rect& playback_rect, const gfx::SizeF& post_scale, const SkMatrix& post_matrix_for_analysis) { - DCHECK(canvas_->getTotalMatrix().isIdentity()); + DCHECK(text_blob_canvas_.getTotalMatrix().isIdentity()); PaintOp::SerializeOptions options = MakeSerializeOptions(); - PlaybackParams params = MakeParams(canvas_); + PlaybackParams params = MakeParams(&text_blob_canvas_); // TODO(khushalsagar): remove this clip rect if it's not needed. if (!playback_rect.IsEmpty()) { @@ -153,7 +142,7 @@ SerializeOp(&scale_op, options, params); } - canvas_->concat(post_matrix_for_analysis); + text_blob_canvas_.concat(post_matrix_for_analysis); SerializeBuffer(buffer, nullptr); } @@ -281,7 +270,7 @@ const std::vector<size_t>* offsets) { DCHECK(buffer); PaintOp::SerializeOptions options = MakeSerializeOptions(); - PlaybackParams params = MakeParams(canvas_); + PlaybackParams params = MakeParams(&text_blob_canvas_); for (PaintOpBuffer::PlaybackFoldingIterator iter(buffer, offsets); iter; ++iter) { @@ -290,7 +279,7 @@ // Skip ops outside the current clip if they have images. This saves // performing an unnecessary expensive decode. const bool skip_op = PaintOp::OpHasDiscardableImages(op) && - PaintOp::QuickRejectDraw(op, canvas_); + PaintOp::QuickRejectDraw(op, &text_blob_canvas_); if (skip_op) continue; @@ -308,7 +297,7 @@ continue; } - int save_count = canvas_->getSaveCount(); + int save_count = text_blob_canvas_.getSaveCount(); Save(options, params); SerializeBuffer(static_cast<const DrawRecordOp*>(op)->record.get(), nullptr); @@ -371,9 +360,9 @@ if (op->IsPaintOpWithFlags() && options.flags_to_serialize) { static_cast<const PaintOpWithFlags*>(op)->RasterWithFlags( - canvas_, options.flags_to_serialize, params); + &text_blob_canvas_, options.flags_to_serialize, params); } else { - op->Raster(canvas_, params); + op->Raster(&text_blob_canvas_, params); } } @@ -388,7 +377,7 @@ const PaintOp::SerializeOptions& options, const PlaybackParams& params) { RestoreOp restore_op; - while (canvas_->getSaveCount() > count) { + while (text_blob_canvas_.getSaveCount() > count) { if (!SerializeOp(&restore_op, options, params)) return; } @@ -396,9 +385,10 @@ PaintOp::SerializeOptions PaintOpBufferSerializer::MakeSerializeOptions() { return PaintOp::SerializeOptions( - image_provider_, transfer_cache_, paint_cache_, canvas_, strike_server_, - color_space_, can_use_lcd_text_, context_supports_distance_field_text_, - max_texture_size_, max_texture_bytes_, canvas_->getTotalMatrix()); + image_provider_, transfer_cache_, paint_cache_, &text_blob_canvas_, + strike_server_, color_space_, can_use_lcd_text_, + context_supports_distance_field_text_, max_texture_size_, + max_texture_bytes_, text_blob_canvas_.getTotalMatrix()); } SimpleBufferSerializer::SimpleBufferSerializer(
diff --git a/cc/paint/paint_op_buffer_serializer.h b/cc/paint/paint_op_buffer_serializer.h index aa2bb07..07d8ce7 100644 --- a/cc/paint/paint_op_buffer_serializer.h +++ b/cc/paint/paint_op_buffer_serializer.h
@@ -117,8 +117,6 @@ size_t max_texture_bytes_; SkTextBlobCacheDiffCanvas text_blob_canvas_; - std::unique_ptr<SkCanvas> color_canvas_; - SkCanvas* canvas_ = nullptr; bool valid_ = true; };
diff --git a/cc/paint/paint_op_buffer_unittest.cc b/cc/paint/paint_op_buffer_unittest.cc index e6204aaf..a46d46366 100644 --- a/cc/paint/paint_op_buffer_unittest.cc +++ b/cc/paint/paint_op_buffer_unittest.cc
@@ -1159,54 +1159,6 @@ SkPoint::Make(9, 9), SkPoint::Make(50, 50), SkPoint::Make(100, 100)}, }; -std::vector<std::vector<sk_sp<SkTypeface>>> test_typefaces = { - [] { return std::vector<sk_sp<SkTypeface>>{SkTypeface::MakeDefault()}; }(), - [] { - return std::vector<sk_sp<SkTypeface>>{SkTypeface::MakeDefault(), - SkTypeface::MakeDefault()}; - }(), -}; - -std::vector<sk_sp<SkTextBlob>> test_paint_blobs = { - [] { - SkFont font; - font.setTypeface(test_typefaces[0][0]); - - SkTextBlobBuilder builder; - int glyph_count = 5; - const auto& run = builder.allocRun(font, glyph_count, 1.2f, 2.3f); - // allocRun() allocates only the glyph buffer. - std::fill(run.glyphs, run.glyphs + glyph_count, 0); - return builder.make(); - }(), - [] { - SkFont font; - font.setTypeface(test_typefaces[1][0]); - - SkTextBlobBuilder builder; - int glyph_count = 5; - const auto& run1 = builder.allocRun(font, glyph_count, 1.2f, 2.3f); - // allocRun() allocates only the glyph buffer. - std::fill(run1.glyphs, run1.glyphs + glyph_count, 0); - - glyph_count = 16; - const auto& run2 = builder.allocRunPos(font, glyph_count); - // allocRun() allocates the glyph buffer, and 2 scalars per glyph for the - // pos buffer. - std::fill(run2.glyphs, run2.glyphs + glyph_count, 0); - std::fill(run2.pos, run2.pos + glyph_count * 2, 0); - - font.setTypeface(test_typefaces[1][1]); - glyph_count = 8; - const auto& run3 = builder.allocRunPosH(font, glyph_count, 0); - // allocRun() allocates the glyph buffer, and 1 scalar per glyph for the - // pos buffer. - std::fill(run3.glyphs, run3.glyphs + glyph_count, 0); - std::fill(run3.pos, run3.pos + glyph_count, 0); - return builder.make(); - }(), -}; - // TODO(enne): In practice, probably all paint images need to be uploaded // ahead of time and not be bitmaps. These paint images should be fake // gpu resource paint images. @@ -1518,6 +1470,54 @@ } void PushDrawTextBlobOps(PaintOpBuffer* buffer) { + static std::vector<std::vector<sk_sp<SkTypeface>>> test_typefaces = { + [] { + return std::vector<sk_sp<SkTypeface>>{SkTypeface::MakeDefault()}; + }(), + [] { + return std::vector<sk_sp<SkTypeface>>{SkTypeface::MakeDefault(), + SkTypeface::MakeDefault()}; + }(), + }; + static std::vector<sk_sp<SkTextBlob>> test_paint_blobs = { + [] { + SkFont font; + font.setTypeface(test_typefaces[0][0]); + + SkTextBlobBuilder builder; + int glyph_count = 5; + const auto& run = builder.allocRun(font, glyph_count, 1.2f, 2.3f); + // allocRun() allocates only the glyph buffer. + std::fill(run.glyphs, run.glyphs + glyph_count, 0); + return builder.make(); + }(), + [] { + SkFont font; + font.setTypeface(test_typefaces[1][0]); + + SkTextBlobBuilder builder; + int glyph_count = 5; + const auto& run1 = builder.allocRun(font, glyph_count, 1.2f, 2.3f); + // allocRun() allocates only the glyph buffer. + std::fill(run1.glyphs, run1.glyphs + glyph_count, 0); + + glyph_count = 16; + const auto& run2 = builder.allocRunPos(font, glyph_count); + // allocRun() allocates the glyph buffer, and 2 scalars per glyph for + // the pos buffer. + std::fill(run2.glyphs, run2.glyphs + glyph_count, 0); + std::fill(run2.pos, run2.pos + glyph_count * 2, 0); + + font.setTypeface(test_typefaces[1][1]); + glyph_count = 8; + const auto& run3 = builder.allocRunPosH(font, glyph_count, 0); + // allocRun() allocates the glyph buffer, and 1 scalar per glyph for the + // pos buffer. + std::fill(run3.glyphs, run3.glyphs + glyph_count, 0); + std::fill(run3.pos, run3.pos + glyph_count, 0); + return builder.make(); + }(), + }; size_t len = std::min(std::min(test_paint_blobs.size(), test_flags.size()), test_floats.size() - 1); for (size_t i = 0; i < len; ++i) {
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc index aa2910b..7d388c3 100644 --- a/cc/scheduler/scheduler.cc +++ b/cc/scheduler/scheduler.cc
@@ -228,17 +228,12 @@ client_->ScheduledActionBeginMainFrameNotExpectedUntil(time); } -void Scheduler::BeginImplFrameNotExpectedSoon() { - compositor_timing_history_->BeginImplFrameNotExpectedSoon(); +void Scheduler::BeginMainFrameNotExpectedSoon() { + TRACE_EVENT0("cc", "Scheduler::BeginMainFrameNotExpectedSoon"); - // Tying this to SendBeginMainFrameNotExpectedSoon will have some - // false negatives, but we want to avoid running long idle tasks when - // we are actually active. - if (state_machine_.wants_begin_main_frame_not_expected_messages()) { - DCHECK(!inside_scheduled_action_); - base::AutoReset<bool> mark_inside(&inside_scheduled_action_, true); - client_->SendBeginMainFrameNotExpectedSoon(); - } + DCHECK(!inside_scheduled_action_); + base::AutoReset<bool> mark_inside(&inside_scheduled_action_, true); + client_->SendBeginMainFrameNotExpectedSoon(); } void Scheduler::StartOrStopBeginFrames() { @@ -262,7 +257,7 @@ begin_frame_source_->RemoveObserver(this); // We're going idle so drop pending begin frame. CancelPendingBeginFrameTask(); - BeginImplFrameNotExpectedSoon(); + compositor_timing_history_->BeginImplFrameNotExpectedSoon(); devtools_instrumentation::NeedsBeginFrameChanged(layer_tree_host_id_, false); client_->WillNotReceiveBeginFrame(); @@ -789,17 +784,16 @@ // TODO(brianderson): Pass begin_main_frame_args_ directly to client. client_->ScheduledActionSendBeginMainFrame(begin_main_frame_args_); break; - case SchedulerStateMachine::Action::NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT: - state_machine_.WillNotifyBeginMainFrameNotSent(); - // If SendBeginMainFrameNotExpectedSoon was not previously sent by - // BeginImplFrameNotExpectedSoon (because the messages were not required - // at that time), then send it now. - if (!observing_begin_frame_source_) { - client_->SendBeginMainFrameNotExpectedSoon(); - } else { - BeginMainFrameNotExpectedUntil(begin_main_frame_args_.frame_time + - begin_main_frame_args_.interval); - } + case SchedulerStateMachine::Action:: + NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_UNTIL: + state_machine_.WillNotifyBeginMainFrameNotExpectedUntil(); + BeginMainFrameNotExpectedUntil(begin_main_frame_args_.frame_time + + begin_main_frame_args_.interval); + break; + case SchedulerStateMachine::Action:: + NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_SOON: + state_machine_.WillNotifyBeginMainFrameNotExpectedSoon(); + BeginMainFrameNotExpectedSoon(); break; case SchedulerStateMachine::Action::COMMIT: { bool commit_has_no_updates = false;
diff --git a/cc/scheduler/scheduler.h b/cc/scheduler/scheduler.h index 6867948a..292a0f5 100644 --- a/cc/scheduler/scheduler.h +++ b/cc/scheduler/scheduler.h
@@ -292,8 +292,8 @@ // Used to drop the pending begin frame before we go idle. void CancelPendingBeginFrameTask(); - void BeginImplFrameNotExpectedSoon(); void BeginMainFrameNotExpectedUntil(base::TimeTicks time); + void BeginMainFrameNotExpectedSoon(); void DrawIfPossible(); void DrawForced(); void ProcessScheduledActions();
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc index 0893d43..fec4a49 100644 --- a/cc/scheduler/scheduler_state_machine.cc +++ b/cc/scheduler/scheduler_state_machine.cc
@@ -139,8 +139,10 @@ return "Action::INVALIDATE_LAYER_TREE_FRAME_SINK"; case Action::PERFORM_IMPL_SIDE_INVALIDATION: return "Action::PERFORM_IMPL_SIDE_INVALIDATION"; - case Action::NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT: - return "Action::NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT"; + case Action::NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_UNTIL: + return "Action::NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_UNTIL"; + case Action::NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_SOON: + return "Action::NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_SOON"; } NOTREACHED(); return "???"; @@ -181,8 +183,10 @@ state->SetBoolean("did_draw", did_draw_); state->SetBoolean("did_send_begin_main_frame_for_current_frame", did_send_begin_main_frame_for_current_frame_); - state->SetBoolean("did_notify_begin_main_frame_not_sent", - did_notify_begin_main_frame_not_sent_); + state->SetBoolean("did_notify_begin_main_frame_not_expected_until", + did_notify_begin_main_frame_not_expected_until_); + state->SetBoolean("did_notify_begin_main_frame_not_expected_soon", + did_notify_begin_main_frame_not_expected_soon_); state->SetBoolean("wants_begin_main_frame_not_expected", wants_begin_main_frame_not_expected_); state->SetBoolean("did_commit_during_frame", did_commit_during_frame_); @@ -387,7 +391,7 @@ return pending_tree_is_ready_for_activation_; } -bool SchedulerStateMachine::ShouldNotifyBeginMainFrameNotSent() const { +bool SchedulerStateMachine::ShouldNotifyBeginMainFrameNotExpectedUntil() const { // This method returns true if most of the conditions for sending a // BeginMainFrame are met, but one is not actually requested. This gives the // main thread the chance to do something else. @@ -411,9 +415,16 @@ if (begin_frame_source_paused_) return false; + // If we've gone idle and have stopped getting BeginFrames, we should send + // SendBeginMainFrameNotExpectedSoon instead. + if (!BeginFrameNeeded() && + begin_impl_frame_state_ == BeginImplFrameState::IDLE) { + return false; + } + // Do not notify that no BeginMainFrame was sent too many times in a single // frame. - if (did_notify_begin_main_frame_not_sent_) + if (did_notify_begin_main_frame_not_expected_until_) return false; // Do not notify if a commit happened during this frame as the main thread @@ -426,6 +437,30 @@ return true; } +bool SchedulerStateMachine::ShouldNotifyBeginMainFrameNotExpectedSoon() const { + if (!wants_begin_main_frame_not_expected_) + return false; + + // Don't notify if a BeginMainFrame has already been requested or is in + // progress. + if (needs_begin_main_frame_ || + begin_main_frame_state_ != BeginMainFrameState::IDLE) { + return false; + } + + // Only send this when we've stopped getting BeginFrames and have gone idle. + if (BeginFrameNeeded() || + begin_impl_frame_state_ != BeginImplFrameState::IDLE) { + return false; + } + + // Do not notify that we're not expecting frames more than once per frame. + if (did_notify_begin_main_frame_not_expected_soon_) + return false; + + return true; +} + bool SchedulerStateMachine::CouldSendBeginMainFrame() const { if (!needs_begin_main_frame_) return false; @@ -606,8 +641,10 @@ return Action::INVALIDATE_LAYER_TREE_FRAME_SINK; if (ShouldBeginLayerTreeFrameSinkCreation()) return Action::BEGIN_LAYER_TREE_FRAME_SINK_CREATION; - if (ShouldNotifyBeginMainFrameNotSent()) - return Action::NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT; + if (ShouldNotifyBeginMainFrameNotExpectedUntil()) + return Action::NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_UNTIL; + if (ShouldNotifyBeginMainFrameNotExpectedSoon()) + return Action::NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_SOON; return Action::NONE; } @@ -746,11 +783,20 @@ last_frame_number_begin_main_frame_sent_ = current_frame_number_; } -void SchedulerStateMachine::WillNotifyBeginMainFrameNotSent() { +void SchedulerStateMachine::WillNotifyBeginMainFrameNotExpectedUntil() { DCHECK(visible_); DCHECK(!begin_frame_source_paused_); - DCHECK(!did_notify_begin_main_frame_not_sent_); - did_notify_begin_main_frame_not_sent_ = true; + DCHECK(BeginFrameNeeded() || + begin_impl_frame_state_ != BeginImplFrameState::IDLE); + DCHECK(!did_notify_begin_main_frame_not_expected_until_); + did_notify_begin_main_frame_not_expected_until_ = true; +} + +void SchedulerStateMachine::WillNotifyBeginMainFrameNotExpectedSoon() { + DCHECK(!BeginFrameNeeded()); + DCHECK(begin_impl_frame_state_ == BeginImplFrameState::IDLE); + DCHECK(!did_notify_begin_main_frame_not_expected_soon_); + did_notify_begin_main_frame_not_expected_soon_ = true; } void SchedulerStateMachine::WillCommit(bool commit_has_no_updates) { @@ -1057,7 +1103,8 @@ did_submit_in_last_frame_ = false; needs_one_begin_impl_frame_ = false; - did_notify_begin_main_frame_not_sent_ = false; + did_notify_begin_main_frame_not_expected_until_ = false; + did_notify_begin_main_frame_not_expected_soon_ = false; did_send_begin_main_frame_for_current_frame_ = false; did_commit_during_frame_ = false; did_invalidate_layer_tree_frame_sink_ = false;
diff --git a/cc/scheduler/scheduler_state_machine.h b/cc/scheduler/scheduler_state_machine.h index 1f727f8a..f683e52 100644 --- a/cc/scheduler/scheduler_state_machine.h +++ b/cc/scheduler/scheduler_state_machine.h
@@ -131,7 +131,8 @@ BEGIN_LAYER_TREE_FRAME_SINK_CREATION, PREPARE_TILES, INVALIDATE_LAYER_TREE_FRAME_SINK, - NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT, + NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_UNTIL, + NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_SOON, }; static const char* ActionToString(Action action); @@ -140,7 +141,8 @@ Action NextAction() const; void WillSendBeginMainFrame(); - void WillNotifyBeginMainFrameNotSent(); + void WillNotifyBeginMainFrameNotExpectedUntil(); + void WillNotifyBeginMainFrameNotExpectedSoon(); void WillCommit(bool commit_had_no_updates); void WillActivate(); void WillDraw(); @@ -360,7 +362,8 @@ bool ShouldCommit() const; bool ShouldPrepareTiles() const; bool ShouldInvalidateLayerTreeFrameSink() const; - bool ShouldNotifyBeginMainFrameNotSent() const; + bool ShouldNotifyBeginMainFrameNotExpectedUntil() const; + bool ShouldNotifyBeginMainFrameNotExpectedSoon() const; void WillDrawInternal(); void WillPerformImplSideInvalidationInternal(); @@ -396,9 +399,12 @@ // deadline, etc. bool did_draw_ = false; bool did_send_begin_main_frame_for_current_frame_ = true; + // Initialized to true to prevent begin main frame before begin frames have // started. Reset to true when we stop asking for begin frames. - bool did_notify_begin_main_frame_not_sent_ = true; + bool did_notify_begin_main_frame_not_expected_until_ = true; + bool did_notify_begin_main_frame_not_expected_soon_ = true; + bool did_commit_during_frame_ = false; bool did_invalidate_layer_tree_frame_sink_ = false; bool did_perform_impl_side_invalidation_ = false;
diff --git a/cc/scheduler/scheduler_state_machine_unittest.cc b/cc/scheduler/scheduler_state_machine_unittest.cc index 0bd90ce..886529d 100644 --- a/cc/scheduler/scheduler_state_machine_unittest.cc +++ b/cc/scheduler/scheduler_state_machine_unittest.cc
@@ -184,8 +184,14 @@ sm->WillSendBeginMainFrame(); return; - case SchedulerStateMachine::Action::NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT: - sm->WillNotifyBeginMainFrameNotSent(); + case SchedulerStateMachine::Action:: + NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_UNTIL: + sm->WillNotifyBeginMainFrameNotExpectedUntil(); + return; + + case SchedulerStateMachine::Action:: + NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_SOON: + sm->WillNotifyBeginMainFrameNotExpectedSoon(); return; case SchedulerStateMachine::Action::COMMIT: { @@ -274,7 +280,8 @@ EXPECT_FALSE(state.BeginFrameNeeded()); } -TEST(SchedulerStateMachineTest, TestNextActionNotifyBeginMainFrameNotSent) { +TEST(SchedulerStateMachineTest, + TestNextActionNotifyBeginMainFrameNotExpectedUntil) { SchedulerSettings default_scheduler_settings; StateMachine state(default_scheduler_settings); state.SetMainThreadWantsBeginMainFrameNotExpectedMessages(true); @@ -283,8 +290,10 @@ SchedulerStateMachine::Action::BEGIN_LAYER_TREE_FRAME_SINK_CREATION); state.IssueNextBeginImplFrame(); state.CreateAndInitializeLayerTreeFrameSinkWithActivatedCommit(); - EXPECT_ACTION_UPDATE_STATE( - SchedulerStateMachine::Action::NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); + state.SetNeedsOneBeginImplFrame(true); + EXPECT_TRUE(state.BeginFrameNeeded()); + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action:: + NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_UNTIL); EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE); state.SetNeedsRedraw(true); @@ -294,6 +303,33 @@ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE); } +TEST(SchedulerStateMachineTest, + TestNextActionNotifyBeginMainFrameNotExpectedSoon) { + SchedulerSettings default_scheduler_settings; + StateMachine state(default_scheduler_settings); + state.SetMainThreadWantsBeginMainFrameNotExpectedMessages(true); + state.SetVisible(true); + EXPECT_ACTION_UPDATE_STATE( + SchedulerStateMachine::Action::BEGIN_LAYER_TREE_FRAME_SINK_CREATION); + state.IssueNextBeginImplFrame(); + state.CreateAndInitializeLayerTreeFrameSinkWithActivatedCommit(); + state.SetNeedsOneBeginImplFrame(true); + EXPECT_TRUE(state.BeginFrameNeeded()); + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action:: + NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_UNTIL); + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE); + + state.SetNeedsOneBeginImplFrame(false); + EXPECT_FALSE(state.BeginFrameNeeded()); + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE); + state.SetBeginImplFrameState( + SchedulerStateMachine::BeginImplFrameState::IDLE); + EXPECT_ACTION_UPDATE_STATE( + SchedulerStateMachine::Action::NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_SOON); + + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE); +} + TEST(SchedulerStateMachineTest, TestNextActionBeginsMainFrameIfNeeded) { SchedulerSettings default_scheduler_settings;
diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc index f0aaaf4..2f5deee 100644 --- a/cc/scheduler/scheduler_unittest.cc +++ b/cc/scheduler/scheduler_unittest.cc
@@ -2910,6 +2910,33 @@ "ScheduledActionDrawIfPossible"); } +// Tests to ensure that BeginMainFrameNotExpectedUntil is only sent once within +// the same frame. +TEST_F(SchedulerTest, + ScheduledActionBeginMainFrameNotExpectedUntilSentOnlyOncePerFrame) { + SetUpScheduler(EXTERNAL_BFS); + + scheduler_->SetNeedsRedraw(); + EXPECT_ACTIONS("AddObserver(this)"); + client_->Reset(); + + EXPECT_SCOPED(AdvanceFrame()); + scheduler_->SetMainThreadWantsBeginMainFrameNotExpected(true); + task_runner_->RunPendingTasks(); + EXPECT_ACTIONS("WillBeginImplFrame", + "ScheduledActionBeginMainFrameNotExpectedUntil", + "ScheduledActionDrawIfPossible"); + client_->Reset(); + + scheduler_->SetMainThreadWantsBeginMainFrameNotExpected(false); + task_runner_->RunPendingTasks(); + EXPECT_NO_ACTION(); + + scheduler_->SetMainThreadWantsBeginMainFrameNotExpected(true); + task_runner_->RunPendingTasks(); + EXPECT_NO_ACTION(); +} + // Tests to ensure that we send a BeginMainFrameNotExpectedSoon when expected. TEST_F(SchedulerTest, SendBeginMainFrameNotExpectedSoon_Requested) { SetUpScheduler(EXTERNAL_BFS); @@ -2941,7 +2968,7 @@ // The BeginImplFrame deadline should SetNeedsBeginFrame(false) and send a // SendBeginMainFrameNotExpectedSoon. task_runner_->RunPendingTasks(); // Run posted deadline. - EXPECT_ACTIONS("RemoveObserver(this)", "SendBeginMainFrameNotExpectedSoon"); + EXPECT_ACTIONS("SendBeginMainFrameNotExpectedSoon", "RemoveObserver(this)"); client_->Reset(); } @@ -2983,6 +3010,149 @@ EXPECT_ACTIONS("SendBeginMainFrameNotExpectedSoon"); } +// Tests to ensure that we send a BeginMainFrameNotExpectedSoon only once per +// frame. +TEST_F(SchedulerTest, SendBeginMainFrameNotExpectedSoonOnlyOncePerFrame) { + SetUpScheduler(EXTERNAL_BFS); + + // SetNeedsBeginMainFrame should begin the frame on the next BeginImplFrame. + scheduler_->SetNeedsBeginMainFrame(); + EXPECT_ACTIONS("AddObserver(this)"); + client_->Reset(); + + // Trigger a frame draw. + EXPECT_SCOPED(AdvanceFrame()); + scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks()); + scheduler_->NotifyReadyToCommit(); + scheduler_->NotifyReadyToActivate(); + task_runner_->RunPendingTasks(); + EXPECT_ACTIONS("WillBeginImplFrame", "ScheduledActionSendBeginMainFrame", + "ScheduledActionCommit", "ScheduledActionActivateSyncTree", + "ScheduledActionDrawIfPossible"); + client_->Reset(); + + scheduler_->SetMainThreadWantsBeginMainFrameNotExpected(true); + + EXPECT_SCOPED(AdvanceFrame()); + EXPECT_ACTIONS("WillBeginImplFrame", + "ScheduledActionBeginMainFrameNotExpectedUntil"); + EXPECT_TRUE(client_->IsInsideBeginImplFrame()); + client_->Reset(); + + task_runner_->RunPendingTasks(); // Run posted deadline. + EXPECT_ACTIONS("SendBeginMainFrameNotExpectedSoon", "RemoveObserver(this)"); + client_->Reset(); + + scheduler_->SetMainThreadWantsBeginMainFrameNotExpected(false); + EXPECT_NO_ACTION(); + + scheduler_->SetMainThreadWantsBeginMainFrameNotExpected(true); + EXPECT_NO_ACTION(); +} + +// Tests to ensure that we send a BeginMainFrameNotExpectedSoon in situations +// where the client doesn't want messages when we first stopped observing +// BeginFrames but later does. +TEST_F(SchedulerTest, SendBeginMainFrameNotExpectedSoon_AlreadyIdle) { + SetUpScheduler(EXTERNAL_BFS); + + // SetNeedsBeginMainFrame should begin the frame on the next BeginImplFrame. + scheduler_->SetNeedsBeginMainFrame(); + EXPECT_ACTIONS("AddObserver(this)"); + client_->Reset(); + + // Trigger a frame draw. + EXPECT_SCOPED(AdvanceFrame()); + scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks()); + scheduler_->NotifyReadyToCommit(); + scheduler_->NotifyReadyToActivate(); + task_runner_->RunPendingTasks(); + EXPECT_ACTIONS("WillBeginImplFrame", "ScheduledActionSendBeginMainFrame", + "ScheduledActionCommit", "ScheduledActionActivateSyncTree", + "ScheduledActionDrawIfPossible"); + client_->Reset(); + + EXPECT_SCOPED(AdvanceFrame()); + task_runner_->RunPendingTasks(); // Run posted deadline. + EXPECT_ACTIONS("WillBeginImplFrame", "RemoveObserver(this)"); + client_->Reset(); + + scheduler_->SetMainThreadWantsBeginMainFrameNotExpected(true); + EXPECT_ACTIONS("SendBeginMainFrameNotExpectedSoon"); +} + +// This tests to ensure BeginMainFrameNotExpectedSoon is sent during idle +// periods if (1) it initially wasn't sent because the message wasn't needed at +// the time, and (2) the BeginMainFrameNotExpectedUntil was already sent in the +// frame (crbug.com/893653). +TEST_F(SchedulerTest, SendBeginMainFrameNotExpectedSoonDuringIdleIfNeeded) { + SetUpScheduler(EXTERNAL_BFS); + + scheduler_->SetNeedsRedraw(); + EXPECT_ACTIONS("AddObserver(this)"); + client_->Reset(); + + EXPECT_SCOPED(AdvanceFrame()); + task_runner_->RunPendingTasks(); + EXPECT_ACTIONS("WillBeginImplFrame", "ScheduledActionDrawIfPossible"); + client_->Reset(); + + EXPECT_SCOPED(AdvanceFrame()); + EXPECT_ACTIONS("WillBeginImplFrame"); + EXPECT_TRUE(client_->IsInsideBeginImplFrame()); + client_->Reset(); + + // Toggle WantsBeginMainFrameNotExpected while inside BeginImplFrame. This + // causes the BeginMainFrameNotExpectedUntil message to get sent and the + // BeginMainFrameNotExpectedSoon message to be withheld. + scheduler_->SetMainThreadWantsBeginMainFrameNotExpected(true); + EXPECT_ACTIONS("ScheduledActionBeginMainFrameNotExpectedUntil"); + client_->Reset(); + scheduler_->SetMainThreadWantsBeginMainFrameNotExpected(false); + task_runner_->RunPendingTasks(); + EXPECT_ACTIONS("RemoveObserver(this)"); + EXPECT_FALSE(client_->IsInsideBeginImplFrame()); + client_->Reset(); + + scheduler_->SetMainThreadWantsBeginMainFrameNotExpected(true); + EXPECT_ACTIONS("SendBeginMainFrameNotExpectedSoon"); +} + +// This tests to ensure BeginMainFrameNotExpectedSoon is sent during idle +// periods if (1) it initially wasn't sent because the message wasn't needed at +// the time, and (2) |scheduler_|.visible() is false. +TEST_F(SchedulerTest, + ScheduledActionBeginMainFrameNotSoonSentDuringIdleIfNeededNotVisible) { + SetUpScheduler(EXTERNAL_BFS); + + scheduler_->SetNeedsRedraw(); + EXPECT_ACTIONS("AddObserver(this)"); + client_->Reset(); + + EXPECT_SCOPED(AdvanceFrame()); + task_runner_->RunPendingTasks(); + EXPECT_ACTIONS("WillBeginImplFrame", "ScheduledActionDrawIfPossible"); + client_->Reset(); + + EXPECT_SCOPED(AdvanceFrame()); + EXPECT_ACTIONS("WillBeginImplFrame"); + EXPECT_TRUE(client_->IsInsideBeginImplFrame()); + client_->Reset(); + + scheduler_->SetVisible(false); + + task_runner_->RunPendingTasks(); + EXPECT_ACTIONS("RemoveObserver(this)"); + EXPECT_FALSE(client_->IsInsideBeginImplFrame()); + + // The scheduler won't send BeginMainFrameNotExpectedUntil messages while not + // visible, but it needs to send a BeginMainFrameNotExpectedSoon to let the + // client know it's gone idle. + client_->Reset(); + scheduler_->SetMainThreadWantsBeginMainFrameNotExpected(true); + EXPECT_ACTIONS("SendBeginMainFrameNotExpectedSoon"); +} + TEST_F(SchedulerTest, SynchronousCompositorAnimation) { scheduler_settings_.using_synchronous_renderer_compositor = true; SetUpScheduler(EXTERNAL_BFS);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java index 714fd0200..28971a1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
@@ -1085,6 +1085,10 @@ if (mIntentDataProvider.isTrustedWebActivity()) { component.resolveTrustedWebActivityCoordinator(); } + if (mConnection.shouldHideTopBarOnModuleManagedUrlsForSession( + mIntentDataProvider.getSession())) { + component.resolveDynamicModuleToolbarController(); + } return component; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabBrowserControlsVisibilityDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabBrowserControlsVisibilityDelegate.java index 0d52af04..6ba6319d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabBrowserControlsVisibilityDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabBrowserControlsVisibilityDelegate.java
@@ -24,6 +24,7 @@ private final Lazy<ChromeFullscreenManager> mFullscreenManagerDelegate; private final ActivityTabProvider mTabProvider; private boolean mIsInTwaMode; + private boolean mIsInModuleLoadingMode; @Inject public CustomTabBrowserControlsVisibilityDelegate( @@ -41,15 +42,24 @@ return; } mIsInTwaMode = isInTwaMode; - Tab activeTab = mTabProvider.getActivityTab(); - if (activeTab != null) { - activeTab.updateFullscreenEnabledState(); + updateActiveTabFullscreenEnabledState(); + } + + /** + * Sets module loading mode. In module loading mode browser controls should be hidden. + */ + public void setModuleLoadingMode(boolean isInModuleLoadingMode) { + if (mIsInModuleLoadingMode == isInModuleLoadingMode) { + return; } + mIsInModuleLoadingMode = isInModuleLoadingMode; + updateActiveTabFullscreenEnabledState(); } @Override public boolean canShowBrowserControls() { - return !mIsInTwaMode && getDefaultVisibilityDelegate().canShowBrowserControls(); + return !mIsInTwaMode && !mIsInModuleLoadingMode + && getDefaultVisibilityDelegate().canShowBrowserControls(); } @Override @@ -60,4 +70,11 @@ private BrowserStateBrowserControlsVisibilityDelegate getDefaultVisibilityDelegate() { return mFullscreenManagerDelegate.get().getBrowserVisibilityDelegate(); } + + private void updateActiveTabFullscreenEnabledState() { + Tab activeTab = mTabProvider.getActivityTab(); + if (activeTab != null) { + activeTab.updateFullscreenEnabledState(); + } + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java index 5f440b18..97d0336 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
@@ -1007,6 +1007,11 @@ mClientManager.setCanUseHiddenTab(session, value); } + @VisibleForTesting + void setHideCCTTopBarOnModuleManagedUrls(CustomTabsSessionToken session, boolean value) { + mClientManager.setHideCCTTopBarOnModuleManagedUrls(session, value); + } + /** * See {@link ClientManager#setSendNavigationInfoForSession(CustomTabsSessionToken, boolean)}. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dependency_injection/CustomTabActivityComponent.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dependency_injection/CustomTabActivityComponent.java index 3f42d13..b85d4928 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dependency_injection/CustomTabActivityComponent.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dependency_injection/CustomTabActivityComponent.java
@@ -14,6 +14,7 @@ import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabController; import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabFactory; import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleCoordinator; +import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleToolbarController; import org.chromium.chrome.browser.dependency_injection.ActivityScope; import org.chromium.chrome.browser.dependency_injection.ChromeActivityCommonsModule; import org.chromium.chrome.browser.dependency_injection.ChromeActivityComponent; @@ -29,6 +30,7 @@ @ActivityScope public interface CustomTabActivityComponent extends ChromeActivityComponent { TrustedWebActivityCoordinator resolveTrustedWebActivityCoordinator(); + DynamicModuleToolbarController resolveDynamicModuleToolbarController(); DynamicModuleCoordinator resolveDynamicModuleCoordinator(); CloseButtonNavigator resolveCloseButtonNavigator();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleCoordinator.java index cef14d1..64dbdcf 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleCoordinator.java
@@ -72,6 +72,7 @@ private final Lazy<CustomTabTopBarDelegate> mTopBarDelegate; private final Lazy<CustomTabBottomBarDelegate> mBottomBarDelegate; private final Lazy<ChromeFullscreenManager> mFullscreenManager; + private final Lazy<DynamicModuleToolbarController> mToolbarController; @Nullable private LoadModuleCallback mModuleCallback; @@ -166,6 +167,7 @@ Lazy<CustomTabTopBarDelegate> topBarDelegate, Lazy<CustomTabBottomBarDelegate> bottomBarDelegate, Lazy<ChromeFullscreenManager> fullscreenManager, + Lazy<DynamicModuleToolbarController> toolbarController, CustomTabsConnection connection, ChromeActivity activity, CustomTabActivityTabController tabController, DynamicModulePageLoadObserver pageLoadObserver) { @@ -186,6 +188,7 @@ mTopBarDelegate = topBarDelegate; mBottomBarDelegate = bottomBarDelegate; mFullscreenManager = fullscreenManager; + mToolbarController = toolbarController; mPageCriteria = url -> (isModuleLoading() || isModuleLoaded()) && isModuleManagedUrl(url); closeButtonNavigator.setLandingPageCriteria(mPageCriteria); @@ -337,6 +340,7 @@ private class LoadModuleCallback implements Callback<ModuleEntryPoint> { @Override public void onResult(@Nullable ModuleEntryPoint entryPoint) { + mToolbarController.get().releaseAndroidControlsHidingToken(); mDefaultToolbarVisibility = mActivity.getToolbarManager().getToolbarVisibility(); mDefaultToolbarShadowVisibility = mActivity.getToolbarManager().getToolbarShadowVisibility(); @@ -466,7 +470,9 @@ } private void maybeCustomizeCctHeader(String url) { - if (!isModuleLoaded() && !isModuleLoading() && !hasModuleFailedToLoad()) return; + // Since some of the tool bar default settings are not obtained until module loading is + // finished, we do not allow customization until then. + if (!isModuleLoaded() && !hasModuleFailedToLoad()) return; boolean showTopBar = mPageCriteria.matches(url); mTopBarDelegate.get().showTopBarIfNecessary(showTopBar);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleToolbarController.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleToolbarController.java new file mode 100644 index 0000000..d155f83 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleToolbarController.java
@@ -0,0 +1,78 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.customtabs.dynamicmodule; + +import org.chromium.base.VisibleForTesting; +import org.chromium.chrome.browser.customtabs.CustomTabBrowserControlsVisibilityDelegate; +import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider; +import org.chromium.chrome.browser.dependency_injection.ActivityScope; +import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; +import org.chromium.chrome.browser.fullscreen.FullscreenManager; +import org.chromium.chrome.browser.init.ActivityLifecycleDispatcher; +import org.chromium.chrome.browser.lifecycle.InflationObserver; +import org.chromium.chrome.browser.lifecycle.NativeInitObserver; + +import javax.inject.Inject; + +import dagger.Lazy; + +/** + * Controls the visibility of the toolbar on module managed URLs. + */ +@ActivityScope +public class DynamicModuleToolbarController implements InflationObserver, NativeInitObserver { + private final Lazy<ChromeFullscreenManager> mFullscreenManager; + private final CustomTabBrowserControlsVisibilityDelegate mControlsVisibilityDelegate; + private final CustomTabIntentDataProvider mIntentDataProvider; + + private int mControlsHidingToken = FullscreenManager.INVALID_TOKEN; + private boolean mHasReleasedToken; + + @Inject + public DynamicModuleToolbarController(Lazy<ChromeFullscreenManager> fullscreenManager, + CustomTabBrowserControlsVisibilityDelegate controlsVisibilityDelegate, + CustomTabIntentDataProvider intentDataProvider, + ActivityLifecycleDispatcher activityLifecycleDispatcher) { + this.mFullscreenManager = fullscreenManager; + this.mControlsVisibilityDelegate = controlsVisibilityDelegate; + this.mIntentDataProvider = intentDataProvider; + + activityLifecycleDispatcher.register(this); + } + + @Override + public void onPreInflationStartup() {} + + @Override + public void onPostInflationStartup() { + mControlsVisibilityDelegate.setModuleLoadingMode(true); + mControlsHidingToken = + mFullscreenManager.get().hideAndroidControlsAndClearOldToken(mControlsHidingToken); + mHasReleasedToken = false; + } + + @Override + public void onFinishNativeInitialization() { + if (!mIntentDataProvider.isDynamicModuleEnabled()) { + releaseAndroidControlsHidingToken(); + } + } + + /* package */ void releaseAndroidControlsHidingToken() { + mControlsVisibilityDelegate.setModuleLoadingMode(false); + mFullscreenManager.get().releaseAndroidControlsHidingToken(mControlsHidingToken); + mHasReleasedToken = true; + } + + @VisibleForTesting + boolean hasReleasedToken() { + return mHasReleasedToken; + } + + @VisibleForTesting + boolean hasAcquiredToken() { + return mControlsHidingToken != FullscreenManager.INVALID_TOKEN; + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShell.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShell.java index 7dc0a49..ce3f589 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShell.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShell.java
@@ -927,7 +927,8 @@ public boolean isDisplayingUrlForTesting() { assert mNativeVrShell != 0; - return nativeIsDisplayingUrlForTesting(mNativeVrShell); + return ThreadUtils.runOnUiThreadBlockingNoException( + () -> { return nativeIsDisplayingUrlForTesting(mNativeVrShell); }); } @VisibleForTesting
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd index 9af551e..dff2fd8 100644 --- a/chrome/android/java/strings/android_chrome_strings.grd +++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -2743,7 +2743,7 @@ Google may use your history to personalize Search and other Google services </message> <message name="IDS_SIGNIN_DETAILS_DESCRIPTION" desc="Message with a link to customize Sync settings. Shown on the screen that asks the user to turn on Sync."> - You can always <ph name="BEGIN_LINK1"><LINK1></ph>choose what to sync in settings<ph name="END_LINK1"></LINK1></ph> + You can always choose what to sync in <ph name="BEGIN_LINK1"><LINK1></ph>settings<ph name="END_LINK1"></LINK1></ph>. </message> <message name="IDS_SIGNIN_ACCEPT_BUTTON" desc="Text for the confirmation button in the sign-in screen. By clicking this button users signs in and turns on Sync. [CHAR-LIMIT=20]"> Yes, I'm in
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni index a3e20cc..f02a9b9 100644 --- a/chrome/android/java_sources.gni +++ b/chrome/android/java_sources.gni
@@ -506,6 +506,7 @@ "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleCoordinator.java", "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleNavigationEventObserver.java", "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModulePageLoadObserver.java", + "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleToolbarController.java", "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleEntryPoint.java", "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleHostImpl.java", "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleLoader.java",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabsTestUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabsTestUtils.java index 29b1f21..4863d84 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabsTestUtils.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabsTestUtils.java
@@ -15,6 +15,7 @@ import android.support.customtabs.CustomTabsIntent; import android.support.customtabs.CustomTabsServiceConnection; import android.support.customtabs.CustomTabsSession; +import android.support.customtabs.CustomTabsSessionToken; import android.support.test.InstrumentationRegistry; import org.junit.Assert; @@ -106,4 +107,12 @@ CriteriaHelper.pollUiThread( activity.getAppMenuHandler()::isAppMenuShowing, "App menu was not shown"); } + + public static void setHideCctTopBarOnModuleManagedUrls(Intent intent, boolean hideCctTopBar) + throws InterruptedException, TimeoutException { + CustomTabsConnection connection = warmUpAndWait(); + CustomTabsSessionToken token = CustomTabsSessionToken.getSessionTokenFromIntent(intent); + connection.newSession(token); + connection.setHideCCTTopBarOnModuleManagedUrls(token, hideCctTopBar); + } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/CustomTabsDynamicModuleUITest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/CustomTabsDynamicModuleUITest.java index ba93c53..5ad0fb10 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/CustomTabsDynamicModuleUITest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/CustomTabsDynamicModuleUITest.java
@@ -532,6 +532,54 @@ runOnUiThreadBlocking(() -> Assert.assertTrue(canChangeProgressBarTopMargin())); } + @Test + @SmallTest + public void testToolbarController_doesNotHideCctTopBar_doesNotAcquiredToken() throws Exception { + Intent intent = CustomTabsTestUtils.createMinimalCustomTabIntent( + InstrumentationRegistry.getTargetContext(), mTestPage); + CustomTabsTestUtils.setHideCctTopBarOnModuleManagedUrls(intent, false); + mActivityRule.startCustomTabActivityWithIntent(intent); + + runOnUiThreadBlocking(() -> { + DynamicModuleToolbarController toolbarController = + getActivity().getComponent().resolveDynamicModuleToolbarController(); + Assert.assertFalse(toolbarController.hasAcquiredToken()); + }); + } + + @Test + @SmallTest + @Features.DisableFeatures(ChromeFeatureList.CCT_MODULE) + public void testToolbarController_moduleDisabled_acquiredThenReleasedToken() throws Exception { + Intent intent = CustomTabsTestUtils.createMinimalCustomTabIntent( + InstrumentationRegistry.getTargetContext(), mTestPage); + CustomTabsTestUtils.setHideCctTopBarOnModuleManagedUrls(intent, true); + mActivityRule.startCustomTabActivityWithIntent(intent); + + runOnUiThreadBlocking(() -> { + DynamicModuleToolbarController toolbarController = + getActivity().getComponent().resolveDynamicModuleToolbarController(); + Assert.assertTrue(toolbarController.hasAcquiredToken()); + Assert.assertTrue(toolbarController.hasReleasedToken()); + }); + } + + @Test + @SmallTest + @Features.EnableFeatures(ChromeFeatureList.CCT_MODULE) + public void testToolbarController_hideCctTopBar_acquiredThenReleasedToken() throws Exception { + Intent intent = new IntentBuilder(mModuleManagedPage).build(); + CustomTabsTestUtils.setHideCctTopBarOnModuleManagedUrls(intent, true); + mActivityRule.startCustomTabActivityWithIntent(intent); + + runOnUiThreadBlocking(() -> { + DynamicModuleToolbarController toolbarController = + getActivity().getComponent().resolveDynamicModuleToolbarController(); + Assert.assertTrue(toolbarController.hasAcquiredToken()); + Assert.assertTrue(toolbarController.hasReleasedToken()); + }); + } + private void assertNoTopBar() { runOnUiThreadBlocking(() -> { ViewGroup topBar = getActivity().findViewById(R.id.topbar);
diff --git a/chrome/app/android/chrome_jni_onload.cc b/chrome/app/android/chrome_jni_onload.cc index b85eaa5cf..4ba5f22 100644 --- a/chrome/app/android/chrome_jni_onload.cc +++ b/chrome/app/android/chrome_jni_onload.cc
@@ -4,44 +4,11 @@ #include "chrome/app/android/chrome_jni_onload.h" -#include "base/android/jni_android.h" -#include "base/android/jni_registrar.h" -#include "base/android/jni_utils.h" -#include "base/stl_util.h" #include "chrome/app/android/chrome_android_initializer.h" #include "content/public/app/content_jni_onload.h" -#include "device/vr/buildflags/buildflags.h" - -#if BUILDFLAG(ENABLE_VR) -#include "third_party/gvr-android-sdk/display_synchronizer_jni.h" -#include "third_party/gvr-android-sdk/gvr_api_jni.h" -#include "third_party/gvr-android-sdk/native_callbacks_jni.h" -#endif namespace android { -// These VR native functions are not handled by the automatic registration, so -// they are manually registered here. -#if BUILDFLAG(ENABLE_VR) -static const base::android::RegistrationMethod kChromeRegisteredMethods[] = { - {"DisplaySynchronizer", - DisplaySynchronizer::RegisterDisplaySynchronizerNatives}, - {"GvrApi", GvrApi::RegisterGvrApiNatives}, - {"NativeCallbacks", NativeCallbacks::RegisterNativeCallbacksNatives}, -}; -#endif - -bool OnJNIOnLoadRegisterJNI(JNIEnv* env) { -#if BUILDFLAG(ENABLE_VR) - // Register manually when on the browser process. - if (!base::android::IsSelectiveJniRegistrationEnabled(env)) { - return RegisterNativeMethods(env, kChromeRegisteredMethods, - base::size(kChromeRegisteredMethods)); - } -#endif - return true; -} - bool OnJNIOnLoadInit() { if (!content::android::OnJNIOnLoadInit()) return false;
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 236662e..235ad2c 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -6736,7 +6736,7 @@ Google may use your history to personalize Search, ads, and other Google services </message> <message name="IDS_SYNC_CONFIRMATION_UNITY_SETTINGS_INFO" desc="Information about customizing Sync settings in the sync confirmation dialog when Unity is enabled"> - You can always choose what to sync in settings + You can always choose what to sync in settings. </message> <!-- "Chrome sync" is the Google Cloud Based service used for sync. Thus this string resource is set to "Chrome sync" even for Chromium builds. -->
diff --git a/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_UNITY_SETTINGS_INFO.png.sha1 b/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_UNITY_SETTINGS_INFO.png.sha1 index 6a66ac5e..acfe8d8 100644 --- a/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_UNITY_SETTINGS_INFO.png.sha1 +++ b/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_UNITY_SETTINGS_INFO.png.sha1
@@ -1 +1 @@ -ea64609f6b5e30252cf467ee2dbf3b0b6c580d2a \ No newline at end of file +37d6ce2b5d4fc58d52c78b5f313694c10884206b \ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 991e192..78b70a0 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -3444,6 +3444,8 @@ "notifications/win/notification_image_retainer.h", "notifications/win/notification_template_builder.cc", "notifications/win/notification_template_builder.h", + "performance_monitor/wmi_refresher.cc", + "performance_monitor/wmi_refresher.h", "taskbar/taskbar_decorator_win.cc", "taskbar/taskbar_decorator_win.h", ]
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 951f0ee1..cf820e79 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -2562,11 +2562,6 @@ flag_descriptions::kUseSurfaceLayerForVideoName, flag_descriptions::kUseSurfaceLayerForVideoDescription, kOsAll, FEATURE_VALUE_TYPE(media::kUseSurfaceLayerForVideo)}, -#if defined(OS_CHROMEOS) - {"quick-unlock-pin", flag_descriptions::kQuickUnlockPinName, - flag_descriptions::kQuickUnlockPinDescription, kOsCrOS, - FEATURE_VALUE_TYPE(features::kQuickUnlockPin)}, -#endif // OS_CHROMEOS #if defined(OS_ANDROID) {"no-credit-card-abort", flag_descriptions::kNoCreditCardAbort, flag_descriptions::kNoCreditCardAbortDescription, kOsAndroid, @@ -2907,10 +2902,6 @@ {"use-monitor-color-space", flag_descriptions::kUseMonitorColorSpaceName, flag_descriptions::kUseMonitorColorSpaceDescription, kOsCrOS, FEATURE_VALUE_TYPE(display::features::kUseMonitorColorSpace)}, - - {"quick-unlock-pin-signin", flag_descriptions::kQuickUnlockPinSignin, - flag_descriptions::kQuickUnlockPinSigninDescription, kOsCrOS, - FEATURE_VALUE_TYPE(features::kQuickUnlockPinSignin)}, #endif // OS_CHROMEOS #if defined(OS_ANDROID)
diff --git a/chrome/browser/android/bookmarks/partner_bookmarks_reader.cc b/chrome/browser/android/bookmarks/partner_bookmarks_reader.cc index 2f82bde..a124605 100644 --- a/chrome/browser/android/bookmarks/partner_bookmarks_reader.cc +++ b/chrome/browser/android/bookmarks/partner_bookmarks_reader.cc
@@ -94,8 +94,8 @@ base::WaitableEvent::InitialState::NOT_SIGNALED); base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&SetFaviconCallback, profile, node->url(), fake_icon_url, - image_data, icon_type, &event)); + base::BindOnce(&SetFaviconCallback, profile, node->url(), fake_icon_url, + image_data, icon_type, &event)); // TODO(aruslan): http://b/6397072 If possible - avoid using favicon service event.Wait(); }
diff --git a/chrome/browser/android/chrome_entry_point.cc b/chrome/browser/android/chrome_entry_point.cc index 7fdfd149..d001d40 100644 --- a/chrome/browser/android/chrome_entry_point.cc +++ b/chrome/browser/android/chrome_entry_point.cc
@@ -32,9 +32,6 @@ if (!RegisterMainDexNatives(env)) { return -1; } - if (!android::OnJNIOnLoadRegisterJNI(env)) { - return -1; - } base::android::SetNativeInitializationHook(NativeInit); return JNI_VERSION_1_4; }
diff --git a/chrome/browser/android/chrome_entry_point_for_test.cc b/chrome/browser/android/chrome_entry_point_for_test.cc index d8ea44eb..a1e39a2 100644 --- a/chrome/browser/android/chrome_entry_point_for_test.cc +++ b/chrome/browser/android/chrome_entry_point_for_test.cc
@@ -63,10 +63,6 @@ if (!RegisterMainDexNatives(env)) { return -1; } - - if (!android::OnJNIOnLoadRegisterJNI(env)) { - return -1; - } base::android::SetNativeInitializationHook(NativeInit); return JNI_VERSION_1_4; }
diff --git a/chrome/browser/android/cookies/cookies_fetcher_util.cc b/chrome/browser/android/cookies/cookies_fetcher_util.cc index c61cdc6ed..e018240 100644 --- a/chrome/browser/android/cookies/cookies_fetcher_util.cc +++ b/chrome/browser/android/cookies/cookies_fetcher_util.cc
@@ -111,6 +111,6 @@ // Assume HTTPS - since the cookies are being restored from another store, // they have already gone through the strict secure check. GetCookieServiceClient()->SetCanonicalCookie( - *cookie, true /* secure_source */, true /* modify_http_only */, + *cookie, "https", true /* modify_http_only */, network::mojom::CookieManager::SetCanonicalCookieCallback()); }
diff --git a/chrome/browser/android/download/download_controller.cc b/chrome/browser/android/download/download_controller.cc index 5795d220..20cba72 100644 --- a/chrome/browser/android/download/download_controller.cc +++ b/chrome/browser/android/download/download_controller.cc
@@ -282,9 +282,10 @@ void DownloadController::CreateAndroidDownload( const content::ResourceRequestInfo::WebContentsGetter& wc_getter, const DownloadInfo& info) { - base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI}, - base::Bind(&DownloadController::StartAndroidDownload, - base::Unretained(this), wc_getter, info)); + base::PostTaskWithTraits( + FROM_HERE, {BrowserThread::UI}, + base::BindOnce(&DownloadController::StartAndroidDownload, + base::Unretained(this), wc_getter, info)); } void DownloadController::AboutToResumeDownload(DownloadItem* download_item) {
diff --git a/chrome/browser/android/history_report/data_provider.cc b/chrome/browser/android/history_report/data_provider.cc index d7f253d..eafd1c4 100644 --- a/chrome/browser/android/history_report/data_provider.cc +++ b/chrome/browser/android/history_report/data_provider.cc
@@ -128,10 +128,10 @@ if (!entries->empty()) { Context context(history_service_, &history_task_tracker_); - base::PostTaskWithTraits( - FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&QueryUrlsHistoryInUiThread, base::Unretained(&context), - base::Unretained(entries.get()))); + base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&QueryUrlsHistoryInUiThread, + base::Unretained(&context), + base::Unretained(entries.get()))); std::vector<UrlAndTitle> bookmarks; bookmark_model_->model_loader()->BlockTillLoaded(); bookmark_model_->GetBookmarks(&bookmarks); @@ -167,10 +167,10 @@ buffer_service->Clear(); base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&StartVisitMigrationToUsageBufferUiThread, - base::Unretained(history_service_), buffer_service, - base::Unretained(&finished), - base::Unretained(&history_task_tracker_))); + base::BindOnce(&StartVisitMigrationToUsageBufferUiThread, + base::Unretained(history_service_), buffer_service, + base::Unretained(&finished), + base::Unretained(&history_task_tracker_))); finished.Wait(); } @@ -186,10 +186,10 @@ new GetAllUrlsFromHistoryTask(&finished, &urls)); base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(base::IgnoreResult(&history::HistoryService::ScheduleDBTask), - base::Unretained(history_service_), FROM_HERE, - base::Passed(&task), - base::Unretained(&history_task_tracker_))); + base::BindOnce( + base::IgnoreResult(&history::HistoryService::ScheduleDBTask), + base::Unretained(history_service_), FROM_HERE, std::move(task), + base::Unretained(&history_task_tracker_))); finished.Wait(); }
diff --git a/chrome/browser/android/provider/run_on_ui_thread_blocking.h b/chrome/browser/android/provider/run_on_ui_thread_blocking.h index b209ac16..b6c5173 100644 --- a/chrome/browser/android/provider/run_on_ui_thread_blocking.h +++ b/chrome/browser/android/provider/run_on_ui_thread_blocking.h
@@ -26,8 +26,8 @@ base::WaitableEvent::InitialState::NOT_SIGNALED); base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&RunOnUIThreadBlocking::RunOnUIThread<Signature>, runnable, - &finished)); + base::BindOnce(&RunOnUIThreadBlocking::RunOnUIThread<Signature>, + runnable, &finished)); finished.Wait(); }
diff --git a/chrome/browser/android/thumbnail/thumbnail_cache.cc b/chrome/browser/android/thumbnail/thumbnail_cache.cc index 16b279c..2eed792 100644 --- a/chrome/browser/android/thumbnail/thumbnail_cache.cc +++ b/chrome/browser/android/thumbnail/thumbnail_cache.cc
@@ -395,11 +395,12 @@ gfx::Size encoded_size = GetEncodedSize( raw_data_size, ui_resource_provider_->SupportsETC1NonPowerOfTwo()); - base::PostTaskWithTraits(FROM_HERE, - {base::TaskPriority::BEST_EFFORT, - base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, - base::Bind(&ThumbnailCache::CompressionTask, bitmap, - encoded_size, post_compression_task)); + base::PostTaskWithTraits( + FROM_HERE, + {base::TaskPriority::BEST_EFFORT, + base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, + base::BindOnce(&ThumbnailCache::CompressionTask, bitmap, encoded_size, + post_compression_task)); } void ThumbnailCache::ReadNextThumbnail() { @@ -615,8 +616,8 @@ base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(post_compression_task, std::move(compressed_data), - content_size)); + base::BindOnce(post_compression_task, std::move(compressed_data), + content_size)); } void ThumbnailCache::PostCompressionTask( @@ -779,13 +780,13 @@ if (decompress) { base::PostTaskWithTraits( FROM_HERE, {base::TaskPriority::BEST_EFFORT}, - base::Bind(post_read_task, std::move(compressed_data), scale, - content_size)); + base::BindOnce(post_read_task, std::move(compressed_data), scale, + content_size)); } else { base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(post_read_task, std::move(compressed_data), scale, - content_size)); + base::BindOnce(post_read_task, std::move(compressed_data), scale, + content_size)); } } @@ -890,7 +891,7 @@ base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(post_decompression_callback, success, raw_data_small)); + base::BindOnce(post_decompression_callback, success, raw_data_small)); } ThumbnailCache::ThumbnailMetaData::ThumbnailMetaData() {
diff --git a/chrome/browser/android/vr/register_jni.cc b/chrome/browser/android/vr/register_jni.cc index c1e87c5..11ada65 100644 --- a/chrome/browser/android/vr/register_jni.cc +++ b/chrome/browser/android/vr/register_jni.cc
@@ -4,15 +4,35 @@ #include "chrome/browser/android/vr/register_jni.h" -#include "base/android/jni_utils.h" #include "chrome/browser/android/vr/jni_registration.h" +#include "base/android/jni_android.h" +#include "base/android/jni_registrar.h" +#include "base/android/jni_utils.h" +#include "base/stl_util.h" + +#include "third_party/gvr-android-sdk/display_synchronizer_jni.h" +#include "third_party/gvr-android-sdk/gvr_api_jni.h" +#include "third_party/gvr-android-sdk/native_callbacks_jni.h" + namespace vr { +// These VR native functions are not handled by the automatic registration, so +// they are manually registered here. +static const base::android::RegistrationMethod kGvrRegisteredMethods[] = { + {"DisplaySynchronizer", + DisplaySynchronizer::RegisterDisplaySynchronizerNatives}, + {"GvrApi", GvrApi::RegisterGvrApiNatives}, + {"NativeCallbacks", NativeCallbacks::RegisterNativeCallbacksNatives}, +}; + bool RegisterJni(JNIEnv* env) { - if (!base::android::IsSelectiveJniRegistrationEnabled(env) && - !vr::RegisterNonMainDexNatives(env)) { - return false; + if (!base::android::IsSelectiveJniRegistrationEnabled(env)) { + if (!vr::RegisterNonMainDexNatives(env) || + !RegisterNativeMethods(env, kGvrRegisteredMethods, + base::size(kGvrRegisteredMethods))) { + return false; + } } if (!vr::RegisterMainDexNatives(env)) { return false;
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm index 99f6ae10..47981c23 100644 --- a/chrome/browser/app_controller_mac.mm +++ b/chrome/browser/app_controller_mac.mm
@@ -767,7 +767,7 @@ base::PostTaskWithTraits(FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, - base::Bind(&RecordLastRunAppBundlePath)); + base::BindOnce(&RecordLastRunAppBundlePath)); // Makes "Services" menu items available. [self registerServicesMenuTypesTo:[notify object]];
diff --git a/chrome/browser/apps/platform_apps/api/music_manager_private/device_id_mac.cc b/chrome/browser/apps/platform_apps/api/music_manager_private/device_id_mac.cc index 107ac47..48015b2 100644 --- a/chrome/browser/apps/platform_apps/api/music_manager_private/device_id_mac.cc +++ b/chrome/browser/apps/platform_apps/api/music_manager_private/device_id_mac.cc
@@ -222,7 +222,7 @@ raw_device_id = mac_address + disk_id; } base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, - base::Bind(callback, raw_device_id)); + base::BindOnce(callback, raw_device_id)); } } // namespace
diff --git a/chrome/browser/apps/platform_apps/api/music_manager_private/device_id_win.cc b/chrome/browser/apps/platform_apps/api/music_manager_private/device_id_win.cc index 38b4c5c..fdcc1b5 100644 --- a/chrome/browser/apps/platform_apps/api/music_manager_private/device_id_win.cc +++ b/chrome/browser/apps/platform_apps/api/music_manager_private/device_id_win.cc
@@ -175,7 +175,7 @@ } base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, - base::Bind(callback, mac_address)); + base::BindOnce(callback, mac_address)); } std::string GetRlzMachineId() {
diff --git a/chrome/browser/autofill/autofill_browsertest.cc b/chrome/browser/autofill/autofill_browsertest.cc index 6c85224..d44d09e 100644 --- a/chrome/browser/autofill/autofill_browsertest.cc +++ b/chrome/browser/autofill/autofill_browsertest.cc
@@ -427,7 +427,8 @@ // This does not apply to US numbers. For US numbers, '+' is removed. // Flaky on Windows. http://crbug.com/500491 -#if defined(OS_WIN) +// Also flaky on Linux. http://crbug.com/935629 +#if defined(OS_WIN) || defined(OS_LINUX) #define MAYBE_UsePlusSignForInternationalNumber \ DISABLED_UsePlusSignForInternationalNumber #else
diff --git a/chrome/browser/background/background_mode_manager_mac.mm b/chrome/browser/background/background_mode_manager_mac.mm index 6765e10..93f77e5 100644 --- a/chrome/browser/background/background_mode_manager_mac.mm +++ b/chrome/browser/background/background_mode_manager_mac.mm
@@ -44,8 +44,9 @@ base::ScopedBlockingCall scoped_blocking_call(base::BlockingType::MAY_BLOCK); if (!base::mac::CheckLoginItemStatus(NULL)) { // There's no LoginItem, so set the kUserRemovedLoginItem pref. - base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI}, - base::Bind(SetUserRemovedLoginItemPrefOnUIThread)); + base::PostTaskWithTraits( + FROM_HERE, {BrowserThread::UI}, + base::BindOnce(SetUserRemovedLoginItemPrefOnUIThread)); } } @@ -60,8 +61,9 @@ if (is_hidden) { // We already have a hidden login item, so set the kChromeCreatedLoginItem // flag. - base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI}, - base::Bind(SetCreatedLoginItemPrefOnUIThread)); + base::PostTaskWithTraits( + FROM_HERE, {BrowserThread::UI}, + base::BindOnce(SetCreatedLoginItemPrefOnUIThread)); } // LoginItem already exists - just exit. return; @@ -77,7 +79,7 @@ // "Open At Login" via the dock if this happens. base::mac::AddToLoginItems(true); // Hide on startup. base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI}, - base::Bind(SetCreatedLoginItemPrefOnUIThread)); + base::BindOnce(SetCreatedLoginItemPrefOnUIThread)); } }
diff --git a/chrome/browser/browsing_data/browsing_data_cookie_helper_unittest.cc b/chrome/browser/browsing_data/browsing_data_cookie_helper_unittest.cc index 175217b..5a311f62 100644 --- a/chrome/browser/browsing_data/browsing_data_cookie_helper_unittest.cc +++ b/chrome/browser/browsing_data/browsing_data_cookie_helper_unittest.cc
@@ -112,38 +112,34 @@ void CreateCookiesForTest() { auto cookie1 = - net::CanonicalCookie::Create(GURL("http://www.google.com"), "A=1", + net::CanonicalCookie::Create(GURL("https://www.google.com"), "A=1", base::Time::Now(), net::CookieOptions()); - auto cookie2 = - net::CanonicalCookie::Create(GURL("http://www.gmail.google.com"), "B=1", - base::Time::Now(), net::CookieOptions()); + auto cookie2 = net::CanonicalCookie::Create( + GURL("https://www.gmail.google.com"), "B=1", base::Time::Now(), + net::CookieOptions()); network::mojom::CookieManager* cookie_manager = storage_partition()->GetCookieManagerForBrowserProcess(); - cookie_manager->SetCanonicalCookie(*cookie1, true /* secure_source */, - false /* modify_http_only */, - base::DoNothing()); - cookie_manager->SetCanonicalCookie(*cookie2, true /* secure_source */, - false /* modify_http_only */, - base::DoNothing()); + cookie_manager->SetCanonicalCookie( + *cookie1, "https", false /* modify_http_only */, base::DoNothing()); + cookie_manager->SetCanonicalCookie( + *cookie2, "https", false /* modify_http_only */, base::DoNothing()); } void CreateCookiesForDomainCookieTest() { auto cookie1 = - net::CanonicalCookie::Create(GURL("http://www.google.com"), "A=1", + net::CanonicalCookie::Create(GURL("https://www.google.com"), "A=1", base::Time::Now(), net::CookieOptions()); auto cookie2 = net::CanonicalCookie::Create( - GURL("http://www.google.com"), "A=2; Domain=.www.google.com ", + GURL("https://www.google.com"), "A=2; Domain=.www.google.com ", base::Time::Now(), net::CookieOptions()); network::mojom::CookieManager* cookie_manager = storage_partition()->GetCookieManagerForBrowserProcess(); - cookie_manager->SetCanonicalCookie(*cookie1, true /* secure_source */, - false /* modify_http_only */, - base::DoNothing()); - cookie_manager->SetCanonicalCookie(*cookie2, true /* secure_source */, - false /* modify_http_only */, - base::DoNothing()); + cookie_manager->SetCanonicalCookie( + *cookie1, "https", false /* modify_http_only */, base::DoNothing()); + cookie_manager->SetCanonicalCookie( + *cookie2, "https", false /* modify_http_only */, base::DoNothing()); } void FetchCallback(const net::CookieList& cookies) {
diff --git a/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc b/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc index fd8ae34c..7e0b089 100644 --- a/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc +++ b/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc
@@ -282,7 +282,8 @@ network::mojom::CookieManager* cookie_manager = content::BrowserContext::GetDefaultStoragePartition(profile) ->GetCookieManagerForBrowserProcess(); - cookie_manager->SetCanonicalCookie(cookie, true, true, std::move(callback)); + cookie_manager->SetCanonicalCookie(cookie, "https", true, + std::move(callback)); loop.Run(); return success; }
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc index a331a97..60f6d8b 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
@@ -283,7 +283,7 @@ auto cookie = net::CanonicalCookie::Create( kOrigin1, "A=1", base::Time::Now(), net::CookieOptions()); cookie_manager_->SetCanonicalCookie( - *cookie, /*secure_source=*/false, /*modify_http_only=*/false, + *cookie, "http", /*modify_http_only=*/false, base::BindLambdaForTesting([&](bool result) { EXPECT_TRUE(result); run_loop.Quit();
diff --git a/chrome/browser/browsing_data/counters/site_data_counting_helper_unittest.cc b/chrome/browser/browsing_data/counters/site_data_counting_helper_unittest.cc index dc184dff..6b3e8b0 100644 --- a/chrome/browser/browsing_data/counters/site_data_counting_helper_unittest.cc +++ b/chrome/browser/browsing_data/counters/site_data_counting_helper_unittest.cc
@@ -57,7 +57,7 @@ time, url.SchemeIsCryptographic(), false, net::CookieSameSite::DEFAULT_MODE, net::COOKIE_PRIORITY_DEFAULT); cookie_manager->SetCanonicalCookie( - *cookie, url.SchemeIsCryptographic(), true /*modify_http_only*/, + *cookie, url.scheme(), true /*modify_http_only*/, base::BindLambdaForTesting([&](bool result) { if (--tasks == 0) run_loop.Quit();
diff --git a/chrome/browser/chrome_browser_field_trials_desktop.cc b/chrome/browser/chrome_browser_field_trials_desktop.cc index 690e6611..df7eea4 100644 --- a/chrome/browser/chrome_browser_field_trials_desktop.cc +++ b/chrome/browser/chrome_browser_field_trials_desktop.cc
@@ -191,8 +191,8 @@ if (should_flush) { base::PostTaskWithTraits( FROM_HERE, {base::MayBlock()}, - base::Bind(&base::PersistentMemoryAllocator::Flush, - base::Unretained(global_tracker->allocator()), true)); + base::BindOnce(&base::PersistentMemoryAllocator::Flush, + base::Unretained(global_tracker->allocator()), true)); } // Store a copy of the system profile in this allocator. There will be some
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc index c3b611c0..8ccf9a0 100644 --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc
@@ -1586,8 +1586,8 @@ if (NetworkProfileBubble::ShouldCheckNetworkProfile(profile_)) { base::PostTaskWithTraits( FROM_HERE, {base::MayBlock()}, - base::Bind(&NetworkProfileBubble::CheckNetworkProfile, - profile_->GetPath())); + base::BindOnce(&NetworkProfileBubble::CheckNetworkProfile, + profile_->GetPath())); } #endif // defined(OS_WIN)
diff --git a/chrome/browser/chrome_browser_main_android.cc b/chrome/browser/chrome_browser_main_android.cc index e81a8c78..be4d1da 100644 --- a/chrome/browser/chrome_browser_main_android.cc +++ b/chrome/browser/chrome_browser_main_android.cc
@@ -81,7 +81,7 @@ base::PostDelayedTaskWithTraits( FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, - base::Bind(&ReportSeccompSupport), base::TimeDelta::FromMinutes(1)); + base::BindOnce(&ReportSeccompSupport), base::TimeDelta::FromMinutes(1)); RegisterChromeJavaMojoInterfaces(); }
diff --git a/chrome/browser/chrome_browser_main_mac.mm b/chrome/browser/chrome_browser_main_mac.mm index 34a4dcc..d36e3bd 100644 --- a/chrome/browser/chrome_browser_main_mac.mm +++ b/chrome/browser/chrome_browser_main_mac.mm
@@ -68,7 +68,7 @@ FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::BLOCK_SHUTDOWN}, - base::Bind(&EnsureMetadataNeverIndexFileOnFileThread, user_data_dir)); + base::BindOnce(&EnsureMetadataNeverIndexFileOnFileThread, user_data_dir)); } // Used for UMA; never alter existing values.
diff --git a/chrome/browser/chrome_browser_main_win.cc b/chrome/browser/chrome_browser_main_win.cc index 5abf70961..c05c037 100644 --- a/chrome/browser/chrome_browser_main_win.cc +++ b/chrome/browser/chrome_browser_main_win.cc
@@ -356,8 +356,8 @@ FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, - base::Bind(&HandleModuleLoadEventWithoutTimeDateStamp, - event.module_path, event.module_size)); + base::BindOnce(&HandleModuleLoadEventWithoutTimeDateStamp, + event.module_path, event.module_size)); } return; } @@ -585,7 +585,7 @@ // Record UMA data about whether the fault-tolerant heap is enabled. // Use a delayed task to minimize the impact on startup time. base::PostDelayedTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&DetectFaultTolerantHeap), + base::BindOnce(&DetectFaultTolerantHeap), base::TimeDelta::FromMinutes(1)); // Start the swap thrashing monitor if it's enabled.
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index dc1a26d..6d352aea 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -2107,8 +2107,9 @@ "login/screens/mock_update_screen.h", "login/screens/mock_welcome_screen.cc", "login/screens/mock_welcome_screen.h", - "login/test/test_condition_waiter.cc", "login/test/test_condition_waiter.h", + "login/test/test_predicate_waiter.cc", + "login/test/test_predicate_waiter.h", "scoped_set_running_on_chromeos_for_testing.cc", "scoped_set_running_on_chromeos_for_testing.h", "settings/scoped_testing_cros_settings.cc",
diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc index 3200085..6dfdfd9 100644 --- a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc +++ b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc
@@ -562,8 +562,8 @@ // it. base::PostDelayedTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&LoggedInSpokenFeedbackTest::SendKeyPress, - base::Unretained(this), ui::VKEY_LWIN), + base::BindOnce(&LoggedInSpokenFeedbackTest::SendKeyPress, + base::Unretained(this), ui::VKEY_LWIN), base::TimeDelta::FromMilliseconds(200)); EXPECT_EQ("Sticky mode enabled", speech_monitor_.GetNextUtterance()); @@ -578,8 +578,8 @@ // it. base::PostDelayedTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&LoggedInSpokenFeedbackTest::SendKeyPress, - base::Unretained(this), ui::VKEY_LWIN), + base::BindOnce(&LoggedInSpokenFeedbackTest::SendKeyPress, + base::Unretained(this), ui::VKEY_LWIN), base::TimeDelta::FromMilliseconds(200)); while ("Sticky mode disabled" != speech_monitor_.GetNextUtterance()) {
diff --git a/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.cc b/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.cc index 1973dd1..75d7cec 100644 --- a/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.cc +++ b/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.cc
@@ -88,7 +88,7 @@ base::Time::Now() /* last_access_time */, true /* secure */, false /* http_only */, net::CookieSameSite::STRICT_MODE, net::COOKIE_PRIORITY_DEFAULT), - true /* secure_source */, false /* modify_http_only */, + "https", false /* modify_http_only */, base::BindOnce(&AndroidSmsAppSetupControllerImpl:: OnSetRememberDeviceByDefaultCookieResult, weak_ptr_factory_.GetWeakPtr(), app_url, install_url, @@ -275,7 +275,7 @@ base::Time::Now() /* last_access_time */, true /* secure */, false /* http_only */, net::CookieSameSite::STRICT_MODE, net::COOKIE_PRIORITY_DEFAULT), - true /* secure_source */, false /* modify_http_only */, + "https", false /* modify_http_only */, base::BindOnce( &AndroidSmsAppSetupControllerImpl::OnSetMigrationCookieResult, weak_ptr_factory_.GetWeakPtr(), app_url, std::move(callback)));
diff --git a/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl_unittest.cc b/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl_unittest.cc index cef8018..e92ecc0d 100644 --- a/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl_unittest.cc +++ b/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl_unittest.cc
@@ -61,7 +61,7 @@ void InvokePendingSetCanonicalCookieCallback( const std::string& expected_cookie_name, const std::string& expected_cookie_value, - bool expected_secure_source, + const std::string& expected_source_scheme, bool expected_modify_http_only, bool success) { ASSERT_FALSE(set_canonical_cookie_calls_.empty()); @@ -70,7 +70,7 @@ EXPECT_EQ(expected_cookie_name, std::get<0>(params).Name()); EXPECT_EQ(expected_cookie_value, std::get<0>(params).Value()); - EXPECT_EQ(expected_secure_source, std::get<1>(params)); + EXPECT_EQ(expected_source_scheme, std::get<1>(params)); EXPECT_EQ(expected_modify_http_only, std::get<2>(params)); std::move(std::get<3>(params)).Run(success); @@ -92,11 +92,11 @@ // network::mojom::CookieManager void SetCanonicalCookie(const net::CanonicalCookie& cookie, - bool secure_source, + const std::string& source_scheme, bool modify_http_only, SetCanonicalCookieCallback callback) override { set_canonical_cookie_calls_.emplace_back( - cookie, secure_source, modify_http_only, std::move(callback)); + cookie, source_scheme, modify_http_only, std::move(callback)); } void DeleteCookies(network::mojom::CookieDeletionFilterPtr filter, @@ -105,8 +105,10 @@ } private: - std::vector< - std::tuple<net::CanonicalCookie, bool, bool, SetCanonicalCookieCallback>> + std::vector<std::tuple<net::CanonicalCookie, + std::string, + bool, + SetCanonicalCookieCallback>> set_canonical_cookie_calls_; std::vector< std::pair<network::mojom::CookieDeletionFilterPtr, DeleteCookiesCallback>> @@ -206,7 +208,8 @@ fake_cookie_manager_->InvokePendingSetCanonicalCookieCallback( "default_to_persist" /* expected_cookie_name */, - "true" /* expected_cookie_value */, true /* expected_secure_source */, + "true" /* expected_cookie_value */, + "https" /* expected_source_scheme */, false /* expected_modify_http_only */, true /* success */); fake_cookie_manager_->InvokePendingDeleteCookiesCallback( @@ -278,7 +281,7 @@ fake_cookie_manager_->InvokePendingSetCanonicalCookieCallback( "cros_migrated_to" /* expected_cookie_name */, migrated_to_app_url.GetContent() /* expected_cookie_value */, - true /* expected_secure_source */, + "https" /* expected_source_scheme */, false /* expected_modify_http_only */, true /* success */); fake_cookie_manager_->InvokePendingDeleteCookiesCallback(
diff --git a/chrome/browser/chromeos/base/file_flusher.cc b/chrome/browser/chromeos/base/file_flusher.cc index 70db49a..7983e88 100644 --- a/chrome/browser/chromeos/base/file_flusher.cc +++ b/chrome/browser/chromeos/base/file_flusher.cc
@@ -151,7 +151,7 @@ finish_scheduled_ = true; base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&Job::FinishOnUIThread, base::Unretained(this))); + base::BindOnce(&Job::FinishOnUIThread, base::Unretained(this))); } void FileFlusher::Job::FinishOnUIThread() {
diff --git a/chrome/browser/chromeos/boot_times_recorder.cc b/chrome/browser/chromeos/boot_times_recorder.cc index 993c33b..57df35e 100644 --- a/chrome/browser/chromeos/boot_times_recorder.cc +++ b/chrome/browser/chromeos/boot_times_recorder.cc
@@ -220,8 +220,8 @@ void BootTimesRecorder::Stats::RecordStats(const std::string& name) const { base::PostTaskWithTraits( FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, - base::Bind(&BootTimesRecorder::Stats::RecordStatsAsync, - base::Owned(new Stats(*this)), name)); + base::BindOnce(&BootTimesRecorder::Stats::RecordStatsAsync, + base::Owned(new Stats(*this)), name)); } void BootTimesRecorder::Stats::RecordStatsWithCallback( @@ -472,8 +472,8 @@ // Note that it's safe to use an unretained pointer to the vector because // BootTimesRecorder's lifetime exceeds that of the UI thread message loop. base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI}, - base::Bind(&BootTimesRecorder::AddMarker, - base::Unretained(vector), marker)); + base::BindOnce(&BootTimesRecorder::AddMarker, + base::Unretained(vector), marker)); } }
diff --git a/chrome/browser/chromeos/customization/customization_document.cc b/chrome/browser/chromeos/customization/customization_document.cc index 12c0a2d..f9c6213 100644 --- a/chrome/browser/chromeos/customization/customization_document.cc +++ b/chrome/browser/chromeos/customization/customization_document.cc
@@ -642,8 +642,8 @@ num_retries_++; base::PostDelayedTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&ServicesCustomizationDocument::StartFileFetch, - weak_ptr_factory_.GetWeakPtr()), + base::BindOnce(&ServicesCustomizationDocument::StartFileFetch, + weak_ptr_factory_.GetWeakPtr()), base::TimeDelta::FromSeconds(kRetriesDelayInSec)); return; }
diff --git a/chrome/browser/chromeos/external_metrics.cc b/chrome/browser/chromeos/external_metrics.cc index 0631f2f..ca4d8ed 100644 --- a/chrome/browser/chromeos/external_metrics.cc +++ b/chrome/browser/chromeos/external_metrics.cc
@@ -97,7 +97,7 @@ void ExternalMetrics::RecordAction(const std::string& action) { base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&ExternalMetrics::RecordActionUI, this, action)); + base::BindOnce(&ExternalMetrics::RecordActionUI, this, action)); } void ExternalMetrics::RecordCrashUI(const std::string& crash_kind) { @@ -107,7 +107,7 @@ void ExternalMetrics::RecordCrash(const std::string& crash_kind) { base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&ExternalMetrics::RecordCrashUI, this, crash_kind)); + base::BindOnce(&ExternalMetrics::RecordCrashUI, this, crash_kind)); } void ExternalMetrics::RecordHistogram(const metrics::MetricSample& sample) {
diff --git a/chrome/browser/chromeos/logging.cc b/chrome/browser/chromeos/logging.cc index 8602578..736ad3e 100644 --- a/chrome/browser/chromeos/logging.cc +++ b/chrome/browser/chromeos/logging.cc
@@ -36,7 +36,7 @@ DLOG(ERROR) << "Unable to initialize logging to " << log_path.value(); base::PostTaskWithTraits( FROM_HERE, {base::MayBlock()}, - base::Bind(&RemoveSymlinkAndLog, log_path, target_path)); + base::BindOnce(&RemoveSymlinkAndLog, log_path, target_path)); } else { chrome_logging_redirected_ = true; }
diff --git a/chrome/browser/chromeos/login/demo_mode/demo_setup_browsertest.cc b/chrome/browser/chromeos/login/demo_mode/demo_setup_browsertest.cc index fac7f136..dd2dec1 100644 --- a/chrome/browser/chromeos/login/demo_mode/demo_setup_browsertest.cc +++ b/chrome/browser/chromeos/login/demo_mode/demo_setup_browsertest.cc
@@ -127,13 +127,7 @@ // Waits for js condition to be fulfilled. void WaitForJsCondition(const std::string& js_condition) { - return test::TestConditionWaiter(base::BindRepeating( - [](const std::string& js_condition) { - return test::OobeJS().GetBool( - js_condition); - }, - js_condition)) - .Wait(); + test::OobeJS().CreateWaiter(js_condition)->Wait(); } } // namespace
diff --git a/chrome/browser/chromeos/login/kiosk_browsertest.cc b/chrome/browser/chromeos/login/kiosk_browsertest.cc index 20b3223..a3b4d81f 100644 --- a/chrome/browser/chromeos/login/kiosk_browsertest.cc +++ b/chrome/browser/chromeos/login/kiosk_browsertest.cc
@@ -316,17 +316,6 @@ DISALLOW_COPY_AND_ASSIGN(ScopedCanConfigureNetwork); }; -// Waits for js condition to be fulfilled. -void WaitForJsCondition(const std::string& js_condition) { - return test::TestConditionWaiter(base::BindRepeating( - [](const std::string& js_condition) { - return test::OobeJS().GetBool( - js_condition); - }, - js_condition)) - .Wait(); -} - class KioskFakeDiskMountManager : public file_manager::FakeDiskMountManager { public: KioskFakeDiskMountManager() {} @@ -993,8 +982,10 @@ LaunchApp(kTestKioskApp, true); bool new_kiosk_ui = KioskAppMenuHandler::EnableNewKioskUI(); - WaitForJsCondition(new_kiosk_ui ? kCheckDiagnosticModeNewAPI - : kCheckDiagnosticModeOldAPI); + test::OobeJS() + .CreateWaiter(new_kiosk_ui ? kCheckDiagnosticModeNewAPI + : kCheckDiagnosticModeOldAPI) + ->Wait(); std::string diagnosticMode(new_kiosk_ui ? kCheckDiagnosticModeNewAPI : kCheckDiagnosticModeOldAPI);
diff --git a/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc b/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc index 57b58c9..1f26d61a 100644 --- a/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc +++ b/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc
@@ -15,7 +15,7 @@ #include "chrome/browser/chromeos/login/screens/update_screen.h" #include "chrome/browser/chromeos/login/test/js_checker.h" #include "chrome/browser/chromeos/login/test/oobe_base_test.h" -#include "chrome/browser/chromeos/login/test/test_condition_waiter.h" +#include "chrome/browser/chromeos/login/test/test_predicate_waiter.h" #include "chrome/browser/chromeos/login/ui/login_display_host.h" #include "chrome/browser/chromeos/login/wizard_controller.h" #include "chrome/browser/lifetime/application_lifetime.h" @@ -28,35 +28,6 @@ namespace chromeos { namespace { -enum class JsWaitOptions { - kNone, - kSatisfyIfOobeDestroyed, -}; - -// If |options| is kSatisfyIfOobeDestroyed, we are waiting for the end -// condition, so it is automatically fullfilled if LoginDisplayHost is already -// destroyed. -void WaitForJsCondition(const std::string& js_condition, - JsWaitOptions options) { - if (options == JsWaitOptions::kSatisfyIfOobeDestroyed) { - return test::TestConditionWaiter( - base::BindRepeating( - [](const std::string& js_condition) { - return !LoginDisplayHost::default_host() || - test::OobeJS().GetBool(js_condition); - }, - js_condition)) - .Wait(); - } - return test::TestConditionWaiter(base::BindRepeating( - [](const std::string& js_condition) { - return test::OobeJS().GetBool( - js_condition); - }, - js_condition)) - .Wait(); -} - class ScopedQuickUnlockPrivateGetAuthTokenFunctionObserver { public: explicit ScopedQuickUnlockPrivateGetAuthTokenFunctionObserver( @@ -145,7 +116,7 @@ LOG(INFO) << "OobeInteractiveUITest: Waiting for LoginDisplayHost to shut down."; - test::TestConditionWaiter(base::BindRepeating([]() { + test::TestPredicateWaiter(base::BindRepeating([]() { return !LoginDisplayHost::default_host(); })).Wait(); LOG(INFO) << "OobeInteractiveUITest: LoginDisplayHost is down."; @@ -157,8 +128,9 @@ content::NotificationService::AllSources()); observer.Wait(); - WaitForJsCondition("Oobe.getInstance().currentScreen.id == 'connect'", - JsWaitOptions::kNone); + test::OobeJS() + .CreateWaiter("Oobe.getInstance().currentScreen.id == 'connect'") + ->Wait(); } void RunWelcomeScreenChecks() { @@ -187,9 +159,10 @@ } void WaitForNetworkSelectionScreen() { - WaitForJsCondition( - "Oobe.getInstance().currentScreen.id == 'network-selection'", - JsWaitOptions::kNone); + test::OobeJS() + .CreateWaiter( + "Oobe.getInstance().currentScreen.id == 'network-selection'") + ->Wait(); LOG(INFO) << "OobeInteractiveUITest: Switched to 'network-selection' screen."; } @@ -207,15 +180,17 @@ } void WaitForEulaScreen() { - WaitForJsCondition("Oobe.getInstance().currentScreen.id == 'eula'", - JsWaitOptions::kNone); + test::OobeJS() + .CreateWaiter("Oobe.getInstance().currentScreen.id == 'eula'") + ->Wait(); LOG(INFO) << "OobeInteractiveUITest: Switched to 'eula' screen."; } void RunEulaScreenChecks() { // Wait for actual EULA to appear. - WaitForJsCondition("!$('oobe-eula-md').$.eulaDialog.hidden", - JsWaitOptions::kNone); + test::OobeJS() + .CreateWaiter("!$('oobe-eula-md').$.eulaDialog.hidden") + ->Wait(); test::OobeJS().ExpectTrue("!$('oobe-eula-md').$.acceptButton.disabled"); } @@ -224,9 +199,10 @@ } void WaitForUpdateScreen() { - WaitForJsCondition("Oobe.getInstance().currentScreen.id == 'update'", - JsWaitOptions::kNone); - WaitForJsCondition("!$('update').hidden", JsWaitOptions::kNone); + test::OobeJS() + .CreateWaiter("Oobe.getInstance().currentScreen.id == 'update'") + ->Wait(); + test::OobeJS().CreateWaiter("!$('update').hidden")->Wait(); LOG(INFO) << "OobeInteractiveUITest: Switched to 'update' screen."; } @@ -241,8 +217,9 @@ } void WaitForGaiaSignInScreen() { - WaitForJsCondition("Oobe.getInstance().currentScreen.id == 'gaia-signin'", - JsWaitOptions::kNone); + test::OobeJS() + .CreateWaiter("Oobe.getInstance().currentScreen.id == 'gaia-signin'") + ->Wait(); LOG(INFO) << "OobeInteractiveUITest: Switched to 'gaia-signin' screen."; } @@ -258,8 +235,9 @@ void WaitForSyncConsentScreen() { LOG(INFO) << "OobeInteractiveUITest: Waiting for 'sync-consent' screen."; - WaitForJsCondition("Oobe.getInstance().currentScreen.id == 'sync-consent'", - JsWaitOptions::kNone); + test::OobeJS() + .CreateWaiter("Oobe.getInstance().currentScreen.id == 'sync-consent'") + ->Wait(); } void ExitScreenSyncConsent() { @@ -271,27 +249,29 @@ screen->OnStateChanged(nullptr); LOG(INFO) << "OobeInteractiveUITest: Waiting for 'sync-consent' screen " "to close."; - WaitForJsCondition("Oobe.getInstance().currentScreen.id != 'sync-consent'", - JsWaitOptions::kSatisfyIfOobeDestroyed); + test::CreatePredicateOrOobeDestroyedWaiter( + "Oobe.getInstance().currentScreen.id != 'sync-consent'") + ->Wait(); } void WaitForFingerprintScreen() { LOG(INFO) << "OobeInteractiveUITest: Waiting for 'fingerprint-setup' screen."; - WaitForJsCondition( - "Oobe.getInstance().currentScreen.id == 'fingerprint-setup'", - JsWaitOptions::kNone); + test::OobeJS() + .CreateWaiter( + "Oobe.getInstance().currentScreen.id == 'fingerprint-setup'") + ->Wait(); LOG(INFO) << "OobeInteractiveUITest: Waiting for fingerprint setup screen " "to show."; - WaitForJsCondition("!$('fingerprint-setup').hidden", JsWaitOptions::kNone); + test::OobeJS().CreateWaiter("!$('fingerprint-setup').hidden")->Wait(); LOG(INFO) << "OobeInteractiveUITest: Waiting for fingerprint setup screen " "to initializes."; - WaitForJsCondition("!$('fingerprint-setup-impl').hidden", - JsWaitOptions::kNone); + test::OobeJS().CreateWaiter("!$('fingerprint-setup-impl').hidden")->Wait(); LOG(INFO) << "OobeInteractiveUITest: Waiting for fingerprint setup screen " "to show setupFingerprint."; - WaitForJsCondition("!$('fingerprint-setup-impl').$.setupFingerprint.hidden", - JsWaitOptions::kNone); + test::OobeJS() + .CreateWaiter("!$('fingerprint-setup-impl').$.setupFingerprint.hidden") + ->Wait(); } void RunFingerprintScreenChecks() { @@ -305,8 +285,9 @@ "$('fingerprint-setup-impl').$.setupFingerprint.hidden"); LOG(INFO) << "OobeInteractiveUITest: Waiting for fingerprint setup " "to switch to placeFinger."; - WaitForJsCondition("!$('fingerprint-setup-impl').$.placeFinger.hidden", - JsWaitOptions::kNone); + test::OobeJS() + .CreateWaiter("!$('fingerprint-setup-impl').$.placeFinger.hidden") + ->Wait(); } void ExitFingerprintPinSetupScreen() { @@ -319,16 +300,16 @@ "$('fingerprint-setup-impl').$.setupFingerprintLater.click()"); LOG(INFO) << "OobeInteractiveUITest: Waiting for fingerprint setup screen " "to close."; - WaitForJsCondition( - "Oobe.getInstance().currentScreen.id !=" - "'fingerprint-setup'", - JsWaitOptions::kSatisfyIfOobeDestroyed); + test::CreatePredicateOrOobeDestroyedWaiter( + "Oobe.getInstance().currentScreen.id != 'fingerprint-setup'") + ->Wait(); LOG(INFO) << "OobeInteractiveUITest: 'fingerprint-setup' screen done."; } void WaitForDiscoverScreen() { - WaitForJsCondition("Oobe.getInstance().currentScreen.id == 'discover'", - JsWaitOptions::kNone); + test::OobeJS() + .CreateWaiter("Oobe.getInstance().currentScreen.id == 'discover'") + ->Wait(); LOG(INFO) << "OobeInteractiveUITest: Switched to 'discover' screen."; } @@ -353,14 +334,16 @@ test::OobeJS().ExecuteAsync( "$('discover-impl').root.querySelector('discover-pin-setup-module')." "$.setupSkipButton.click()"); - WaitForJsCondition("Oobe.getInstance().currentScreen.id != 'discover'", - JsWaitOptions::kSatisfyIfOobeDestroyed); + test::CreatePredicateOrOobeDestroyedWaiter( + "Oobe.getInstance().currentScreen.id != 'discover'") + ->Wait(); LOG(INFO) << "OobeInteractiveUITest: 'discover' screen done."; } void WaitForUserImageScreen() { - WaitForJsCondition("Oobe.getInstance().currentScreen.id == 'user-image'", - JsWaitOptions::kNone); + test::OobeJS() + .CreateWaiter("Oobe.getInstance().currentScreen.id == 'user-image'") + ->Wait(); LOG(INFO) << "OobeInteractiveUITest: Switched to 'user-image' screen."; }
diff --git a/chrome/browser/chromeos/login/profile_auth_data.cc b/chrome/browser/chromeos/login/profile_auth_data.cc index 68ea921..ff6cd96 100644 --- a/chrome/browser/chromeos/login/profile_auth_data.cc +++ b/chrome/browser/chromeos/login/profile_auth_data.cc
@@ -81,7 +81,7 @@ // another store, they have already gone through the strict secure check. DCHECK(cookie.IsCanonical()); cookie_manager->SetCanonicalCookie( - cookie, true /*secure_source*/, true /*modify_http_only*/, + cookie, "https", true /*modify_http_only*/, base::BindOnce(&OnCookieSet, cookie_completion_callback)); } }
diff --git a/chrome/browser/chromeos/login/profile_auth_data_unittest.cc b/chrome/browser/chromeos/login/profile_auth_data_unittest.cc index fb0801f..29adacc 100644 --- a/chrome/browser/chromeos/login/profile_auth_data_unittest.cc +++ b/chrome/browser/chromeos/login/profile_auth_data_unittest.cc
@@ -187,21 +187,21 @@ kSAMLIdPCookieDomainWithWildcard, std::string(), base::Time(), base::Time(), base::Time(), true, false, net::CookieSameSite::DEFAULT_MODE, net::COOKIE_PRIORITY_DEFAULT), - true /*secure_source*/, true /*modify_http_only*/, base::DoNothing()); + "https", true /*modify_http_only*/, base::DoNothing()); cookies->SetCanonicalCookie( *net::CanonicalCookie::CreateSanitizedCookie( GURL(kSAMLIdPCookieURL), kCookieName, cookie_value, std::string(), std::string(), base::Time(), base::Time(), base::Time(), true, false, net::CookieSameSite::DEFAULT_MODE, net::COOKIE_PRIORITY_DEFAULT), - true /*secure_source*/, true /*modify_http_only*/, base::DoNothing()); + "https", true /*modify_http_only*/, base::DoNothing()); cookies->SetCanonicalCookie( *net::CanonicalCookie::CreateSanitizedCookie( GURL(kGAIACookieURL), kCookieName, cookie_value, std::string(), std::string(), base::Time(), base::Time(), base::Time(), true, false, net::CookieSameSite::DEFAULT_MODE, net::COOKIE_PRIORITY_DEFAULT), - true /*secure_source*/, true /*modify_http_only*/, base::DoNothing()); + "https", true /*modify_http_only*/, base::DoNothing()); } net::URLRequestContext* ProfileAuthDataTest::GetRequestContext(
diff --git a/chrome/browser/chromeos/login/test/js_checker.cc b/chrome/browser/chromeos/login/test/js_checker.cc index d8adbdc..e09224a 100644 --- a/chrome/browser/chromeos/login/test/js_checker.cc +++ b/chrome/browser/chromeos/login/test/js_checker.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/chromeos/login/test/js_checker.h" #include "base/strings/utf_string_conversions.h" +#include "chrome/browser/chromeos/login/test/test_predicate_waiter.h" #include "chrome/browser/chromeos/login/ui/login_display_host.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" @@ -18,6 +19,11 @@ return "window.domAutomationController.send(" + expression + ")"; } +bool CheckConditionIfOobeExists(const std::string& js_condition) { + return !chromeos::LoginDisplayHost::default_host() || + chromeos::test::OobeJS().GetBool(js_condition); +} + } // namespace namespace chromeos { @@ -92,6 +98,13 @@ EXPECT_NE(GetBool(expression), result) << expression; } +std::unique_ptr<TestConditionWaiter> JSChecker::CreateWaiter( + const std::string& js_condition) { + TestPredicateWaiter::PredicateCheck predicate = base::BindRepeating( + &JSChecker::GetBool, base::Unretained(this), js_condition); + return std::make_unique<TestPredicateWaiter>(predicate); +} + void JSChecker::GetBoolImpl(const std::string& expression, bool* result) { CHECK(web_contents_); ASSERT_TRUE(content::ExecuteScriptAndExtractBool( @@ -125,5 +138,12 @@ LoginDisplayHost::default_host()->GetOobeWebContents(), script); } +std::unique_ptr<TestConditionWaiter> CreatePredicateOrOobeDestroyedWaiter( + const std::string& js_condition) { + TestPredicateWaiter::PredicateCheck predicate = + base::BindRepeating(&CheckConditionIfOobeExists, js_condition); + return std::make_unique<TestPredicateWaiter>(predicate); +} + } // namespace test } // namespace chromeos
diff --git a/chrome/browser/chromeos/login/test/js_checker.h b/chrome/browser/chromeos/login/test/js_checker.h index d18e1bf..e45c1ce 100644 --- a/chrome/browser/chromeos/login/test/js_checker.h +++ b/chrome/browser/chromeos/login/test/js_checker.h
@@ -5,6 +5,7 @@ #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_TEST_JS_CHECKER_H_ #define CHROME_BROWSER_CHROMEOS_LOGIN_TEST_JS_CHECKER_H_ +#include <memory> #include <string> namespace content { @@ -14,6 +15,8 @@ namespace chromeos { namespace test { +class TestConditionWaiter; + // Utility class for tests that allows us to evalute and check JavaScript // expressions inside given web contents. All calls are made synchronously. class JSChecker { @@ -46,6 +49,11 @@ void ExpectEQ(const std::string& expression, bool result); void ExpectNE(const std::string& expression, bool result); + // Checks test waiter that would await until |js_condition| evaluates + // to true. + std::unique_ptr<TestConditionWaiter> CreateWaiter( + const std::string& js_condition); + void set_web_contents(content::WebContents* web_contents) { web_contents_ = web_contents; } @@ -66,6 +74,11 @@ void ExecuteOobeJS(const std::string& script); void ExecuteOobeJSAsync(const std::string& script); +// Helper method to create waiter over js condition that would also be satisfied +// if oobe UI is destroyed. +std::unique_ptr<TestConditionWaiter> CreatePredicateOrOobeDestroyedWaiter( + const std::string& js_expression); + } // namespace test } // namespace chromeos
diff --git a/chrome/browser/chromeos/login/test/oobe_screen_waiter.h b/chrome/browser/chromeos/login/test/oobe_screen_waiter.h index e9c8643d..8dbaec2f 100644 --- a/chrome/browser/chromeos/login/test/oobe_screen_waiter.h +++ b/chrome/browser/chromeos/login/test/oobe_screen_waiter.h
@@ -7,6 +7,7 @@ #include "base/macros.h" #include "chrome/browser/chromeos/login/oobe_screen.h" +#include "chrome/browser/chromeos/login/test/test_condition_waiter.h" #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" namespace content { @@ -16,13 +17,12 @@ namespace chromeos { // A waiter that blocks until the expected oobe screen is reached. -class OobeScreenWaiter : public OobeUI::Observer { +class OobeScreenWaiter : public OobeUI::Observer, + public test::TestConditionWaiter { public: explicit OobeScreenWaiter(OobeScreen expected_screen); ~OobeScreenWaiter() override; - // Run message loop to wait for the expected_screen to become current screen. - void Wait(); // Run message loop to wait for the expected_screen to be fully initialized. void WaitForInitialization(); @@ -37,6 +37,9 @@ OobeScreen new_screen) override; void OnScreenInitialized(OobeScreen screen) override; + // TestConditionWaiter; + void Wait() override; + private: OobeUI* GetOobeUI();
diff --git a/chrome/browser/chromeos/login/test/test_condition_waiter.h b/chrome/browser/chromeos/login/test/test_condition_waiter.h index 03d6dfc..8f2b199d 100644 --- a/chrome/browser/chromeos/login/test/test_condition_waiter.h +++ b/chrome/browser/chromeos/login/test/test_condition_waiter.h
@@ -1,34 +1,23 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. +// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_TEST_TEST_CONDITION_WAITER_H_ #define CHROME_BROWSER_CHROMEOS_LOGIN_TEST_TEST_CONDITION_WAITER_H_ -#include "base/callback_forward.h" -#include "base/run_loop.h" -#include "base/timer/timer.h" +#include "base/macros.h" namespace chromeos { namespace test { -// Waits for condition to be fulfilled. +// Generic class for conditions that can be awaited it test. class TestConditionWaiter { public: - using ConditionCheck = base::RepeatingCallback<bool(void)>; + virtual ~TestConditionWaiter() = default; + virtual void Wait() = 0; - explicit TestConditionWaiter(const ConditionCheck& is_fulfilled); - ~TestConditionWaiter(); - - void Wait(); - - private: - void CheckCondition(); - - const ConditionCheck is_fulfilled_; - - base::RepeatingTimer timer_; - base::RunLoop run_loop_; + protected: + TestConditionWaiter() = default; DISALLOW_COPY_AND_ASSIGN(TestConditionWaiter); };
diff --git a/chrome/browser/chromeos/login/test/test_condition_waiter.cc b/chrome/browser/chromeos/login/test/test_predicate_waiter.cc similarity index 60% rename from chrome/browser/chromeos/login/test/test_condition_waiter.cc rename to chrome/browser/chromeos/login/test/test_predicate_waiter.cc index 834ceff..eaef5f66 100644 --- a/chrome/browser/chromeos/login/test/test_condition_waiter.cc +++ b/chrome/browser/chromeos/login/test/test_predicate_waiter.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/login/test/test_condition_waiter.h" +#include "chrome/browser/chromeos/login/test/test_predicate_waiter.h" #include "base/callback.h" @@ -10,27 +10,27 @@ namespace test { namespace { -const base::TimeDelta kConditionCheckFrequency = +const base::TimeDelta kPredicateCheckFrequency = base::TimeDelta::FromMilliseconds(200); } // anonymous namespace -TestConditionWaiter::TestConditionWaiter( +TestPredicateWaiter::TestPredicateWaiter( const base::RepeatingCallback<bool(void)>& is_fulfilled) : is_fulfilled_(is_fulfilled) {} -TestConditionWaiter::~TestConditionWaiter() = default; +TestPredicateWaiter::~TestPredicateWaiter() = default; -void TestConditionWaiter::Wait() { +void TestPredicateWaiter::Wait() { if (is_fulfilled_.Run()) return; - timer_.Start(FROM_HERE, kConditionCheckFrequency, this, - &TestConditionWaiter::CheckCondition); + timer_.Start(FROM_HERE, kPredicateCheckFrequency, this, + &TestPredicateWaiter::CheckPredicate); run_loop_.Run(); } -void TestConditionWaiter::CheckCondition() { +void TestPredicateWaiter::CheckPredicate() { if (is_fulfilled_.Run()) { run_loop_.Quit(); timer_.Stop();
diff --git a/chrome/browser/chromeos/login/test/test_predicate_waiter.h b/chrome/browser/chromeos/login/test/test_predicate_waiter.h new file mode 100644 index 0000000..24663e8 --- /dev/null +++ b/chrome/browser/chromeos/login/test/test_predicate_waiter.h
@@ -0,0 +1,41 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_TEST_TEST_PREDICATE_WAITER_H_ +#define CHROME_BROWSER_CHROMEOS_LOGIN_TEST_TEST_PREDICATE_WAITER_H_ + +#include "base/callback_forward.h" +#include "base/run_loop.h" +#include "base/timer/timer.h" +#include "chrome/browser/chromeos/login/test/test_condition_waiter.h" + +namespace chromeos { +namespace test { + +// Waits for predicate to be fulfilled. +class TestPredicateWaiter : public TestConditionWaiter { + public: + using PredicateCheck = base::RepeatingCallback<bool(void)>; + + explicit TestPredicateWaiter(const PredicateCheck& is_fulfilled); + ~TestPredicateWaiter() override; + + // TestConditionWaiter + void Wait() override; + + private: + void CheckPredicate(); + + const PredicateCheck is_fulfilled_; + + base::RepeatingTimer timer_; + base::RunLoop run_loop_; + + DISALLOW_COPY_AND_ASSIGN(TestPredicateWaiter); +}; + +} // namespace test +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_LOGIN_TEST_TEST_PREDICATE_WAITER_H_
diff --git a/chrome/browser/chromeos/login/users/avatar/user_image_manager_browsertest.cc b/chrome/browser/chromeos/login/users/avatar/user_image_manager_browsertest.cc index 23a9a661..4515901 100644 --- a/chrome/browser/chromeos/login/users/avatar/user_image_manager_browsertest.cc +++ b/chrome/browser/chromeos/login/users/avatar/user_image_manager_browsertest.cc
@@ -276,7 +276,13 @@ auto* identity_manager = IdentityManagerFactory::GetForProfile(profile); identity::SetRefreshTokenForPrimaryAccount(identity_manager, kRandomTokenStrForTesting); - auto account_info = identity_manager->GetPrimaryAccountInfo(); + CoreAccountInfo core_info = identity_manager->GetPrimaryAccountInfo(); + AccountInfo account_info; + account_info.email = core_info.email; + account_info.gaia = core_info.gaia; + account_info.account_id = core_info.account_id; + account_info.is_under_advanced_protection = + core_info.is_under_advanced_protection; account_info.full_name = account_info.email; account_info.given_name = account_info.email; account_info.hosted_domain = kNoHostedDomainFound;
diff --git a/chrome/browser/chromeos/login/webview_login_browsertest.cc b/chrome/browser/chromeos/login/webview_login_browsertest.cc index 4a4f51d..e6c54a36 100644 --- a/chrome/browser/chromeos/login/webview_login_browsertest.cc +++ b/chrome/browser/chromeos/login/webview_login_browsertest.cc
@@ -90,7 +90,7 @@ "/", base::Time(), base::Time(), base::Time(), false, false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - false, false, + "http", false, base::Bind(&InjectCookieDoneCallback, run_loop.QuitClosure())); run_loop.Run(); }
diff --git a/chrome/browser/chromeos/login/wizard_controller.cc b/chrome/browser/chromeos/login/wizard_controller.cc index 935f7b8..c335fdc 100644 --- a/chrome/browser/chromeos/login/wizard_controller.cc +++ b/chrome/browser/chromeos/login/wizard_controller.cc
@@ -819,7 +819,7 @@ #if defined(GOOGLE_CHROME_BUILD) base::PostTaskWithTraits( FROM_HERE, {base::MayBlock()}, - base::Bind(&breakpad::InitCrashReporter, std::string())); + base::BindOnce(&breakpad::InitCrashReporter, std::string())); #endif }
diff --git a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc index 9398291..b5b0c54 100644 --- a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc +++ b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
@@ -84,7 +84,7 @@ if (!owner_key_util->ImportPublicKey(&public_key_data)) { scoped_refptr<PrivateKey> private_key; base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI}, - base::Bind(callback, public_key, private_key)); + base::BindOnce(callback, public_key, private_key)); return; } public_key = new PublicKey(); @@ -106,7 +106,7 @@ public_key->data(), public_slot.get())); } base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI}, - base::Bind(callback, public_key, private_key)); + base::BindOnce(callback, public_key, private_key)); } void ContinueLoadPrivateKeyOnIOThread( @@ -710,8 +710,9 @@ bool rv = base::PostTaskWithTraits( FROM_HERE, {BrowserThread::IO}, - base::Bind(&LoadPrivateKeyOnIOThread, owner_key_util_, - ProfileHelper::GetUserIdHashFromProfile(profile_), callback)); + base::BindOnce(&LoadPrivateKeyOnIOThread, owner_key_util_, + ProfileHelper::GetUserIdHashFromProfile(profile_), + callback)); if (!rv) { // IO thread doesn't exists in unit tests, but it's safe to use NSS from // BlockingPool in unit tests.
diff --git a/chrome/browser/chromeos/platform_keys/platform_keys_nss.cc b/chrome/browser/chromeos/platform_keys/platform_keys_nss.cc index 5dfcae93..2e85258a 100644 --- a/chrome/browser/chromeos/platform_keys/platform_keys_nss.cc +++ b/chrome/browser/chromeos/platform_keys/platform_keys_nss.cc
@@ -151,8 +151,8 @@ NSSOperationState* state) { base::PostTaskWithTraits( FROM_HERE, {BrowserThread::IO}, - base::Bind(&GetCertDatabaseOnIOThread, token_id, callback, - browser_context->GetResourceContext(), state)); + base::BindOnce(&GetCertDatabaseOnIOThread, token_id, callback, + browser_context->GetResourceContext(), state)); } class GenerateRSAKeyState : public NSSOperationState { @@ -476,7 +476,7 @@ FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, - base::Bind(&GenerateRSAKeyOnWorkerThread, base::Passed(&state))); + base::BindOnce(&GenerateRSAKeyOnWorkerThread, std::move(state))); } // Does the actual signing on a worker thread. Used by SignRSAWithDB(). @@ -570,7 +570,7 @@ FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, - base::Bind(&SignRSAOnWorkerThread, base::Passed(&state))); + base::BindOnce(&SignRSAOnWorkerThread, std::move(state))); } // Called when ClientCertStoreChromeOS::GetClientCerts is done. Builds the list @@ -654,7 +654,7 @@ FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, - base::Bind(&FilterCertificatesOnWorkerThread, base::Passed(&state))); + base::BindOnce(&FilterCertificatesOnWorkerThread, std::move(state))); } // Continues getting certificates with the obtained NSSCertDatabase. Used by @@ -895,7 +895,7 @@ base::PostTaskWithTraits( FROM_HERE, {BrowserThread::IO}, - base::Bind(&SelectCertificatesOnIOThread, base::Passed(&state))); + base::BindOnce(&SelectCertificatesOnIOThread, std::move(state))); } } // namespace subtle
diff --git a/chrome/browser/chromeos/policy/device_policy_decoder_chromeos.cc b/chrome/browser/chromeos/policy/device_policy_decoder_chromeos.cc index b9e1714..67658cf 100644 --- a/chrome/browser/chromeos/policy/device_policy_decoder_chromeos.cc +++ b/chrome/browser/chromeos/policy/device_policy_decoder_chromeos.cc
@@ -1179,6 +1179,18 @@ nullptr); } } + + if (policy.has_device_wilco_dtc_allowed()) { + const em::DeviceWilcoDtcAllowedProto& container( + policy.device_wilco_dtc_allowed()); + if (container.has_device_wilco_dtc_allowed()) { + policies->Set( + key::kDeviceWilcoDtcAllowed, POLICY_LEVEL_MANDATORY, + POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, + std::make_unique<base::Value>(container.device_wilco_dtc_allowed()), + nullptr); + } + } } } // namespace
diff --git a/chrome/browser/chromeos/policy/network_configuration_updater.cc b/chrome/browser/chromeos/policy/network_configuration_updater.cc index 8644e189..177d614 100644 --- a/chrome/browser/chromeos/policy/network_configuration_updater.cc +++ b/chrome/browser/chromeos/policy/network_configuration_updater.cc
@@ -189,9 +189,65 @@ ParseCurrentPolicy(&network_configs, &global_network_config, &certificates); ImportCertificates(certificates); + MarkFieldsAsRecommendedForBackwardsCompatibility(&network_configs); ApplyNetworkPolicy(&network_configs, &global_network_config); } +void NetworkConfigurationUpdater:: + MarkFieldsAsRecommendedForBackwardsCompatibility( + base::Value* network_configs_onc) { + for (auto& network_config_onc : network_configs_onc->GetList()) { + DCHECK(network_config_onc.is_dict()); + const std::string* type = + network_config_onc.FindStringKey(::onc::network_config::kType); + if (!type || *type != ::onc::network_type::kEthernet) + continue; + const base::Value* ethernet = network_config_onc.FindKeyOfType( + ::onc::network_config::kEthernet, base::Value::Type::DICTIONARY); + if (!ethernet) + continue; + const std::string* auth = + ethernet->FindStringKey(::onc::ethernet::kAuthentication); + if (!auth || *auth != ::onc::ethernet::kAuthenticationNone) + continue; + + // If anything has been recommended, trust the server and don't change + // anything. + if (network_config_onc.FindKey(::onc::kRecommended)) + continue; + base::Value* static_ip_config = + network_config_onc.FindKey(::onc::network_config::kStaticIPConfig); + if (static_ip_config && static_ip_config->FindKey(::onc::kRecommended)) + continue; + + // Ensure kStaticIPConfig exists because a "Recommended" field will be added + // to it. + if (!static_ip_config) { + static_ip_config = network_config_onc.SetKey( + ::onc::network_config::kStaticIPConfig, base::DictionaryValue()); + } + SetRecommended(&network_config_onc, + {::onc::network_config::kIPAddressConfigType, + ::onc::network_config::kNameServersConfigType}); + SetRecommended(static_ip_config, + {::onc::ipconfig::kGateway, ::onc::ipconfig::kIPAddress, + ::onc::ipconfig::kRoutingPrefix, ::onc::ipconfig::kType, + ::onc::ipconfig::kNameServers}); + } +} + +void NetworkConfigurationUpdater::SetRecommended( + base::Value* onc_value, + std::initializer_list<base::StringPiece> recommended_field_names) { + DCHECK(onc_value); + DCHECK(onc_value->is_dict()); + base::Value recommended_list(base::Value::Type::LIST); + for (const auto& recommended_field_name : recommended_field_names) { + recommended_list.GetList().push_back(base::Value(recommended_field_name)); + } + onc_value->SetKey(::onc::kRecommended, std::move(recommended_list)); +} + std::string NetworkConfigurationUpdater::LogHeader() const { return chromeos::onc::GetSourceAsString(onc_source_); }
diff --git a/chrome/browser/chromeos/policy/network_configuration_updater.h b/chrome/browser/chromeos/policy/network_configuration_updater.h index 8829db3..5639710 100644 --- a/chrome/browser/chromeos/policy/network_configuration_updater.h +++ b/chrome/browser/chromeos/policy/network_configuration_updater.h
@@ -108,6 +108,23 @@ // Apply the observed policy, i.e. both networks and certificates. void ApplyPolicy(); + // Marks IP Address config fields as "Recommended" for Ethernet network + // configs without authentication. The reason is that Chrome OS used to treat + // Ethernet networks without authentication as unmanaged, so users were able + // to edit the IP address even if there was a policy for Ethernet. This + // behavior should be preserved for now to not break existing use cases. + // TODO(https://crbug.com/931412): Remove this when the server sets + // "Recommended". + void MarkFieldsAsRecommendedForBackwardsCompatibility( + base::Value* network_configs_onc); + + // Sets the "Recommended" list of recommended field names in |onc_value|, + // which must be a dictionary, to |recommended_field_names|. If a + // "Recommended" list already existed in |onc_value|, it's replaced. + void SetRecommended( + base::Value* onc_value, + std::initializer_list<base::StringPiece> recommended_field_names); + std::string LogHeader() const; // Imports the certificates part of the policy.
diff --git a/chrome/browser/chromeos/settings/device_identity_provider.cc b/chrome/browser/chromeos/settings/device_identity_provider.cc index e2eea0f..6a2d8e2 100644 --- a/chrome/browser/chromeos/settings/device_identity_provider.cc +++ b/chrome/browser/chromeos/settings/device_identity_provider.cc
@@ -43,7 +43,7 @@ return; } -bool DeviceIdentityProvider::IsActiveAccountAvailable() { +bool DeviceIdentityProvider::IsActiveAccountWithRefreshToken() { if (GetActiveAccountId().empty() || !token_service_ || !token_service_->RefreshTokenIsAvailable(GetActiveAccountId())) return false;
diff --git a/chrome/browser/chromeos/settings/device_identity_provider.h b/chrome/browser/chromeos/settings/device_identity_provider.h index 0580642..ce17944 100644 --- a/chrome/browser/chromeos/settings/device_identity_provider.h +++ b/chrome/browser/chromeos/settings/device_identity_provider.h
@@ -22,7 +22,7 @@ // IdentityProvider: std::string GetActiveAccountId() override; - bool IsActiveAccountAvailable() override; + bool IsActiveAccountWithRefreshToken() override; std::unique_ptr<invalidation::ActiveAccountAccessTokenFetcher> FetchAccessToken( const std::string& oauth_consumer_name,
diff --git a/chrome/browser/chromeos/settings/device_settings_provider.cc b/chrome/browser/chromeos/settings/device_settings_provider.cc index 37147210..6c411daab 100644 --- a/chrome/browser/chromeos/settings/device_settings_provider.cc +++ b/chrome/browser/chromeos/settings/device_settings_provider.cc
@@ -83,6 +83,7 @@ kDeviceNativePrintersWhitelist, kDeviceQuirksDownloadEnabled, kDeviceUnaffiliatedCrostiniAllowed, + kDeviceWilcoDtcAllowed, kDeviceDisplayResolution, kDeviceRebootOnUserSignout, kDisplayRotationDefault, @@ -762,6 +763,16 @@ base::Value(container.reboot_on_signout_mode())); } } + + if (policy.has_device_wilco_dtc_allowed()) { + const em::DeviceWilcoDtcAllowedProto& container( + policy.device_wilco_dtc_allowed()); + if (container.has_device_wilco_dtc_allowed()) { + new_values_cache->SetValue( + kDeviceWilcoDtcAllowed, + base::Value(container.device_wilco_dtc_allowed())); + } + } } void DecodeLogUploadPolicies(const em::ChromeDeviceSettingsProto& policy,
diff --git a/chrome/browser/chromeos/settings/device_settings_provider_unittest.cc b/chrome/browser/chromeos/settings/device_settings_provider_unittest.cc index 5bd7af1..ffc75501 100644 --- a/chrome/browser/chromeos/settings/device_settings_provider_unittest.cc +++ b/chrome/browser/chromeos/settings/device_settings_provider_unittest.cc
@@ -274,6 +274,14 @@ Mock::VerifyAndClearExpectations(this); } + // Helper routine that sets the device DeviceWilcoDtcAllowed policy. + void SetDeviceWilcoDtcAllowedSetting(bool device_wilco_dtc_allowed) { + em::DeviceWilcoDtcAllowedProto* const proto = + device_policy_.payload().mutable_device_wilco_dtc_allowed(); + proto->set_device_wilco_dtc_allowed(device_wilco_dtc_allowed); + BuildAndInstallDevicePolicy(); + } + ScopedTestingLocalState local_state_; std::unique_ptr<DeviceSettingsProvider> provider_; @@ -716,4 +724,15 @@ } } +TEST_F(DeviceSettingsProviderTest, DeviceWilcoDtcAllowedSetting) { + // Policy should not be set by default + VerifyPolicyValue(kDeviceWilcoDtcAllowed, nullptr); + + SetDeviceWilcoDtcAllowedSetting(true); + EXPECT_EQ(base::Value(true), *provider_->Get(kDeviceWilcoDtcAllowed)); + + SetDeviceWilcoDtcAllowedSetting(false); + EXPECT_EQ(base::Value(false), *provider_->Get(kDeviceWilcoDtcAllowed)); +} + } // namespace chromeos
diff --git a/chrome/browser/chromeos/system/automatic_reboot_manager.cc b/chrome/browser/chromeos/system/automatic_reboot_manager.cc index 21dd279..6019bac4 100644 --- a/chrome/browser/chromeos/system/automatic_reboot_manager.cc +++ b/chrome/browser/chromeos/system/automatic_reboot_manager.cc
@@ -227,7 +227,7 @@ base::PostTaskWithTraits(FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::BLOCK_SHUTDOWN}, - base::Bind(&SaveUpdateRebootNeededUptime)); + base::BindOnce(&SaveUpdateRebootNeededUptime)); update_reboot_needed_time_ = clock_->NowTicks(); have_update_reboot_needed_time_ = true;
diff --git a/chrome/browser/chromeos/system_logs/debug_log_writer.cc b/chrome/browser/chromeos/system_logs/debug_log_writer.cc index 20a7096..d4dddd0 100644 --- a/chrome/browser/chromeos/system_logs/debug_log_writer.cc +++ b/chrome/browser/chromeos/system_logs/debug_log_writer.cc
@@ -120,14 +120,15 @@ if (!compression_command_success) { LOG(ERROR) << "Failed compressing " << compressed_output_path.value(); base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, - base::Bind(callback, base::FilePath(), false)); + base::BindOnce(callback, base::FilePath(), false)); base::DeleteFile(tar_file_path, false); base::DeleteFile(compressed_output_path, false); return; } - base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, - base::Bind(callback, compressed_output_path, true)); + base::PostTaskWithTraits( + FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(callback, compressed_output_path, true)); } // Gzips |tar_file_path| and stores results in |compressed_output_path|. @@ -138,7 +139,7 @@ if (!add_user_logs_command_success) { LOG(ERROR) << "Failed adding user logs to " << tar_file_path.value(); base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, - base::Bind(callback, base::FilePath(), false)); + base::BindOnce(callback, base::FilePath(), false)); base::DeleteFile(tar_file_path, false); return; } @@ -189,8 +190,8 @@ base::PostTaskWithTraits( FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, - base::Bind(&AddUserLogsToArchive, user_log_dir, tar_file_path, - compressed_output_path, callback)); + base::BindOnce(&AddUserLogsToArchive, user_log_dir, tar_file_path, + compressed_output_path, callback)); } void InitializeLogFile(base::File* file,
diff --git a/chrome/browser/chromeos/system_logs/touch_log_source.cc b/chrome/browser/chromeos/system_logs/touch_log_source.cc index 0542eb5..f0bdfb0 100644 --- a/chrome/browser/chromeos/system_logs/touch_log_source.cc +++ b/chrome/browser/chromeos/system_logs/touch_log_source.cc
@@ -128,7 +128,7 @@ // Cleanup these temporary log files. base::PostTaskWithTraits(FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, - base::Bind(CleanupEventLog, log_paths)); + base::BindOnce(CleanupEventLog, log_paths)); } // Callback for handing the outcome of GetTouchEventLog().
diff --git a/chrome/browser/download/download_resource_throttle.cc b/chrome/browser/download/download_resource_throttle.cc index 8f81ed5..881fe82f 100644 --- a/chrome/browser/download/download_resource_throttle.cc +++ b/chrome/browser/download/download_resource_throttle.cc
@@ -26,8 +26,8 @@ bool storage_permission_granted, bool allow) { base::PostTaskWithTraits( FROM_HERE, {BrowserThread::IO}, - base::Bind(&DownloadResourceThrottle::ContinueDownload, throttle, - storage_permission_granted, allow)); + base::BindOnce(&DownloadResourceThrottle::ContinueDownload, throttle, + storage_permission_granted, allow)); } void CanDownload(
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc index 6dbbc40..9aa0c4c 100644 --- a/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc +++ b/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc
@@ -70,7 +70,7 @@ content::BrowserContext::GetDefaultStoragePartition(profile) ->GetCookieManagerForBrowserProcess(); cookie_manager->SetCanonicalCookie( - cookie, true, true, + cookie, google_url.scheme(), true, mojo::WrapCallbackWithDefaultInvokeIfNotRun(std::move(callback), false)); loop.Run(); return success;
diff --git a/chrome/browser/extensions/api/cookies/cookies_api.cc b/chrome/browser/extensions/api/cookies/cookies_api.cc index 69d3bf0..564eb04 100644 --- a/chrome/browser/extensions/api/cookies/cookies_api.cc +++ b/chrome/browser/extensions/api/cookies/cookies_api.cc
@@ -369,7 +369,7 @@ // plus FIFO ordering on the cookie_manager_ pipe means that no // other extension function will affect the get result. cookie_manager->SetCanonicalCookie( - *cc, url_.SchemeIsCryptographic(), true /*modify_http_only*/, + *cc, url_.scheme(), true /*modify_http_only*/, base::BindOnce(&CookiesSetFunction::SetCanonicalCookieCallback, this)); cookies_helpers::GetCookieListFromManager( cookie_manager, url_,
diff --git a/chrome/browser/extensions/bookmark_app_navigation_browsertest.cc b/chrome/browser/extensions/bookmark_app_navigation_browsertest.cc index 2937ec5..31aa27e1 100644 --- a/chrome/browser/extensions/bookmark_app_navigation_browsertest.cc +++ b/chrome/browser/extensions/bookmark_app_navigation_browsertest.cc
@@ -177,7 +177,7 @@ content::SimulateMouseClick(web_contents, modifiers, blink::WebMouseEvent::Button::kLeft); - observer->WaitForNavigationFinished(); + observer->Wait(); } // static @@ -306,7 +306,7 @@ GURL app_url = https_server_.GetURL(GetAppUrlHost(), GetAppUrlPath()); auto observer = GetTestNavigationObserver(app_url); Browser* app_browser = LaunchAppBrowser(test_bookmark_app_); - observer->WaitForNavigationFinished(); + observer->Wait(); return app_browser; }
diff --git a/chrome/browser/extensions/extension_assets_manager_chromeos.cc b/chrome/browser/extensions/extension_assets_manager_chromeos.cc index 3dedb626..29aa5b0 100644 --- a/chrome/browser/extensions/extension_assets_manager_chromeos.cc +++ b/chrome/browser/extensions/extension_assets_manager_chromeos.cc
@@ -164,10 +164,10 @@ base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&ExtensionAssetsManagerChromeOS::CheckSharedExtension, - extension->id(), extension->VersionString(), - unpacked_extension_root, local_install_dir, profile, - callback)); + base::BindOnce(&ExtensionAssetsManagerChromeOS::CheckSharedExtension, + extension->id(), extension->VersionString(), + unpacked_extension_root, local_install_dir, profile, + callback)); } void ExtensionAssetsManagerChromeOS::UninstallExtension( @@ -185,8 +185,9 @@ // previous behavior that just do nothing in this case. base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&ExtensionAssetsManagerChromeOS::MarkSharedExtensionUnused, - id, profile)); + base::BindOnce( + &ExtensionAssetsManagerChromeOS::MarkSharedExtensionUnused, id, + profile)); } } @@ -351,8 +352,9 @@ unpacked_extension_root, id, version, shared_install_dir); base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&ExtensionAssetsManagerChromeOS::InstallSharedExtensionDone, - id, version, shared_version_dir)); + base::BindOnce( + &ExtensionAssetsManagerChromeOS::InstallSharedExtensionDone, id, + version, shared_version_dir)); } // static
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc index a70122e..6bf3366 100644 --- a/chrome/browser/extensions/extension_service_unittest.cc +++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -4992,7 +4992,7 @@ bool set_result = false; base::RunLoop run_loop; cookie_manager_ptr->SetCanonicalCookie( - *cc.get(), origin1.SchemeIsCryptographic(), true /* modify_http_only */, + *cc.get(), origin1.scheme(), true /* modify_http_only */, base::BindOnce(&SetCookieSaveData, &set_result, run_loop.QuitClosure())); run_loop.Run();
diff --git a/chrome/browser/extensions/external_registry_loader_win.cc b/chrome/browser/extensions/external_registry_loader_win.cc index 10e244d0..97ac4e57 100644 --- a/chrome/browser/extensions/external_registry_loader_win.cc +++ b/chrome/browser/extensions/external_registry_loader_win.cc
@@ -209,8 +209,9 @@ base::TimeTicks::Now() - start_time); base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&ExternalRegistryLoader::CompleteLoadAndStartWatchingRegistry, - this, base::Passed(&prefs))); + base::BindOnce( + &ExternalRegistryLoader::CompleteLoadAndStartWatchingRegistry, this, + std::move(prefs))); } void ExternalRegistryLoader::CompleteLoadAndStartWatchingRegistry( @@ -282,8 +283,8 @@ LOCAL_HISTOGRAM_TIMES("Extensions.ExternalRegistryLoaderWinUpdate", base::TimeTicks::Now() - start_time); base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI}, - base::Bind(&ExternalRegistryLoader::OnUpdated, this, - base::Passed(&prefs))); + base::BindOnce(&ExternalRegistryLoader::OnUpdated, + this, base::Passed(&prefs))); } } // namespace extensions
diff --git a/chrome/browser/extensions/updater/local_extension_cache.cc b/chrome/browser/extensions/updater/local_extension_cache.cc index bc56766..4f791ac5 100644 --- a/chrome/browser/extensions/updater/local_extension_cache.cc +++ b/chrome/browser/extensions/updater/local_extension_cache.cc
@@ -279,8 +279,8 @@ base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&LocalExtensionCache::OnCacheStatusChecked, local_cache, - exists, callback)); + base::BindOnce(&LocalExtensionCache::OnCacheStatusChecked, local_cache, + exists, callback)); } void LocalExtensionCache::OnCacheStatusChecked(bool ready, @@ -295,8 +295,8 @@ } else { base::PostDelayedTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&LocalExtensionCache::CheckCacheStatus, - weak_ptr_factory_.GetWeakPtr(), callback), + base::BindOnce(&LocalExtensionCache::CheckCacheStatus, + weak_ptr_factory_.GetWeakPtr(), callback), cache_status_polling_delay_); } } @@ -318,8 +318,8 @@ BackendCheckCacheContentsInternal(cache_dir, cache_content.get()); base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&LocalExtensionCache::OnCacheContentsChecked, local_cache, - base::Passed(&cache_content), callback)); + base::BindOnce(&LocalExtensionCache::OnCacheContentsChecked, local_cache, + std::move(cache_content), callback)); } // static @@ -530,10 +530,11 @@ base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&LocalExtensionCache::OnCacheEntryInstalled, local_cache, id, - CacheItemInfo(version, expected_hash, info.last_modified, - info.size, cached_crx_path), - was_error, callback)); + base::BindOnce(&LocalExtensionCache::OnCacheEntryInstalled, local_cache, + id, + CacheItemInfo(version, expected_hash, info.last_modified, + info.size, cached_crx_path), + was_error, callback)); } void LocalExtensionCache::OnCacheEntryInstalled(
diff --git a/chrome/browser/file_select_helper.cc b/chrome/browser/file_select_helper.cc index f51db38..ef56413 100644 --- a/chrome/browser/file_select_helper.cc +++ b/chrome/browser/file_select_helper.cc
@@ -188,7 +188,7 @@ base::PostTaskWithTraits( FROM_HERE, {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, - base::Bind(&FileSelectHelper::ProcessSelectedFilesMac, this, files)); + base::BindOnce(&FileSelectHelper::ProcessSelectedFilesMac, this, files)); #else NotifyRenderFrameHostAndEnd(files); #endif // defined(OS_MACOSX) @@ -216,7 +216,7 @@ base::PostTaskWithTraits( FROM_HERE, {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, - base::Bind(&FileSelectHelper::ProcessSelectedFilesMac, this, files)); + base::BindOnce(&FileSelectHelper::ProcessSelectedFilesMac, this, files)); #else NotifyRenderFrameHostAndEnd(files); #endif // defined(OS_MACOSX)
diff --git a/chrome/browser/file_select_helper_mac.mm b/chrome/browser/file_select_helper_mac.mm index 5df8760c..b18fef4c 100644 --- a/chrome/browser/file_select_helper_mac.mm +++ b/chrome/browser/file_select_helper_mac.mm
@@ -119,8 +119,8 @@ base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&FileSelectHelper::ProcessSelectedFilesMacOnUIThread, - base::Unretained(this), files_out, temporary_files)); + base::BindOnce(&FileSelectHelper::ProcessSelectedFilesMacOnUIThread, + base::Unretained(this), files_out, temporary_files)); } void FileSelectHelper::ProcessSelectedFilesMacOnUIThread(
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 65e49bc..c47fc60 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -549,8 +549,10 @@ }, { "name": "enable-explicit-dma-fences", - "owners": [ "chromeos-gfx" ], - "expiry_milestone": 76 + "owners": [ "chromeos-gfx@google.com" ], + // This flag is used for QA & debugging on ChromeOS, which has no way to + // customize switches. + "expiry_milestone": -1 }, { "name": "disable-hosted-app-shim-creation", @@ -749,7 +751,7 @@ }, { "name": "enable-appcontainer", - // "owners": [ "your-team" ], + "owners": [ "forshaw", "wfh" ], "expiry_milestone": 76 }, { @@ -1083,7 +1085,7 @@ }, { "name": "enable-drive-search-in-app-launcher", - // "owners": [ "your-team" ], + "owners": [ "slangley", "adanilo" ], "expiry_milestone": 76 }, { @@ -1212,8 +1214,8 @@ }, { "name": "enable-gpu-appcontainer", - // "owners": [ "your-team" ], - "expiry_milestone": 76 + "owners": [ "forshaw", "wfh" ], + "expiry_milestone": 78 }, { "name": "enable-gpu-rasterization", @@ -2073,7 +2075,7 @@ }, { "name": "file-manager-touch-mode", - // "owners": [ "your-team" ], + "owners": [ "slangley", "adanilo" ], "expiry_milestone": 76 }, { @@ -2641,8 +2643,10 @@ }, { "name": "overlay-strategies", - // "owners": [ "your-team" ], - "expiry_milestone": 76 + "owners": [ "chromeos-gfx@google.com" ], + // This flag is used for QA & debugging on ChromeOS, which has no way to + // customize switches. + "expiry_milestone": -1 }, { "name": "overscroll-history-navigation", @@ -2740,16 +2744,6 @@ "expiry_milestone": 76 }, { - "name": "quick-unlock-pin", - // "owners": [ "your-team" ], - "expiry_milestone": 76 - }, - { - "name": "quick-unlock-pin-signin", - // "owners": [ "your-team" ], - "expiry_milestone": 76 - }, - { "name": "reader-mode-heuristics", // "owners": [ "your-team" ], "expiry_milestone": 76 @@ -2984,8 +2978,10 @@ }, { "name": "tint-gl-composited-content", - // "owners": [ "your-team" ], - "expiry_milestone": 76 + "owners": [ "chromeos-gfx@google.com" ], + // This flag is used for QA & development on ChromeOS, which has no way to + // customize switches. + "expiry_milestone": -1 }, { "name": "top-chrome-touch-ui",
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index d25f5d7..a6f02c71 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -3376,20 +3376,6 @@ "searches Chrome Web Store for extensions that support printing to a USB " "printer with specific USB ID."; -const char kQuickUnlockPinName[] = "Quick Unlock (PIN)"; -const char kQuickUnlockPinDescription[] = - "Enabling PIN quick unlock allows you to use a PIN to unlock your ChromeOS " - "device on the lock screen after you have signed into your device."; -const char kQuickUnlockPinSignin[] = "Enable PIN when logging in."; -const char kQuickUnlockPinSigninDescription[] = - "Enabling PIN allows you to use a PIN to sign in and unlock your ChromeOS " - "device. After changing this flag PIN needs to be set up again."; -const char kQuickUnlockFingerprint[] = "Quick Unlock (Fingerprint)"; -const char kQuickUnlockFingerprintDescription[] = - "Enabling fingerprint quick unlock allows you to setup and use a " - "fingerprint to unlock your Chromebook on the lock screen after you have " - "signed into your device."; - const char kSchedulerConfigurationName[] = "Scheduler Configuration"; const char kSchedulerConfigurationDescription[] = "Instructs the OS to use a specific scheduler configuration setting.";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 7eccf80..84e6aa2d 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -2020,13 +2020,6 @@ extern const char kPrinterProviderSearchAppName[]; extern const char kPrinterProviderSearchAppDescription[]; -extern const char kQuickUnlockPinName[]; -extern const char kQuickUnlockPinDescription[]; -extern const char kQuickUnlockPinSignin[]; -extern const char kQuickUnlockPinSigninDescription[]; -extern const char kQuickUnlockFingerprint[]; -extern const char kQuickUnlockFingerprintDescription[]; - extern const char kSchedulerConfigurationName[]; extern const char kSchedulerConfigurationDescription[]; extern const char kSchedulerConfigurationConservative[];
diff --git a/chrome/browser/history/android/bookmark_model_sql_handler.cc b/chrome/browser/history/android/bookmark_model_sql_handler.cc index c439bf3e..9ce7ea93 100644 --- a/chrome/browser/history/android/bookmark_model_sql_handler.cc +++ b/chrome/browser/history/android/bookmark_model_sql_handler.cc
@@ -113,14 +113,14 @@ if (row.is_value_set_explicitly(HistoryAndBookmarkRow::PARENT_ID)) { base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&BookmarkModelSQLHandler::Task::AddBookmark, - scoped_refptr<BookmarkModelSQLHandler::Task>( - new BookmarkModelSQLHandler::Task()), - i->url, url_row.title(), row.parent_id())); + base::BindOnce(&BookmarkModelSQLHandler::Task::AddBookmark, + scoped_refptr<BookmarkModelSQLHandler::Task>( + new BookmarkModelSQLHandler::Task()), + i->url, url_row.title(), row.parent_id())); } else { base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind( + base::BindOnce( &BookmarkModelSQLHandler::Task::AddBookmarkToMobileFolder, scoped_refptr<BookmarkModelSQLHandler::Task>( new BookmarkModelSQLHandler::Task()), @@ -129,18 +129,18 @@ } else { base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&BookmarkModelSQLHandler::Task::RemoveBookmark, - scoped_refptr<BookmarkModelSQLHandler::Task>( - new BookmarkModelSQLHandler::Task()), - i->url)); + base::BindOnce(&BookmarkModelSQLHandler::Task::RemoveBookmark, + scoped_refptr<BookmarkModelSQLHandler::Task>( + new BookmarkModelSQLHandler::Task()), + i->url)); } } else if (row.is_value_set_explicitly(HistoryAndBookmarkRow::TITLE)) { base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&BookmarkModelSQLHandler::Task::UpdateBookmarkTitle, - scoped_refptr<BookmarkModelSQLHandler::Task>( - new BookmarkModelSQLHandler::Task()), - i->url, row.title())); + base::BindOnce(&BookmarkModelSQLHandler::Task::UpdateBookmarkTitle, + scoped_refptr<BookmarkModelSQLHandler::Task>( + new BookmarkModelSQLHandler::Task()), + i->url, row.title())); } } return true; @@ -151,10 +151,10 @@ i != ids_set.end(); ++i) { base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&BookmarkModelSQLHandler::Task::RemoveBookmark, - scoped_refptr<BookmarkModelSQLHandler::Task>( - new BookmarkModelSQLHandler::Task()), - i->url)); + base::BindOnce(&BookmarkModelSQLHandler::Task::RemoveBookmark, + scoped_refptr<BookmarkModelSQLHandler::Task>( + new BookmarkModelSQLHandler::Task()), + i->url)); } return true; } @@ -167,17 +167,18 @@ if (row->is_value_set_explicitly(HistoryAndBookmarkRow::PARENT_ID)) { base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&BookmarkModelSQLHandler::Task::AddBookmark, - scoped_refptr<BookmarkModelSQLHandler::Task>( - new BookmarkModelSQLHandler::Task()), - row->url(), row->title(), row->parent_id())); + base::BindOnce(&BookmarkModelSQLHandler::Task::AddBookmark, + scoped_refptr<BookmarkModelSQLHandler::Task>( + new BookmarkModelSQLHandler::Task()), + row->url(), row->title(), row->parent_id())); } else { base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&BookmarkModelSQLHandler::Task::AddBookmarkToMobileFolder, - scoped_refptr<BookmarkModelSQLHandler::Task>( - new BookmarkModelSQLHandler::Task()), - row->url(), row->title())); + base::BindOnce( + &BookmarkModelSQLHandler::Task::AddBookmarkToMobileFolder, + scoped_refptr<BookmarkModelSQLHandler::Task>( + new BookmarkModelSQLHandler::Task()), + row->url(), row->title())); } return true; }
diff --git a/chrome/browser/history/android/sqlite_cursor.cc b/chrome/browser/history/android/sqlite_cursor.cc index 03cedeb6..b2ae859 100644 --- a/chrome/browser/history/android/sqlite_cursor.cc +++ b/chrome/browser/history/android/sqlite_cursor.cc
@@ -126,9 +126,10 @@ jint SQLiteCursor::MoveTo(JNIEnv* env, const JavaParamRef<jobject>& obj, jint pos) { - base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI}, - base::Bind(&SQLiteCursor::RunMoveStatementOnUIThread, - base::Unretained(this), pos)); + base::PostTaskWithTraits( + FROM_HERE, {BrowserThread::UI}, + base::BindOnce(&SQLiteCursor::RunMoveStatementOnUIThread, + base::Unretained(this), pos)); if (test_observer_) test_observer_->OnPostMoveToTask(); @@ -151,8 +152,8 @@ DestroyOnUIThread(); } else if (!base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&SQLiteCursor::DestroyOnUIThread, - base::Unretained(this)))) { + base::BindOnce(&SQLiteCursor::DestroyOnUIThread, + base::Unretained(this)))) { delete this; } } @@ -186,7 +187,7 @@ if (id) { base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind( + base::BindOnce( &SQLiteCursor::GetFaviconForIDInUIThread, base::Unretained(this), id, base::Bind(&SQLiteCursor::OnFaviconData, base::Unretained(this))));
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc index fef84ca..2be21cc 100644 --- a/chrome/browser/io_thread.cc +++ b/chrome/browser/io_thread.cc
@@ -294,7 +294,7 @@ // Start observing Keychain events. This needs to be done on the UI thread, // as Keychain services requires a CFRunLoop. base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI}, - base::Bind(&ObserveKeychainEvents)); + base::BindOnce(&ObserveKeychainEvents)); #endif ConstructSystemRequestContext();
diff --git a/chrome/browser/lifetime/application_lifetime.cc b/chrome/browser/lifetime/application_lifetime.cc index a0c7e92..b85fd4f 100644 --- a/chrome/browser/lifetime/application_lifetime.cc +++ b/chrome/browser/lifetime/application_lifetime.cc
@@ -263,7 +263,7 @@ g_send_stop_request_to_session_manager = false; // Run exit process in clean stack. base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&ExitIgnoreUnloadHandlers)); + base::BindOnce(&ExitIgnoreUnloadHandlers)); #else // Set the flag to restore state after the restart. pref_service->SetBoolean(prefs::kRestartLastSessionOnShutdown, true);
diff --git a/chrome/browser/lifetime/termination_notification.cc b/chrome/browser/lifetime/termination_notification.cc index 7429077..40d80659 100644 --- a/chrome/browser/lifetime/termination_notification.cc +++ b/chrome/browser/lifetime/termination_notification.cc
@@ -73,8 +73,9 @@ if (chrome::IsAttemptingShutdown()) { // If running the Chrome OS build, but we're not on the device, act // as if we received signal from SessionManager. - base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&chrome::ExitIgnoreUnloadHandlers)); + base::PostTaskWithTraits( + FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&chrome::ExitIgnoreUnloadHandlers)); } } #endif
diff --git a/chrome/browser/loader/data_reduction_proxy_resource_throttle_android.cc b/chrome/browser/loader/data_reduction_proxy_resource_throttle_android.cc index f9478301..383ce44f 100644 --- a/chrome/browser/loader/data_reduction_proxy_resource_throttle_android.cc +++ b/chrome/browser/loader/data_reduction_proxy_resource_throttle_android.cc
@@ -111,7 +111,7 @@ base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind( + base::BindOnce( &DataReductionProxyResourceThrottle::StartDisplayingBlockingPage, AsWeakPtr(), safe_browsing_->ui_manager(), unsafe_resource)); } @@ -134,7 +134,7 @@ if (prerender_contents) { prerender_contents->Destroy(prerender::FINAL_STATUS_SAFE_BROWSING); base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO}, - base::Bind(resource.callback, false)); + base::BindOnce(resource.callback, false)); return; } }
diff --git a/chrome/browser/mac/keystone_glue.mm b/chrome/browser/mac/keystone_glue.mm index c3cd1c2..a9e43d3 100644 --- a/chrome/browser/mac/keystone_glue.mm +++ b/chrome/browser/mac/keystone_glue.mm
@@ -87,7 +87,7 @@ base::PostTaskWithTraits(FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, - base::Bind(&PerformBridge::Run, op.get())); + base::BindOnce(&PerformBridge::Run, op.get())); } // Convenience for the no-argument case.
diff --git a/chrome/browser/media_galleries/chromeos/mtp_device_delegate_impl_chromeos.cc b/chrome/browser/media_galleries/chromeos/mtp_device_delegate_impl_chromeos.cc index 15b701f..547e2d6 100644 --- a/chrome/browser/media_galleries/chromeos/mtp_device_delegate_impl_chromeos.cc +++ b/chrome/browser/media_galleries/chromeos/mtp_device_delegate_impl_chromeos.cc
@@ -379,8 +379,8 @@ void DeleteTemporaryFile(const base::FilePath& file_path) { base::PostTaskWithTraits(FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, - base::Bind(base::IgnoreResult(base::DeleteFile), - file_path, false /* not recursive*/)); + base::BindOnce(base::IgnoreResult(base::DeleteFile), + file_path, false /* not recursive*/)); } // A fake callback to be passed as CopyFileProgressCallback. @@ -850,8 +850,8 @@ // To cancel all the pending tasks, destroy the MTPDeviceTaskHelper object. base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&CloseStorageAndDestroyTaskHelperOnUIThread, storage_name_, - read_only_)); + base::BindOnce(&CloseStorageAndDestroyTaskHelperOnUIThread, storage_name_, + read_only_)); delete this; } @@ -1300,9 +1300,9 @@ task_in_progress_ = true; base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&OpenStorageOnUIThread, storage_name_, read_only_, - base::Bind(&MTPDeviceDelegateImplLinux::OnInitCompleted, - weak_ptr_factory_.GetWeakPtr()))); + base::BindOnce(&OpenStorageOnUIThread, storage_name_, read_only_, + base::Bind(&MTPDeviceDelegateImplLinux::OnInitCompleted, + weak_ptr_factory_.GetWeakPtr()))); } }
diff --git a/chrome/browser/media_galleries/chromeos/mtp_device_task_helper.cc b/chrome/browser/media_galleries/chromeos/mtp_device_task_helper.cc index 0fbc939..8b9ea1c 100644 --- a/chrome/browser/media_galleries/chromeos/mtp_device_task_helper.cc +++ b/chrome/browser/media_galleries/chromeos/mtp_device_task_helper.cc
@@ -94,7 +94,7 @@ DCHECK(!storage_name.empty()); if (!device_handle_.empty()) { base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO}, - base::Bind(callback, true)); + base::BindOnce(callback, true)); return; } @@ -257,7 +257,7 @@ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); device_handle_ = device_handle; base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO}, - base::Bind(completion_callback, !error)); + base::BindOnce(completion_callback, !error)); } void MTPDeviceTaskHelper::OnGetFileInfo( @@ -285,7 +285,7 @@ if (error) { base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(error_callback, base::File::FILE_ERROR_FAILED)); + base::BindOnce(error_callback, base::File::FILE_ERROR_FAILED)); return; } @@ -422,7 +422,7 @@ if (request.offset == file_info.size) { base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(request.success_callback, file_info, 0u)); + base::BindOnce(request.success_callback, file_info, 0u)); return; } @@ -453,7 +453,7 @@ base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(request.success_callback, file_info, data.length())); + base::BindOnce(request.success_callback, file_info, data.length())); } void MTPDeviceTaskHelper::OnRenameObject( @@ -464,7 +464,7 @@ if (error) { base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(error_callback, base::File::FILE_ERROR_FAILED)); + base::BindOnce(error_callback, base::File::FILE_ERROR_FAILED)); return; } @@ -480,7 +480,7 @@ if (error) { base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(error_callback, base::File::FILE_ERROR_FAILED)); + base::BindOnce(error_callback, base::File::FILE_ERROR_FAILED)); return; } @@ -496,7 +496,7 @@ if (error) { base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(error_callback, base::File::FILE_ERROR_FAILED)); + base::BindOnce(error_callback, base::File::FILE_ERROR_FAILED)); return; } @@ -509,5 +509,5 @@ base::File::Error error) const { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO}, - base::Bind(error_callback, error)); + base::BindOnce(error_callback, error)); }
diff --git a/chrome/browser/media_galleries/chromeos/mtp_read_file_worker.cc b/chrome/browser/media_galleries/chromeos/mtp_read_file_worker.cc index 37c1f20..51169ed 100644 --- a/chrome/browser/media_galleries/chromeos/mtp_read_file_worker.cc +++ b/chrome/browser/media_galleries/chromeos/mtp_read_file_worker.cc
@@ -122,14 +122,15 @@ DCHECK(snapshot_file_details.get()); if (snapshot_file_details->error_occurred()) { - base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO}, - base::Bind(snapshot_file_details->error_callback(), - base::File::FILE_ERROR_FAILED)); + base::PostTaskWithTraits( + FROM_HERE, {content::BrowserThread::IO}, + base::BindOnce(snapshot_file_details->error_callback(), + base::File::FILE_ERROR_FAILED)); return; } base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(snapshot_file_details->success_callback(), - snapshot_file_details->file_info(), - snapshot_file_details->snapshot_file_path())); + base::BindOnce(snapshot_file_details->success_callback(), + snapshot_file_details->file_info(), + snapshot_file_details->snapshot_file_path())); }
diff --git a/chrome/browser/media_galleries/mac/mtp_device_delegate_impl_mac.mm b/chrome/browser/media_galleries/mac/mtp_device_delegate_impl_mac.mm index a327898..359bea43 100644 --- a/chrome/browser/media_galleries/mac/mtp_device_delegate_impl_mac.mm +++ b/chrome/browser/media_galleries/mac/mtp_device_delegate_impl_mac.mm
@@ -141,8 +141,8 @@ camera_interface_.reset(new DeviceListener(this)); base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&DeviceListener::OpenCameraSession, - base::Unretained(camera_interface_.get()), device_id_)); + base::BindOnce(&DeviceListener::OpenCameraSession, + base::Unretained(camera_interface_.get()), device_id_)); } MTPDeviceDelegateImplMac::~MTPDeviceDelegateImplMac() { @@ -193,9 +193,9 @@ const ErrorCallback& error_callback) { base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&MTPDeviceDelegateImplMac::ReadDirectoryImpl, - base::Unretained(this), root, success_callback, - error_callback)); + base::BindOnce(&MTPDeviceDelegateImplMac::ReadDirectoryImpl, + base::Unretained(this), root, success_callback, + error_callback)); } void MTPDeviceDelegateImplMac::CreateSnapshotFile( @@ -205,9 +205,9 @@ const ErrorCallback& error_callback) { base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&MTPDeviceDelegateImplMac::DownloadFile, - base::Unretained(this), device_file_path, local_path, - success_callback, error_callback)); + base::BindOnce(&MTPDeviceDelegateImplMac::DownloadFile, + base::Unretained(this), device_file_path, local_path, + success_callback, error_callback)); } bool MTPDeviceDelegateImplMac::IsStreaming() { @@ -292,8 +292,8 @@ void MTPDeviceDelegateImplMac::CancelPendingTasksAndDeleteDelegate() { base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&MTPDeviceDelegateImplMac::CancelAndDelete, - base::Unretained(this))); + base::BindOnce(&MTPDeviceDelegateImplMac::CancelAndDelete, + base::Unretained(this))); } void MTPDeviceDelegateImplMac::GetFileInfoImpl( @@ -327,8 +327,8 @@ // Schedule a timeout in case the directory read doesn't complete. base::PostDelayedTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&MTPDeviceDelegateImplMac::ReadDirectoryTimeout, - weak_factory_.GetWeakPtr(), root), + base::BindOnce(&MTPDeviceDelegateImplMac::ReadDirectoryTimeout, + weak_factory_.GetWeakPtr(), root), base::TimeDelta::FromSeconds(kReadDirectoryTimeLimitSeconds)); } @@ -360,7 +360,7 @@ GetFileInfoImpl(device_file_path, &info, &error); if (error != base::File::FILE_OK) { base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO}, - base::Bind(error_callback, error)); + base::BindOnce(error_callback, error)); return; } @@ -387,8 +387,8 @@ camera_interface_->ResetDelegate(); base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&DeviceListener::CloseCameraSessionAndDelete, - base::Unretained(camera_interface_.release()))); + base::BindOnce(&DeviceListener::CloseCameraSessionAndDelete, + base::Unretained(camera_interface_.release()))); delete this; } @@ -399,7 +399,7 @@ iter != read_file_transactions_.end(); ++iter) { base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(iter->error_callback, base::File::FILE_ERROR_ABORT)); + base::BindOnce(iter->error_callback, base::File::FILE_ERROR_ABORT)); } read_file_transactions_.clear(); @@ -407,7 +407,7 @@ iter != read_dir_transactions_.end(); ++iter) { base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(iter->error_callback, base::File::FILE_ERROR_ABORT)); + base::BindOnce(iter->error_callback, base::File::FILE_ERROR_ABORT)); } read_dir_transactions_.clear(); } @@ -479,11 +479,12 @@ if (found_path) { base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(iter->success_callback, entry_list, false)); + base::BindOnce(iter->success_callback, entry_list, false)); } else { base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(iter->error_callback, base::File::FILE_ERROR_NOT_FOUND)); + base::BindOnce(iter->error_callback, + base::File::FILE_ERROR_NOT_FOUND)); } } @@ -510,7 +511,7 @@ if (error != base::File::FILE_OK) { base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO}, - base::Bind(iter->error_callback, error)); + base::BindOnce(iter->error_callback, error)); read_file_transactions_.erase(iter); return; } @@ -528,7 +529,7 @@ base::File::Info info = file_info_[item_filename.value()]; base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(iter->success_callback, info, iter->snapshot_file)); + base::BindOnce(iter->success_callback, info, iter->snapshot_file)); read_file_transactions_.erase(iter); }
diff --git a/chrome/browser/media_galleries/media_file_system_registry.cc b/chrome/browser/media_galleries/media_file_system_registry.cc index 82108ad..91b66c55 100644 --- a/chrome/browser/media_galleries/media_file_system_registry.cc +++ b/chrome/browser/media_galleries/media_file_system_registry.cc
@@ -668,9 +668,9 @@ #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) base::PostTaskWithTraits( FROM_HERE, {BrowserThread::IO}, - base::Bind(&MTPDeviceMapService::RevokeMTPFileSystem, - base::Unretained(MTPDeviceMapService::GetInstance()), - fs_name)); + base::BindOnce(&MTPDeviceMapService::RevokeMTPFileSystem, + base::Unretained(MTPDeviceMapService::GetInstance()), + fs_name)); #endif } @@ -718,9 +718,9 @@ CHECK(result); base::PostTaskWithTraits( FROM_HERE, {BrowserThread::IO}, - base::Bind(&MTPDeviceMapService::RegisterMTPFileSystem, - base::Unretained(MTPDeviceMapService::GetInstance()), - path.value(), fs_name, true /* read only */)); + base::BindOnce(&MTPDeviceMapService::RegisterMTPFileSystem, + base::Unretained(MTPDeviceMapService::GetInstance()), + path.value(), fs_name, true /* read only */)); return result; #else NOTREACHED();
diff --git a/chrome/browser/memory_details_android.cc b/chrome/browser/memory_details_android.cc index 185669a..7c880c8 100644 --- a/chrome/browser/memory_details_android.cc +++ b/chrome/browser/memory_details_android.cc
@@ -146,5 +146,5 @@ // Finally return to the browser thread. base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&MemoryDetails::CollectChildInfoOnUIThread, this)); + base::BindOnce(&MemoryDetails::CollectChildInfoOnUIThread, this)); }
diff --git a/chrome/browser/memory_details_mac.cc b/chrome/browser/memory_details_mac.cc index b9d67ca..aa5db33 100644 --- a/chrome/browser/memory_details_mac.cc +++ b/chrome/browser/memory_details_mac.cc
@@ -130,5 +130,5 @@ // Finally return to the browser thread. base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&MemoryDetails::CollectChildInfoOnUIThread, this)); + base::BindOnce(&MemoryDetails::CollectChildInfoOnUIThread, this)); }
diff --git a/chrome/browser/memory_details_win.cc b/chrome/browser/memory_details_win.cc index 9ba43e5..008a23b3 100644 --- a/chrome/browser/memory_details_win.cc +++ b/chrome/browser/memory_details_win.cc
@@ -102,5 +102,5 @@ // Finally return to the browser thread. base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&MemoryDetails::CollectChildInfoOnUIThread, this)); + base::BindOnce(&MemoryDetails::CollectChildInfoOnUIThread, this)); }
diff --git a/chrome/browser/net/chrome_network_service_browsertest.cc b/chrome/browser/net/chrome_network_service_browsertest.cc index 4d3847d..0941d01 100644 --- a/chrome/browser/net/chrome_network_service_browsertest.cc +++ b/chrome/browser/net/chrome_network_service_browsertest.cc
@@ -48,7 +48,7 @@ net::COOKIE_PRIORITY_DEFAULT); base::RunLoop run_loop; cookie_manager->SetCanonicalCookie( - cookie, false, false, + cookie, "http", false, base::BindLambdaForTesting([&](bool success) { run_loop.Quit(); })); run_loop.Run(); }
diff --git a/chrome/browser/net/dns_probe_runner.cc b/chrome/browser/net/dns_probe_runner.cc index 90f483b..77cb9ce 100644 --- a/chrome/browser/net/dns_probe_runner.cc +++ b/chrome/browser/net/dns_probe_runner.cc
@@ -119,10 +119,10 @@ return !callback_.is_null(); } -void DnsProbeRunner::OnTransactionComplete( - DnsTransaction* transaction, - int net_error, - const DnsResponse* response) { +void DnsProbeRunner::OnTransactionComplete(DnsTransaction* transaction, + int net_error, + const DnsResponse* response, + bool secure) { DCHECK(!callback_.is_null()); DCHECK(transaction_.get()); DCHECK_EQ(transaction_.get(), transaction);
diff --git a/chrome/browser/net/dns_probe_runner.h b/chrome/browser/net/dns_probe_runner.h index cce673d..399995b 100644 --- a/chrome/browser/net/dns_probe_runner.h +++ b/chrome/browser/net/dns_probe_runner.h
@@ -62,7 +62,8 @@ private: void OnTransactionComplete(net::DnsTransaction* transaction, int net_error, - const net::DnsResponse* response); + const net::DnsResponse* response, + bool secure); void CallCallback(); std::unique_ptr<net::DnsClient> client_;
diff --git a/chrome/browser/net/dns_probe_test_util.cc b/chrome/browser/net/dns_probe_test_util.cc index 0841deb..f87291f 100644 --- a/chrome/browser/net/dns_probe_test_util.cc +++ b/chrome/browser/net/dns_probe_test_util.cc
@@ -29,7 +29,8 @@ const uint16_t kTypeA = net::dns_protocol::kTypeA; MockDnsClientRuleList rules; rules.push_back(MockDnsClientRule(DnsProbeRunner::kKnownGoodHostname, kTypeA, - MockDnsClientRule::Result(result), false)); + MockDnsClientRule::Result(result), + false /* delay */)); return std::unique_ptr<DnsClient>( new net::MockDnsClient(config, std::move(rules)));
diff --git a/chrome/browser/net/nss_context_chromeos_browsertest.cc b/chrome/browser/net/nss_context_chromeos_browsertest.cc index c288ad3..df30a0b2 100644 --- a/chrome/browser/net/nss_context_chromeos_browsertest.cc +++ b/chrome/browser/net/nss_context_chromeos_browsertest.cc
@@ -44,8 +44,9 @@ base::RunLoop run_loop; base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(&DBTester::GetDBAndDoTestsOnIOThread, base::Unretained(this), - profile_->GetResourceContext(), run_loop.QuitClosure())); + base::BindOnce(&DBTester::GetDBAndDoTestsOnIOThread, + base::Unretained(this), profile_->GetResourceContext(), + run_loop.QuitClosure())); run_loop.Run(); return !!db_; } @@ -55,9 +56,9 @@ base::RunLoop run_loop; base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(&DBTester::DoGetDBAgainTestsOnIOThread, - base::Unretained(this), profile_->GetResourceContext(), - run_loop.QuitClosure())); + base::BindOnce(&DBTester::DoGetDBAgainTestsOnIOThread, + base::Unretained(this), profile_->GetResourceContext(), + run_loop.QuitClosure())); run_loop.Run(); }
diff --git a/chrome/browser/notifications/notification_platform_bridge_mac.mm b/chrome/browser/notifications/notification_platform_bridge_mac.mm index b2c65a3b..db62e9d 100644 --- a/chrome/browser/notifications/notification_platform_bridge_mac.mm +++ b/chrome/browser/notifications/notification_platform_bridge_mac.mm
@@ -377,14 +377,14 @@ base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(DoProcessNotificationResponse, - static_cast<NotificationCommon::Operation>( - operation.unsignedIntValue), - static_cast<NotificationHandler::Type>( - notification_type.unsignedIntValue), - profile_id, [is_incognito boolValue], - GURL(notification_origin), notification_id, action_index, - base::nullopt /* reply */, true /* by_user */)); + base::BindOnce(DoProcessNotificationResponse, + static_cast<NotificationCommon::Operation>( + operation.unsignedIntValue), + static_cast<NotificationHandler::Type>( + notification_type.unsignedIntValue), + profile_id, [is_incognito boolValue], + GURL(notification_origin), notification_id, action_index, + base::nullopt /* reply */, true /* by_user */)); } // static
diff --git a/chrome/browser/offline_pages/downloads/resource_throttle.cc b/chrome/browser/offline_pages/downloads/resource_throttle.cc index d6ea324..2686c85c 100644 --- a/chrome/browser/offline_pages/downloads/resource_throttle.cc +++ b/chrome/browser/offline_pages/downloads/resource_throttle.cc
@@ -59,8 +59,8 @@ base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&WillStartOfflineRequestOnUIThread, request_->url(), - request_origin, info->GetWebContentsGetterForRequest())); + base::BindOnce(&WillStartOfflineRequestOnUIThread, request_->url(), + request_origin, info->GetWebContentsGetterForRequest())); Cancel(); } }
diff --git a/chrome/browser/offline_pages/offline_page_request_handler.cc b/chrome/browser/offline_pages/offline_page_request_handler.cc index 33a73be5..4bb0f68 100644 --- a/chrome/browser/offline_pages/offline_page_request_handler.cc +++ b/chrome/browser/offline_pages/offline_page_request_handler.cc
@@ -1043,9 +1043,9 @@ // be called before the response is being received. Furthermore, there is // no need to clear the offline bit since the error code should already // indicate that the offline page is not loaded. - base::PostTaskWithTraits( - FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&ClearOfflinePageData, delegate_->GetWebContentsGetter())); + base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&ClearOfflinePageData, + delegate_->GetWebContentsGetter())); result = net::ERR_FAILED; }
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc index 640e0c1..fbfb277 100644 --- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc
@@ -18,12 +18,10 @@ #include "content/public/browser/navigation_handle.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" -#include "net/base/mime_util.h" #include "services/metrics/public/cpp/ukm_builders.h" #include "services/metrics/public/cpp/ukm_recorder.h" #include "third_party/blink/public/common/download/download_stats.h" #include "third_party/blink/public/common/frame/sandbox_flags.h" -#include "third_party/blink/public/common/mime_util/mime_util.h" #include "ui/gfx/geometry/size.h" #include "url/gurl.h" @@ -112,6 +110,10 @@ if (observer_manager) subresource_observer_.Add(observer_manager); web_contents_ = navigation_handle->GetWebContents(); + main_frame_data_ = + std::make_unique<FrameData>(navigation_handle->GetFrameTreeNodeId()); + aggregate_frame_data_ = + std::make_unique<FrameData>(navigation_handle->GetFrameTreeNodeId()); return CONTINUE_OBSERVING; } @@ -122,6 +124,10 @@ DCHECK(ad_frames_data_.empty()); committed_ = true; + aggregate_frame_data_->UpdateForNavigation( + navigation_handle->GetRenderFrameHost(), true /* frame_navigated */); + main_frame_data_->UpdateForNavigation(navigation_handle->GetRenderFrameHost(), + true /* frame_navigated */); // The main frame is never considered an ad. ad_frames_data_[navigation_handle->GetFrameTreeNodeId()] = nullptr; @@ -338,6 +344,7 @@ if (timing.interactive_timing->interactive) { time_interactive_ = timing.navigation_start + *timing.interactive_timing->interactive; + page_ad_bytes_at_interactive_ = aggregate_frame_data_->ad_network_bytes(); } } @@ -424,19 +431,9 @@ return; } - bool is_same_origin_to_main_frame = - web_contents_->GetMainFrame()->GetLastCommittedOrigin().IsSameOriginWith( - resource->origin); - // |delta_bytes| only includes bytes used by the network. - page_bytes_ += resource->delta_bytes; - page_network_bytes_ += resource->delta_bytes; - if (is_same_origin_to_main_frame) - page_same_origin_bytes_ += resource->delta_bytes; - if (resource->is_complete && resource->was_fetched_via_cache) { - page_bytes_ += resource->encoded_body_length; - if (is_same_origin_to_main_frame) - page_same_origin_bytes_ += resource->encoded_body_length; - } + aggregate_frame_data_->ProcessResourceLoadInFrame(resource); + if (resource->is_main_frame_resource) + main_frame_data_->ProcessResourceLoadInFrame(resource); // Determine if the frame (or its ancestor) is an ad, if so attribute the // bytes to the highest ad ancestor. @@ -453,29 +450,16 @@ } } -AdsPageLoadMetricsObserver::ResourceMimeType -AdsPageLoadMetricsObserver::GetResourceMimeType( - const page_load_metrics::mojom::ResourceDataUpdatePtr& resource) { - if (blink::IsSupportedImageMimeType(resource->mime_type)) - return ResourceMimeType::kImage; - if (blink::IsSupportedJavascriptMimeType(resource->mime_type)) - return ResourceMimeType::kJavascript; - - std::string top_level_type; - std::string subtype; - // Categorize invalid mime types as "Other". - if (!net::ParseMimeTypeWithoutParameter(resource->mime_type, &top_level_type, - &subtype)) { - return ResourceMimeType::kOther; - } - if (top_level_type.compare("video") == 0) - return ResourceMimeType::kVideo; - else if (top_level_type.compare("text") == 0 && subtype.compare("css") == 0) - return ResourceMimeType::kCss; - else if (top_level_type.compare("text") == 0 && subtype.compare("html") == 0) - return ResourceMimeType::kHtml; - else - return ResourceMimeType::kOther; +void AdsPageLoadMetricsObserver::AdjustAdBytesForFrame( + FrameTreeNodeId frame_tree_node_id, + const page_load_metrics::mojom::ResourceDataUpdatePtr& resource, + int64_t unaccounted_ad_bytes) { + const auto& id_and_data = ad_frames_data_.find(frame_tree_node_id); + FrameData* ancestor_data = id_and_data->second; + if (!ancestor_data) + return; + ancestor_data->AdjustAdBytes(unaccounted_ad_bytes, + FrameData::GetResourceMimeType(resource)); } void AdsPageLoadMetricsObserver::UpdateResource( @@ -483,9 +467,6 @@ const page_load_metrics::mojom::ResourceDataUpdatePtr& resource) { ProcessResourceForFrame(frame_tree_node_id, resource); auto it = page_resources_.find(resource->request_id); - // A new resource has been observed. - if (it == page_resources_.end()) - total_number_page_resources_++; if (resource->reported_as_ad_resource) { // If the resource had already started loading, and is now labeled as an ad, @@ -495,20 +476,8 @@ (it != page_resources_.end()) && !it->second->reported_as_ad_resource; int unaccounted_ad_bytes = is_new_ad ? resource->received_data_length - resource->delta_bytes : 0; - page_ad_resource_bytes_ += resource->delta_bytes + unaccounted_ad_bytes; - if (resource->is_main_frame_resource) { - page_main_frame_ad_resource_bytes_ += - resource->delta_bytes + unaccounted_ad_bytes; - } - if (!time_interactive_.is_null()) { - page_ad_resource_bytes_since_interactive_ += - resource->delta_bytes + unaccounted_ad_bytes; - } - ResourceMimeType mime_type = GetResourceMimeType(resource); - if (mime_type == ResourceMimeType::kVideo) - page_ad_video_bytes_ += resource->delta_bytes + unaccounted_ad_bytes; - if (mime_type == ResourceMimeType::kJavascript) - page_ad_javascript_bytes_ += resource->delta_bytes + unaccounted_ad_bytes; + if (unaccounted_ad_bytes) + AdjustAdBytesForFrame(frame_tree_node_id, resource, unaccounted_ad_bytes); } // Update resource map. @@ -534,7 +503,7 @@ int64_t data_length = resource->was_fetched_via_cache ? resource->encoded_body_length : resource->received_data_length; - ResourceMimeType mime_type = GetResourceMimeType(resource); + ResourceMimeType mime_type = FrameData::GetResourceMimeType(resource); if (mime_type == ResourceMimeType::kImage) { RESOURCE_BYTES_HISTOGRAM("Mime.Image", resource->was_fetched_via_cache, data_length); @@ -583,12 +552,10 @@ void AdsPageLoadMetricsObserver::RecordPageResourceTotalHistograms( ukm::SourceId source_id) { // Only records histograms on pages that have some ad bytes. - if (page_ad_resource_bytes_ == 0) + if (aggregate_frame_data_->ad_bytes() == 0) return; PAGE_BYTES_HISTOGRAM("PageLoad.Clients.Ads.Resources.Bytes.Ads", - page_ad_resource_bytes_); - PAGE_BYTES_HISTOGRAM("PageLoad.Clients.Ads.Resources.Bytes.TopLevelAds", - page_main_frame_ad_resource_bytes_); + aggregate_frame_data_->ad_bytes()); size_t unfinished_bytes = 0; for (auto const& kv : page_resources_) unfinished_bytes += kv.second->received_data_length; @@ -597,26 +564,30 @@ auto* ukm_recorder = ukm::UkmRecorder::Get(); ukm::builders::AdPageLoad builder(source_id); - builder.SetTotalBytes(page_bytes_ >> 10) - .SetAdBytes(page_ad_resource_bytes_ >> 10) - .SetAdJavascriptBytes(page_ad_javascript_bytes_ >> 10) - .SetAdVideoBytes(page_ad_video_bytes_ >> 10); + builder.SetTotalBytes(aggregate_frame_data_->network_bytes() >> 10) + .SetAdBytes(aggregate_frame_data_->ad_network_bytes() >> 10) + .SetAdJavascriptBytes( + aggregate_frame_data_->ad_javascript_network_bytes() >> 10) + .SetAdVideoBytes(aggregate_frame_data_->ad_video_network_bytes() >> 10); base::Time current_time = base::Time::Now(); if (!time_commit_.is_null()) { int time_since_commit = (current_time - time_commit_).InMicroseconds(); if (time_since_commit > 0) { int ad_kbps_from_commit = - (page_ad_resource_bytes_ >> 10) * 1000 * 1000 / time_since_commit; + (aggregate_frame_data_->ad_network_bytes() >> 10) * 1000 * 1000 / + time_since_commit; builder.SetAdBytesPerSecond(ad_kbps_from_commit); } } if (!time_interactive_.is_null()) { int time_since_interactive = (current_time - time_interactive_).InMicroseconds(); + int64_t bytes_since_interactive = + aggregate_frame_data_->ad_network_bytes() - + page_ad_bytes_at_interactive_; if (time_since_interactive > 0) { - int ad_kbps_since_interactive = - (page_ad_resource_bytes_since_interactive_ >> 10) * 1000 * 1000 / - time_since_interactive; + int ad_kbps_since_interactive = (bytes_since_interactive >> 10) * 1000 * + 1000 / time_since_interactive; builder.SetAdBytesPerSecondAfterInteractive(ad_kbps_since_interactive); } } @@ -634,7 +605,7 @@ void AdsPageLoadMetricsObserver::RecordHistogramsForAdTagging( FrameData::FrameVisibility visibility) { - if (page_bytes_ == 0) + if (aggregate_frame_data_->bytes() == 0) return; int non_zero_ad_frames = 0; @@ -642,7 +613,7 @@ size_t ad_frame_network_bytes = 0; for (const FrameData& ad_frame_data : ad_frames_data_storage_) { - if (ad_frame_data.frame_bytes() == 0) + if (ad_frame_data.bytes() == 0) continue; if (visibility != FrameData::FrameVisibility::kAnyVisibility && @@ -661,23 +632,22 @@ ad_frame_data.size_intervention_status()); non_zero_ad_frames += 1; - total_ad_frame_bytes += ad_frame_data.frame_bytes(); - ad_frame_network_bytes += ad_frame_data.frame_network_bytes(); + total_ad_frame_bytes += ad_frame_data.bytes(); + ad_frame_network_bytes += ad_frame_data.network_bytes(); ADS_HISTOGRAM("Bytes.AdFrames.PerFrame.Total", PAGE_BYTES_HISTOGRAM, - visibility, ad_frame_data.frame_bytes()); + visibility, ad_frame_data.bytes()); ADS_HISTOGRAM("Bytes.AdFrames.PerFrame.Network", PAGE_BYTES_HISTOGRAM, - visibility, ad_frame_data.frame_network_bytes()); + visibility, ad_frame_data.network_bytes()); ADS_HISTOGRAM("Bytes.AdFrames.PerFrame.SameOrigin", PAGE_BYTES_HISTOGRAM, visibility, ad_frame_data.same_origin_bytes()); ADS_HISTOGRAM("Bytes.AdFrames.PerFrame.PercentNetwork", UMA_HISTOGRAM_PERCENTAGE, visibility, - ad_frame_data.frame_network_bytes() * 100 / - ad_frame_data.frame_bytes()); + ad_frame_data.network_bytes() * 100 / ad_frame_data.bytes()); ADS_HISTOGRAM( "Bytes.AdFrames.PerFrame.PercentSameOrigin", UMA_HISTOGRAM_PERCENTAGE, visibility, - ad_frame_data.same_origin_bytes() * 100 / ad_frame_data.frame_bytes()); + ad_frame_data.same_origin_bytes() * 100 / ad_frame_data.bytes()); ADS_HISTOGRAM("FrameCounts.AdFrames.PerFrame.OriginStatus", UMA_HISTOGRAM_ENUMERATION, visibility, ad_frame_data.origin_status()); @@ -696,33 +666,24 @@ return; ADS_HISTOGRAM("Bytes.NonAdFrames.Aggregate.Total", PAGE_BYTES_HISTOGRAM, - visibility, page_bytes_ - total_ad_frame_bytes); + visibility, + aggregate_frame_data_->bytes() - total_ad_frame_bytes); ADS_HISTOGRAM("Bytes.FullPage.Total", PAGE_BYTES_HISTOGRAM, visibility, - page_bytes_); + aggregate_frame_data_->bytes()); ADS_HISTOGRAM("Bytes.FullPage.Network", PAGE_BYTES_HISTOGRAM, visibility, - page_network_bytes_); + aggregate_frame_data_->network_bytes()); - // Only record same origin totals for the AnyVisibility suffix as these - // numbers do not change for different visibility types. - if (visibility == FrameData::FrameVisibility::kAnyVisibility) { - ADS_HISTOGRAM("Bytes.FullPage.SameOrigin", PAGE_BYTES_HISTOGRAM, visibility, - page_same_origin_bytes_); - if (page_bytes_) { - ADS_HISTOGRAM("Bytes.FullPage.PercentSameOrigin", - UMA_HISTOGRAM_PERCENTAGE, visibility, - page_same_origin_bytes_ * 100 / page_bytes_); - } - } - - if (page_bytes_) { + if (aggregate_frame_data_->bytes()) { ADS_HISTOGRAM("Bytes.FullPage.Total.PercentAds", UMA_HISTOGRAM_PERCENTAGE, - visibility, total_ad_frame_bytes * 100 / page_bytes_); - } - if (page_network_bytes_) { - ADS_HISTOGRAM("Bytes.FullPage.Network.PercentAds", UMA_HISTOGRAM_PERCENTAGE, visibility, - ad_frame_network_bytes * 100 / page_network_bytes_); + total_ad_frame_bytes * 100 / aggregate_frame_data_->bytes()); + } + if (aggregate_frame_data_->network_bytes()) { + ADS_HISTOGRAM( + "Bytes.FullPage.Network.PercentAds", UMA_HISTOGRAM_PERCENTAGE, + visibility, + ad_frame_network_bytes * 100 / aggregate_frame_data_->network_bytes()); } ADS_HISTOGRAM("Bytes.AdFrames.Aggregate.Total", PAGE_BYTES_HISTOGRAM, @@ -735,6 +696,27 @@ UMA_HISTOGRAM_PERCENTAGE, visibility, ad_frame_network_bytes * 100 / total_ad_frame_bytes); } + + // Only record same origin and main frame totals for the AnyVisibility suffix + // as these numbers do not change for different visibility types. + if (visibility != FrameData::FrameVisibility::kAnyVisibility) + return; + ADS_HISTOGRAM("Bytes.FullPage.SameOrigin", PAGE_BYTES_HISTOGRAM, visibility, + aggregate_frame_data_->same_origin_bytes()); + if (aggregate_frame_data_->bytes()) { + ADS_HISTOGRAM("Bytes.FullPage.PercentSameOrigin", UMA_HISTOGRAM_PERCENTAGE, + visibility, + aggregate_frame_data_->same_origin_bytes() * 100 / + aggregate_frame_data_->bytes()); + } + ADS_HISTOGRAM("Bytes.MainFrame.Network", PAGE_BYTES_HISTOGRAM, visibility, + main_frame_data_->network_bytes()); + ADS_HISTOGRAM("Bytes.MainFrame.Total", PAGE_BYTES_HISTOGRAM, visibility, + main_frame_data_->bytes()); + ADS_HISTOGRAM("Bytes.MainFrame.Ads.Network", PAGE_BYTES_HISTOGRAM, visibility, + main_frame_data_->ad_network_bytes()); + ADS_HISTOGRAM("Bytes.MainFrame.Ads.Total", PAGE_BYTES_HISTOGRAM, visibility, + main_frame_data_->ad_bytes()); } void AdsPageLoadMetricsObserver::ProcessOngoingNavigationResource(
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.h index b51e376..983618e 100644 --- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.h +++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.h
@@ -27,25 +27,6 @@ : public page_load_metrics::PageLoadMetricsObserver, public subresource_filter::SubresourceFilterObserver { public: - // High level categories of mime types for resources loaded by the page. - enum class ResourceMimeType { - kJavascript = 0, - kVideo = 1, - kImage = 2, - kCss = 3, - kHtml = 4, - kOther = 5, - kMaxValue = kOther, - }; - - // Whether or not the adframe size intervention would have triggered on - // this frame. These values are persisted to logs. Entries should not be - // renumbered and numeric values should never be reused. - enum class AdFrameSizeInterventionStatus { - kNone = 0, - kTriggered = 1, - kMaxValue = kTriggered, - }; // Returns a new AdsPageLoadMetricObserver. If the feature is disabled it // returns nullptr. @@ -59,6 +40,8 @@ content::RenderFrameHost* sub_host, bool use_parent_origin); + using ResourceMimeType = FrameData::ResourceMimeType; + AdsPageLoadMetricsObserver(); ~AdsPageLoadMetricsObserver() override; @@ -119,11 +102,10 @@ FrameTreeNodeId frame_tree_node_id, const page_load_metrics::mojom::ResourceDataUpdatePtr& resource); - // Get the mime type of a resource. This only returns a subset of mime types, - // grouped at a higher level. For example, all video mime types return the - // same value. - ResourceMimeType GetResourceMimeType( - const page_load_metrics::mojom::ResourceDataUpdatePtr& resource); + void AdjustAdBytesForFrame( + FrameTreeNodeId frame_tree_node_id, + const page_load_metrics::mojom::ResourceDataUpdatePtr& resource, + int64_t unaccounted_ad_bytes); // Update all of the per-resource page counters given a new resource data // update. Updates |page_resources_| to reflect the new state of the resource. @@ -178,13 +160,11 @@ // The web contents associated with this page load. content::WebContents* web_contents_ = nullptr; - // Tallies for bytes and counts observed in resource data updates for the - // entire page. - size_t page_ad_javascript_bytes_ = 0u; - size_t page_ad_video_bytes_ = 0u; - size_t page_ad_resource_bytes_ = 0u; - size_t page_main_frame_ad_resource_bytes_ = 0u; - uint32_t total_number_page_resources_ = 0; + // Tracks byte counts only for resources loaded in the main frame. + std::unique_ptr<FrameData> main_frame_data_; + + // Tracks byte counts for the entire page. + std::unique_ptr<FrameData> aggregate_frame_data_; // Flag denoting that this observer should no longer monitor changes in // display state for frames. This prevents us from receiving the updates when @@ -198,11 +178,8 @@ base::Time time_interactive_; // Total ad bytes loaded by the page since it was observed to be interactive. - size_t page_ad_resource_bytes_since_interactive_ = 0u; + size_t page_ad_bytes_at_interactive_ = 0u; - size_t page_bytes_ = 0u; - size_t page_network_bytes_ = 0u; - size_t page_same_origin_bytes_ = 0u; bool committed_ = false; ScopedObserver<subresource_filter::SubresourceFilterObserverManager,
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 f8f0be2..0856570 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
@@ -658,6 +658,7 @@ main_html_response->Send(kHttpResponseHeader); main_html_response->Send( "<html><body></body><script src=\"ad_script.js\"></script></html>"); + main_html_response->Send(std::string(1024, ' ')); main_html_response->Done(); ad_script_response->WaitForRequest(); @@ -679,7 +680,7 @@ vanilla_script_response->WaitForRequest(); vanilla_script_response->Send(kHttpResponseHeader); vanilla_script_response->Send(std::string(1024, ' ')); - waiter->AddMinimumNetworkBytesExpectation(4000); + waiter->AddMinimumNetworkBytesExpectation(5000); waiter->Wait(); // Verify correct numbers of resources are recorded. @@ -703,12 +704,17 @@ "Ads.ResourceUsage.Size.Network.Subframe.AdResource", 2); histogram_tester.ExpectBucketCount( - "PageLoad.Clients.Ads.Bytes.FullPage.Network", 4, 1); - // We have received 4 KB of ads and 1 KB of toplevel ads. + "PageLoad.Clients.Ads.Bytes.FullPage.Network", 5, 1); + // We have received 4 KB of ads and 1 KB of mainframe ads. histogram_tester.ExpectBucketCount("PageLoad.Clients.Ads.Resources.Bytes.Ads", 4, 1); histogram_tester.ExpectBucketCount( - "PageLoad.Clients.Ads.Resources.Bytes.TopLevelAds", 1, 1); + "PageLoad.Clients.Ads.Bytes.MainFrame.Ads.Total", 1, 1); + + // The main frame should have 2 KB of resources, 1KB from the main resource + // and one from the ad script in the main frame. + histogram_tester.ExpectBucketCount( + "PageLoad.Clients.Ads.Bytes.MainFrame.Total", 2, 1); // 4 resources loaded, one unfinished. histogram_tester.ExpectBucketCount(
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.cc index 23e72eb63..b5c7318ef 100644 --- a/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.cc +++ b/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.cc
@@ -3,10 +3,15 @@ // found in the LICENSE file. #include "chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.h" + #include <algorithm> +#include <string> + #include "chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" +#include "net/base/mime_util.h" +#include "third_party/blink/public/common/mime_util/mime_util.h" #include "url/gurl.h" namespace { @@ -17,9 +22,33 @@ } // namespace +// static +FrameData::ResourceMimeType FrameData::GetResourceMimeType( + const page_load_metrics::mojom::ResourceDataUpdatePtr& resource) { + if (blink::IsSupportedImageMimeType(resource->mime_type)) + return ResourceMimeType::kImage; + if (blink::IsSupportedJavascriptMimeType(resource->mime_type)) + return ResourceMimeType::kJavascript; + + std::string top_level_type; + std::string subtype; + // Categorize invalid mime types as "Other". + if (!net::ParseMimeTypeWithoutParameter(resource->mime_type, &top_level_type, + &subtype)) { + return ResourceMimeType::kOther; + } + if (top_level_type.compare("video") == 0) + return ResourceMimeType::kVideo; + if (top_level_type.compare("text") == 0 && subtype.compare("css") == 0) + return ResourceMimeType::kCss; + if (top_level_type.compare("text") == 0 && subtype.compare("html") == 0) + return ResourceMimeType::kHtml; + return ResourceMimeType::kOther; +} + FrameData::FrameData(FrameTreeNodeId frame_tree_node_id) - : frame_bytes_(0u), - frame_network_bytes_(0u), + : bytes_(0u), + network_bytes_(0u), same_origin_bytes_(0u), frame_tree_node_id_(frame_tree_node_id), origin_status_(OriginStatus::kUnknown), @@ -57,22 +86,47 @@ void FrameData::ProcessResourceLoadInFrame( const page_load_metrics::mojom::ResourceDataUpdatePtr& resource) { bool is_same_origin = origin_.IsSameOriginWith(resource->origin); - frame_bytes_ += resource->delta_bytes; - frame_network_bytes_ += resource->delta_bytes; + bytes_ += resource->delta_bytes; + network_bytes_ += resource->delta_bytes; if (is_same_origin) same_origin_bytes_ += resource->delta_bytes; // Report cached resource body bytes to overall frame bytes. if (resource->is_complete && resource->was_fetched_via_cache) { - frame_bytes_ += resource->encoded_body_length; + bytes_ += resource->encoded_body_length; if (is_same_origin) same_origin_bytes_ += resource->encoded_body_length; } - if (frame_bytes_ > kFrameSizeInterventionByteThreshold && + if (bytes_ > kFrameSizeInterventionByteThreshold && user_activation_status_ == UserActivationStatus::kNoActivation) { size_intervention_status_ = FrameSizeInterventionStatus::kTriggered; } + + if (resource->reported_as_ad_resource) { + ad_network_bytes_ += resource->delta_bytes; + ad_bytes_ += resource->delta_bytes; + // Report cached resource body bytes to overall frame bytes. + if (resource->is_complete && resource->was_fetched_via_cache) + ad_bytes_ += resource->encoded_body_length; + + ResourceMimeType mime_type = GetResourceMimeType(resource); + if (mime_type == ResourceMimeType::kVideo) + ad_video_network_bytes_ += resource->delta_bytes; + else if (mime_type == ResourceMimeType::kJavascript) + ad_javascript_network_bytes_ += resource->delta_bytes; + } +} + +void FrameData::AdjustAdBytes(int64_t unaccounted_ad_bytes, + ResourceMimeType mime_type) { + ad_network_bytes_ += unaccounted_ad_bytes; + ad_bytes_ += unaccounted_ad_bytes; + + if (mime_type == ResourceMimeType::kVideo) + ad_video_network_bytes_ += unaccounted_ad_bytes; + else if (mime_type == ResourceMimeType::kJavascript) + ad_javascript_network_bytes_ += unaccounted_ad_bytes; } void FrameData::SetFrameSize(gfx::Size frame_size) {
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.h b/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.h index c1959cc..4f0ca4c 100644 --- a/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.h +++ b/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.h
@@ -51,12 +51,29 @@ kMaxValue = kReceivedActivation, }; + // High level categories of mime types for resources loaded by the frame. + enum class ResourceMimeType { + kJavascript = 0, + kVideo = 1, + kImage = 2, + kCss = 3, + kHtml = 4, + kOther = 5, + kMaxValue = kOther, + }; + // Maximum number of bytes allowed to be loaded by a frame. static const int kFrameSizeInterventionByteThreshold = 1050 * 1024; using FrameTreeNodeId = page_load_metrics::PageLoadMetricsObserver::FrameTreeNodeId; + // Get the mime type of a resource. This only returns a subset of mime types, + // grouped at a higher level. For example, all video mime types return the + // same value. + static ResourceMimeType GetResourceMimeType( + const page_load_metrics::mojom::ResourceDataUpdatePtr& resource); + explicit FrameData(FrameTreeNodeId frame_tree_node_id); ~FrameData(); @@ -68,6 +85,11 @@ void ProcessResourceLoadInFrame( const page_load_metrics::mojom::ResourceDataUpdatePtr& resource); + // Adds additional bytes to the ad resource byte counts. This + // is used to notify the frame that some bytes were tagged as ad bytes after + // they were loaded. + void AdjustAdBytes(int64_t unaccounted_ad_bytes, ResourceMimeType mime_type); + // Sets the size of the frame and updates its visibility state. void SetFrameSize(gfx::Size frame_size_); @@ -84,12 +106,22 @@ OriginStatus origin_status() const { return origin_status_; } - size_t frame_bytes() const { return frame_bytes_; } + size_t bytes() const { return bytes_; } - size_t frame_network_bytes() const { return frame_network_bytes_; } + size_t network_bytes() const { return network_bytes_; } size_t same_origin_bytes() const { return same_origin_bytes_; } + size_t ad_bytes() const { return ad_bytes_; } + + size_t ad_network_bytes() const { return ad_network_bytes_; } + + size_t ad_video_network_bytes() const { return ad_video_network_bytes_; } + + size_t ad_javascript_network_bytes() const { + return ad_javascript_network_bytes_; + } + UserActivationStatus user_activation_status() const { return user_activation_status_; } @@ -108,9 +140,20 @@ // Updates whether or not this frame meets the criteria for visibility. void UpdateFrameVisibility(); - // Total bytes used to load resources on the page, including headers. - size_t frame_bytes_; - size_t frame_network_bytes_; + // Total bytes used to load resources in the frame, including headers. + size_t bytes_; + size_t network_bytes_; + + // Tallies for bytes and counts observed in resource data updates for the + // frame. + size_t ad_javascript_network_bytes_ = 0u; + size_t ad_video_network_bytes_ = 0u; + + // Tracks the number of bytes that were used to load resources which were + // detected to be ads inside of this frame. For ad frames, these counts should + // match |frame_bytes| and |frame_network_bytes|. + size_t ad_bytes_ = 0u; + size_t ad_network_bytes_ = 0u; // The number of bytes that are same origin to the root ad frame. size_t same_origin_bytes_;
diff --git a/chrome/browser/password_manager/password_manager_util_win.cc b/chrome/browser/password_manager/password_manager_util_win.cc index 32e3d12..d711d83 100644 --- a/chrome/browser/password_manager/password_manager_util_win.cc +++ b/chrome/browser/password_manager/password_manager_util_win.cc
@@ -527,7 +527,7 @@ void DelayReportOsPassword() { base::PostDelayedTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&GetOsPasswordStatus), + base::BindOnce(&GetOsPasswordStatus), base::TimeDelta::FromSeconds(40)); }
diff --git a/chrome/browser/pepper_flash_settings_manager.cc b/chrome/browser/pepper_flash_settings_manager.cc index ae29694..d09954a 100644 --- a/chrome/browser/pepper_flash_settings_manager.cc +++ b/chrome/browser/pepper_flash_settings_manager.cc
@@ -442,10 +442,10 @@ } #if defined(OS_CHROMEOS) - base::PostTaskWithTraits(FROM_HERE, - {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, - base::Bind(&Core::DeauthorizeContentLicensesAsync, - this, request_id, browser_context_path_)); + base::PostTaskWithTraits( + FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, + base::BindOnce(&Core::DeauthorizeContentLicensesAsync, this, request_id, + browser_context_path_)); #else DeauthorizeContentLicensesInPlugin(request_id, true); #endif
diff --git a/chrome/browser/performance_manager/graph/frame_node_impl.cc b/chrome/browser/performance_manager/graph/frame_node_impl.cc index af86349..da16a55c 100644 --- a/chrome/browser/performance_manager/graph/frame_node_impl.cc +++ b/chrome/browser/performance_manager/graph/frame_node_impl.cc
@@ -11,11 +11,9 @@ namespace performance_manager { -FrameNodeImpl::FrameNodeImpl( - const resource_coordinator::CoordinationUnitID& id, - Graph* graph, - std::unique_ptr<service_manager::ServiceKeepaliveRef> keepalive_ref) - : CoordinationUnitInterface(id, graph, std::move(keepalive_ref)), +FrameNodeImpl::FrameNodeImpl(const resource_coordinator::CoordinationUnitID& id, + Graph* graph) + : CoordinationUnitInterface(id, graph), parent_frame_coordination_unit_(nullptr), page_coordination_unit_(nullptr), process_coordination_unit_(nullptr) {
diff --git a/chrome/browser/performance_manager/graph/frame_node_impl.h b/chrome/browser/performance_manager/graph/frame_node_impl.h index 5c20bcc3..ee0e4a6 100644 --- a/chrome/browser/performance_manager/graph/frame_node_impl.h +++ b/chrome/browser/performance_manager/graph/frame_node_impl.h
@@ -29,10 +29,8 @@ return resource_coordinator::CoordinationUnitType::kFrame; } - FrameNodeImpl( - const resource_coordinator::CoordinationUnitID& id, - Graph* graph, - std::unique_ptr<service_manager::ServiceKeepaliveRef> keepalive_ref); + FrameNodeImpl(const resource_coordinator::CoordinationUnitID& id, + Graph* graph); ~FrameNodeImpl() override; // FrameNode implementation.
diff --git a/chrome/browser/performance_manager/graph/graph.cc b/chrome/browser/performance_manager/graph/graph.cc index 76dd47f4..f50b9cc 100644 --- a/chrome/browser/performance_manager/graph/graph.cc +++ b/chrome/browser/performance_manager/graph/graph.cc
@@ -48,10 +48,9 @@ } void Graph::OnStart(service_manager::BinderRegistryWithArgs< - const service_manager::BindSourceInfo&>* registry, - service_manager::ServiceKeepalive* keepalive) { + const service_manager::BindSourceInfo&>* registry) { // Create the singleton CoordinationUnitProvider. - provider_ = std::make_unique<GraphNodeProviderImpl>(keepalive, this); + provider_ = std::make_unique<GraphNodeProviderImpl>(this); registry->AddInterface(base::BindRepeating( &GraphNodeProviderImpl::Bind, base::Unretained(provider_.get()))); } @@ -75,32 +74,27 @@ } FrameNodeImpl* Graph::CreateFrameNode( - const resource_coordinator::CoordinationUnitID& id, - std::unique_ptr<service_manager::ServiceKeepaliveRef> service_ref) { - return FrameNodeImpl::Create(id, this, std::move(service_ref)); + const resource_coordinator::CoordinationUnitID& id) { + return FrameNodeImpl::Create(id, this); } PageNodeImpl* Graph::CreatePageNode( - const resource_coordinator::CoordinationUnitID& id, - std::unique_ptr<service_manager::ServiceKeepaliveRef> service_ref) { - return PageNodeImpl::Create(id, this, std::move(service_ref)); + const resource_coordinator::CoordinationUnitID& id) { + return PageNodeImpl::Create(id, this); } ProcessNodeImpl* Graph::CreateProcessNode( - const resource_coordinator::CoordinationUnitID& id, - std::unique_ptr<service_manager::ServiceKeepaliveRef> service_ref) { - return ProcessNodeImpl::Create(id, this, std::move(service_ref)); + const resource_coordinator::CoordinationUnitID& id) { + return ProcessNodeImpl::Create(id, this); } -SystemNodeImpl* Graph::FindOrCreateSystemNode( - std::unique_ptr<service_manager::ServiceKeepaliveRef> service_ref) { +SystemNodeImpl* Graph::FindOrCreateSystemNode() { NodeBase* system_cu = GetNodeByID(system_coordination_unit_id_); if (system_cu) return SystemNodeImpl::FromNodeBase(system_cu); // Create the singleton SystemCU instance. Ownership is taken by the graph. - return SystemNodeImpl::Create(system_coordination_unit_id_, this, - std::move(service_ref)); + return SystemNodeImpl::Create(system_coordination_unit_id_, this); } NodeBase* Graph::GetNodeByID(
diff --git a/chrome/browser/performance_manager/graph/graph.h b/chrome/browser/performance_manager/graph/graph.h index 1e8bc4fc..c19591b 100644 --- a/chrome/browser/performance_manager/graph/graph.h +++ b/chrome/browser/performance_manager/graph/graph.h
@@ -17,7 +17,6 @@ #include "services/metrics/public/cpp/ukm_recorder.h" #include "services/resource_coordinator/public/cpp/coordination_unit_id.h" #include "services/resource_coordinator/public/cpp/coordination_unit_types.h" -#include "services/service_manager/public/cpp/service_keepalive.h" namespace service_manager { template <typename... BinderArgs> @@ -50,23 +49,18 @@ ukm::UkmRecorder* ukm_recorder() const { return ukm_recorder_; } void OnStart(service_manager::BinderRegistryWithArgs< - const service_manager::BindSourceInfo&>* registry, - service_manager::ServiceKeepalive* keepalive); + const service_manager::BindSourceInfo&>* registry); void RegisterObserver(std::unique_ptr<GraphObserver> observer); void OnNodeCreated(NodeBase* coordination_unit); void OnBeforeNodeDestroyed(NodeBase* coordination_unit); FrameNodeImpl* CreateFrameNode( - const resource_coordinator::CoordinationUnitID& id, - std::unique_ptr<service_manager::ServiceKeepaliveRef> service_ref); + const resource_coordinator::CoordinationUnitID& id); PageNodeImpl* CreatePageNode( - const resource_coordinator::CoordinationUnitID& id, - std::unique_ptr<service_manager::ServiceKeepaliveRef> service_ref); + const resource_coordinator::CoordinationUnitID& id); ProcessNodeImpl* CreateProcessNode( - const resource_coordinator::CoordinationUnitID& id, - std::unique_ptr<service_manager::ServiceKeepaliveRef> service_ref); - SystemNodeImpl* FindOrCreateSystemNode( - std::unique_ptr<service_manager::ServiceKeepaliveRef> service_ref); + const resource_coordinator::CoordinationUnitID& id); + SystemNodeImpl* FindOrCreateSystemNode(); std::vector<ProcessNodeImpl*> GetAllProcessNodes(); std::vector<FrameNodeImpl*> GetAllFrameNodes(); @@ -105,7 +99,7 @@ ukm::UkmRecorder* ukm_recorder_ = nullptr; std::unique_ptr<GraphNodeProviderImpl> provider_; - static void Create(service_manager::ServiceKeepalive* keepalive); + static void Create(); DISALLOW_COPY_AND_ASSIGN(Graph); };
diff --git a/chrome/browser/performance_manager/graph/graph_node_provider_impl.cc b/chrome/browser/performance_manager/graph/graph_node_provider_impl.cc index 5fbc4f3f..b408024 100644 --- a/chrome/browser/performance_manager/graph/graph_node_provider_impl.cc +++ b/chrome/browser/performance_manager/graph/graph_node_provider_impl.cc
@@ -17,14 +17,8 @@ namespace performance_manager { -GraphNodeProviderImpl::GraphNodeProviderImpl( - service_manager::ServiceKeepalive* service_keepalive, - Graph* coordination_unit_graph) - : service_keepalive_(service_keepalive), - coordination_unit_graph_(coordination_unit_graph) { - DCHECK(service_keepalive_); - keepalive_ref_ = service_keepalive_->CreateRef(); -} +GraphNodeProviderImpl::GraphNodeProviderImpl(Graph* coordination_unit_graph) + : coordination_unit_graph_(coordination_unit_graph) {} GraphNodeProviderImpl::~GraphNodeProviderImpl() = default; @@ -35,8 +29,7 @@ void GraphNodeProviderImpl::CreateFrameCoordinationUnit( resource_coordinator::mojom::FrameCoordinationUnitRequest request, const resource_coordinator::CoordinationUnitID& id) { - FrameNodeImpl* frame_cu = coordination_unit_graph_->CreateFrameNode( - id, service_keepalive_->CreateRef()); + FrameNodeImpl* frame_cu = coordination_unit_graph_->CreateFrameNode(id); frame_cu->Bind(std::move(request)); auto& frame_cu_binding = frame_cu->binding(); @@ -49,8 +42,7 @@ void GraphNodeProviderImpl::CreatePageCoordinationUnit( resource_coordinator::mojom::PageCoordinationUnitRequest request, const resource_coordinator::CoordinationUnitID& id) { - PageNodeImpl* page_cu = coordination_unit_graph_->CreatePageNode( - id, service_keepalive_->CreateRef()); + PageNodeImpl* page_cu = coordination_unit_graph_->CreatePageNode(id); page_cu->Bind(std::move(request)); auto& page_cu_binding = page_cu->binding(); @@ -63,8 +55,7 @@ void GraphNodeProviderImpl::CreateProcessCoordinationUnit( resource_coordinator::mojom::ProcessCoordinationUnitRequest request, const resource_coordinator::CoordinationUnitID& id) { - ProcessNodeImpl* process_cu = coordination_unit_graph_->CreateProcessNode( - id, service_keepalive_->CreateRef()); + ProcessNodeImpl* process_cu = coordination_unit_graph_->CreateProcessNode(id); process_cu->Bind(std::move(request)); auto& process_cu_binding = process_cu->binding(); @@ -77,9 +68,8 @@ void GraphNodeProviderImpl::GetSystemCoordinationUnit( resource_coordinator::mojom::SystemCoordinationUnitRequest request) { // Simply fetch the existing SystemCU and add an additional binding to it. - coordination_unit_graph_ - ->FindOrCreateSystemNode(service_keepalive_->CreateRef()) - ->AddBinding(std::move(request)); + coordination_unit_graph_->FindOrCreateSystemNode()->AddBinding( + std::move(request)); } void GraphNodeProviderImpl::Bind(
diff --git a/chrome/browser/performance_manager/graph/graph_node_provider_impl.h b/chrome/browser/performance_manager/graph/graph_node_provider_impl.h index a3fd3090..19739ea 100644 --- a/chrome/browser/performance_manager/graph/graph_node_provider_impl.h +++ b/chrome/browser/performance_manager/graph/graph_node_provider_impl.h
@@ -12,7 +12,6 @@ #include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/interface_request.h" #include "services/resource_coordinator/public/mojom/coordination_unit_provider.mojom.h" -#include "services/service_manager/public/cpp/service_keepalive.h" namespace service_manager { struct BindSourceInfo; @@ -23,8 +22,7 @@ class GraphNodeProviderImpl : public resource_coordinator::mojom::CoordinationUnitProvider { public: - GraphNodeProviderImpl(service_manager::ServiceKeepalive* service_keepalive, - Graph* coordination_unit_graph); + explicit GraphNodeProviderImpl(Graph* coordination_unit_graph); ~GraphNodeProviderImpl() override; void Bind( @@ -48,8 +46,6 @@ override; private: - service_manager::ServiceKeepalive* const service_keepalive_; - std::unique_ptr<service_manager::ServiceKeepaliveRef> keepalive_ref_; Graph* coordination_unit_graph_; mojo::BindingSet<resource_coordinator::mojom::CoordinationUnitProvider> bindings_;
diff --git a/chrome/browser/performance_manager/graph/graph_test_harness.cc b/chrome/browser/performance_manager/graph/graph_test_harness.cc index bb92d74..830260c3 100644 --- a/chrome/browser/performance_manager/graph/graph_test_harness.cc +++ b/chrome/browser/performance_manager/graph/graph_test_harness.cc
@@ -12,9 +12,7 @@ GraphTestHarness::GraphTestHarness() : task_env_(base::test::ScopedTaskEnvironment::MainThreadType::MOCK_TIME, base::test::ScopedTaskEnvironment::ExecutionMode::QUEUED), - service_keepalive_(static_cast<service_manager::ServiceBinding*>(nullptr), - base::nullopt /* idle_timeout */), - provider_(&service_keepalive_, &coordination_unit_graph_) {} + provider_(&coordination_unit_graph_) {} GraphTestHarness::~GraphTestHarness() = default;
diff --git a/chrome/browser/performance_manager/graph/graph_test_harness.h b/chrome/browser/performance_manager/graph/graph_test_harness.h index 5031a2b..d4a62095 100644 --- a/chrome/browser/performance_manager/graph/graph_test_harness.h +++ b/chrome/browser/performance_manager/graph/graph_test_harness.h
@@ -13,7 +13,6 @@ #include "chrome/browser/performance_manager/graph/graph_node_provider_impl.h" #include "chrome/browser/performance_manager/graph/node_base.h" #include "chrome/browser/performance_manager/graph/system_node_impl.h" -#include "services/service_manager/public/cpp/service_keepalive.h" #include "testing/gtest/include/gtest/gtest.h" namespace resource_coordinator { @@ -30,7 +29,7 @@ static TestNodeWrapper<NodeClass> Create(Graph* graph) { resource_coordinator::CoordinationUnitID cu_id( NodeClass::Type(), resource_coordinator::CoordinationUnitID::RANDOM_ID); - return TestNodeWrapper<NodeClass>(NodeClass::Create(cu_id, graph, nullptr)); + return TestNodeWrapper<NodeClass>(NodeClass::Create(cu_id, graph)); } explicit TestNodeWrapper(NodeClass* impl) : impl_(impl) { DCHECK(impl); } @@ -63,8 +62,8 @@ template <class NodeClass> TestNodeWrapper<NodeClass> CreateCoordinationUnit( resource_coordinator::CoordinationUnitID cu_id) { - return TestNodeWrapper<NodeClass>(NodeClass::Create( - cu_id, coordination_unit_graph(), service_keepalive_.CreateRef())); + return TestNodeWrapper<NodeClass>( + NodeClass::Create(cu_id, coordination_unit_graph())); } template <class NodeClass> @@ -76,8 +75,7 @@ TestNodeWrapper<SystemNodeImpl> GetSystemCoordinationUnit() { return TestNodeWrapper<SystemNodeImpl>( - coordination_unit_graph()->FindOrCreateSystemNode( - service_keepalive_.CreateRef())); + coordination_unit_graph()->FindOrCreateSystemNode()); } // testing::Test: @@ -90,7 +88,6 @@ private: base::test::ScopedTaskEnvironment task_env_; - service_manager::ServiceKeepalive service_keepalive_; Graph coordination_unit_graph_; GraphNodeProviderImpl provider_; };
diff --git a/chrome/browser/performance_manager/graph/graph_unittest.cc b/chrome/browser/performance_manager/graph/graph_unittest.cc index fe189e0d..4d40133 100644 --- a/chrome/browser/performance_manager/graph/graph_unittest.cc +++ b/chrome/browser/performance_manager/graph/graph_unittest.cc
@@ -14,11 +14,9 @@ namespace { ProcessNodeImpl* CreateProcessNode(Graph* graph) { - return graph->CreateProcessNode( - resource_coordinator::CoordinationUnitID( - resource_coordinator::CoordinationUnitType::kProcess, - resource_coordinator::CoordinationUnitID::RANDOM_ID), - nullptr); + return graph->CreateProcessNode(resource_coordinator::CoordinationUnitID( + resource_coordinator::CoordinationUnitType::kProcess, + resource_coordinator::CoordinationUnitID::RANDOM_ID)); } } // namespace @@ -33,7 +31,7 @@ process->SetPID(i + 100); } - EXPECT_NE(nullptr, graph->FindOrCreateSystemNode(nullptr)); + EXPECT_NE(nullptr, graph->FindOrCreateSystemNode()); // This should destroy all the CUs without incident. graph.reset(); @@ -42,15 +40,15 @@ TEST(GraphTest, FindOrCreateSystemNode) { Graph graph; - SystemNodeImpl* system_cu = graph.FindOrCreateSystemNode(nullptr); + SystemNodeImpl* system_cu = graph.FindOrCreateSystemNode(); // A second request should return the same instance. - EXPECT_EQ(system_cu, graph.FindOrCreateSystemNode(nullptr)); + EXPECT_EQ(system_cu, graph.FindOrCreateSystemNode()); // Destructing the system CU should be allowed. system_cu->Destruct(); - system_cu = graph.FindOrCreateSystemNode(nullptr); + system_cu = graph.FindOrCreateSystemNode(); EXPECT_NE(nullptr, system_cu); }
diff --git a/chrome/browser/performance_manager/graph/node_base.h b/chrome/browser/performance_manager/graph/node_base.h index 05ca68d..5f93ab0 100644 --- a/chrome/browser/performance_manager/graph/node_base.h +++ b/chrome/browser/performance_manager/graph/node_base.h
@@ -19,7 +19,6 @@ #include "services/resource_coordinator/public/cpp/coordination_unit_types.h" #include "services/resource_coordinator/public/mojom/coordination_unit.mojom.h" #include "services/resource_coordinator/public/mojom/coordination_unit_provider.mojom.h" -#include "services/service_manager/public/cpp/service_keepalive.h" namespace performance_manager { @@ -90,11 +89,9 @@ public: static CoordinationUnitClass* Create( const resource_coordinator::CoordinationUnitID& id, - Graph* graph, - std::unique_ptr<service_manager::ServiceKeepaliveRef> keepalive_ref) { + Graph* graph) { std::unique_ptr<CoordinationUnitClass> new_cu = - std::make_unique<CoordinationUnitClass>(id, graph, - std::move(keepalive_ref)); + std::make_unique<CoordinationUnitClass>(id, graph); return static_cast<CoordinationUnitClass*>( PassOwnershipToGraph(std::move(new_cu))); } @@ -109,14 +106,9 @@ return static_cast<CoordinationUnitClass*>(cu); } - CoordinationUnitInterface( - const resource_coordinator::CoordinationUnitID& id, - Graph* graph, - - std::unique_ptr<service_manager::ServiceKeepaliveRef> keepalive_ref) - : NodeBase(id, graph), binding_(this) { - keepalive_ref_ = std::move(keepalive_ref); - } + CoordinationUnitInterface(const resource_coordinator::CoordinationUnitID& id, + Graph* graph) + : NodeBase(id, graph), binding_(this) {} ~CoordinationUnitInterface() override = default; @@ -146,7 +138,6 @@ private: mojo::BindingSet<MojoInterfaceClass> bindings_; mojo::Binding<MojoInterfaceClass> binding_; - std::unique_ptr<service_manager::ServiceKeepaliveRef> keepalive_ref_; DISALLOW_COPY_AND_ASSIGN(CoordinationUnitInterface); };
diff --git a/chrome/browser/performance_manager/graph/page_node_impl.cc b/chrome/browser/performance_manager/graph/page_node_impl.cc index 8fc8adc..301964d 100644 --- a/chrome/browser/performance_manager/graph/page_node_impl.cc +++ b/chrome/browser/performance_manager/graph/page_node_impl.cc
@@ -27,11 +27,9 @@ } // namespace -PageNodeImpl::PageNodeImpl( - const resource_coordinator::CoordinationUnitID& id, - Graph* graph, - std::unique_ptr<service_manager::ServiceKeepaliveRef> keepalive_ref) - : CoordinationUnitInterface(id, graph, std::move(keepalive_ref)) { +PageNodeImpl::PageNodeImpl(const resource_coordinator::CoordinationUnitID& id, + Graph* graph) + : CoordinationUnitInterface(id, graph) { InvalidateAllInterventionPolicies(); }
diff --git a/chrome/browser/performance_manager/graph/page_node_impl.h b/chrome/browser/performance_manager/graph/page_node_impl.h index 8a0e42ab..90749623 100644 --- a/chrome/browser/performance_manager/graph/page_node_impl.h +++ b/chrome/browser/performance_manager/graph/page_node_impl.h
@@ -24,10 +24,8 @@ return resource_coordinator::CoordinationUnitType::kPage; } - PageNodeImpl( - const resource_coordinator::CoordinationUnitID& id, - Graph* graph, - std::unique_ptr<service_manager::ServiceKeepaliveRef> keepalive_ref); + PageNodeImpl(const resource_coordinator::CoordinationUnitID& id, + Graph* graph); ~PageNodeImpl() override; // resource_coordinator::mojom::PageCoordinationUnit implementation.
diff --git a/chrome/browser/performance_manager/graph/process_node_impl.cc b/chrome/browser/performance_manager/graph/process_node_impl.cc index f2d129d..8a5ebee6 100644 --- a/chrome/browser/performance_manager/graph/process_node_impl.cc +++ b/chrome/browser/performance_manager/graph/process_node_impl.cc
@@ -12,9 +12,8 @@ ProcessNodeImpl::ProcessNodeImpl( const resource_coordinator::CoordinationUnitID& id, - Graph* graph, - std::unique_ptr<service_manager::ServiceKeepaliveRef> keepalive_ref) - : CoordinationUnitInterface(id, graph, std::move(keepalive_ref)) {} + Graph* graph) + : CoordinationUnitInterface(id, graph) {} ProcessNodeImpl::~ProcessNodeImpl() { // Make as if we're transitioning to the null PID before we die to clear this
diff --git a/chrome/browser/performance_manager/graph/process_node_impl.h b/chrome/browser/performance_manager/graph/process_node_impl.h index 26ff993..3cdaef06 100644 --- a/chrome/browser/performance_manager/graph/process_node_impl.h +++ b/chrome/browser/performance_manager/graph/process_node_impl.h
@@ -37,10 +37,8 @@ return resource_coordinator::CoordinationUnitType::kProcess; } - ProcessNodeImpl( - const resource_coordinator::CoordinationUnitID& id, - Graph* graph, - std::unique_ptr<service_manager::ServiceKeepaliveRef> keepalive_ref); + ProcessNodeImpl(const resource_coordinator::CoordinationUnitID& id, + Graph* graph); ~ProcessNodeImpl() override; // resource_coordinator::mojom::ProcessCoordinationUnit implementation.
diff --git a/chrome/browser/performance_manager/graph/system_node_impl.cc b/chrome/browser/performance_manager/graph/system_node_impl.cc index 26c02c7..b0af5d3 100644 --- a/chrome/browser/performance_manager/graph/system_node_impl.cc +++ b/chrome/browser/performance_manager/graph/system_node_impl.cc
@@ -18,9 +18,8 @@ SystemNodeImpl::SystemNodeImpl( const resource_coordinator::CoordinationUnitID& id, - Graph* graph, - std::unique_ptr<service_manager::ServiceKeepaliveRef> keepalive_ref) - : CoordinationUnitInterface(id, graph, std::move(keepalive_ref)) {} + Graph* graph) + : CoordinationUnitInterface(id, graph) {} SystemNodeImpl::~SystemNodeImpl() = default;
diff --git a/chrome/browser/performance_manager/graph/system_node_impl.h b/chrome/browser/performance_manager/graph/system_node_impl.h index fdfc7ae..65b3f86 100644 --- a/chrome/browser/performance_manager/graph/system_node_impl.h +++ b/chrome/browser/performance_manager/graph/system_node_impl.h
@@ -21,10 +21,8 @@ return resource_coordinator::CoordinationUnitType::kSystem; } - SystemNodeImpl( - const resource_coordinator::CoordinationUnitID& id, - Graph* graph, - std::unique_ptr<service_manager::ServiceKeepaliveRef> keepalive_ref); + SystemNodeImpl(const resource_coordinator::CoordinationUnitID& id, + Graph* graph); ~SystemNodeImpl() override; // resource_coordinator::mojom::SystemCoordinationUnit implementation:
diff --git a/chrome/browser/performance_manager/performance_manager.cc b/chrome/browser/performance_manager/performance_manager.cc index 6c077ef..d9b8181c 100644 --- a/chrome/browser/performance_manager/performance_manager.cc +++ b/chrome/browser/performance_manager/performance_manager.cc
@@ -38,10 +38,7 @@ } PerformanceManager::PerformanceManager() - : service_keepalive_(static_cast<service_manager::ServiceBinding*>(nullptr), - base::nullopt), - task_runner_(CreateTaskRunner()), - introspector_(&graph_) { + : task_runner_(CreateTaskRunner()), introspector_(&graph_) { DETACH_FROM_SEQUENCE(sequence_checker_); } @@ -127,7 +124,7 @@ graph_.set_ukm_recorder(ukm_recorder_.get()); } - graph_.OnStart(&interface_registry_, &service_keepalive_); + graph_.OnStart(&interface_registry_); } void PerformanceManager::BindInterfaceImpl( @@ -140,7 +137,7 @@ void PerformanceManager::DistributeMeasurementBatchImpl( resource_coordinator::mojom::ProcessResourceMeasurementBatchPtr batch) { - SystemNodeImpl* system_node = graph_.FindOrCreateSystemNode(nullptr); + SystemNodeImpl* system_node = graph_.FindOrCreateSystemNode(); DCHECK(system_node); system_node->DistributeMeasurementBatch(std::move(batch));
diff --git a/chrome/browser/performance_manager/performance_manager.h b/chrome/browser/performance_manager/performance_manager.h index 1b68984..ea4063c 100644 --- a/chrome/browser/performance_manager/performance_manager.h +++ b/chrome/browser/performance_manager/performance_manager.h
@@ -20,7 +20,6 @@ #include "services/service_manager/public/cpp/bind_source_info.h" #include "services/service_manager/public/cpp/binder_registry.h" #include "services/service_manager/public/cpp/connector.h" -#include "services/service_manager/public/cpp/service_keepalive.h" namespace ukm { class MojoUkmRecorder; @@ -81,9 +80,6 @@ const service_manager::BindSourceInfo& source_info); void OnGraphDumpConnectionError(WebUIGraphDumpImpl* graph_dump); - // TODO(siggi): Remove this as it's only here to maintain compatibility - // with the current interface of the CoordinationUnits. - service_manager::ServiceKeepalive service_keepalive_; InterfaceRegistry interface_registry_; // The performance task runner.
diff --git a/chrome/browser/performance_monitor/metric_evaluator_helper_posix.cc b/chrome/browser/performance_monitor/metric_evaluator_helper_posix.cc index 63aae7b..cd0f9ac 100644 --- a/chrome/browser/performance_monitor/metric_evaluator_helper_posix.cc +++ b/chrome/browser/performance_monitor/metric_evaluator_helper_posix.cc
@@ -16,4 +16,9 @@ return base::nullopt; } +base::Optional<float> MetricEvaluatorsHelperPosix::GetDiskIdleTimePercent() { + NOTREACHED(); + return base::nullopt; +} + } // namespace performance_monitor
diff --git a/chrome/browser/performance_monitor/metric_evaluator_helper_posix.h b/chrome/browser/performance_monitor/metric_evaluator_helper_posix.h index 3f5febc..5d7063f4 100644 --- a/chrome/browser/performance_monitor/metric_evaluator_helper_posix.h +++ b/chrome/browser/performance_monitor/metric_evaluator_helper_posix.h
@@ -16,6 +16,7 @@ // MetricEvaluatorsHelper: base::Optional<int> GetFreePhysicalMemoryMb() override; + base::Optional<float> GetDiskIdleTimePercent() override; private: DISALLOW_COPY_AND_ASSIGN(MetricEvaluatorsHelperPosix);
diff --git a/chrome/browser/performance_monitor/metric_evaluator_helper_win.cc b/chrome/browser/performance_monitor/metric_evaluator_helper_win.cc index d7e50c48..e0b2254 100644 --- a/chrome/browser/performance_monitor/metric_evaluator_helper_win.cc +++ b/chrome/browser/performance_monitor/metric_evaluator_helper_win.cc
@@ -7,6 +7,7 @@ #include <windows.h> #include "base/optional.h" +#include "base/task_runner_util.h" namespace performance_monitor { @@ -16,7 +17,23 @@ } // namespace -MetricEvaluatorsHelperWin::MetricEvaluatorsHelperWin() = default; +MetricEvaluatorsHelperWin::MetricEvaluatorsHelperWin() + : wmi_initialization_sequence_(base::CreateSequencedTaskRunnerWithTraits( + {base::TaskPriority::BEST_EFFORT, base::MayBlock(), + base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN})), + wmi_refresher_(new win::WMIRefresher(), + base::OnTaskRunnerDeleter(wmi_initialization_sequence_)), + weak_factory_(this) { + // TODO(sebmarchand): Boost the priority of this task if the WMI refresher is + // needed before this task had a chance to run. + base::PostTaskAndReplyWithResult( + wmi_initialization_sequence_.get(), FROM_HERE, + base::BindOnce(&win::WMIRefresher::InitializeDiskIdleTimeConfig, + base::Unretained(wmi_refresher_.get())), + base::BindOnce(&MetricEvaluatorsHelperWin::OnWMIRefresherInitialized, + weak_factory_.GetWeakPtr())); +} + MetricEvaluatorsHelperWin::~MetricEvaluatorsHelperWin() = default; base::Optional<int> MetricEvaluatorsHelperWin::GetFreePhysicalMemoryMb() { @@ -28,4 +45,10 @@ return (mem_status.ullAvailPhys / kMBBytes); } +base::Optional<float> MetricEvaluatorsHelperWin::GetDiskIdleTimePercent() { + if (wmi_refresher_initialized_) + return wmi_refresher_->RefreshAndGetDiskIdleTimeInPercent(); + return base::nullopt; +} + } // namespace performance_monitor
diff --git a/chrome/browser/performance_monitor/metric_evaluator_helper_win.h b/chrome/browser/performance_monitor/metric_evaluator_helper_win.h index 2a7d53c..03d52c43 100644 --- a/chrome/browser/performance_monitor/metric_evaluator_helper_win.h +++ b/chrome/browser/performance_monitor/metric_evaluator_helper_win.h
@@ -5,7 +5,15 @@ #ifndef CHROME_BROWSER_PERFORMANCE_MONITOR_METRIC_EVALUATOR_HELPER_WIN_H_ #define CHROME_BROWSER_PERFORMANCE_MONITOR_METRIC_EVALUATOR_HELPER_WIN_H_ +#include <memory> + +#include "base/macros.h" +#include "base/memory/scoped_refptr.h" +#include "base/memory/weak_ptr.h" +#include "base/sequence_checker.h" +#include "base/task/post_task.h" #include "chrome/browser/performance_monitor/system_monitor.h" +#include "chrome/browser/performance_monitor/wmi_refresher.h" namespace performance_monitor { @@ -16,8 +24,34 @@ // MetricEvaluatorsHelper: base::Optional<int> GetFreePhysicalMemoryMb() override; + base::Optional<float> GetDiskIdleTimePercent() override; + + bool wmi_refresher_initialized_for_testing() { + return wmi_refresher_initialized_; + } private: + // Callback that should be called once the initialization of the WMI refresher + // has completed. + void OnWMIRefresherInitialized(bool init_success) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + wmi_refresher_initialized_ = init_success; + } + + // Indicates if the WMI refresher has been initialized. + bool wmi_refresher_initialized_ = false; + + // The sequence on which the WMI refresher is going to be initialized. + scoped_refptr<base::SequencedTaskRunner> wmi_initialization_sequence_; + + // The WMI refresher used to retrieve performance data via WMI. + const std::unique_ptr<win::WMIRefresher, base::OnTaskRunnerDeleter> + wmi_refresher_; + + SEQUENCE_CHECKER(sequence_checker_); + + base::WeakPtrFactory<MetricEvaluatorsHelperWin> weak_factory_; + DISALLOW_COPY_AND_ASSIGN(MetricEvaluatorsHelperWin); };
diff --git a/chrome/browser/performance_monitor/metric_evaluator_helper_win_unittest.cc b/chrome/browser/performance_monitor/metric_evaluator_helper_win_unittest.cc index d01f9077..0b4e1b8 100644 --- a/chrome/browser/performance_monitor/metric_evaluator_helper_win_unittest.cc +++ b/chrome/browser/performance_monitor/metric_evaluator_helper_win_unittest.cc
@@ -4,11 +4,25 @@ #include "chrome/browser/performance_monitor/metric_evaluator_helper_win.h" +#include "base/test/scoped_task_environment.h" +#include "base/win/scoped_com_initializer.h" #include "testing/gtest/include/gtest/gtest.h" namespace performance_monitor { -using MetricEvaluatorsHelperWinTest = testing::Test; +class MetricEvaluatorsHelperWinTest : public testing::Test { + public: + MetricEvaluatorsHelperWinTest() + : scoped_com_initializer_(base::win::ScopedCOMInitializer::kMTA) {} + ~MetricEvaluatorsHelperWinTest() override = default; + + protected: + base::win::ScopedCOMInitializer scoped_com_initializer_; + base::test::ScopedTaskEnvironment scoped_task_environment_; + + private: + DISALLOW_COPY_AND_ASSIGN(MetricEvaluatorsHelperWinTest); +}; TEST_F(MetricEvaluatorsHelperWinTest, GetFreeMemory) { MetricEvaluatorsHelperWin metric_evaluator_helper; @@ -17,4 +31,18 @@ EXPECT_GT(value.value(), 0); } +TEST_F(MetricEvaluatorsHelperWinTest, DiskIdleTime) { + MetricEvaluatorsHelperWin metric_evaluator_helper; + while (!metric_evaluator_helper.wmi_refresher_initialized_for_testing()) + scoped_task_environment_.RunUntilIdle(); + + // Measuring the disk idle time will always return base::nullopt for the first + // sample on Windows. + metric_evaluator_helper.GetDiskIdleTimePercent(); + auto refreshed_metrics = metric_evaluator_helper.GetDiskIdleTimePercent(); + EXPECT_TRUE(refreshed_metrics); + EXPECT_LE(0.0, refreshed_metrics.value()); + EXPECT_GE(1.0, refreshed_metrics.value()); +} + } // namespace performance_monitor
diff --git a/chrome/browser/performance_monitor/system_monitor.cc b/chrome/browser/performance_monitor/system_monitor.cc index 11d4291..89a5f694 100644 --- a/chrome/browser/performance_monitor/system_monitor.cc +++ b/chrome/browser/performance_monitor/system_monitor.cc
@@ -45,12 +45,13 @@ } // namespace -SystemMonitor::SystemMonitor(std::unique_ptr<MetricEvaluatorsHelper> helper) +SystemMonitor::SystemMonitor( + std::unique_ptr<MetricEvaluatorsHelper> metric_evaluators_helper) : blocking_task_runner_(base::CreateSequencedTaskRunnerWithTraits( {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN})), metric_evaluators_helper_( - helper.release(), + metric_evaluators_helper.release(), base::OnTaskRunnerDeleter(blocking_task_runner_)), metric_evaluators_metadata_(CreateMetricMetadataArray()), weak_factory_(this) { @@ -79,6 +80,11 @@ NOTREACHED(); } +void SystemMonitor::SystemObserver::OnDiskIdleTimePercent( + float disk_idle_time_percent) { + NOTREACHED(); +} + void SystemMonitor::AddOrUpdateObserver( SystemMonitor::SystemObserver* observer, MetricRefreshFrequencies metrics_and_frequencies) { @@ -138,10 +144,12 @@ return metric_refresh_frequencies.metric_freq_field; \ }) return { - // kFreeMemoryMb: CREATE_METRIC_METADATA(kFreeMemoryMb, int, GetFreePhysicalMemoryMb, OnFreePhysicalMemoryMbSample, free_phys_memory_mb_frequency), + CREATE_METRIC_METADATA(kDiskIdleTimePercent, float, + GetDiskIdleTimePercent, OnDiskIdleTimePercent, + disk_idle_time_percent_frequency), }; #undef CREATE_METRIC_METADATA } // namespace performance_monitor
diff --git a/chrome/browser/performance_monitor/system_monitor.h b/chrome/browser/performance_monitor/system_monitor.h index 3113588..ad00cea 100644 --- a/chrome/browser/performance_monitor/system_monitor.h +++ b/chrome/browser/performance_monitor/system_monitor.h
@@ -11,6 +11,7 @@ #include "base/containers/flat_map.h" #include "base/macros.h" +#include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "base/optional.h" #include "base/sequence_checker.h" @@ -67,12 +68,19 @@ struct MetricRefreshFrequencies { SamplingFrequency free_phys_memory_mb_frequency = SamplingFrequency::kNoSampling; + + SamplingFrequency disk_idle_time_percent_frequency = + SamplingFrequency::kNoSampling; }; ~SystemObserver() override = default; // Reports the amount of free physical memory, in MB. virtual void OnFreePhysicalMemoryMbSample(int free_phys_memory_mb); + + // Reports the disk idle time during the last observation interval, in + // percent (between 0.0 and 1.0). + virtual void OnDiskIdleTimePercent(float disk_idle_time_percent); }; using ObserverToFrequenciesMap = base::flat_map<SystemObserver*, SystemObserver::MetricRefreshFrequencies>; @@ -93,6 +101,11 @@ return refresh_timer_; } + void SetMetricEvaluatorsHelperForTesting( + std::unique_ptr<MetricEvaluatorsHelper> helper) { + metric_evaluators_helper_.reset(helper.release()); + } + protected: friend class SystemMonitorTest; @@ -101,6 +114,7 @@ public: enum class Type : size_t { kFreeMemoryMb, + kDiskIdleTimePercent, kMax, }; @@ -268,6 +282,10 @@ // Returns the free physical memory, in megabytes. virtual base::Optional<int> GetFreePhysicalMemoryMb() = 0; + // Return the disk idle time, in percentage of time since the last call to + // this function (returns nullopt on the first call). + virtual base::Optional<float> GetDiskIdleTimePercent() = 0; + private: DISALLOW_COPY_AND_ASSIGN(MetricEvaluatorsHelper); };
diff --git a/chrome/browser/performance_monitor/system_monitor_unittest.cc b/chrome/browser/performance_monitor/system_monitor_unittest.cc index 3da0433..6184c236 100644 --- a/chrome/browser/performance_monitor/system_monitor_unittest.cc +++ b/chrome/browser/performance_monitor/system_monitor_unittest.cc
@@ -19,11 +19,13 @@ using MetricsRefreshFrequencies = SystemObserver::MetricRefreshFrequencies; const int kFakeFreePhysMemoryMb = 42; +const float kFakeDiskIdleTimePercent = 0.07; class MockMetricsMonitorObserver : public SystemObserver { public: ~MockMetricsMonitorObserver() override {} MOCK_METHOD1(OnFreePhysicalMemoryMbSample, void(int free_phys_memory_mb)); + MOCK_METHOD1(OnDiskIdleTimePercent, void(float disk_idle_time_percent)); }; // Test version of a MetricEvaluatorsHelper that returns constant values. @@ -36,6 +38,10 @@ return kFakeFreePhysMemoryMb; } + base::Optional<float> GetDiskIdleTimePercent() override { + return kFakeDiskIdleTimePercent; + } + private: DISALLOW_COPY_AND_ASSIGN(TestMetricEvaluatorsHelper); }; @@ -44,6 +50,9 @@ class SystemMonitorTest : public testing::Test { protected: + using MetricEvaluator = SystemMonitor::MetricEvaluator; + using MetricMetadata = SystemMonitor::MetricMetadata; + SystemMonitorTest() : scoped_task_environment_( base::test::ScopedTaskEnvironment::MainThreadType::MOCK_TIME) {} @@ -57,14 +66,18 @@ void TearDown() override { system_monitor_.reset(); } void EnsureMetricsAreObservedAtExpectedFrequency( - SamplingFrequency expected_free_memory_mb_freq) { + SamplingFrequency expected_free_memory_mb_freq, + SamplingFrequency expected_disk_idle_time_percent_freq) { const auto& observed_metrics_and_frequencies = system_monitor_->GetMetricSamplingFrequencyArrayForTesting(); - EXPECT_EQ(1U, observed_metrics_and_frequencies.size()); + EXPECT_EQ(2U, observed_metrics_and_frequencies.size()); EXPECT_EQ(expected_free_memory_mb_freq, observed_metrics_and_frequencies[static_cast<size_t>( SystemMonitor::MetricEvaluator::Type::kFreeMemoryMb)]); + EXPECT_EQ(expected_disk_idle_time_percent_freq, + observed_metrics_and_frequencies[static_cast<size_t>( + SystemMonitor::MetricEvaluator::Type::kDiskIdleTimePercent)]); } std::unique_ptr<SystemMonitor> system_monitor_; @@ -89,7 +102,8 @@ // The first observer doesn't observe anything yet. MetricsRefreshFrequencies obs1_metrics_frequencies = {}; system_monitor_->AddOrUpdateObserver(&obs1, obs1_metrics_frequencies); - EnsureMetricsAreObservedAtExpectedFrequency(SamplingFrequency::kNoSampling); + EnsureMetricsAreObservedAtExpectedFrequency(SamplingFrequency::kNoSampling, + SamplingFrequency::kNoSampling); // Add a second observer that observes the amount of free memory at the // default frequency. @@ -97,40 +111,52 @@ .free_phys_memory_mb_frequency = SamplingFrequency::kDefaultFrequency}; system_monitor_->AddOrUpdateObserver(&obs2, obs2_metrics_frequencies); EnsureMetricsAreObservedAtExpectedFrequency( - SamplingFrequency::kDefaultFrequency); + SamplingFrequency::kDefaultFrequency, SamplingFrequency::kNoSampling); - // Add a third observer that also observes the amount of free memory at the - // default frequency. + // Add a third observer that observes the amount of free memory and the disk + // idle time at the default frequency. MetricsRefreshFrequencies obs3_metrics_frequencies = { - .free_phys_memory_mb_frequency = SamplingFrequency::kDefaultFrequency}; + .free_phys_memory_mb_frequency = SamplingFrequency::kDefaultFrequency, + .disk_idle_time_percent_frequency = SamplingFrequency::kDefaultFrequency}; system_monitor_->AddOrUpdateObserver(&obs3, obs3_metrics_frequencies); EnsureMetricsAreObservedAtExpectedFrequency( + SamplingFrequency::kDefaultFrequency, SamplingFrequency::kDefaultFrequency); // Stop observing any metric with the second observer. obs2_metrics_frequencies.free_phys_memory_mb_frequency = SamplingFrequency::kNoSampling; + obs2_metrics_frequencies.disk_idle_time_percent_frequency = + SamplingFrequency::kNoSampling; system_monitor_->AddOrUpdateObserver(&obs2, obs2_metrics_frequencies); EnsureMetricsAreObservedAtExpectedFrequency( + SamplingFrequency::kDefaultFrequency, SamplingFrequency::kDefaultFrequency); // Remove the third observer, ensure that no metrics are observed anymore. system_monitor_->RemoveObserver(&obs3); - EnsureMetricsAreObservedAtExpectedFrequency(SamplingFrequency::kNoSampling); + EnsureMetricsAreObservedAtExpectedFrequency(SamplingFrequency::kNoSampling, + SamplingFrequency::kNoSampling); } TEST_F(SystemMonitorTest, ObserverGetsCalled) { - ::testing::StrictMock<MockMetricsMonitorObserver> mock_observer; + ::testing::StrictMock<MockMetricsMonitorObserver> mock_observer_1; system_monitor_->AddOrUpdateObserver( - &mock_observer, + &mock_observer_1, {.free_phys_memory_mb_frequency = SamplingFrequency::kDefaultFrequency}); + ::testing::StrictMock<MockMetricsMonitorObserver> mock_observer_2; + system_monitor_->AddOrUpdateObserver( + &mock_observer_2, {.disk_idle_time_percent_frequency = + SamplingFrequency::kDefaultFrequency}); + // Ensure that we get several samples to verify that the timer logic works. - EXPECT_CALL(mock_observer, OnFreePhysicalMemoryMbSample( - ::testing::Eq(kFakeFreePhysMemoryMb))) + EXPECT_CALL(mock_observer_1, + OnFreePhysicalMemoryMbSample(kFakeFreePhysMemoryMb)) .Times(2); - EXPECT_TRUE(system_monitor_->refresh_timer_for_testing().IsRunning()); + EXPECT_CALL(mock_observer_2, OnDiskIdleTimePercent(kFakeDiskIdleTimePercent)) + .Times(2); // Fast forward by enough time to get multiple samples and wait for the tasks // to complete. @@ -138,7 +164,8 @@ 2 * system_monitor_->refresh_timer_for_testing().GetCurrentDelay()); scoped_task_environment_.RunUntilIdle(); - ::testing::Mock::VerifyAndClear(&mock_observer); + ::testing::Mock::VerifyAndClear(&mock_observer_1); + ::testing::Mock::VerifyAndClear(&mock_observer_2); } } // namespace performance_monitor
diff --git a/chrome/browser/performance_monitor/wmi_refresher.cc b/chrome/browser/performance_monitor/wmi_refresher.cc new file mode 100644 index 0000000..4b79320 --- /dev/null +++ b/chrome/browser/performance_monitor/wmi_refresher.cc
@@ -0,0 +1,273 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/performance_monitor/wmi_refresher.h" + +#include <Wbemidl.h> + +#include <algorithm> +#include <limits> +#include <vector> + +#include "base/metrics/histogram_macros.h" +#include "base/threading/scoped_blocking_call.h" +#include "base/timer/elapsed_timer.h" +#include "base/win/com_init_util.h" + +namespace performance_monitor { +namespace win { + +namespace { + +using Microsoft::WRL::ComPtr; + +// Helper function to read a property from a IWbemObjectAccess object. +bool GetPropertyHandle(base::Optional<long>* handle, + Microsoft::WRL::ComPtr<IWbemObjectAccess> enum_object, + LPCWSTR property_name) { + DCHECK(handle); + CIMTYPE prop_type = 0; + long handle_value = 0; + if (FAILED(enum_object->GetPropertyHandle(property_name, &prop_type, + &handle_value))) { + return false; + } + *handle = handle_value; + return true; +} + +// Compute the delta between 2 observations. The counters might wrap once they +// reach std::numeric_limits<DWORD>::max(). +DWORD CalculateObservationDelta(DWORD ref_value, DWORD new_value) { + if (new_value > ref_value) { + return new_value - ref_value; + } else { + return std::numeric_limits<DWORD>::max() - ref_value + new_value; + } +} + +} // namespace + +// There is an enum of the same name in tools/metrics/histograms/enums.xml. +// Be sure to add new values there also. +enum class WMIRefresher::InitStatus { + kInitStatusOk, + kLocalWMIConnectionError, + kRefresherCreationError, + kRefresherConfigError, + kRefresherAddEnumError, + kMaxValue = kRefresherAddEnumError +}; + +// There is an enum of the same name in tools/metrics/histograms/enums.xml. +// Be sure to add new values there also. +enum class WMIRefresher::RefreshStatus { + kRefreshOk, + kRefreshFailed, + kGetObjectFailed, + kGetPropertyHandleFailed, + kReadValueFailed, + kMaxValue = kReadValueFailed +}; + +WMIRefresher::WMIRefresher() : initialized_called_(false) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +} + +WMIRefresher::~WMIRefresher() = default; + +bool WMIRefresher::InitializeDiskIdleTimeConfig() { + DCHECK(!initialized_called_); + WMIRefresher::InitStatus result = WMIRefresher::InitStatus::kInitStatusOk; + InitializeDiskIdleTimeConfigImpl(&result); + + UMA_HISTOGRAM_ENUMERATION( + "Memory.Experimental.WMIRefresher.InitDiskIdleTimeConfigStatus", result); + + initialized_called_ = true; + + return result == InitStatus::kInitStatusOk; +} + +void WMIRefresher::InitializeDiskIdleTimeConfigImpl( + WMIRefresher::InitStatus* res) { + DCHECK(res); + + base::ScopedBlockingCall scoped_blocking_call(base::BlockingType::MAY_BLOCK); + + // This assumes that CoInitialize(Ex) has already been called on this thread. + AssertComApartmentType(base::win::ComApartmentType::MTA); + + if (!base::win::CreateLocalWmiConnection(true /* set_blanket */, + &wmi_services_)) { + LOG(ERROR) << "Unable to create the local WMI connection"; + *res = InitStatus::kLocalWMIConnectionError; + return; + } + + HRESULT hr = S_OK; + // Creates the WMI refresher interface. + if (FAILED(hr = ::CoCreateInstance(CLSID_WbemRefresher, nullptr, + CLSCTX_INPROC_SERVER, + IID_PPV_ARGS(&wmi_refresher_)))) { + LOG(ERROR) << "Unable to create the WMI refresher interface."; + *res = InitStatus::kRefresherCreationError; + return; + } + + // Get the interface to configure the refresher. + ComPtr<IWbemConfigureRefresher> wmi_refresher_config; + hr = wmi_refresher_.As(&wmi_refresher_config); + if (FAILED(hr)) { + LOG(ERROR) << "Unable to configure the WMI refresher."; + *res = InitStatus::kRefresherConfigError; + return; + } + + long wmi_refresher_enum_id = 0; + // Add the enumerator for the disk performance data. + hr = wmi_refresher_config->AddEnum( + wmi_services_.Get(), L"Win32_PerfRawData_PerfDisk_PhysicalDisk", 0, + nullptr, &wmi_refresher_enum_, &wmi_refresher_enum_id); + if (FAILED(hr)) { + LOG(ERROR) + << "Unable to add the Win32_PerfRawData_PerfDisk_PhysicalDisk enum."; + *res = InitStatus::kRefresherAddEnumError; + return; + } + *res = InitStatus::kInitStatusOk; + + refresh_ready_ = true; +} + +base::Optional<float> WMIRefresher::RefreshAndGetDiskIdleTimeInPercent() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(initialized_called_); + WMIRefresher::RefreshStatus result = WMIRefresher::RefreshStatus::kRefreshOk; + auto idle_time = RefreshAndGetDiskIdleTimeInPercentImpl(&result); + + UMA_HISTOGRAM_ENUMERATION( + "Memory.Experimental.WMIRefresher.RefreshDiskIdleTimeStatus", result); + return idle_time; +} + +base::Optional<float> WMIRefresher::RefreshAndGetDiskIdleTimeInPercentImpl( + WMIRefresher::RefreshStatus* res) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(res); + DCHECK(refresh_ready_); + AssertComApartmentType(base::win::ComApartmentType::MTA); + + base::Optional<float> idle_time; + + // Don't use the SCOPED_UMA_HISTOGRAM_TIMER to ensure that we only report this + // on success. + base::ElapsedTimer elapsed_timer; + + HRESULT hr = wmi_refresher_->Refresh(WBEM_FLAG_REFRESH_AUTO_RECONNECT); + if (FAILED(hr)) { + LOG(ERROR) << "Error while trying to use the WMI refresher."; + *res = RefreshStatus::kRefreshFailed; + return idle_time; + } + + // Get the objects owned by the enumerator. + ULONG number_of_objects = 0; + static_assert(sizeof(Microsoft::WRL::ComPtr<IWbemObjectAccess>) == + sizeof(IWbemObjectAccess*), + "This code assumes that the size of a ComPtr<T> object is " + "equal to the size of T*."); + std::vector<Microsoft::WRL::ComPtr<IWbemObjectAccess>> + wmi_refresher_enum_objects; + DCHECK_GT(wmi_refresher_enum_objects_latest_count_, 0U); + wmi_refresher_enum_objects.resize(wmi_refresher_enum_objects_latest_count_); + hr = wmi_refresher_enum_->GetObjects(0L, wmi_refresher_enum_objects.size(), + &wmi_refresher_enum_objects[0], + &number_of_objects); + + // The number of objects returned might change over time (e.g. when connecting + // an external hard drive). If the number of objects returned is smaller than + // the size of the vector then the latest(s) element(s) will be left + // uninitialized. + wmi_refresher_enum_objects_latest_count_ = number_of_objects; + + // Resize the buffer if necessary. + if (hr == WBEM_E_BUFFER_TOO_SMALL && + number_of_objects > wmi_refresher_enum_objects.size()) { + wmi_refresher_enum_objects.clear(); + wmi_refresher_enum_objects.resize(wmi_refresher_enum_objects_latest_count_); + if (FAILED(hr = wmi_refresher_enum_->GetObjects( + 0L, wmi_refresher_enum_objects.size(), + &wmi_refresher_enum_objects[0], &number_of_objects))) { + *res = RefreshStatus::kGetObjectFailed; + return idle_time; + } + } + + // Ensure that we can safely access wmi_refresher_enum_objects[0] after this. + CHECK_GE(number_of_objects, 1U); + + // Initialize the property handles if necessary. + if (!percent_idle_time_prop_handle_ && + !GetPropertyHandle(&percent_idle_time_prop_handle_, + wmi_refresher_enum_objects[0], L"PercentIdleTime")) { + *res = RefreshStatus::kGetPropertyHandleFailed; + return idle_time; + } + if (!percent_idle_time_base_prop_handle_ && + !GetPropertyHandle(&percent_idle_time_base_prop_handle_, + wmi_refresher_enum_objects[0], + L"PercentIdleTime_Base")) { + *res = RefreshStatus::kGetPropertyHandleFailed; + return idle_time; + } + + // Read the property values. + // + // TODO(crbug.com/907635): This only looks at the first object returned, which + // is the total idle time for all disks. Instead there should probably be two + // values: + // - Idle time for the disk containing the Chrome user data directory. + // - Idle time for the disk hosting the pagefile. + DWORD new_idle_time = 0; + DWORD new_percent_idle_time_base = 0; + if (FAILED(hr = wmi_refresher_enum_objects[0]->ReadDWORD( + percent_idle_time_prop_handle_.value(), &new_idle_time))) { + *res = RefreshStatus::kReadValueFailed; + return idle_time; + } + if (FAILED(hr = wmi_refresher_enum_objects[0]->ReadDWORD( + percent_idle_time_base_prop_handle_.value(), + &new_percent_idle_time_base))) { + *res = RefreshStatus::kReadValueFailed; + return idle_time; + } + + // Compute the delta if we have at least 2 samples. + if (latest_percent_idle_time_val_ && latest_percent_idle_time_base_val_) { + // Note that although this value is coming from a property called + // "PercentIdleTime" it's not a direct percentage value. In order to get the + // actual percentage value it's required to compute + // (new_value - old_value) / (new_value_base - old_value_base). + DWORD percent_idle_time_delta = CalculateObservationDelta( + latest_percent_idle_time_val_.value(), new_idle_time); + DWORD percent_idle_time_base_delta = CalculateObservationDelta( + latest_percent_idle_time_base_val_.value(), new_percent_idle_time_base); + + idle_time = std::min(1.0f, static_cast<float>(percent_idle_time_delta) / + percent_idle_time_base_delta); + } + + latest_percent_idle_time_val_ = new_idle_time; + latest_percent_idle_time_base_val_ = new_percent_idle_time_base; + + UMA_HISTOGRAM_TIMES( + "Memory.Experimental.WMIRefresher.RefreshDiskIdleTimeDuration", + elapsed_timer.Elapsed()); + *res = RefreshStatus::kRefreshOk; + return idle_time; +} + +} // namespace win +} // namespace performance_monitor
diff --git a/chrome/browser/performance_monitor/wmi_refresher.h b/chrome/browser/performance_monitor/wmi_refresher.h new file mode 100644 index 0000000..c0facf2 --- /dev/null +++ b/chrome/browser/performance_monitor/wmi_refresher.h
@@ -0,0 +1,99 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_PERFORMANCE_MONITOR_WMI_REFRESHER_H_ +#define CHROME_BROWSER_PERFORMANCE_MONITOR_WMI_REFRESHER_H_ + +#include <wrl/client.h> + +#include <atomic> + +#include "base/base_export.h" +#include "base/callback.h" +#include "base/optional.h" +#include "base/sequence_checker.h" +#include "base/system/system_monitor.h" +#include "base/win/wmi.h" + +namespace performance_monitor { +namespace win { + +// Wrapper around an IWbemRefresher instance used to retrieve some system +// performance counters. +// +// This object should live on a MayBlock() sequence. Concurrent calls to +// RefreshAndGetDiskIdleTimeInPercent are not allowed. +// +// This class relies on the fact that by default all sequences are in a +// multithreaded COM apartment. +class WMIRefresher { + public: + WMIRefresher(); + ~WMIRefresher(); + + // Initialize everything needed to retrieve the disk idle time data via WMI. + // This should only be called once. This can be called on a sequence different + // than the one on which this object has been created. + // + // Returns true on success, false otherwise. + bool InitializeDiskIdleTimeConfig(); + + // Refresh the disk idle time data from WMI. This cannot be called until the + // call to InitializeDiskIdleTimeConfig has completed. + // + // Returns the disk idle time in percent if available (between 0.0 and 100.0), + // base::nullopt otherwise. + base::Optional<float> RefreshAndGetDiskIdleTimeInPercent(); + + private: + enum class InitStatus; + enum class RefreshStatus; + + // Implementation of |Start|. + void InitializeDiskIdleTimeConfigImpl(InitStatus* res); + + // Implementation of |Refresh|. + base::Optional<float> RefreshAndGetDiskIdleTimeInPercentImpl( + RefreshStatus* res); + + // The WMI service instance. + Microsoft::WRL::ComPtr<IWbemServices> wmi_services_; + + // The refresher responsible for collecting some local performance data via + // WMI. |wmi_refresher_->Refresh()| should be called at regular intervals to + // refresh the data. + Microsoft::WRL::ComPtr<IWbemRefresher> wmi_refresher_; + + // The WMI enumerator. + Microsoft::WRL::ComPtr<IWbemHiPerfEnum> wmi_refresher_enum_; + + // The latest number of objects returned by the refresher, initialized to 2 as + // it's the minimal number of objects returned by the refresher (one for the + // "Total" value and one per hard drive). + size_t wmi_refresher_enum_objects_latest_count_ = 2; + + // The handle to the properties that need to be read in |Refresh|. + base::Optional<long> percent_idle_time_prop_handle_; + base::Optional<long> percent_idle_time_base_prop_handle_; + + // Latest values that have been read in |Refresh|. + base::Optional<DWORD> latest_percent_idle_time_val_; + base::Optional<DWORD> latest_percent_idle_time_base_val_; + + // Indicates if |InitializeDiskIdleTimeConfig| has already been called. + std::atomic<bool> initialized_called_; + + // Indicates if everything is properly initialized and if this object is + // ready to be used. + bool refresh_ready_ = false; + + SEQUENCE_CHECKER(sequence_checker_); + + DISALLOW_COPY_AND_ASSIGN(WMIRefresher); +}; + +} // namespace win +} // namespace performance_monitor + +#endif // CHROME_BROWSER_PERFORMANCE_MONITOR_WMI_REFRESHER_H_
diff --git a/chrome/browser/performance_monitor/wmi_refresher_unittest.cc b/chrome/browser/performance_monitor/wmi_refresher_unittest.cc new file mode 100644 index 0000000..77e47bd --- /dev/null +++ b/chrome/browser/performance_monitor/wmi_refresher_unittest.cc
@@ -0,0 +1,59 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/performance_monitor/wmi_refresher.h" + +#include <cmath> +#include <limits> + +#include "base/bind.h" +#include "base/sequenced_task_runner.h" +#include "base/task/post_task.h" +#include "base/task_runner_util.h" +#include "base/test/scoped_task_environment.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace performance_monitor { +namespace win { + +namespace { + +using WMIRefresherTest = testing::Test; + +} // namespace + +// This test assume that the WMI service is available in all supported version +// of Windows. +TEST_F(WMIRefresherTest, EndToEnd) { + base::test::ScopedTaskEnvironment env; + PostTask(FROM_HERE, base::BindOnce([] { + // The WMIRefresher objects have to live on a sequence with the + // MayBlock trait. + base::ScopedAllowBlockingForTesting allow_blocking; + + win::WMIRefresher wmi_refresher; + + // NOTE: This call can take a few seconds to run as it has to wait + // for the WMI service to be initialized. In theory this is + // something that could take a long time as it's depending on a + // Windows service, in practice this takes between 5 and 10 seconds + // at most. If this test fails then the system call will probably + // have to be mocked, which isn't ideal as this'll mean that the + // real system call won't be tested. + EXPECT_TRUE(wmi_refresher.InitializeDiskIdleTimeConfig()); + + base::Optional<float> disk_idle_time; + while (!disk_idle_time) + disk_idle_time = + wmi_refresher.RefreshAndGetDiskIdleTimeInPercent(); + + // Sanity check the data. + EXPECT_GE(disk_idle_time.value(), 0.0f); + EXPECT_LE(disk_idle_time.value(), 1.0f); + })); + env.RunUntilIdle(); +} + +} // namespace win +} // namespace performance_monitor
diff --git a/chrome/browser/platform_util_mac.mm b/chrome/browser/platform_util_mac.mm index c34fd5ce..4965e6c 100644 --- a/chrome/browser/platform_util_mac.mm +++ b/chrome/browser/platform_util_mac.mm
@@ -59,7 +59,7 @@ switch (type) { case OPEN_FILE: base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&OpenFileOnMainThread, path)); + base::BindOnce(&OpenFileOnMainThread, path)); return; case OPEN_FOLDER: NSString* path_string = base::SysUTF8ToNSString(path.value());
diff --git a/chrome/browser/policy/cloud/device_management_service_browsertest.cc b/chrome/browser/policy/cloud/device_management_service_browsertest.cc index 4fdb04d..0f56a07 100644 --- a/chrome/browser/policy/cloud/device_management_service_browsertest.cc +++ b/chrome/browser/policy/cloud/device_management_service_browsertest.cc
@@ -125,7 +125,7 @@ EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _, _)) .WillOnce(DoAll( Invoke(this, &DeviceManagementServiceIntegrationTest::RecordToken), - InvokeWithoutArgs(&run_loop, &base::RunLoop::QuitWhenIdle))); + InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit))); std::unique_ptr<DeviceManagementRequestJob> job(service_->CreateJob( DeviceManagementRequestJob::TYPE_REGISTRATION, GetFactory())); job->SetOAuthTokenParameter("oauth_token"); @@ -182,7 +182,7 @@ EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _, _)) .WillOnce(DoAll( Invoke(this, &DeviceManagementServiceIntegrationTest::RecordAuthCode), - InvokeWithoutArgs(&run_loop, &base::RunLoop::QuitWhenIdle))); + InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit))); std::unique_ptr<DeviceManagementRequestJob> job(service_->CreateJob( DeviceManagementRequestJob::TYPE_API_AUTH_CODE_FETCH, GetFactory())); job->SetAuthData(DMAuth::FromDMToken(token_)); @@ -202,7 +202,7 @@ base::RunLoop run_loop; EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _, _)) - .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::QuitWhenIdle)); + .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); std::unique_ptr<DeviceManagementRequestJob> job(service_->CreateJob( DeviceManagementRequestJob::TYPE_POLICY_FETCH, GetFactory())); job->SetAuthData(DMAuth::FromDMToken(token_)); @@ -220,7 +220,7 @@ base::RunLoop run_loop; EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _, _)) - .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::QuitWhenIdle)); + .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); std::unique_ptr<DeviceManagementRequestJob> job(service_->CreateJob( DeviceManagementRequestJob::TYPE_UNREGISTRATION, GetFactory())); job->SetAuthData(DMAuth::FromDMToken(token_)); @@ -234,7 +234,7 @@ IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, AutoEnrollment) { base::RunLoop run_loop; EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _, _)) - .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::QuitWhenIdle)); + .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); std::unique_ptr<DeviceManagementRequestJob> job(service_->CreateJob( DeviceManagementRequestJob::TYPE_AUTO_ENROLLMENT, GetFactory())); job->SetAuthData(DMAuth::NoAuth()); @@ -252,7 +252,7 @@ base::RunLoop run_loop; EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _, _)) - .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::QuitWhenIdle)); + .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); std::unique_ptr<DeviceManagementRequestJob> job(service_->CreateJob( DeviceManagementRequestJob::TYPE_UPLOAD_APP_INSTALL_REPORT, GetFactory()));
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index 3a14537..cc9a57f 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -90,6 +90,7 @@ #include "components/invalidation/impl/invalidator_registrar_with_memory.h" #include "components/invalidation/impl/per_user_topic_registration_manager.h" #include "components/language/content/browser/geo_language_provider.h" +#include "components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator.h" #include "components/language/core/browser/language_prefs.h" #include "components/metrics/metrics_pref_names.h" #include "components/network_time/network_time_tracker.h" @@ -455,6 +456,7 @@ IntranetRedirectDetector::RegisterPrefs(registry); IOThread::RegisterPrefs(registry); language::GeoLanguageProvider::RegisterLocalStatePrefs(registry); + language::UlpLanguageCodeLocator::RegisterLocalStatePrefs(registry); network_time::NetworkTimeTracker::RegisterPrefs(registry); OriginTrialPrefs::RegisterPrefs(registry); password_manager::PasswordManager::RegisterLocalPrefs(registry);
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc index 439ddb1..2b19751 100644 --- a/chrome/browser/prerender/prerender_browsertest.cc +++ b/chrome/browser/prerender/prerender_browsertest.cc
@@ -217,20 +217,6 @@ DISALLOW_COPY_AND_ASSIGN(FaviconUpdateWatcher); }; -class MockNetworkChangeNotifierWIFI : public NetworkChangeNotifier { - public: - ConnectionType GetCurrentConnectionType() const override { - return NetworkChangeNotifier::CONNECTION_WIFI; - } -}; - -class MockNetworkChangeNotifier4G : public NetworkChangeNotifier { - public: - ConnectionType GetCurrentConnectionType() const override { - return NetworkChangeNotifier::CONNECTION_4G; - } -}; - // Constants used in the test HTML files. const char* kReadyTitle = "READY"; const char* kPassTitle = "PASS";
diff --git a/chrome/browser/printing/printer_manager_dialog_win.cc b/chrome/browser/printing/printer_manager_dialog_win.cc index 6659071d8c..9ea0e81 100644 --- a/chrome/browser/printing/printer_manager_dialog_win.cc +++ b/chrome/browser/printing/printer_manager_dialog_win.cc
@@ -35,7 +35,7 @@ void PrinterManagerDialog::ShowPrinterManagerDialog() { base::PostTaskWithTraits( FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_BLOCKING}, - base::Bind(OpenPrintersDialogCallback)); + base::BindOnce(OpenPrintersDialogCallback)); } } // namespace printing
diff --git a/chrome/browser/printing/printing_message_filter.cc b/chrome/browser/printing/printing_message_filter.cc index df6cdee8..a864d0b 100644 --- a/chrome/browser/printing/printing_message_filter.cc +++ b/chrome/browser/printing/printing_message_filter.cc
@@ -264,8 +264,8 @@ int routing_id = reply_msg->routing_id(); base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&PrintingMessageFilter::NotifySystemDialogCancelled, this, - routing_id)); + base::BindOnce(&PrintingMessageFilter::NotifySystemDialogCancelled, + this, routing_id)); } #endif PrintHostMsg_UpdatePrintSettings::WriteReplyParams(reply_msg, params,
diff --git a/chrome/browser/profile_resetter/profile_resetter_browsertest.cc b/chrome/browser/profile_resetter/profile_resetter_browsertest.cc index feef5f6..8cb6d0a 100644 --- a/chrome/browser/profile_resetter/profile_resetter_browsertest.cc +++ b/chrome/browser/profile_resetter/profile_resetter_browsertest.cc
@@ -93,7 +93,7 @@ base::Time(), false, false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - false /* secure_source */, true /* modify_http_only */, + "http", true /* modify_http_only */, base::BindOnce(&RemoveCookieTester::SetCanonicalCookieCallback, base::Unretained(this))); BlockUntilNotified();
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc index d64a9b0..1fc22c6 100644 --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc
@@ -296,7 +296,7 @@ base::PostTaskWithTraits(FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::BLOCK_SHUTDOWN}, - base::Bind(&CreateProfileReadme, path)); + base::BindOnce(&CreateProfileReadme, path)); } }
diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc index 3733e33..381627f04 100644 --- a/chrome/browser/profiles/profile_io_data.cc +++ b/chrome/browser/profiles/profile_io_data.cc
@@ -246,9 +246,10 @@ if (token_info.has_value() && token_info->slot != -1) { DVLOG(1) << "Got TPM slot for " << username_hash << ": " << token_info->slot; - base::PostTaskWithTraits(FROM_HERE, {BrowserThread::IO}, - base::Bind(&crypto::InitializeTPMForChromeOSUser, - username_hash, token_info->slot)); + base::PostTaskWithTraits( + FROM_HERE, {BrowserThread::IO}, + base::BindOnce(&crypto::InitializeTPMForChromeOSUser, username_hash, + token_info->slot)); } else { NOTREACHED() << "TPMTokenInfoGetter reported invalid token."; } @@ -281,7 +282,7 @@ base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&GetTPMInfoForUserOnUIThread, account_id, username_hash)); + base::BindOnce(&GetTPMInfoForUserOnUIThread, account_id, username_hash)); } void StartNSSInitOnIOThread(const AccountId& account_id, @@ -403,8 +404,8 @@ DCHECK(!params->username_hash.empty()); base::PostTaskWithTraits( FROM_HERE, {BrowserThread::IO}, - base::Bind(&StartNSSInitOnIOThread, user->GetAccountId(), - user->username_hash(), profile->GetPath())); + base::BindOnce(&StartNSSInitOnIOThread, user->GetAccountId(), + user->username_hash(), profile->GetPath())); // Use the device-wide system key slot only if the user is affiliated on // the device.
diff --git a/chrome/browser/profiles/profile_shortcut_manager_win.cc b/chrome/browser/profiles/profile_shortcut_manager_win.cc index d55bcc7..ab869ce 100644 --- a/chrome/browser/profiles/profile_shortcut_manager_win.cc +++ b/chrome/browser/profiles/profile_shortcut_manager_win.cc
@@ -248,7 +248,7 @@ } base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&OnProfileIconCreateSuccess, profile_path)); + base::BindOnce(&OnProfileIconCreateSuccess, profile_path)); return icon_path; }
diff --git a/chrome/browser/renderer_host/chrome_extension_message_filter.cc b/chrome/browser/renderer_host/chrome_extension_message_filter.cc index f8473b4..d35d855 100644 --- a/chrome/browser/renderer_host/chrome_extension_message_filter.cc +++ b/chrome/browser/renderer_host/chrome_extension_message_filter.cc
@@ -163,8 +163,9 @@ // This blocks tab loading. Priority is inherited from the calling context. base::PostTaskWithTraits( FROM_HERE, {base::MayBlock()}, - base::Bind(&ChromeExtensionMessageFilter::OnGetExtMessageBundleAsync, - this, paths_to_load, extension_id, default_locale, reply_msg)); + base::BindOnce(&ChromeExtensionMessageFilter::OnGetExtMessageBundleAsync, + this, paths_to_load, extension_id, default_locale, + reply_msg)); } void ChromeExtensionMessageFilter::OnGetExtMessageBundleAsync(
diff --git a/chrome/browser/renderer_host/chrome_render_message_filter.cc b/chrome/browser/renderer_host/chrome_render_message_filter.cc index 0edcc50..c57e844 100644 --- a/chrome/browser/renderer_host/chrome_render_message_filter.cc +++ b/chrome/browser/renderer_host/chrome_render_message_filter.cc
@@ -145,8 +145,9 @@ cookie_settings_->IsCookieAccessAllowed(origin_url, top_origin_url); base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&TabSpecificContentSettings::WebDatabaseAccessed, - render_process_id_, render_frame_id, origin_url, !*allowed)); + base::BindOnce(&TabSpecificContentSettings::WebDatabaseAccessed, + render_process_id_, render_frame_id, origin_url, + !*allowed)); } void ChromeRenderMessageFilter::OnAllowDOMStorage(int render_frame_id, @@ -159,9 +160,9 @@ // Record access to DOM storage for potential display in UI. base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&TabSpecificContentSettings::DOMStorageAccessed, - render_process_id_, render_frame_id, origin_url, local, - !*allowed)); + base::BindOnce(&TabSpecificContentSettings::DOMStorageAccessed, + render_process_id_, render_frame_id, origin_url, local, + !*allowed)); } void ChromeRenderMessageFilter::OnRequestFileSystemAccessSync( @@ -227,9 +228,9 @@ // Record access to file system for potential display in UI. base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&ChromeRenderMessageFilter::FileSystemAccessedOnUIThread, - render_process_id_, render_frame_id, origin_url, allowed, - callback)); + base::BindOnce(&ChromeRenderMessageFilter::FileSystemAccessedOnUIThread, + render_process_id_, render_frame_id, origin_url, allowed, + callback)); return; } #endif @@ -237,8 +238,9 @@ // Record access to file system for potential display in UI. base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&TabSpecificContentSettings::FileSystemAccessed, - render_process_id_, render_frame_id, origin_url, !allowed)); + base::BindOnce(&TabSpecificContentSettings::FileSystemAccessed, + render_process_id_, render_frame_id, origin_url, + !allowed)); } #if BUILDFLAG(ENABLE_EXTENSIONS) @@ -286,8 +288,9 @@ cookie_settings_->IsCookieAccessAllowed(origin_url, top_origin_url); base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&TabSpecificContentSettings::IndexedDBAccessed, - render_process_id_, render_frame_id, origin_url, !*allowed)); + base::BindOnce(&TabSpecificContentSettings::IndexedDBAccessed, + render_process_id_, render_frame_id, origin_url, + !*allowed)); } #if BUILDFLAG(ENABLE_PLUGINS)
diff --git a/chrome/browser/renderer_host/pepper/device_id_fetcher.cc b/chrome/browser/renderer_host/pepper/device_id_fetcher.cc index b754bee..bb5a147e 100644 --- a/chrome/browser/renderer_host/pepper/device_id_fetcher.cc +++ b/chrome/browser/renderer_host/pepper/device_id_fetcher.cc
@@ -78,7 +78,7 @@ base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&DeviceIDFetcher::CheckPrefsOnUIThread, this)); + base::BindOnce(&DeviceIDFetcher::CheckPrefsOnUIThread, this)); return true; } @@ -127,8 +127,8 @@ // in case the legacy id doesn't exist. base::PostTaskWithTraits(FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, - base::Bind(&DeviceIDFetcher::LegacyComputeAsync, - this, profile->GetPath(), salt)); + base::BindOnce(&DeviceIDFetcher::LegacyComputeAsync, + this, profile->GetPath(), salt)); #else // Get the machine ID and call ComputeOnUIThread with salt + machine_id. GetMachineIDAsync( @@ -193,8 +193,9 @@ // generate an ID. base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&GetMachineIDAsync, - base::Bind(&DeviceIDFetcher::ComputeOnUIThread, this, salt))); + base::BindOnce( + &GetMachineIDAsync, + base::Bind(&DeviceIDFetcher::ComputeOnUIThread, this, salt))); } void DeviceIDFetcher::RunCallbackOnIOThread(const std::string& id, @@ -202,7 +203,8 @@ if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { base::PostTaskWithTraits( FROM_HERE, {BrowserThread::IO}, - base::Bind(&DeviceIDFetcher::RunCallbackOnIOThread, this, id, result)); + base::BindOnce(&DeviceIDFetcher::RunCallbackOnIOThread, this, id, + result)); return; } in_progress_ = false;
diff --git a/chrome/browser/renderer_host/pepper/monitor_finder_mac.mm b/chrome/browser/renderer_host/pepper/monitor_finder_mac.mm index 2f3eda7e..087cba2 100644 --- a/chrome/browser/renderer_host/pepper/monitor_finder_mac.mm +++ b/chrome/browser/renderer_host/pepper/monitor_finder_mac.mm
@@ -32,7 +32,7 @@ base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&MonitorFinder::FetchMonitorFromWidget, this)); + base::BindOnce(&MonitorFinder::FetchMonitorFromWidget, this)); return display_id_; }
diff --git a/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc b/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc index 1644f12..b007195 100644 --- a/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc +++ b/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc
@@ -63,7 +63,7 @@ if (InterlockedCompareExchange(&request_sent_, 1, 0) == 0) { base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&MonitorFinder::FetchMonitorFromWidget, this)); + base::BindOnce(&MonitorFinder::FetchMonitorFromWidget, this)); } return reinterpret_cast<int64_t>(monitor_); }
diff --git a/chrome/browser/safe_browsing/url_checker_delegate_impl.cc b/chrome/browser/safe_browsing/url_checker_delegate_impl.cc index 17df2f9f..26ad0f19 100644 --- a/chrome/browser/safe_browsing/url_checker_delegate_impl.cc +++ b/chrome/browser/safe_browsing/url_checker_delegate_impl.cc
@@ -56,7 +56,7 @@ // Tab is gone or it's being prerendered. base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO}, - base::Bind(resource.callback, false)); + base::BindOnce(resource.callback, false)); } } // namespace
diff --git a/chrome/browser/service_process/service_process_control.cc b/chrome/browser/service_process/service_process_control.cc index 28e34f80..ff6af0f5 100644 --- a/chrome/browser/service_process/service_process_control.cc +++ b/chrome/browser/service_process/service_process_control.cc
@@ -362,7 +362,7 @@ process_.WaitForExitWithTimeout(base::TimeDelta(), &exit_code)) { process_.Close(); base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI}, - base::Bind(&Launcher::Notify, this)); + base::BindOnce(&Launcher::Notify, this)); return; } retry_count_++; @@ -385,10 +385,10 @@ if (process_.IsValid()) { saved_pid_ = process_.Pid(); base::PostTaskWithTraits(FROM_HERE, {BrowserThread::IO}, - base::Bind(&Launcher::DoDetectLaunched, this)); + base::BindOnce(&Launcher::DoDetectLaunched, this)); } else { base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI}, - base::Bind(&Launcher::Notify, this)); + base::BindOnce(&Launcher::Notify, this)); } } #endif // !OS_MACOSX
diff --git a/chrome/browser/service_process/service_process_control_mac.mm b/chrome/browser/service_process/service_process_control_mac.mm index 01127a53..9a622761 100644 --- a/chrome/browser/service_process/service_process_control_mac.mm +++ b/chrome/browser/service_process/service_process_control_mac.mm
@@ -19,5 +19,5 @@ launched_ = mac::services::SubmitJob( GetServiceProcessJobOptions(cmd_line_.get(), false)); base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI}, - base::Bind(&Launcher::Notify, this)); + base::BindOnce(&Launcher::Notify, this)); }
diff --git a/chrome/browser/shell_integration.cc b/chrome/browser/shell_integration.cc index d38034b..983dd8f 100644 --- a/chrome/browser/shell_integration.cc +++ b/chrome/browser/shell_integration.cc
@@ -193,8 +193,8 @@ DefaultWebClientState state = CheckIsDefaultImpl(); base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&DefaultBrowserWorker::OnCheckIsDefaultComplete, this, state, - is_following_set_as_default)); + base::BindOnce(&DefaultBrowserWorker::OnCheckIsDefaultComplete, this, + state, is_following_set_as_default)); } void DefaultWebClientWorker::SetAsDefault() {
diff --git a/chrome/browser/signin/chrome_signin_helper.cc b/chrome/browser/signin/chrome_signin_helper.cc index 0736965..e9c4af0 100644 --- a/chrome/browser/signin/chrome_signin_helper.cc +++ b/chrome/browser/signin/chrome_signin_helper.cc
@@ -409,8 +409,8 @@ base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(ProcessDiceHeaderUIThread, base::Passed(std::move(params)), - response->GetWebContentsGetter())); + base::BindOnce(ProcessDiceHeaderUIThread, std::move(params), + response->GetWebContentsGetter())); } #endif // BUILDFLAG(ENABLE_DICE_SUPPORT)
diff --git a/chrome/browser/speech/speech_recognizer.cc b/chrome/browser/speech/speech_recognizer.cc index b3bf262..cb866c7f 100644 --- a/chrome/browser/speech/speech_recognizer.cc +++ b/chrome/browser/speech/speech_recognizer.cc
@@ -182,8 +182,8 @@ SpeechRecognizerStatus new_state) { base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&SpeechRecognizerDelegate::OnSpeechRecognitionStateChanged, - delegate_, new_state)); + base::BindOnce(&SpeechRecognizerDelegate::OnSpeechRecognitionStateChanged, + delegate_, new_state)); } void SpeechRecognizer::EventListener::StartSpeechTimeout(int timeout_seconds) { @@ -227,8 +227,8 @@ } base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&SpeechRecognizerDelegate::OnSpeechResult, delegate_, - result_str, final_count == results.size())); + base::BindOnce(&SpeechRecognizerDelegate::OnSpeechResult, delegate_, + result_str, final_count == results.size())); // Stop the moment we have a final result. If we receive any new or changed // text, restart the timer to give the user more time to speak. (The timer is @@ -274,8 +274,8 @@ int16_t sound_level = static_cast<int16_t>(INT16_MAX * volume); base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&SpeechRecognizerDelegate::OnSpeechSoundLevelChanged, - delegate_, sound_level)); + base::BindOnce(&SpeechRecognizerDelegate::OnSpeechSoundLevelChanged, + delegate_, sound_level)); } void SpeechRecognizer::EventListener::OnEnvironmentEstimationComplete( @@ -314,14 +314,14 @@ base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(&SpeechRecognizer::EventListener::StartOnIOThread, - speech_event_listener_, auth_scope, auth_token, preamble)); + base::BindOnce(&SpeechRecognizer::EventListener::StartOnIOThread, + speech_event_listener_, auth_scope, auth_token, preamble)); } void SpeechRecognizer::Stop() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(&SpeechRecognizer::EventListener::StopOnIOThread, - speech_event_listener_)); + base::BindOnce(&SpeechRecognizer::EventListener::StopOnIOThread, + speech_event_listener_)); }
diff --git a/chrome/browser/speech/tts_message_filter.cc b/chrome/browser/speech/tts_message_filter.cc index 404cdf0..4bcd4347 100644 --- a/chrome/browser/speech/tts_message_filter.cc +++ b/chrome/browser/speech/tts_message_filter.cc
@@ -69,7 +69,7 @@ valid_ = false; base::PostTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::Bind(&TtsMessageFilter::OnChannelClosingInUIThread, this)); + base::BindOnce(&TtsMessageFilter::OnChannelClosingInUIThread, this)); } bool TtsMessageFilter::Valid() {
diff --git a/chrome/browser/supervised_user/supervised_user_interstitial.cc b/chrome/browser/supervised_user/supervised_user_interstitial.cc index 5676981..1126b3e5 100644 --- a/chrome/browser/supervised_user/supervised_user_interstitial.cc +++ b/chrome/browser/supervised_user/supervised_user_interstitial.cc
@@ -81,9 +81,9 @@ explicit TabCloser(WebContents* web_contents) : web_contents_(web_contents), weak_ptr_factory_(this) { - base::PostTaskWithTraits( - FROM_HERE, {BrowserThread::UI}, - base::Bind(&TabCloser::CloseTabImpl, weak_ptr_factory_.GetWeakPtr())); + base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI}, + base::BindOnce(&TabCloser::CloseTabImpl, + weak_ptr_factory_.GetWeakPtr())); } void CloseTabImpl() {
diff --git a/chrome/browser/task_manager/providers/arc/arc_process_task.cc b/chrome/browser/task_manager/providers/arc/arc_process_task.cc index a7e4611..be89b38 100644 --- a/chrome/browser/task_manager/providers/arc/arc_process_task.cc +++ b/chrome/browser/task_manager/providers/arc/arc_process_task.cc
@@ -159,8 +159,8 @@ // loop first to make sure other ArcBridgeService observers are notified. // Otherwise, arc::ArcIntentHelperBridge::GetActivityIcon() may fail again. base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&ArcProcessTask::StartIconLoading, - weak_ptr_factory_.GetWeakPtr())); + base::BindOnce(&ArcProcessTask::StartIconLoading, + weak_ptr_factory_.GetWeakPtr())); } void ArcProcessTask::SetProcessState(arc::mojom::ProcessState process_state) {
diff --git a/chrome/browser/task_manager/sampling/task_manager_io_thread_helper.cc b/chrome/browser/task_manager/sampling/task_manager_io_thread_helper.cc index 73db7cb..15bec7a 100644 --- a/chrome/browser/task_manager/sampling/task_manager_io_thread_helper.cc +++ b/chrome/browser/task_manager/sampling/task_manager_io_thread_helper.cc
@@ -34,8 +34,8 @@ base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(&TaskManagerIoThreadHelper::CreateInstance, - std::move(result_callback))); + base::BindOnce(&TaskManagerIoThreadHelper::CreateInstance, + std::move(result_callback))); } IoThreadHelperManager::~IoThreadHelperManager() { @@ -47,7 +47,7 @@ base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(&TaskManagerIoThreadHelper::DeleteInstance)); + base::BindOnce(&TaskManagerIoThreadHelper::DeleteInstance)); } // static @@ -94,8 +94,8 @@ base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(result_callback_, - std::move(bytes_transferred_unordered_map_))); + base::BindOnce(result_callback_, + std::move(bytes_transferred_unordered_map_))); bytes_transferred_unordered_map_.clear(); DCHECK(bytes_transferred_unordered_map_.empty()); }
diff --git a/chrome/browser/thumbnails/thumbnail_tab_helper.cc b/chrome/browser/thumbnails/thumbnail_tab_helper.cc index 93be75ea..72477dcf 100644 --- a/chrome/browser/thumbnails/thumbnail_tab_helper.cc +++ b/chrome/browser/thumbnails/thumbnail_tab_helper.cc
@@ -310,8 +310,8 @@ // back on something other than the UI thread. base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&ThumbnailTabHelper::CleanUpFromThumbnailGeneration, - weak_factory_.GetWeakPtr())); + base::BindOnce(&ThumbnailTabHelper::CleanUpFromThumbnailGeneration, + weak_factory_.GetWeakPtr())); } }
diff --git a/chrome/browser/tracing/crash_service_uploader.cc b/chrome/browser/tracing/crash_service_uploader.cc index e009130..5a358b1 100644 --- a/chrome/browser/tracing/crash_service_uploader.cc +++ b/chrome/browser/tracing/crash_service_uploader.cc
@@ -118,7 +118,7 @@ if (progress_callback_.is_null()) return; base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, - base::Bind(progress_callback_, current, total)); + base::BindOnce(progress_callback_, current, total)); } void TraceCrashServiceUploader::DoUpload( @@ -134,9 +134,9 @@ base::PostTaskWithTraits( FROM_HERE, {base::TaskPriority::BEST_EFFORT}, - base::Bind(&TraceCrashServiceUploader::DoCompressOnBackgroundThread, - base::Unretained(this), file_contents, upload_mode, - upload_url_, base::Passed(std::move(metadata)))); + base::BindOnce(&TraceCrashServiceUploader::DoCompressOnBackgroundThread, + base::Unretained(this), file_contents, upload_mode, + upload_url_, std::move(metadata))); } void TraceCrashServiceUploader::DoCompressOnBackgroundThread(
diff --git a/chrome/browser/ui/android/ssl_client_certificate_request.cc b/chrome/browser/ui/android/ssl_client_certificate_request.cc index 875764e5..feda107 100644 --- a/chrome/browser/ui/android/ssl_client_certificate_request.cc +++ b/chrome/browser/ui/android/ssl_client_certificate_request.cc
@@ -284,7 +284,7 @@ NotifyClientCertificatesChanged(); } else { base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO}, - base::Bind(&NotifyClientCertificatesChanged)); + base::BindOnce(&NotifyClientCertificatesChanged)); } }
diff --git a/chrome/browser/ui/ash/chrome_screenshot_grabber.cc b/chrome/browser/ui/ash/chrome_screenshot_grabber.cc index 80526f0..c590c3d 100644 --- a/chrome/browser/ui/ash/chrome_screenshot_grabber.cc +++ b/chrome/browser/ui/ash/chrome_screenshot_grabber.cc
@@ -517,7 +517,7 @@ base::PostTaskWithTraits( FROM_HERE, {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}, - base::Bind(EnsureLocalDirectoryExists, path, callback)); + base::BindOnce(EnsureLocalDirectoryExists, path, callback)); } void ChromeScreenshotGrabber::OnScreenshotCompleted(
diff --git a/chrome/browser/ui/bookmarks/bookmark_browsertest.cc b/chrome/browser/ui/bookmarks/bookmark_browsertest.cc index 4b1dad2..988129f 100644 --- a/chrome/browser/ui/bookmarks/bookmark_browsertest.cc +++ b/chrome/browser/ui/bookmarks/bookmark_browsertest.cc
@@ -140,7 +140,14 @@ base::ASCIIToUTF16(kPersistBookmarkTitle)); } -IN_PROC_BROWSER_TEST_F(BookmarkBrowsertest, Persist) { +#if defined(OS_WIN) +// TODO(crbug.com/935607): The test fails on Windows. +#define MAYBE_Persist DISABLED_Persist +#else +#define MAYBE_Persist Persist +#endif + +IN_PROC_BROWSER_TEST_F(BookmarkBrowsertest, MAYBE_Persist) { BookmarkModel* bookmark_model = WaitForBookmarkModel(browser()->profile()); std::vector<UrlAndTitle> urls;
diff --git a/chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller.mm b/chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller.mm index 8b3dcd3..4529359 100644 --- a/chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller.mm +++ b/chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller.mm
@@ -503,7 +503,7 @@ // Notify the |callback_| asynchronously because it may release the // controller. base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, - base::Bind(doneCallback_, sourceID)); + base::BindOnce(doneCallback_, sourceID)); doneCallback_.Reset(); }
diff --git a/chrome/browser/ui/network_profile_bubble.cc b/chrome/browser/ui/network_profile_bubble.cc index 5b2ee3c9..155a8c1 100644 --- a/chrome/browser/ui/network_profile_bubble.cc +++ b/chrome/browser/ui/network_profile_bubble.cc
@@ -141,7 +141,7 @@ if (profile_on_network) { RecordUmaEvent(METRIC_PROFILE_ON_NETWORK); base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&NotifyNetworkProfileDetected)); + base::BindOnce(&NotifyNetworkProfileDetected)); } else { RecordUmaEvent(METRIC_PROFILE_NOT_ON_NETWORK); }
diff --git a/chrome/browser/ui/page_action/OWNERS b/chrome/browser/ui/page_action/OWNERS new file mode 100644 index 0000000..bdb008d --- /dev/null +++ b/chrome/browser/ui/page_action/OWNERS
@@ -0,0 +1,5 @@ +alancutter@chromium.org +calamity@chromium.org +estade@chromium.org + +# COMPONENT: UI>Browser>Bubbles \ No newline at end of file
diff --git a/chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest.cc b/chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest.cc index 1102ae7..7f1c06c 100644 --- a/chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest.cc +++ b/chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest.cc
@@ -296,9 +296,15 @@ void SetAccountFullName(const std::string& full_name) { identity::IdentityManager* identity_manager = IdentityManagerFactory::GetForProfile(browser()->profile()); - AccountInfo info = identity_manager->GetPrimaryAccountInfo(); - info.full_name = full_name; - identity::UpdateAccountInfoForAccount(identity_manager, info); + CoreAccountInfo core_info = identity_manager->GetPrimaryAccountInfo(); + AccountInfo account_info; + account_info.account_id = core_info.account_id; + account_info.gaia = core_info.gaia; + account_info.email = core_info.email; + account_info.is_under_advanced_protection = + core_info.is_under_advanced_protection; + account_info.full_name = full_name; + identity::UpdateAccountInfoForAccount(identity_manager, account_info); } void SubmitForm() {
diff --git a/chrome/browser/ui/views/outdated_upgrade_bubble_view.cc b/chrome/browser/ui/views/outdated_upgrade_bubble_view.cc index d38dc30..605c62f3 100644 --- a/chrome/browser/ui/views/outdated_upgrade_bubble_view.cc +++ b/chrome/browser/ui/views/outdated_upgrade_bubble_view.cc
@@ -124,7 +124,7 @@ FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::BLOCK_SHUTDOWN}, - base::Bind(&google_update::ElevateIfNeededToReenableUpdates)); + base::BindOnce(&google_update::ElevateIfNeededToReenableUpdates)); #endif // defined(OS_WIN) }
diff --git a/chrome/browser/ui/views/page_action/OWNERS b/chrome/browser/ui/views/page_action/OWNERS index bdb008d..c54b1d7 100644 --- a/chrome/browser/ui/views/page_action/OWNERS +++ b/chrome/browser/ui/views/page_action/OWNERS
@@ -1,5 +1 @@ -alancutter@chromium.org -calamity@chromium.org -estade@chromium.org - -# COMPONENT: UI>Browser>Bubbles \ No newline at end of file +file://chrome/browser/ui/page_action/OWNERS
diff --git a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc index ace15b72..dc9fbd3 100644 --- a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
@@ -379,8 +379,7 @@ net::CookieOptions())); partition->GetCookieManagerForBrowserProcess()->SetCanonicalCookie( - *cc.get(), true /* secure_source */, true /* modify_http_only */, - std::move(callback)); + *cc.get(), "https", true /* modify_http_only */, std::move(callback)); } void GaiaScreenHandler::OnSetCookieForLoadGaiaWithPartition(
diff --git a/chrome/browser/ui/webui/memory_internals_ui.cc b/chrome/browser/ui/webui/memory_internals_ui.cc index 01ef46e..123baff 100644 --- a/chrome/browser/ui/webui/memory_internals_ui.cc +++ b/chrome/browser/ui/webui/memory_internals_ui.cc
@@ -208,8 +208,8 @@ // the IO thread, while the render process iterator must run on the UI thread. base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::Bind(&MemoryInternalsDOMHandler::GetChildProcessesOnIOThread, - weak_factory_.GetWeakPtr())); + base::BindOnce(&MemoryInternalsDOMHandler::GetChildProcessesOnIOThread, + weak_factory_.GetWeakPtr())); } void MemoryInternalsDOMHandler::HandleSaveDump(const base::ListValue* args) {
diff --git a/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc b/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc index 7a4c8be..7b5b6b02 100644 --- a/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc +++ b/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc
@@ -145,8 +145,9 @@ NET_LOG(ERROR) << "Empty app id for " << kAddThirdPartyVpnMessage; return; } - if (profile_ != GetProfileForPrimaryUser()) { - NET_LOG(ERROR) << "Only the primary user can add VPNs"; + if (profile_ != GetProfileForPrimaryUser() || profile_->IsChild()) { + NET_LOG(ERROR) + << "Only the primary user and non-child accounts can add VPNs"; return; }
diff --git a/chrome/browser/ui/webui/settings_utils_win.cc b/chrome/browser/ui/webui/settings_utils_win.cc index 8c583fe..44918aeb 100644 --- a/chrome/browser/ui/webui/settings_utils_win.cc +++ b/chrome/browser/ui/webui/settings_utils_win.cc
@@ -102,7 +102,7 @@ void ShowNetworkProxySettings(content::WebContents* web_contents) { base::PostTaskWithTraits(FROM_HERE, {base::TaskPriority::USER_VISIBLE, base::MayBlock()}, - base::Bind(&OpenConnectionDialogCallback)); + base::BindOnce(&OpenConnectionDialogCallback)); } void ShowManageSSLCertificates(content::WebContents* web_contents) {
diff --git a/chrome/browser/unload_browsertest.cc b/chrome/browser/unload_browsertest.cc index 42a9eb3a..2f3d4af0 100644 --- a/chrome/browser/unload_browsertest.cc +++ b/chrome/browser/unload_browsertest.cc
@@ -150,7 +150,7 @@ host_resolver()->AddRule("*", "127.0.0.1"); base::PostTaskWithTraits( FROM_HERE, {BrowserThread::IO}, - base::Bind(&chrome_browser_net::SetUrlRequestMocksEnabled, true)); + base::BindOnce(&chrome_browser_net::SetUrlRequestMocksEnabled, true)); } void CheckTitle(const char* expected_title, bool wait = false) {
diff --git a/chrome/browser/win/chrome_elf_init.cc b/chrome/browser/win/chrome_elf_init.cc index 829df0e..e14191b 100644 --- a/chrome/browser/win/chrome_elf_init.cc +++ b/chrome/browser/win/chrome_elf_init.cc
@@ -116,7 +116,7 @@ // inject after Chrome has started up. base::PostDelayedTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&ReportSuccessfulBlocks), + base::BindOnce(&ReportSuccessfulBlocks), base::TimeDelta::FromSeconds(kBlacklistReportingDelaySec)); // Make sure the early finch emergency "off switch" for
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index b28f040..22ffe23 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -619,6 +619,7 @@ base::FEATURE_DISABLED_BY_DEFAULT}; // Enables or disables pin quick unlock. +// TODO(https://crbug.com/935613): Remove this & the backing code. const base::Feature kQuickUnlockPin{"QuickUnlockPin", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/chrome/renderer/content_settings_observer.cc b/chrome/renderer/content_settings_observer.cc index 46a031c..e2dc19f4 100644 --- a/chrome/renderer/content_settings_observer.cc +++ b/chrome/renderer/content_settings_observer.cc
@@ -4,6 +4,7 @@ #include "chrome/renderer/content_settings_observer.h" +#include <utility> #include <vector> #include "base/bind.h" @@ -28,7 +29,6 @@ #include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h" #include "third_party/blink/public/platform/url_conversion.h" #include "third_party/blink/public/platform/web_client_hints_type.h" -#include "third_party/blink/public/platform/web_content_setting_callbacks.h" #include "third_party/blink/public/platform/web_security_origin.h" #include "third_party/blink/public/platform/web_url.h" #include "third_party/blink/public/web/web_document.h" @@ -48,7 +48,6 @@ #include "extensions/renderer/renderer_extension_registry.h" #endif -using blink::WebContentSettingCallbacks; using blink::WebDocument; using blink::WebFrame; using blink::WebSecurityOrigin; @@ -264,17 +263,17 @@ } void ContentSettingsObserver::RequestFileSystemAccessAsync( - const WebContentSettingCallbacks& callbacks) { + base::OnceCallback<void(bool)> callback) { WebFrame* frame = render_frame()->GetWebFrame(); if (IsUniqueFrame(frame)) { - WebContentSettingCallbacks permissionCallbacks(callbacks); - permissionCallbacks.DoDeny(); + std::move(callback).Run(false); return; } ++current_request_id_; - bool inserted = permission_requests_ - .insert(std::make_pair(current_request_id_, callbacks)) - .second; + bool inserted = + permission_requests_ + .insert(std::make_pair(current_request_id_, std::move(callback))) + .second; // Verify there are no duplicate insertions. DCHECK(inserted); @@ -546,14 +545,10 @@ if (it == permission_requests_.end()) return; - WebContentSettingCallbacks callbacks = it->second; + base::OnceCallback<void(bool)> callback = std::move(it->second); permission_requests_.erase(it); - if (allowed) { - callbacks.DoAllow(); - return; - } - callbacks.DoDeny(); + std::move(callback).Run(allowed); } void ContentSettingsObserver::ClearBlockedContentSettings() {
diff --git a/chrome/renderer/content_settings_observer.h b/chrome/renderer/content_settings_observer.h index 23783cac..ba15221 100644 --- a/chrome/renderer/content_settings_observer.h +++ b/chrome/renderer/content_settings_observer.h
@@ -8,6 +8,7 @@ #include <string> #include <utility> +#include "base/callback.h" #include "base/containers/flat_map.h" #include "base/containers/flat_set.h" #include "base/gtest_prod_util.h" @@ -77,7 +78,7 @@ // blink::WebContentSettingsClient: bool AllowDatabase() override; void RequestFileSystemAccessAsync( - const blink::WebContentSettingCallbacks& callbacks) override; + base::OnceCallback<void(bool)> callback) override; bool AllowImage(bool enabled_per_settings, const blink::WebURL& image_url) override; bool AllowIndexedDB(const blink::WebSecurityOrigin& origin) override; @@ -183,7 +184,7 @@ bool is_interstitial_page_ = false; int current_request_id_ = 0; - base::flat_map<int, blink::WebContentSettingCallbacks> permission_requests_; + base::flat_map<int, base::OnceCallback<void(bool)>> permission_requests_; // If true, IsWhitelistedForContentSettings will always return true. const bool should_whitelist_;
diff --git a/chrome/renderer/resources/extensions/automation/automation_node.js b/chrome/renderer/resources/extensions/automation/automation_node.js index 7756eb4..a86a54a0e 100644 --- a/chrome/renderer/resources/extensions/automation/automation_node.js +++ b/chrome/renderer/resources/extensions/automation/automation_node.js
@@ -1567,7 +1567,7 @@ 'restriction', 'state', 'location', - 'imageAnnotationStatus', + 'imageAnnotation', 'indexInParent', 'lineStartOffsets', 'root',
diff --git a/chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac.cc b/chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac.cc index 69c35e0..0dade97 100644 --- a/chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac.cc +++ b/chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac.cc
@@ -34,7 +34,7 @@ FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, - base::Bind(&SandboxedDMGAnalyzer::PrepareFileToAnalyze, this)); + base::BindOnce(&SandboxedDMGAnalyzer::PrepareFileToAnalyze, this)); } SandboxedDMGAnalyzer::~SandboxedDMGAnalyzer() = default; @@ -63,8 +63,8 @@ } base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, - base::Bind(&SandboxedDMGAnalyzer::AnalyzeFile, this, - base::Passed(&file))); + base::BindOnce(&SandboxedDMGAnalyzer::AnalyzeFile, + this, std::move(file))); } void SandboxedDMGAnalyzer::ReportFileFailure() { @@ -73,7 +73,7 @@ base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, - base::Bind(callback_, safe_browsing::ArchiveAnalyzerResults())); + base::BindOnce(callback_, safe_browsing::ArchiveAnalyzerResults())); } void SandboxedDMGAnalyzer::AnalyzeFile(base::File file) {
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 7e9b0e38..2f9cafb5 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -4427,6 +4427,7 @@ sources += [ "../browser/notifications/win/notification_image_retainer_unittest.cc", "../browser/notifications/win/notification_template_builder_unittest.cc", + "../browser/performance_monitor/wmi_refresher_unittest.cc", "../browser/ui/input_method/input_method_engine_unittest.cc", ] deps += [
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json index b78107b..b748967a 100644 --- a/chrome/test/data/policy/policy_test_cases.json +++ b/chrome/test/data/policy/policy_test_cases.json
@@ -4263,6 +4263,12 @@ "note": "This policy is used directly through the policy service instead of through a pref." }, + "DeviceWilcoDtcAllowed": { + "os": ["chromeos"], + "test_policy": { "DeviceWilcoDtcAllowed": true }, + "pref_mappings": [{ "pref": "cros.device.wilco_dtc_allowed" }] + }, + "----- Chrome Frame policies -------------------------------------------": {}, "ChromeFrameRendererSettings": {
diff --git a/chromeos/settings/cros_settings_names.cc b/chromeos/settings/cros_settings_names.cc index 22b7f822..eaccadd9a 100644 --- a/chromeos/settings/cros_settings_names.cc +++ b/chromeos/settings/cros_settings_names.cc
@@ -368,4 +368,8 @@ // out. const char kDeviceRebootOnUserSignout[] = "cros.device.reboot_on_user_signout"; +// A boolean pref that indicates whether running wilco diagnostics and telemetry +// controller on Chrome OS is allowed. +const char kDeviceWilcoDtcAllowed[] = "cros.device.wilco_dtc_allowed"; + } // namespace chromeos
diff --git a/chromeos/settings/cros_settings_names.h b/chromeos/settings/cros_settings_names.h index 9d7b685..850acdb 100644 --- a/chromeos/settings/cros_settings_names.h +++ b/chromeos/settings/cros_settings_names.h
@@ -211,6 +211,9 @@ COMPONENT_EXPORT(CHROMEOS_SETTINGS) extern const char kDeviceRebootOnUserSignout[]; +COMPONENT_EXPORT(CHROMEOS_SETTINGS) +extern const char kDeviceWilcoDtcAllowed[]; + } // namespace chromeos #endif // CHROMEOS_SETTINGS_CROS_SETTINGS_NAMES_H_
diff --git a/components/arc/arc_prefs.cc b/components/arc/arc_prefs.cc index de576c5..ac7a53d2 100644 --- a/components/arc/arc_prefs.cc +++ b/components/arc/arc_prefs.cc
@@ -111,7 +111,8 @@ const char kEngagementTimeDayId[] = "arc.metrics.engagement_time.day_id"; // A preference that indicates the user has allowed voice interaction services // to access the "context" (text and graphic content that is currently on -// screen). +// screen). This preference can be overridden by the +// VoiceInteractionContextEnabled administrator policy. const char kVoiceInteractionContextEnabled[] = "settings.voice_interaction.context.enabled"; // A preference that indicates the user has enabled voice interaction services. @@ -121,7 +122,8 @@ const char kVoiceInteractionHotwordAlwaysOn[] = "settings.voice_interaction.hotword.always_on"; // A preference that indicates the user has allowed voice interaction services -// to use hotword listening. +// to use hotword listening. This preference can be overridden by the +// VoiceInteractionHotwordEnabled administrator policy. const char kVoiceInteractionHotwordEnabled[] = "settings.voice_interaction.hotword.enabled"; // A preference that indicates whether microphone should be open when the voice
diff --git a/components/autofill_assistant/browser/controller.cc b/components/autofill_assistant/browser/controller.cc index 24f748e..ac2e76e 100644 --- a/components/autofill_assistant/browser/controller.cc +++ b/components/autofill_assistant/browser/controller.cc
@@ -61,22 +61,9 @@ : content::WebContentsObserver(web_contents), client_(client), weak_ptr_factory_(this) { - // Only set the controller as the delegate if web_contents does not yet have - // one. - // TODO(crbug.com/806868): Find a better way to get a loading progress instead - // of using the controller as a web_contents delegate. It may interfere with - // an already existing delegate. - if (web_contents->GetDelegate() == nullptr) { - clear_web_contents_delegate_ = true; - web_contents->SetDelegate(this); - } } -Controller::~Controller() { - if (clear_web_contents_delegate_) { - web_contents()->SetDelegate(nullptr); - } -} +Controller::~Controller() = default; Service* Controller::GetService() { if (!service_) { @@ -637,8 +624,6 @@ const GURL& validated_url) { // validated_url might not be the page URL. Ignore it and always check the // last committed url. - // Note that we also check for scripts in LoadProgressChanged below. This is - // the last attempt and occurs later than a load progress of 1.0. GetOrCheckScripts(web_contents()->GetLastCommittedURL()); } @@ -685,23 +670,6 @@ } } -void Controller::LoadProgressChanged(content::WebContents* source, - double progress) { - int percent = 100 * progress; - // We wait for a page to be at least 40 percent loaded. Then a new - // precondition check is started every additional 20 percent. - if (percent >= 40 && percent % 20 == 0) { - DCHECK(web_contents()->GetLastCommittedURL().is_valid()); - // In order to show available scripts as early as possible we start checking - // preconditions when the page has not yet fully loaded. This can lead to - // the behavior where scripts are being added sequentially instead of all - // at the same time. Also, depending on the progress values, we may never - // actually get here. In that case the only check will happen in - // DidFinishLoad. - GetOrCheckScripts(web_contents()->GetLastCommittedURL()); - } -} - bool Controller::IsCookieExperimentEnabled() const { auto iter = parameters_.find(kCookieExperimentName); return iter != parameters_.end() && iter->second == "1";
diff --git a/components/autofill_assistant/browser/controller.h b/components/autofill_assistant/browser/controller.h index 7263a09..1b608190 100644 --- a/components/autofill_assistant/browser/controller.h +++ b/components/autofill_assistant/browser/controller.h
@@ -40,8 +40,7 @@ class Controller : public ScriptExecutorDelegate, public UiDelegate, public ScriptTracker::Listener, - private content::WebContentsObserver, - private content::WebContentsDelegate { + private content::WebContentsObserver { public: // |web_contents| and |client| must remain valid for the lifetime of the // instance. @@ -165,9 +164,6 @@ void OnWebContentsFocused( content::RenderWidgetHost* render_widget_host) override; - // Overrides content::WebContentsDelegate: - void LoadProgressChanged(content::WebContents* source, - double progress) override; void OnTouchableAreaChanged(const std::vector<RectF>& areas); ElementArea* touchable_element_area(); @@ -198,10 +194,6 @@ int periodic_script_check_count_ = 0; int total_script_check_count_ = 0; - // Whether to clear the web_contents delegate when the controller is - // destroyed. - bool clear_web_contents_delegate_ = false; - // Whether we should hide the overlay and show an error message after a first // unsuccessful round of preconditions checking. bool should_fail_after_checking_scripts_ = false;
diff --git a/components/autofill_assistant/browser/controller_unittest.cc b/components/autofill_assistant/browser/controller_unittest.cc index 8d0c14c..de176b21 100644 --- a/components/autofill_assistant/browser/controller_unittest.cc +++ b/components/autofill_assistant/browser/controller_unittest.cc
@@ -162,10 +162,6 @@ controller_->OnWebContentsFocused(nullptr); } - void SimulateProgressChanged(double progress) { - controller_->LoadProgressChanged(web_contents(), progress); - } - // Sets up the next call to the service for scripts to return |response|. void SetNextScriptResponse(const SupportsScriptResponseProto& response) { std::string response_str; @@ -481,23 +477,6 @@ EXPECT_THAT(controller_->GetChips(), SizeIs(0)); } -TEST_F(ControllerTest, LoadProgressChanged) { - Start(); - - SetLastCommittedUrl(GURL("http://a.example.com/path")); - - EXPECT_CALL(*mock_service_, OnGetScriptsForUrl(_, _, _)).Times(0); - - SimulateProgressChanged(0.1); - SimulateProgressChanged(0.3); - SimulateProgressChanged(0.5); - - EXPECT_CALL(*mock_service_, - OnGetScriptsForUrl(Eq(GURL("http://a.example.com/path")), _, _)) - .WillOnce(RunOnceCallback<2>(true, "")); - SimulateProgressChanged(0.4); -} - TEST_F(ControllerTest, InitialUrlLoads) { GURL initialUrl("http://a.example.com/path"); EXPECT_CALL(*mock_service_, OnGetScriptsForUrl(Eq(initialUrl), _, _))
diff --git a/components/certificate_transparency/log_dns_client.cc b/components/certificate_transparency/log_dns_client.cc index 518fbbc3..8ea5336 100644 --- a/components/certificate_transparency/log_dns_client.cc +++ b/components/certificate_transparency/log_dns_client.cc
@@ -198,7 +198,8 @@ // is kept alive in |current_dns_transaction_|. void OnDnsTransactionComplete(net::DnsTransaction* transaction, int net_error, - const net::DnsResponse* response); + const net::DnsResponse* response, + bool secure); // Requests the leaf index for the CT log entry with |leaf_hash_|. net::Error RequestLeafIndex(); @@ -356,7 +357,8 @@ void AuditProofQueryImpl::OnDnsTransactionComplete( net::DnsTransaction* transaction, int net_error, - const net::DnsResponse* response) { + const net::DnsResponse* response, + bool secure) { DCHECK_EQ(current_dns_transaction_.get(), transaction); last_dns_response_ = response; net::Error result = DoLoop(static_cast<net::Error>(net_error));
diff --git a/components/cronet/stale_host_resolver_unittest.cc b/components/cronet/stale_host_resolver_unittest.cc index f028661..a829c2a7 100644 --- a/components/cronet/stale_host_resolver_unittest.cc +++ b/components/cronet/stale_host_resolver_unittest.cc
@@ -234,10 +234,8 @@ net::HostCache::Key key(kHostname, net::ADDRESS_FAMILY_IPV4, 0); base::TimeTicks now = tick_clock_.NowTicks(); - const net::HostCache::Entry* entry; net::HostCache::EntryStaleness stale; - entry = resolver_->GetHostCache()->LookupStale(key, now, &stale); - EXPECT_TRUE(entry); + EXPECT_TRUE(resolver_->GetHostCache()->LookupStale(key, now, &stale)); EXPECT_TRUE(stale.is_stale()); }
diff --git a/components/invalidation/impl/fcm_invalidation_service.cc b/components/invalidation/impl/fcm_invalidation_service.cc index 006456b9..7933ff5 100644 --- a/components/invalidation/impl/fcm_invalidation_service.cc +++ b/components/invalidation/impl/fcm_invalidation_service.cc
@@ -27,6 +27,10 @@ const char kApplicationName[] = "com.google.chrome.fcm.invalidations"; // Sender ID coming from the Firebase console. const char kInvalidationGCMSenderId[] = "8181035976"; + +void ReportInvalidatorState(syncer::InvalidatorState state) { + UMA_HISTOGRAM_ENUMERATION("Invalidations.StatusChanged", state); +} } namespace invalidation { @@ -59,8 +63,15 @@ void FCMInvalidationService::Init() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (IsReadyToStart()) + if (IsReadyToStart()) { StartInvalidator(); + } else { + if (identity_provider_->GetActiveAccountId().empty()) { + ReportInvalidatorState(syncer::NOT_STARTED_NO_ACTIVE_ACCOUNT); + } else { + ReportInvalidatorState(syncer::NOT_STARTED_NO_REFRESH_TOKEN); + } + } identity_provider_->AddObserver(this); } @@ -162,6 +173,8 @@ if (is_ready_to_start) { StartInvalidator(); + } else { + ReportInvalidatorState(syncer::NOT_STARTED_NO_REFRESH_TOKEN); } } @@ -183,7 +196,7 @@ void FCMInvalidationService::OnInvalidatorStateChange( syncer::InvalidatorState state) { - UMA_HISTOGRAM_ENUMERATION("Invalidations.StatusChanged", state); + ReportInvalidatorState(state); invalidator_registrar_.UpdateInvalidatorState(state); logger_.OnStateChange(state); } @@ -201,7 +214,7 @@ } bool FCMInvalidationService::IsReadyToStart() { - if (!identity_provider_->IsActiveAccountAvailable()) { + if (!identity_provider_->IsActiveAccountWithRefreshToken()) { DVLOG(2) << "Not starting FCMInvalidationService: " << "active account is not available"; return false;
diff --git a/components/invalidation/impl/profile_identity_provider.cc b/components/invalidation/impl/profile_identity_provider.cc index b7dbdb5..2bda764 100644 --- a/components/invalidation/impl/profile_identity_provider.cc +++ b/components/invalidation/impl/profile_identity_provider.cc
@@ -72,7 +72,7 @@ return active_account_id_; } -bool ProfileIdentityProvider::IsActiveAccountAvailable() { +bool ProfileIdentityProvider::IsActiveAccountWithRefreshToken() { if (GetActiveAccountId().empty() || !identity_manager_ || !identity_manager_->HasAccountWithRefreshToken(GetActiveAccountId())) return false;
diff --git a/components/invalidation/impl/profile_identity_provider.h b/components/invalidation/impl/profile_identity_provider.h index aefbd56f..097034b 100644 --- a/components/invalidation/impl/profile_identity_provider.h +++ b/components/invalidation/impl/profile_identity_provider.h
@@ -22,7 +22,7 @@ // IdentityProvider: std::string GetActiveAccountId() override; - bool IsActiveAccountAvailable() override; + bool IsActiveAccountWithRefreshToken() override; std::unique_ptr<ActiveAccountAccessTokenFetcher> FetchAccessToken( const std::string& oauth_consumer_name, const identity::ScopeSet& scopes,
diff --git a/components/invalidation/impl/ticl_invalidation_service.cc b/components/invalidation/impl/ticl_invalidation_service.cc index 48b991ec..a1229d6 100644 --- a/components/invalidation/impl/ticl_invalidation_service.cc +++ b/components/invalidation/impl/ticl_invalidation_service.cc
@@ -332,7 +332,7 @@ std::string TiclInvalidationService::GetOwnerName() const { return "TICL"; } bool TiclInvalidationService::IsReadyToStart() { - if (!identity_provider_->IsActiveAccountAvailable()) { + if (!identity_provider_->IsActiveAccountWithRefreshToken()) { DVLOG(2) << "Not starting TiclInvalidationService: " << "active account is not available"; return false;
diff --git a/components/invalidation/public/identity_provider.h b/components/invalidation/public/identity_provider.h index a763163..9b7b2b60 100644 --- a/components/invalidation/public/identity_provider.h +++ b/components/invalidation/public/identity_provider.h
@@ -68,7 +68,7 @@ // Returns true iff (1) there is an active account and (2) that account has // a refresh token. - virtual bool IsActiveAccountAvailable() = 0; + virtual bool IsActiveAccountWithRefreshToken() = 0; // Starts an access token request for |oauth_consumer_name| and |scopes|. When // the request completes, |callback| will be invoked with the access token
diff --git a/components/invalidation/public/invalidator_state.cc b/components/invalidation/public/invalidator_state.cc index 405a7ec..e1ddab4 100644 --- a/components/invalidation/public/invalidator_state.cc +++ b/components/invalidation/public/invalidator_state.cc
@@ -22,6 +22,10 @@ return "SUBSCRIPTION_FAILURE"; case STOPPED: return "STOPPED"; + case NOT_STARTED_NO_ACTIVE_ACCOUNT: + return "NOT_STARTED_NO_ACTIVE_ACCOUNT"; + case NOT_STARTED_NO_REFRESH_TOKEN: + return "NOT_STARTED_NO_REFRESH_TOKEN"; } }
diff --git a/components/invalidation/public/invalidator_state.h b/components/invalidation/public/invalidator_state.h index c5a356b..6f1d6df 100644 --- a/components/invalidation/public/invalidator_state.h +++ b/components/invalidation/public/invalidator_state.h
@@ -32,7 +32,13 @@ // Invalidator was stopped. STOPPED = 5, - kMaxValue = STOPPED, + // Starting was attempted, but failed due to absence of active account. + NOT_STARTED_NO_ACTIVE_ACCOUNT = 6, + + // Starting was attempted, but failed due to absence of active account. + NOT_STARTED_NO_REFRESH_TOKEN = 7, + + kMaxValue = NOT_STARTED_NO_REFRESH_TOKEN, }; INVALIDATION_EXPORT const char* InvalidatorStateToString(
diff --git a/components/language/content/browser/BUILD.gn b/components/language/content/browser/BUILD.gn index d903df3..5332abe 100644 --- a/components/language/content/browser/BUILD.gn +++ b/components/language/content/browser/BUILD.gn
@@ -51,6 +51,7 @@ "//base", "//base/test:test_support", "//components/language/content/browser/regional_language_code_locator:unit_tests", + "//components/language/content/browser/ulp_language_code_locator:ulp_language_code_locator", "//components/language/content/browser/ulp_language_code_locator:unit_tests", "//components/language/core/common", "//components/prefs:test_support",
diff --git a/components/language/content/browser/geo_language_provider.cc b/components/language/content/browser/geo_language_provider.cc index 78b17386..fd647ef 100644 --- a/components/language/content/browser/geo_language_provider.cc +++ b/components/language/content/browser/geo_language_provider.cc
@@ -93,7 +93,7 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(background_sequence_checker_); // Initialize location->language lookup library. - language_code_locator_ = GetLanguageCodeLocator(); + language_code_locator_ = GetLanguageCodeLocator(prefs_); // Make initial query. QueryNextPosition();
diff --git a/components/language/content/browser/geo_language_provider_unittest.cc b/components/language/content/browser/geo_language_provider_unittest.cc index da5aefce..bc4af9db 100644 --- a/components/language/content/browser/geo_language_provider_unittest.cc +++ b/components/language/content/browser/geo_language_provider_unittest.cc
@@ -15,6 +15,7 @@ #include "base/test/test_mock_time_task_runner.h" #include "base/timer/timer.h" #include "components/language/content/browser/test_utils.h" +#include "components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator.h" #include "components/language/core/common/language_experiments.h" #include "components/prefs/testing_pref_service.h" #include "testing/gtest/include/gtest/gtest.h" @@ -36,6 +37,8 @@ base::Unretained(&mock_ip_geo_location_provider_))); language::GeoLanguageProvider::RegisterLocalStatePrefs( local_state_.registry()); + language::UlpLanguageCodeLocator::RegisterLocalStatePrefs( + local_state_.registry()); } protected:
diff --git a/components/language/content/browser/language_code_locator_provider.cc b/components/language/content/browser/language_code_locator_provider.cc index f40b3485..d7f5bdd 100644 --- a/components/language/content/browser/language_code_locator_provider.cc +++ b/components/language/content/browser/language_code_locator_provider.cc
@@ -5,6 +5,7 @@ #include "components/language/content/browser/language_code_locator_provider.h" #include <memory> +#include <utility> #include "base/feature_list.h" #include "components/language/content/browser/language_code_locator.h" @@ -12,13 +13,15 @@ #include "components/language/content/browser/ulp_language_code_locator/s2langquadtree.h" #include "components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator.h" #include "components/language/core/common/language_experiments.h" +#include "components/prefs/pref_service.h" namespace language { namespace { #include "components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator_helper.h" } // namespace -std::unique_ptr<LanguageCodeLocator> GetLanguageCodeLocator() { +std::unique_ptr<LanguageCodeLocator> GetLanguageCodeLocator( + PrefService* prefs) { if (base::FeatureList::IsEnabled(kImprovedGeoLanguageData)) { std::vector<std::unique_ptr<SerializedLanguageTree>> serialized_langtrees; serialized_langtrees.reserve(3); @@ -32,7 +35,7 @@ std::make_unique<BitsetSerializedLanguageTree<kNumBits2>>( GetLanguagesRank2(), GetTreeSerializedRank2())); return std::make_unique<UlpLanguageCodeLocator>( - std::move(serialized_langtrees)); + std::move(serialized_langtrees), prefs); } else { return std::make_unique<RegionalLanguageCodeLocator>(); }
diff --git a/components/language/content/browser/language_code_locator_provider.h b/components/language/content/browser/language_code_locator_provider.h index fc7ccce..9c5eceb 100644 --- a/components/language/content/browser/language_code_locator_provider.h +++ b/components/language/content/browser/language_code_locator_provider.h
@@ -7,11 +7,13 @@ #include <memory> +class PrefService; + namespace language { class LanguageCodeLocator; -std::unique_ptr<LanguageCodeLocator> GetLanguageCodeLocator(); +std::unique_ptr<LanguageCodeLocator> GetLanguageCodeLocator(PrefService* prefs); } // namespace language
diff --git a/components/language/content/browser/ulp_language_code_locator/BUILD.gn b/components/language/content/browser/ulp_language_code_locator/BUILD.gn index eeb5763..117cefe4 100644 --- a/components/language/content/browser/ulp_language_code_locator/BUILD.gn +++ b/components/language/content/browser/ulp_language_code_locator/BUILD.gn
@@ -52,6 +52,7 @@ ":ulp_serialized_to_static_c", "//base", "//components/language/content/browser:language_code_locator", + "//components/prefs:prefs", "//third_party/s2cellid", ] } @@ -67,6 +68,7 @@ ":ulp_language_code_locator", "//base", "//base/test:test_support", + "//components/prefs:test_support", "//testing/gmock", "//testing/gtest", "//third_party/s2cellid",
diff --git a/components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator.cc b/components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator.cc index e18f7da..a08f307 100644 --- a/components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator.cc +++ b/components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator.cc
@@ -6,46 +6,83 @@ #include <memory> +#include "base/values.h" #include "components/language/content/browser/ulp_language_code_locator/s2langquadtree.h" +#include "components/prefs/pref_registry_simple.h" +#include "components/prefs/pref_service.h" +#include "components/prefs/scoped_user_pref_update.h" #include "third_party/s2cellid/src/s2/s2cellid.h" #include "third_party/s2cellid/src/s2/s2latlng.h" +namespace { + +const char kCellTokenKey[] = "celltoken"; +const char kLanguageKey[] = "language"; + +base::Value GetCellLanguagePairValue(S2CellId cell, std::string language) { + base::Value value(base::Value::Type::DICTIONARY); + value.SetKey(kCellTokenKey, base::Value(cell.ToToken())); + value.SetKey(kLanguageKey, base::Value(language)); + return value; +} + +} // namespace + namespace language { -struct UlpLanguageCodeLocator::CellLanguagePair { - S2CellId cell = S2CellId::None(); - std::string language = ""; -}; +const char UlpLanguageCodeLocator::kCachedGeoLanguagesPref[] = + "language.ulp_language_code_locator.cached_geo_languages"; UlpLanguageCodeLocator::UlpLanguageCodeLocator( - std::vector<std::unique_ptr<SerializedLanguageTree>>&& - serialized_langtrees) { + std::vector<std::unique_ptr<SerializedLanguageTree>>&& serialized_langtrees, + PrefService* prefs) { serialized_langtrees_ = std::move(serialized_langtrees); - cache_ = std::vector<CellLanguagePair>(serialized_langtrees_.size()); + prefs_ = prefs; } UlpLanguageCodeLocator::~UlpLanguageCodeLocator() {} +// static +void UlpLanguageCodeLocator::RegisterLocalStatePrefs( + PrefRegistrySimple* const registry) { + registry->RegisterListPref(kCachedGeoLanguagesPref, PrefRegistry::LOSSY_PREF); +} + std::vector<std::string> UlpLanguageCodeLocator::GetLanguageCodes( double latitude, double longitude) const { S2CellId cell(S2LatLng::FromDegrees(latitude, longitude)); std::vector<std::string> languages; + + ListPrefUpdate update(prefs_, kCachedGeoLanguagesPref); + base::ListValue* celllangs_cached = update.Get(); for (size_t index = 0; index < serialized_langtrees_.size(); index++) { - CellLanguagePair cached = cache_[index]; std::string language; - if (cached.cell.is_valid() && cached.cell.contains(cell)) { - language = cached.language; + + const base::DictionaryValue* celllang_cached; + const bool is_cached = + celllangs_cached->GetDictionary(index, &celllang_cached); + + const S2CellId cell_cached = + is_cached ? S2CellId::FromToken( + *celllang_cached->FindStringKey(kCellTokenKey)) + : S2CellId::None(); + + if (cell_cached.is_valid() && cell_cached.contains(cell)) { + language = *celllang_cached->FindStringKey(kLanguageKey); } else { const S2LangQuadTreeNode& root = S2LangQuadTreeNode::Deserialize(serialized_langtrees_[index].get()); int level; language = root.Get(cell, &level); if (level != -1) { - //|cell|.parent(|level|) is the ancestor S2Cell of |cell| for which - // there's a matching language in the tree. - cache_[index].cell = cell.parent(level); - cache_[index].language = language; + if (is_cached) { + celllangs_cached->GetList()[index] = + GetCellLanguagePairValue(cell.parent(level), language); + } else { + celllangs_cached->GetList().push_back( + GetCellLanguagePairValue(cell.parent(level), language)); + } } } if (!language.empty())
diff --git a/components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator.h b/components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator.h index ad0423b6b..f28a68d0 100644 --- a/components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator.h +++ b/components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator.h
@@ -12,6 +12,8 @@ #include "base/macros.h" #include "components/language/content/browser/language_code_locator.h" +class PrefRegistrySimple; +class PrefService; class SerializedLanguageTree; namespace language { @@ -21,18 +23,23 @@ // constructor. class UlpLanguageCodeLocator : public LanguageCodeLocator { public: + static const char kCachedGeoLanguagesPref[]; + UlpLanguageCodeLocator(std::vector<std::unique_ptr<SerializedLanguageTree>>&& - serialized_langtrees); + serialized_langtrees, + PrefService* prefs); ~UlpLanguageCodeLocator() override; + static void RegisterLocalStatePrefs(PrefRegistrySimple* registry); + // LanguageCodeLocator implementation. std::vector<std::string> GetLanguageCodes(double latitude, double longitude) const override; private: std::vector<std::unique_ptr<SerializedLanguageTree>> serialized_langtrees_; - struct CellLanguagePair; - mutable std::vector<CellLanguagePair> cache_; + PrefService* prefs_; + DISALLOW_COPY_AND_ASSIGN(UlpLanguageCodeLocator); }; } // namespace language
diff --git a/components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator_unittest.cc b/components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator_unittest.cc index f023af3..9b0bf6a 100644 --- a/components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator_unittest.cc +++ b/components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator_unittest.cc
@@ -7,10 +7,12 @@ #include <bitset> #include <memory> #include <string> +#include <utility> #include <vector> #include "base/logging.h" #include "components/language/content/browser/ulp_language_code_locator/s2langquadtree.h" +#include "components/prefs/testing_pref_service.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/s2cellid/src/s2/s2cellid.h" @@ -18,6 +20,15 @@ namespace language { +class UlpLanguageCodeLocatorTest : public testing::Test { + public: + UlpLanguageCodeLocatorTest() { + UlpLanguageCodeLocator::RegisterLocalStatePrefs(local_state_.registry()); + } + + TestingPrefServiceSimple local_state_; +}; + std::vector<std::unique_ptr<SerializedLanguageTree>> GetSerializedTrees() { const std::vector<std::string> languages_rank0{"fr", "en"}; // |tree_rank0| is a two level quadtree with the second level being all leaves @@ -51,10 +62,11 @@ EXPECT_THAT(languages, ::testing::ElementsAreArray(languages_expected)); } -TEST(UlpLanguageCodeLocatorTest, TreeLeaves) { +TEST_F(UlpLanguageCodeLocatorTest, TreeLeaves) { std::vector<std::unique_ptr<SerializedLanguageTree>> serialized_langtrees = GetSerializedTrees(); - const UlpLanguageCodeLocator locator(std::move(serialized_langtrees)); + const UlpLanguageCodeLocator locator(std::move(serialized_langtrees), + &local_state_); const S2CellId face = S2CellId::FromFace(0); ExpectLatLngHasLanguages(locator, face.child(0), {"fr", "de"}); @@ -63,10 +75,11 @@ ExpectLatLngHasLanguages(locator, face.child(3), {"en", "en"}); } -TEST(UlpLanguageCodeLocatorTest, Idempotence) { +TEST_F(UlpLanguageCodeLocatorTest, Idempotence) { std::vector<std::unique_ptr<SerializedLanguageTree>> serialized_langtrees = GetSerializedTrees(); - const UlpLanguageCodeLocator locator(std::move(serialized_langtrees)); + const UlpLanguageCodeLocator locator(std::move(serialized_langtrees), + &local_state_); const S2CellId face = S2CellId::FromFace(0); ExpectLatLngHasLanguages(locator, face.child(0), {"fr", "de"}); @@ -76,10 +89,11 @@ ExpectLatLngHasLanguages(locator, face.child(3), {"en", "en"}); } -TEST(UlpLanguageCodeLocatorTest, TreeLeafDescendants) { +TEST_F(UlpLanguageCodeLocatorTest, TreeLeafDescendants) { std::vector<std::unique_ptr<SerializedLanguageTree>> serialized_langtrees = GetSerializedTrees(); - const UlpLanguageCodeLocator locator(std::move(serialized_langtrees)); + const UlpLanguageCodeLocator locator(std::move(serialized_langtrees), + &local_state_); const S2CellId cell = S2CellId::FromFace(0).child(0); ExpectLatLngHasLanguages(locator, cell, {"fr", "de"});
diff --git a/components/policy/proto/chrome_device_policy.proto b/components/policy/proto/chrome_device_policy.proto index 4da2a8d..be3025f 100644 --- a/components/policy/proto/chrome_device_policy.proto +++ b/components/policy/proto/chrome_device_policy.proto
@@ -1147,6 +1147,12 @@ optional RebootOnSignoutMode reboot_on_signout_mode = 1 [default = NEVER]; } +// Setting that controls whether wilco diagnostics and telemetry controller is +// allowed on this device. +message DeviceWilcoDtcAllowedProto { + optional bool device_wilco_dtc_allowed = 1; +} + message ChromeDeviceSettingsProto { reserved 61; optional DevicePolicyRefreshRateProto device_policy_refresh_rate = 1; @@ -1248,4 +1254,5 @@ 77; optional PluginVmLicenseKeyProto plugin_vm_license_key = 78; optional DeviceRebootOnUserSignoutProto device_reboot_on_user_signout = 79; + optional DeviceWilcoDtcAllowedProto device_wilco_dtc_allowed = 80; }
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index e107acb..e353f8f5 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -970,6 +970,15 @@ ] }, { + 'name': 'WilcoDtc', + 'type': 'group', + 'caption': '''Wilco DTC''', + 'desc': '''Controls wilco diagnostics and telemetry controller settings.''', + 'policies': [ + 'DeviceWilcoDtcAllowed', + ], + }, + { 'name': 'HomepageLocation', 'type': 'string', 'schema': { 'type': 'string' }, @@ -14903,6 +14912,25 @@ If not set, users can decide whether to allow Google Assistant to listen to the voice activation phrase. ''', }, + { + 'name': 'DeviceWilcoDtcAllowed', + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:74-'], + 'device_only': True, + 'features': { + 'dynamic_refresh': True, + 'per_profile': False, + }, + 'example_value': False, + 'id': 532, + 'caption': '''Allows wilco diagnostics and telemetry controller''', + 'tags': [], + 'desc': '''Allows an admin to control if telemetry and diagnostics data should be collected, processed and reported by wilco diagnostics and telemetry controller (DTC). + + If the policy is set to false or left unset, DTC is switched off and is not able to collect, process and report telemetry and diagnostics data from the device. + If wilco DTC is available on the given device and the policy is set to true, collecting, processing and reporting of telemetry and diagnostics data is switched on.''', + }, ], 'messages': { @@ -15068,5 +15096,5 @@ }, 'placeholders': [], 'deleted_policy_ids': [412], - 'highest_id_currently_used': 531 + 'highest_id_currently_used': 532 }
diff --git a/components/services/font/fontconfig_matching.cc b/components/services/font/fontconfig_matching.cc index 0f8bc78c..8b2f3b11 100644 --- a/components/services/font/fontconfig_matching.cc +++ b/components/services/font/fontconfig_matching.cc
@@ -64,9 +64,15 @@ FcPattern* current = font_set->fonts[0]; - FcChar8* c_filename; - if (FcPatternGetString(current, FC_FILE, 0, &c_filename) != FcResultMatch) + const char* c_filename; + if (FcPatternGetString(current, FC_FILE, 0, + reinterpret_cast<FcChar8**>(const_cast<char**>( + &c_filename))) != FcResultMatch) { return base::nullopt; + } + const char* sysroot = + reinterpret_cast<const char*>(FcConfigGetSysRoot(nullptr)); + const std::string filename = std::string(sysroot ? sysroot : "") + c_filename; // We only want to return sfnt (TrueType) based fonts. We don't have a // very good way of detecting this so we'll filter based on the @@ -78,8 +84,8 @@ // None of the extensions matched. break; } - if (base::EndsWith(std::string(reinterpret_cast<char*>(c_filename)), - kSFNTExtensions[j], base::CompareCase::SENSITIVE)) { + if (base::EndsWith(filename, kSFNTExtensions[j], + base::CompareCase::SENSITIVE)) { is_sfnt = true; break; } @@ -88,7 +94,7 @@ if (!is_sfnt) return base::nullopt; - base::FilePath font_file_path(reinterpret_cast<const char*>(c_filename)); + base::FilePath font_file_path(filename); base::File verify_file_exists(font_file_path, base::File::FLAG_OPEN | base::File::FLAG_READ); if (!verify_file_exists.IsValid())
diff --git a/components/services/font/ppapi_fontconfig_matching.cc b/components/services/font/ppapi_fontconfig_matching.cc index 42f40e7..7317798 100644 --- a/components/services/font/ppapi_fontconfig_matching.cc +++ b/components/services/font/ppapi_fontconfig_matching.cc
@@ -170,6 +170,10 @@ int good_enough_index = -1; bool good_enough_index_set = false; + const char* c_filename; + const char* c_sysroot = + reinterpret_cast<const char*>(FcConfigGetSysRoot(nullptr)); + const std::string sysroot = c_sysroot ? c_sysroot : ""; if (font_set) { for (int i = 0; i < font_set->nfont; ++i) { FcPattern* current = font_set->fonts[i]; @@ -183,11 +187,12 @@ continue; } - FcChar8* c_filename; - if (FcPatternGetString(current, FC_FILE, 0, &c_filename) != - FcResultMatch) { + if (FcPatternGetString(current, FC_FILE, 0, + reinterpret_cast<FcChar8**>(const_cast<char**>( + &c_filename))) != FcResultMatch) { continue; } + const std::string filename = sysroot + c_filename; // We only want to return sfnt (TrueType) based fonts. We don't have a // very good way of detecting this so we'll filter based on the @@ -200,8 +205,8 @@ // None of the extensions matched. break; } - if (base::EndsWith(std::string(reinterpret_cast<char*>(c_filename)), - kSFNTExtensions[j], base::CompareCase::SENSITIVE)) { + if (base::EndsWith(filename, kSFNTExtensions[j], + base::CompareCase::SENSITIVE)) { is_sfnt = true; break; } @@ -236,8 +241,7 @@ continue; } - font_fd = - HANDLE_EINTR(open(reinterpret_cast<char*>(c_filename), O_RDONLY)); + font_fd = HANDLE_EINTR(open(filename.c_str(), O_RDONLY)); if (font_fd >= 0) break; } @@ -247,9 +251,12 @@ // We didn't find a font that we liked, so we fallback to something // acceptable. FcPattern* current = font_set->fonts[good_enough_index]; - FcChar8* c_filename; - FcPatternGetString(current, FC_FILE, 0, &c_filename); - font_fd = HANDLE_EINTR(open(reinterpret_cast<char*>(c_filename), O_RDONLY)); + if (!FcPatternGetString( + current, FC_FILE, 0, + reinterpret_cast<FcChar8**>(const_cast<char**>(&c_filename)))) { + const std::string filename = sysroot + c_filename; + font_fd = HANDLE_EINTR(open(filename.c_str(), O_RDONLY)); + } } if (font_set)
diff --git a/components/signin/core/browser/fake_signin_manager.cc b/components/signin/core/browser/fake_signin_manager.cc index 25d76a9..aca3656 100644 --- a/components/signin/core/browser/fake_signin_manager.cc +++ b/components/signin/core/browser/fake_signin_manager.cc
@@ -47,13 +47,6 @@ OnExternalSigninCompleted(username); } -void FakeSigninManager::ForceSignOut() { - // SigninClients should always allow sign-out for - // |FORCE_SIGNOUT_ALWAYS_ALLOWED_FOR_TESTS|. - SignOut(signin_metrics::FORCE_SIGNOUT_ALWAYS_ALLOWED_FOR_TEST, - signin_metrics::SignoutDelete::IGNORE_METRIC); -} - void FakeSigninManager::OnSignoutDecisionReached( signin_metrics::ProfileSignout signout_source_metric, signin_metrics::SignoutDelete signout_delete_metric,
diff --git a/components/signin/core/browser/fake_signin_manager.h b/components/signin/core/browser/fake_signin_manager.h index 826e25a1..1eb29212 100644 --- a/components/signin/core/browser/fake_signin_manager.h +++ b/components/signin/core/browser/fake_signin_manager.h
@@ -36,8 +36,6 @@ void SignIn(const std::string& gaia_id, const std::string& username); - void ForceSignOut(); - protected: void OnSignoutDecisionReached( signin_metrics::ProfileSignout signout_source_metric,
diff --git a/components/signin/core/browser/gaia_cookie_manager_service.cc b/components/signin/core/browser/gaia_cookie_manager_service.cc index 94ab355c..3f4b2061 100644 --- a/components/signin/core/browser/gaia_cookie_manager_service.cc +++ b/components/signin/core/browser/gaia_cookie_manager_service.cc
@@ -1171,7 +1171,7 @@ &GaiaCookieManagerService::OnCookieSet, weak_ptr_factory_.GetWeakPtr(), cookie.Name(), cookie.Domain()); cookie_manager->SetCanonicalCookie( - cookie, true, true, + cookie, "https", true, mojo::WrapCallbackWithDefaultInvokeIfNotRun(std::move(callback), false)); } else {
diff --git a/components/signin/ios/browser/account_consistency_service_unittest.mm b/components/signin/ios/browser/account_consistency_service_unittest.mm index b3850641..52563275 100644 --- a/components/signin/ios/browser/account_consistency_service_unittest.mm +++ b/components/signin/ios/browser/account_consistency_service_unittest.mm
@@ -232,7 +232,8 @@ } void SignOutAndSimulateGaiaCookieManagerServiceLogout() { - signin_manager_->ForceSignOut(); + identity::ClearPrimaryAccount(identity_test_env_->identity_manager(), + identity::ClearPrimaryAccountPolicy::DEFAULT); SimulateGaiaCookieManagerServiceLogout(true); }
diff --git a/components/sync/driver/sync_driver_switches.cc b/components/sync/driver/sync_driver_switches.cc index 2a5fb718..3e6e4a1 100644 --- a/components/sync/driver/sync_driver_switches.cc +++ b/components/sync/driver/sync_driver_switches.cc
@@ -97,10 +97,6 @@ const base::Feature kSyncUserFieldTrialEvents{"SyncUserFieldTrialEvents", base::FEATURE_ENABLED_BY_DEFAULT}; -// Gates emission of UserConsent events. -const base::Feature kSyncUserConsentEvents{"SyncUserConsentEvents", - base::FEATURE_ENABLED_BY_DEFAULT}; - // Gates registration for user language detection events. const base::Feature kSyncUserLanguageDetectionEvents{ "SyncUserLanguageDetectionEvents", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/components/sync/driver/sync_driver_switches.h b/components/sync/driver/sync_driver_switches.h index 79bd831..75d879b 100644 --- a/components/sync/driver/sync_driver_switches.h +++ b/components/sync/driver/sync_driver_switches.h
@@ -40,7 +40,6 @@ extern const base::Feature kSyncSupportSecondaryAccount; extern const base::Feature kSyncUserEvents; extern const base::Feature kSyncUserFieldTrialEvents; -extern const base::Feature kSyncUserConsentEvents; extern const base::Feature kSyncUserLanguageDetectionEvents; extern const base::Feature kSyncUserTranslationEvents; extern const base::Feature kSyncUSSBookmarks;
diff --git a/components/viz/service/display/skia_renderer.cc b/components/viz/service/display/skia_renderer.cc index f93db6d..88f33fd 100644 --- a/components/viz/service/display/skia_renderer.cc +++ b/components/viz/service/display/skia_renderer.cc
@@ -33,7 +33,6 @@ #include "skia/ext/opacity_filter_canvas.h" #include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/core/SkColor.h" -#include "third_party/skia/include/core/SkColorSpaceXformCanvas.h" #include "third_party/skia/include/core/SkMatrix.h" #include "third_party/skia/include/core/SkOverdrawCanvas.h" #include "third_party/skia/include/core/SkPath.h" @@ -723,12 +722,6 @@ SkCanvas* raster_canvas = current_canvas_; - std::unique_ptr<SkCanvas> color_transform_canvas; - // TODO(enne): color transform needs to be replicated in gles2_cmd_decoder - color_transform_canvas = SkCreateColorSpaceXformCanvas( - current_canvas_, gfx::ColorSpace::CreateSRGB().ToSkColorSpace()); - raster_canvas = color_transform_canvas.get(); - base::Optional<skia::OpacityFilterCanvas> opacity_canvas; if (needs_transparency || disable_image_filtering) { // TODO(aelias): This isn't correct in all cases. We should detect these
diff --git a/components/viz/service/display/software_renderer.cc b/components/viz/service/display/software_renderer.cc index 0c5853b..62fad65 100644 --- a/components/viz/service/display/software_renderer.cc +++ b/components/viz/service/display/software_renderer.cc
@@ -25,7 +25,6 @@ #include "skia/ext/opacity_filter_canvas.h" #include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/core/SkColor.h" -#include "third_party/skia/include/core/SkColorSpaceXformCanvas.h" #include "third_party/skia/include/core/SkImageFilter.h" #include "third_party/skia/include/core/SkMatrix.h" #include "third_party/skia/include/core/SkPath.h" @@ -341,12 +340,6 @@ SkCanvas* raster_canvas = current_canvas_; - std::unique_ptr<SkCanvas> color_transform_canvas; - // TODO(enne): color transform needs to be replicated in gles2_cmd_decoder - color_transform_canvas = SkCreateColorSpaceXformCanvas( - current_canvas_, gfx::ColorSpace::CreateSRGB().ToSkColorSpace()); - raster_canvas = color_transform_canvas.get(); - base::Optional<skia::OpacityFilterCanvas> opacity_canvas; if (needs_transparency || disable_image_filtering) { // TODO(aelias): This isn't correct in all cases. We should detect these
diff --git a/content/browser/bad_message.h b/content/browser/bad_message.h index 2483419e..3642892 100644 --- a/content/browser/bad_message.h +++ b/content/browser/bad_message.h
@@ -239,6 +239,7 @@ RFH_DOCUMENT_INTERFACE_BROKER_MISSING = 211, RFPH_POST_MESSAGE_INVALID_SOURCE_ORIGIN = 212, INVALID_INITIATOR_ORIGIN = 213, + RFHI_BEGIN_NAVIGATION_MISSING_INITIATOR_ORIGIN = 214, // Please add new elements here. The naming convention is abbreviated class // name (e.g. RenderFrameHost becomes RFH) plus a unique description of the
diff --git a/content/browser/browsing_data/clear_site_data_handler_browsertest.cc b/content/browser/browsing_data/clear_site_data_handler_browsertest.cc index 4ffa981..763f5e8 100644 --- a/content/browser/browsing_data/clear_site_data_handler_browsertest.cc +++ b/content/browser/browsing_data/clear_site_data_handler_browsertest.cc
@@ -228,7 +228,7 @@ base::RunLoop run_loop; cookie_manager->SetCanonicalCookie( - *cookie, true /* secure_source */, false /* modify_http_only */, + *cookie, url.scheme(), false /* modify_http_only */, base::BindOnce(&ClearSiteDataHandlerBrowserTest::AddCookieCallback, run_loop.QuitClosure())); run_loop.Run();
diff --git a/content/browser/cookie_store/cookie_store_manager_unittest.cc b/content/browser/cookie_store/cookie_store_manager_unittest.cc index 59c18ff..24c6725 100644 --- a/content/browser/cookie_store/cookie_store_manager_unittest.cc +++ b/content/browser/cookie_store/cookie_store_manager_unittest.cc
@@ -319,7 +319,7 @@ base::RunLoop run_loop; bool success = false; cookie_manager_->SetCanonicalCookie( - cookie, /* secure_source = */ true, /* can_modify_httponly = */ true, + cookie, "https", /* can_modify_httponly = */ true, base::BindOnce( [](base::RunLoop* run_loop, bool* success, bool service_success) { *success = success;
diff --git a/content/browser/devtools/devtools_url_interceptor_request_job.cc b/content/browser/devtools/devtools_url_interceptor_request_job.cc index 3149c71..1f6750bd 100644 --- a/content/browser/devtools/devtools_url_interceptor_request_job.cc +++ b/content/browser/devtools/devtools_url_interceptor_request_job.cc
@@ -1080,7 +1080,7 @@ auto* store = request_details_.url_request_context->cookie_store(); store->SetCanonicalCookieAsync( - std::move(cookie), request_details_.url.SchemeIsCryptographic(), + std::move(cookie), request_details_.url.scheme(), !options.exclude_httponly(), net::CookieStore::SetCookiesCallback()); }
diff --git a/content/browser/devtools/devtools_url_loader_interceptor.cc b/content/browser/devtools/devtools_url_loader_interceptor.cc index 5bc4a1b..e64ee32 100644 --- a/content/browser/devtools/devtools_url_loader_interceptor.cc +++ b/content/browser/devtools/devtools_url_loader_interceptor.cc
@@ -1060,7 +1060,9 @@ [](base::RepeatingClosure closure, bool) { closure.Run(); }, base::BarrierClosure(cookies.size(), std::move(callback))); for (auto& cookie : cookies) { - cookie_manager_->SetCanonicalCookie(*cookie, true, true, on_cookie_set); + cookie_manager_->SetCanonicalCookie( + *cookie, create_loader_params_->request.url.scheme(), true, + on_cookie_set); } }
diff --git a/content/browser/devtools/protocol/network_handler.cc b/content/browser/devtools/protocol/network_handler.cc index 483ad51..d6682d76 100644 --- a/content/browser/devtools/protocol/network_handler.cc +++ b/content/browser/devtools/protocol/network_handler.cc
@@ -459,7 +459,7 @@ context_getter->GetURLRequestContext(); request_context->cookie_store()->SetCanonicalCookieAsync( - std::move(cookie), true /* secure_source */, true /*modify_http_only*/, + std::move(cookie), "https" /* source_scheme */, true /*modify_http_only*/, std::move(callback)); } @@ -1249,7 +1249,7 @@ } storage_partition_->GetCookieManagerForBrowserProcess()->SetCanonicalCookie( - *cookie, true /* secure_source */, true /* modify_http_only */, + *cookie, "https", true /* modify_http_only */, base::BindOnce(&SetCookieCallback::sendSuccess, std::move(callback))); } @@ -1296,7 +1296,7 @@ storage_partition_->GetCookieManagerForBrowserProcess(); for (const auto& cookie : net_cookies) { cookie_manager->SetCanonicalCookie( - *cookie, true, true, + *cookie, "https", true, base::BindOnce( [](base::RepeatingClosure callback, bool) { callback.Run(); }, barrier_closure));
diff --git a/content/browser/frame_host/ipc_utils.cc b/content/browser/frame_host/ipc_utils.cc index 53006c9f..69c6f22 100644 --- a/content/browser/frame_host/ipc_utils.cc +++ b/content/browser/frame_host/ipc_utils.cc
@@ -158,8 +158,12 @@ } // Verify |initiator_origin|. - if (common_params->initiator_origin.has_value() && - !VerifyInitiatorOrigin(process_id, + if (!common_params->initiator_origin.has_value()) { + bad_message::ReceivedBadMessage( + process, bad_message::RFHI_BEGIN_NAVIGATION_MISSING_INITIATOR_ORIGIN); + return false; + } + if (!VerifyInitiatorOrigin(process_id, common_params->initiator_origin.value())) { return false; }
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index 5b7b02e..3d4741b 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -418,27 +418,15 @@ base::debug::SetCrashKeyString(site_url_key, site_url.spec()); } -base::Optional<url::Origin> GetOriginForURLLoaderFactory( - GURL target_url, - SiteInstanceImpl* site_instance) { - // TODO(lukasza, nasko): https://crbug.com/888079: Use exact origin, instead - // of falling back to site URL for about:blank and about:srcdoc. - if (target_url.SchemeIs(url::kAboutScheme)) { - // |site_instance|'s site URL cannot be used as - // |request_initiator_site_lock| unless the site requires a dedicated - // process. Otherwise b.com may share a process associated with a.com, in - // a SiteInstance with |site_url| set to "http://a.com" (and/or - // "http://nonisolated.invalid" in the future) and in that scenario - // |request_initiator| for requests from b.com should NOT be locked to - // a.com. - if (!SiteInstanceImpl::ShouldLockToOrigin( - site_instance->GetBrowserContext(), - site_instance->GetIsolationContext(), site_instance->GetSiteURL())) - return base::nullopt; - - return SiteInstanceImpl::GetRequestInitiatorSiteLock( - site_instance->GetSiteURL()); - } +url::Origin GetOriginForURLLoaderFactory( + const CommonNavigationParams& common_params) { + // Use |initiator_origin| for navigations to about:blank and about:srcdoc. + // + // |initiator_origin| is provided for all renderer-initiated navigations; + // for browser-initiated navigations a unique origin should be used. + GURL target_url = common_params.url; + if (target_url.SchemeIs(url::kAboutScheme)) + return common_params.initiator_origin.value_or(url::Origin()); // In cases not covered above, URLLoaderFactory should be associated with the // origin of |target_url|. This works fine for all URLs, including data: URLs @@ -1965,6 +1953,24 @@ SetLastCommittedOrigin(origin); } +void RenderFrameHostImpl::SetOriginOfNewFrame( + const url::Origin& new_frame_creator) { + // This method should only be called for *new* frames, that haven't committed + // a navigation yet. + DCHECK(!has_committed_any_navigation_); + DCHECK(GetLastCommittedOrigin().opaque()); + + // Calculate and set |new_frame_origin|. + bool new_frame_should_be_sandboxed = + blink::WebSandboxFlags::kOrigin == + (frame_tree_node()->active_sandbox_flags() & + blink::WebSandboxFlags::kOrigin); + url::Origin new_frame_origin = new_frame_should_be_sandboxed + ? new_frame_creator.DeriveNewOpaqueOrigin() + : new_frame_creator; + SetLastCommittedOrigin(new_frame_origin); +} + FrameTreeNode* RenderFrameHostImpl::AddChild( std::unique_ptr<FrameTreeNode> child, int process_id, @@ -1985,8 +1991,12 @@ // in a frame tree should have the same set of proxies. frame_tree_node_->render_manager()->CreateProxiesForChildFrame(child.get()); - children_.push_back(std::move(child)); + // When the child is added, it hasn't committed any navigation yet - its + // initial empty document should inherit the origin of its parent (the origin + // may change after the first commit). See also https://crbug.com/932067. + child->current_frame_host()->SetOriginOfNewFrame(GetLastCommittedOrigin()); + children_.push_back(std::move(child)); return children_.back().get(); } @@ -3731,6 +3741,16 @@ RenderFrameHostImpl::FromID(GetProcess()->GetID(), main_frame_route_id); DCHECK(rfh); + // When the popup is created, it hasn't committed any navigation yet - its + // initial empty document should inherit the origin of its opener (the origin + // may change after the first commit). See also https://crbug.com/932067. + // + // Note that that origin of the new frame might depend on sandbox flags. + // Checking sandbox flags of the new frame should be safe at this point, + // because the flags should be already inherited by the CreateNewWindow call + // above. + rfh->SetOriginOfNewFrame(GetLastCommittedOrigin()); + if (base::FeatureList::IsEnabled(network::features::kNetworkService) && rfh->waiting_for_init_) { // Need to check |waiting_for_init_| as some paths inside CreateNewWindow @@ -4583,8 +4603,7 @@ recreate_default_url_loader_factory_after_network_service_crash_ = true; bool bypass_redirect_checks = CreateNetworkServiceDefaultFactoryAndObserve( - GetOriginForURLLoaderFactory(common_params.url, - GetSiteInstance()), + GetOriginForURLLoaderFactory(common_params), mojo::MakeRequest(&default_factory_info)); subresource_loader_factories->set_bypass_redirect_checks( bypass_redirect_checks); @@ -4647,10 +4666,8 @@ GetContentClient()->browser()->WillCreateURLLoaderFactory( browser_context, this, GetProcess()->GetID(), false /* is_navigation */, - GetOriginForURLLoaderFactory(common_params.url, GetSiteInstance()) - .value_or(url::Origin()), - &factory_request, nullptr /* header_client */, - nullptr /* bypass_redirect_checks */); + GetOriginForURLLoaderFactory(common_params), &factory_request, + nullptr /* header_client */, nullptr /* bypass_redirect_checks */); // Keep DevTools proxy last, i.e. closest to the network. devtools_instrumentation::WillCreateURLLoaderFactory( this, false /* is_navigation */, false /* is_download */,
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h index f01777e..248d252 100644 --- a/content/browser/frame_host/render_frame_host_impl.h +++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -1377,6 +1377,11 @@ // Update this frame's last committed origin. void SetLastCommittedOrigin(const url::Origin& origin); + // Set the |last_committed_origin_| of |this| frame, inheriting the origin + // from |new_frame_creator| as appropriate (e.g. depending on whether |this| + // frame should be sandboxed / should have an opaque origin instead). + void SetOriginOfNewFrame(const url::Origin& new_frame_creator); + // Called when a navigation commits succesfully to |url|. This will update // |last_committed_site_url_| with the site URL corresponding to |url|. // Note that this will recompute the site URL from |url| rather than using
diff --git a/content/browser/frame_host/render_frame_host_impl_browsertest.cc b/content/browser/frame_host/render_frame_host_impl_browsertest.cc index 9d223f4e..e73bb6cf 100644 --- a/content/browser/frame_host/render_frame_host_impl_browsertest.cc +++ b/content/browser/frame_host/render_frame_host_impl_browsertest.cc
@@ -2054,4 +2054,226 @@ nested_iframe_node->current_frame_host()->visibility()); } +IN_PROC_BROWSER_TEST_F(RenderFrameHostImplBrowserTest, + OriginOfFreshFrame_Subframe_NavCancelledByDocWrite) { + WebContents* web_contents = shell()->web_contents(); + NavigationController& controller = web_contents->GetController(); + GURL main_url(embedded_test_server()->GetURL("foo.com", "/title1.html")); + ASSERT_TRUE(NavigateToURL(shell(), main_url)); + EXPECT_EQ(1, controller.GetEntryCount()); + url::Origin main_origin = url::Origin::Create(main_url); + + // document.open should cancel the cross-origin navigation to '/hung' and the + // subframe should remain on the parent/initiator origin. + const char kScriptTemplate[] = R"( + const frame = document.createElement('iframe'); + frame.src = $1; + document.body.appendChild(frame); + + const html = '<!DOCTYPE html><html><body>Hello world!</body></html>'; + const doc = frame.contentDocument; + doc.open(); + doc.write(html); + doc.close(); + + frame.contentWindow.origin; + )"; + GURL cross_site_url(embedded_test_server()->GetURL("bar.com", "/hung")); + std::string script = JsReplace(kScriptTemplate, cross_site_url); + EXPECT_EQ(main_origin.Serialize(), EvalJs(web_contents, script)); + + // The subframe navigation should be cancelled and therefore shouldn't + // contribute an extra history entry. + EXPECT_EQ(1, controller.GetEntryCount()); + + // Browser-side origin should match the renderer-side origin. + // See also https://crbug.com/932067. + ASSERT_EQ(2u, web_contents->GetAllFrames().size()); + RenderFrameHost* subframe = web_contents->GetAllFrames()[1]; + EXPECT_EQ(main_origin, subframe->GetLastCommittedOrigin()); +} + +class RenderFrameHostCreatedObserver : public WebContentsObserver { + public: + explicit RenderFrameHostCreatedObserver(WebContents* web_contents) + : WebContentsObserver(web_contents) {} + + RenderFrameHost* Wait() { + if (!new_frame_) + run_loop_.Run(); + + return new_frame_; + } + + private: + void RenderFrameCreated(RenderFrameHost* render_frame_host) override { + new_frame_ = render_frame_host; + run_loop_.Quit(); + } + + base::RunLoop run_loop_; + RenderFrameHost* new_frame_ = nullptr; + + DISALLOW_COPY_AND_ASSIGN(RenderFrameHostCreatedObserver); +}; + +IN_PROC_BROWSER_TEST_F(RenderFrameHostImplBrowserTest, + OriginOfFreshFrame_SandboxedSubframe) { + WebContents* web_contents = shell()->web_contents(); + NavigationController& controller = web_contents->GetController(); + GURL main_url(embedded_test_server()->GetURL("foo.com", "/title1.html")); + ASSERT_TRUE(NavigateToURL(shell(), main_url)); + EXPECT_EQ(1, controller.GetEntryCount()); + url::Origin main_origin = url::Origin::Create(main_url); + + // Navigate a sandboxed frame to a cross-origin '/hung'. + RenderFrameHostCreatedObserver subframe_observer(web_contents); + const char kScriptTemplate[] = R"( + const frame = document.createElement('iframe'); + frame.sandbox = 'allow-scripts'; + frame.src = $1; + document.body.appendChild(frame); + )"; + GURL cross_site_url(embedded_test_server()->GetURL("bar.com", "/hung")); + std::string script = JsReplace(kScriptTemplate, cross_site_url); + EXPECT_TRUE(ExecJs(web_contents, script)); + + // Wait for a new subframe, but ignore the frame returned by + // |subframe_observer| (it might be the speculative one, not the current one). + subframe_observer.Wait(); + ASSERT_EQ(2u, web_contents->GetAllFrames().size()); + RenderFrameHost* subframe = web_contents->GetAllFrames()[1]; + + // The browser-side origin of the *sandboxed* subframe should be set to an + // *opaque* origin (with the parent's origin as the precursor origin). + EXPECT_TRUE(subframe->GetLastCommittedOrigin().opaque()); + EXPECT_EQ( + main_origin.GetTupleOrPrecursorTupleIfOpaque(), + subframe->GetLastCommittedOrigin().GetTupleOrPrecursorTupleIfOpaque()); + + // Note that the test cannot check the renderer-side origin of the frame: + // - Scripts cannot be executed before the frame commits, + // - The parent cannot document.write into the *sandboxed* frame. +} + +IN_PROC_BROWSER_TEST_F(RenderFrameHostImplBrowserTest, + OriginOfFreshFrame_Subframe_AboutBlankAndThenDocWrite) { + WebContents* web_contents = shell()->web_contents(); + NavigationController& controller = web_contents->GetController(); + GURL main_url(embedded_test_server()->GetURL("foo.com", "/title1.html")); + ASSERT_TRUE(NavigateToURL(shell(), main_url)); + EXPECT_EQ(1, controller.GetEntryCount()); + url::Origin main_origin = url::Origin::Create(main_url); + + // Create a new about:blank subframe and document.write into it. + TestNavigationObserver load_observer(web_contents); + RenderFrameHostCreatedObserver subframe_observer(web_contents); + const char kScript[] = R"( + const frame = document.createElement('iframe'); + // Don't set |frame.src| - have the frame commit an initial about:blank. + document.body.appendChild(frame); + + const html = '<!DOCTYPE html><html><body>Hello world!</body></html>'; + const doc = frame.contentDocument; + doc.open(); + doc.write(html); + doc.close(); + )"; + ExecuteScriptAsync(web_contents, kScript); + + // Wait for the new subframe to be created - this will be still before the + // commit of about:blank. + RenderFrameHost* subframe = subframe_observer.Wait(); + EXPECT_EQ(main_origin, subframe->GetLastCommittedOrigin()); + + // Wait for the about:blank navigation to finish. + load_observer.Wait(); + + // The subframe commit to about:blank should not contribute an extra history + // entry. + EXPECT_EQ(1, controller.GetEntryCount()); + + // Browser-side origin should match the renderer-side origin. + // See also https://crbug.com/932067. + ASSERT_EQ(2u, web_contents->GetAllFrames().size()); + RenderFrameHost* subframe2 = web_contents->GetAllFrames()[1]; + EXPECT_EQ(subframe, subframe2); // No swaps are expected. + EXPECT_EQ(main_origin, subframe2->GetLastCommittedOrigin()); + EXPECT_EQ(main_origin.Serialize(), EvalJs(subframe2, "window.origin")); +} + +IN_PROC_BROWSER_TEST_F(RenderFrameHostImplBrowserTest, + OriginOfFreshFrame_Popup_NavCancelledByDocWrite) { + WebContents* web_contents = shell()->web_contents(); + GURL main_url(embedded_test_server()->GetURL("foo.com", "/title1.html")); + ASSERT_TRUE(NavigateToURL(shell(), main_url)); + url::Origin main_origin = url::Origin::Create(main_url); + + // document.open should cancel the cross-origin navigation to '/hung' and the + // popup should remain on the initiator origin. + WebContentsAddedObserver popup_observer; + const char kScriptTemplate[] = R"( + var popup = window.open($1, 'popup'); + + const html = '<!DOCTYPE html><html><body>Hello world!</body></html>'; + const doc = popup.document; + doc.open(); + doc.write(html); + doc.close(); + + popup.origin; + )"; + GURL cross_site_url(embedded_test_server()->GetURL("bar.com", "/hung")); + std::string script = JsReplace(kScriptTemplate, cross_site_url); + EXPECT_EQ(main_origin.Serialize(), EvalJs(web_contents, script)); + + // Browser-side origin should match the renderer-side origin. + // See also https://crbug.com/932067. + WebContents* popup = popup_observer.GetWebContents(); + EXPECT_EQ(main_origin, popup->GetMainFrame()->GetLastCommittedOrigin()); + + // The popup navigation should be cancelled and therefore shouldn't + // contribute an extra history entry. + EXPECT_EQ(0, popup->GetController().GetEntryCount()); +} + +IN_PROC_BROWSER_TEST_F(RenderFrameHostImplBrowserTest, + OriginOfFreshFrame_Popup_AboutBlankAndThenDocWrite) { + WebContents* web_contents = shell()->web_contents(); + GURL main_url(embedded_test_server()->GetURL("foo.com", "/title1.html")); + ASSERT_TRUE(NavigateToURL(shell(), main_url)); + url::Origin main_origin = url::Origin::Create(main_url); + + // Create a new about:blank popup and document.write into it. + WebContentsAddedObserver popup_observer; + TestNavigationObserver load_observer(web_contents); + const char kScript[] = R"( + // Empty |url| argument means that the popup will commit an initial + // about:blank. + var popup = window.open('', 'popup'); + + const html = '<!DOCTYPE html><html><body>Hello world!</body></html>'; + const doc = popup.document; + doc.open(); + doc.write(html); + doc.close(); + )"; + ExecuteScriptAsync(web_contents, kScript); + + // Wait for the new popup to be created (this will be before the popup commits + // the initial about:blank page). + WebContents* popup = popup_observer.GetWebContents(); + EXPECT_EQ(main_origin, popup->GetMainFrame()->GetLastCommittedOrigin()); + + // A round-trip to the renderer process is an indirect way to wait for + // DidCommitProvisionalLoad IPC for the initial about:blank page. + // WaitForLoadStop cannot be used, because this commit won't raise + // NOTIFICATION_LOAD_STOP. + EXPECT_EQ(123, EvalJs(popup, "123")); + EXPECT_EQ(main_origin, popup->GetMainFrame()->GetLastCommittedOrigin()); + + // The about:blank navigation shouldn't contribute an extra history entry. + EXPECT_EQ(0, popup->GetController().GetEntryCount()); +} + } // namespace content
diff --git a/content/browser/frame_host/render_frame_message_filter.cc b/content/browser/frame_host/render_frame_message_filter.cc index 62f00997..4fcaadf7 100644 --- a/content/browser/frame_host/render_frame_message_filter.cc +++ b/content/browser/frame_host/render_frame_message_filter.cc
@@ -613,8 +613,8 @@ // Pass a null callback since we don't care about when the 'set' completes. cookie_store->SetCanonicalCookieAsync( - std::move(cookie), url.SchemeIsCryptographic(), - !options.exclude_httponly(), net::CookieStore::SetCookiesCallback()); + std::move(cookie), url.scheme(), !options.exclude_httponly(), + net::CookieStore::SetCookiesCallback()); return; } @@ -627,8 +627,7 @@ std::move(callback)), false); (*GetCookieManager()) - ->SetCanonicalCookie(*cookie, url.SchemeIsCryptographic(), - !options.exclude_httponly(), + ->SetCanonicalCookie(*cookie, url.scheme(), !options.exclude_httponly(), std::move(net_callback)); }
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index 581830b..1c602b8 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -4357,8 +4357,9 @@ #endif ); - const bool should_background_changed = + const bool background_state_changed = priority_.is_background() != priority.is_background(); + const bool visibility_state_changed = priority_.visible != priority.visible; if (priority_ == priority) return; @@ -4367,6 +4368,7 @@ "has_pending_views", priority.boost_for_pending_views); priority_ = priority; + bool allow_background_change = true; #if defined(OS_WIN) // The cbstext.dll loads as a global GetMessage hook in the browser process // and intercepts/unintercepts the kernel32 API SetPriorityClass in a @@ -4375,7 +4377,7 @@ // which causes random crashes in the browser process. Our hack for now // is to not invoke the SetPriorityClass API if the dll is loaded. if (GetModuleHandle(L"cbstext.dll")) - return; + allow_background_change = false; #endif // OS_WIN // Control the background state from the browser process, otherwise the task @@ -4383,7 +4385,7 @@ // tasks executing at lowered priority ahead of it or simply by not being // swiftly scheduled by the OS per the low process priority // (http://crbug.com/398103). - if (!run_renderer_in_process()) { + if (!run_renderer_in_process() && allow_background_change) { DCHECK(child_process_launcher_.get()); DCHECK(!child_process_launcher_->IsStarting()); // Make sure to keep the pid in the trace so we can tell which process is @@ -4396,12 +4398,24 @@ child_process_launcher_->SetProcessPriority(priority_); } - // Notify the child process of background state. - if (should_background_changed) { - GetRendererInterface()->SetProcessBackgrounded(priority_.is_background()); + // Notify the child process of the change in state. + if ((background_state_changed && allow_background_change) || + visibility_state_changed) { + SendProcessStateToRenderer(); } } +void RenderProcessHostImpl::SendProcessStateToRenderer() { + mojom::RenderProcessState process_state; + if (priority_.is_background()) + process_state = mojom::RenderProcessState::kBackgrounded; + else if (priority_.visible) + process_state = mojom::RenderProcessState::kVisible; + else + process_state = mojom::RenderProcessState::kHidden; + GetRendererInterface()->SetProcessState(process_state); +} + void RenderProcessHostImpl::OnProcessLaunched() { // No point doing anything, since this object will be destructed soon. We // especially don't want to send the RENDERER_PROCESS_CREATED notification,
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h index 7434784..74af076a 100644 --- a/content/browser/renderer_host/render_process_host_impl.h +++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -588,6 +588,9 @@ // change. void UpdateProcessPriority(); + // Called if the backgrounded or visibility state of the process changes. + void SendProcessStateToRenderer(); + // Creates a PersistentMemoryAllocator and shares it with the renderer // process for it to store histograms from that process. The allocator is // available for extraction by a SubprocesMetricsProvider in order to
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc index 2baa5daf..7adfc5d 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.cc +++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -1354,7 +1354,8 @@ overscroll_controller_->Enable(); if (delegated_frame_host_ && - delegated_frame_host_->IsPrimarySurfaceEvicted()) { + (delegated_frame_host_->IsPrimarySurfaceEvicted() || + !local_surface_id_allocator_.HasValidLocalSurfaceIdAllocation())) { ui::WindowAndroidCompositor* compositor = view_.GetWindowAndroid() ? view_.GetWindowAndroid()->GetCompositor() : nullptr; @@ -1364,6 +1365,12 @@ ui::DelegatedFrameHostAndroid::FirstFrameTimeoutFrames()) : cc::DeadlinePolicy::UseDefaultDeadline(), base::nullopt); + // If we navigated while hidden, we need to update the fallback surface only + // after we've completed navigation, and embedded the new surface. + if (navigation_while_hidden_) { + navigation_while_hidden_ = false; + delegated_frame_host_->DidNavigate(); + } } host()->WasShown(false /* record_presentation_time */); @@ -2350,6 +2357,7 @@ // sizes are ready, or we begin to Show, we can then allocate the new // LocalSurfaceId. local_surface_id_allocator_.Invalidate(); + navigation_while_hidden_ = true; } else { if (is_first_navigation_) { SynchronizeVisualProperties( @@ -2359,8 +2367,9 @@ SynchronizeVisualProperties(cc::DeadlinePolicy::UseExistingDeadline(), base::nullopt); } + // Only notify of navigation once a surface has been embedded. + delegated_frame_host_->DidNavigate(); } - delegated_frame_host_->DidNavigate(); is_first_navigation_ = false; }
diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h index de49eae..795b3fe 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.h +++ b/content/browser/renderer_host/render_widget_host_view_android.h
@@ -334,6 +334,10 @@ void WasEvicted(); + ui::DelegatedFrameHostAndroid* delegated_frame_host_for_testing() { + return delegated_frame_host_.get(); + } + protected: // RenderWidgetHostViewBase: void UpdateBackgroundColor() override; @@ -504,6 +508,8 @@ viz::ParentLocalSurfaceIdAllocator local_surface_id_allocator_; bool is_first_navigation_ = true; + // If true, then the next allocated surface should be embedded. + bool navigation_while_hidden_ = false; base::flat_map<uint32_t, gfx::PresentationFeedback> presentation_feedbacks_;
diff --git a/content/browser/renderer_host/render_widget_host_view_browsertest.cc b/content/browser/renderer_host/render_widget_host_view_browsertest.cc index 5a5806b..00c0123 100644 --- a/content/browser/renderer_host/render_widget_host_view_browsertest.cc +++ b/content/browser/renderer_host/render_widget_host_view_browsertest.cc
@@ -39,6 +39,11 @@ #include "ui/display/display_switches.h" #include "ui/gfx/geometry/size_conversions.h" +#if defined(OS_ANDROID) +#include "content/browser/renderer_host/render_widget_host_view_android.h" +#include "ui/android/delegated_frame_host_android.h" +#endif + namespace content { namespace { @@ -223,6 +228,72 @@ // dependent so we can't have a single generic test. } +// TODO(jonross): Update Mac to also invalidate its viz::LocalSurfaceIds when +// performing navigations while hidden. https://crbug.com/935364 +#if !defined(OS_MACOSX) +// When a navigation occurs while the RenderWidgetHostViewBase is hidden, it +// should invalidate it's viz::LocalSurfaceId. When subsequently being shown, +// a new surface should be generated with a new viz::LocalSurfaceId +IN_PROC_BROWSER_TEST_F(NoCompositingRenderWidgetHostViewBrowserTest, + ValidLocalSurfaceIdAllocationAfterHiddenNavigation) { + ASSERT_TRUE(embedded_test_server()->Start()); + // Creates the initial RenderWidgetHostViewBase, and connects to a + // CompositorFrameSink. + NavigateToURL(shell(), + embedded_test_server()->GetURL("/page_with_animation.html")); + RenderWidgetHostViewBase* rwhvb = GetRenderWidgetHostView(); + EXPECT_TRUE(rwhvb); + viz::LocalSurfaceId rwhvb_local_surface_id = + rwhvb->GetLocalSurfaceIdAllocation().local_surface_id(); + EXPECT_TRUE(rwhvb_local_surface_id.is_valid()); + + // Hide the view before performing the next navigation. + shell()->web_contents()->WasHidden(); +#if defined(OS_ANDROID) + // On Android we want to ensure that we maintain the currently embedded + // surface. So that there is something to display when returning to the tab. + RenderWidgetHostViewAndroid* rwhva = + static_cast<RenderWidgetHostViewAndroid*>(rwhvb); + ui::DelegatedFrameHostAndroid* dfh = + rwhva->delegated_frame_host_for_testing(); + EXPECT_TRUE(dfh->HasPrimarySurface()); + EXPECT_FALSE(dfh->IsPrimarySurfaceEvicted()); + viz::LocalSurfaceId initial_local_surface_id = + dfh->SurfaceId().local_surface_id(); + EXPECT_TRUE(initial_local_surface_id.is_valid()); +#endif + + // Perform a navigation to the same content source. This will reuse the + // existing RenderWidgetHostViewBase. + NavigateToURL(shell(), + embedded_test_server()->GetURL("/page_with_animation.html")); + EXPECT_FALSE(rwhvb->GetLocalSurfaceIdAllocation().IsValid()); + +#if defined(OS_ANDROID) + // Navigating while hidden should not generate a new surface. As the old one + // is maintained as the fallback. + EXPECT_TRUE(dfh->HasPrimarySurface()); + EXPECT_FALSE(dfh->IsPrimarySurfaceEvicted()); + EXPECT_EQ(initial_local_surface_id, dfh->SurfaceId().local_surface_id()); +#endif + + // Showing the view should lead to a new surface being embedded. + shell()->web_contents()->WasShown(); + viz::LocalSurfaceId new_rwhvb_local_surface_id = + rwhvb->GetLocalSurfaceIdAllocation().local_surface_id(); + EXPECT_TRUE(new_rwhvb_local_surface_id.is_valid()); + EXPECT_NE(rwhvb_local_surface_id, new_rwhvb_local_surface_id); +#if defined(OS_ANDROID) + EXPECT_TRUE(dfh->HasPrimarySurface()); + EXPECT_FALSE(dfh->IsPrimarySurfaceEvicted()); + viz::LocalSurfaceId new_local_surface_id = + dfh->SurfaceId().local_surface_id(); + EXPECT_TRUE(new_local_surface_id.is_valid()); + EXPECT_NE(initial_local_surface_id, new_local_surface_id); +#endif +} +#endif // !defined(OS_MACOSX) + IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewBrowserTestBase, CompositorWorksWhenReusingRenderer) { ASSERT_TRUE(embedded_test_server()->Start());
diff --git a/content/browser/security_exploit_browsertest.cc b/content/browser/security_exploit_browsertest.cc index d051fd9..fb7cecfb 100644 --- a/content/browser/security_exploit_browsertest.cc +++ b/content/browser/security_exploit_browsertest.cc
@@ -8,6 +8,7 @@ #include "base/command_line.h" #include "base/feature_list.h" #include "base/macros.h" +#include "base/optional.h" #include "base/strings/utf_string_conversions.h" #include "base/task/post_task.h" #include "base/test/scoped_feature_list.h" @@ -1277,8 +1278,9 @@ class BeginNavigationInitiatorReplacer : public FrameHostInterceptor { public: - BeginNavigationInitiatorReplacer(WebContents* web_contents, - const url::Origin& initiator_to_inject) + BeginNavigationInitiatorReplacer( + WebContents* web_contents, + base::Optional<url::Origin> initiator_to_inject) : FrameHostInterceptor(web_contents), initiator_to_inject_(initiator_to_inject) {} @@ -1300,7 +1302,7 @@ void Activate() { is_activated_ = true; } private: - url::Origin initiator_to_inject_; + base::Optional<url::Origin> initiator_to_inject_; bool is_activated_ = false; DISALLOW_COPY_AND_ASSIGN(BeginNavigationInitiatorReplacer); @@ -1334,4 +1336,28 @@ EXPECT_EQ(bad_message::INVALID_INITIATOR_ORIGIN, kill_waiter.Wait()); } +IN_PROC_BROWSER_TEST_F(SecurityExploitBrowserTest, + MissingBeginNavigationInitiator) { + // Prepare to intercept BeginNavigation mojo IPC. This has to be done before + // the test creates the RenderFrameHostImpl that is the target of the IPC. + WebContents* web_contents = shell()->web_contents(); + BeginNavigationInitiatorReplacer injector(web_contents, base::nullopt); + + // Navigate to a test page. + GURL main_url(embedded_test_server()->GetURL("a.com", "/title1.html")); + EXPECT_TRUE(NavigateToURL(web_contents, main_url)); + + // Start monitoring for renderer kills. + RenderProcessHost* main_process = web_contents->GetMainFrame()->GetProcess(); + RenderProcessHostKillWaiter kill_waiter(main_process); + + // Have the main frame submit a BeginNavigation IPC with a missing initiator. + injector.Activate(); + EXPECT_TRUE(ExecJs(web_contents, "window.location = '/title2.html';")); + + // Verify that the renderer was terminated. + EXPECT_EQ(bad_message::RFHI_BEGIN_NAVIGATION_MISSING_INITIATOR_ORIGIN, + kill_waiter.Wait()); +} + } // namespace content
diff --git a/content/browser/service_worker/embedded_worker_test_helper.cc b/content/browser/service_worker/embedded_worker_test_helper.cc index b3dc1dde..63122463 100644 --- a/content/browser/service_worker/embedded_worker_test_helper.cc +++ b/content/browser/service_worker/embedded_worker_test_helper.cc
@@ -160,7 +160,9 @@ NOTREACHED(); } void PurgePluginListCache(bool reload_pages) override { NOTREACHED(); } - void SetProcessBackgrounded(bool backgrounded) override { NOTREACHED(); } + void SetProcessState(mojom::RenderProcessState process_state) override { + NOTREACHED(); + } void SetSchedulerKeepActive(bool keep_active) override { NOTREACHED(); } void ProcessPurgeAndSuspend() override { NOTREACHED(); } void SetIsLockedToSite() override { NOTREACHED(); } @@ -384,12 +386,6 @@ OnFetchEventCommon(std::move(response_callback), std::move(finish_callback)); } -void EmbeddedWorkerTestHelper::OnPushEvent( - base::Optional<std::string> payload, - blink::mojom::ServiceWorker::DispatchPushEventCallback callback) { - std::move(callback).Run(blink::mojom::ServiceWorkerEventStatus::COMPLETED); -} - void EmbeddedWorkerTestHelper::OnAbortPaymentEvent( payments::mojom::PaymentHandlerResponseCallbackPtr response_callback, blink::mojom::ServiceWorker::DispatchAbortPaymentEventCallback callback) { @@ -494,15 +490,6 @@ std::move(finish_callback))); } -void EmbeddedWorkerTestHelper::OnPushEventStub( - base::Optional<std::string> payload, - blink::mojom::ServiceWorker::DispatchPushEventCallback callback) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&EmbeddedWorkerTestHelper::OnPushEvent, AsWeakPtr(), - std::move(payload), std::move(callback))); -} - void EmbeddedWorkerTestHelper::OnAbortPaymentEventStub( payments::mojom::PaymentHandlerResponseCallbackPtr response_callback, blink::mojom::ServiceWorker::DispatchAbortPaymentEventCallback callback) {
diff --git a/content/browser/service_worker/embedded_worker_test_helper.h b/content/browser/service_worker/embedded_worker_test_helper.h index 61598465..083d337 100644 --- a/content/browser/service_worker/embedded_worker_test_helper.h +++ b/content/browser/service_worker/embedded_worker_test_helper.h
@@ -188,9 +188,6 @@ blink::mojom::FetchEventPreloadHandlePtr preload_handle, blink::mojom::ServiceWorkerFetchResponseCallbackPtr response_callback, blink::mojom::ServiceWorker::DispatchFetchEventCallback finish_callback); - virtual void OnPushEvent( - base::Optional<std::string> payload, - blink::mojom::ServiceWorker::DispatchPushEventCallback callback); virtual void OnAbortPaymentEvent( payments::mojom::PaymentHandlerResponseCallbackPtr response_callback, blink::mojom::ServiceWorker::DispatchAbortPaymentEventCallback callback); @@ -256,9 +253,6 @@ blink::mojom::FetchEventPreloadHandlePtr preload_handle, blink::mojom::ServiceWorkerFetchResponseCallbackPtr response_callback, blink::mojom::ServiceWorker::DispatchFetchEventCallback finish_callback); - void OnPushEventStub( - base::Optional<std::string> payload, - blink::mojom::ServiceWorker::DispatchPushEventCallback callback); void OnAbortPaymentEventStub( payments::mojom::PaymentHandlerResponseCallbackPtr response_callback, blink::mojom::ServiceWorker::DispatchAbortPaymentEventCallback callback);
diff --git a/content/browser/service_worker/fake_service_worker.cc b/content/browser/service_worker/fake_service_worker.cc index 9865ca06..8e47598 100644 --- a/content/browser/service_worker/fake_service_worker.cc +++ b/content/browser/service_worker/fake_service_worker.cc
@@ -133,7 +133,7 @@ void FakeServiceWorker::DispatchPushEvent( const base::Optional<std::string>& payload, DispatchPushEventCallback callback) { - helper_->OnPushEventStub(payload, std::move(callback)); + std::move(callback).Run(blink::mojom::ServiceWorkerEventStatus::COMPLETED); } void FakeServiceWorker::DispatchSyncEvent(const std::string& tag,
diff --git a/content/browser/tracing/background_tracing_config_impl.cc b/content/browser/tracing/background_tracing_config_impl.cc index c70b4a6..e33c569 100644 --- a/content/browser/tracing/background_tracing_config_impl.cc +++ b/content/browser/tracing/background_tracing_config_impl.cc
@@ -38,6 +38,7 @@ const char kConfigCategoryBenchmarkNavigation[] = "BENCHMARK_NAVIGATION"; const char kConfigCategoryBenchmarkRenderers[] = "BENCHMARK_RENDERERS"; const char kConfigCategoryBenchmarkServiceworker[] = "BENCHMARK_SERVICEWORKER"; +const char kConfigCategoryBenchmarkPower[] = "BENCHMARK_POWER"; const char kConfigCategoryBlinkStyle[] = "BLINK_STYLE"; } // namespace @@ -76,6 +77,8 @@ return kConfigCategoryBenchmarkRenderers; case BackgroundTracingConfigImpl::BENCHMARK_SERVICEWORKER: return kConfigCategoryBenchmarkServiceworker; + case BackgroundTracingConfigImpl::BENCHMARK_POWER: + return kConfigCategoryBenchmarkPower; case BackgroundTracingConfigImpl::BLINK_STYLE: return kConfigCategoryBlinkStyle; case BackgroundTracingConfigImpl::CATEGORY_PRESET_UNSET: @@ -148,6 +151,11 @@ return true; } + if (category_preset_string == kConfigCategoryBenchmarkPower) { + *category_preset = BackgroundTracingConfigImpl::BENCHMARK_POWER; + return true; + } + if (category_preset_string == kConfigCategoryBlinkStyle) { *category_preset = BackgroundTracingConfigImpl::BLINK_STYLE; return true;
diff --git a/content/browser/tracing/background_tracing_config_impl.h b/content/browser/tracing/background_tracing_config_impl.h index b5f3b699..f13f5d2 100644 --- a/content/browser/tracing/background_tracing_config_impl.h +++ b/content/browser/tracing/background_tracing_config_impl.h
@@ -40,6 +40,7 @@ BENCHMARK_NAVIGATION, BENCHMARK_RENDERERS, BENCHMARK_SERVICEWORKER, + BENCHMARK_POWER, BLINK_STYLE };
diff --git a/content/browser/tracing/background_tracing_config_unittest.cc b/content/browser/tracing/background_tracing_config_unittest.cc index 7094160..744ea23b 100644 --- a/content/browser/tracing/background_tracing_config_unittest.cc +++ b/content/browser/tracing/background_tracing_config_unittest.cc
@@ -287,6 +287,8 @@ BackgroundTracingConfigImpl::BENCHMARK_EXECUTION_METRIC, BackgroundTracingConfigImpl::BENCHMARK_NAVIGATION, BackgroundTracingConfigImpl::BENCHMARK_RENDERERS, + BackgroundTracingConfigImpl::BENCHMARK_SERVICEWORKER, + BackgroundTracingConfigImpl::BENCHMARK_POWER, BackgroundTracingConfigImpl::BLINK_STYLE, }; @@ -301,6 +303,8 @@ "BENCHMARK_EXECUTION_METRIC", "BENCHMARK_NAVIGATION", "BENCHMARK_RENDERERS", + "BENCHMARK_SERVICEWORKER", + "BENCHMARK_POWER", "BLINK_STYLE"}; for (size_t i = 0; i <
diff --git a/content/browser/tracing/background_tracing_manager_impl.cc b/content/browser/tracing/background_tracing_manager_impl.cc index dea43cc..cd743a1 100644 --- a/content/browser/tracing/background_tracing_manager_impl.cc +++ b/content/browser/tracing/background_tracing_manager_impl.cc
@@ -754,6 +754,11 @@ "loader,loading,navigation,blink.user_timing," "disabled-by-default-network", record_mode); + case BackgroundTracingConfigImpl::CategoryPreset::BENCHMARK_POWER: + return TraceConfig( + "benchmark,toplevel,ipc,base,audio,compositor,gpu,media,memory,midi," + "native,omnibox,renderer,skia,task_scheduler,ui,v8,views,webaudio", + record_mode); case BackgroundTracingConfigImpl::CategoryPreset::BLINK_STYLE: return TraceConfig("blink_style", record_mode);
diff --git a/content/common/renderer.mojom b/content/common/renderer.mojom index a9f2e5c..3760989 100644 --- a/content/common/renderer.mojom +++ b/content/common/renderer.mojom
@@ -159,6 +159,16 @@ bool scroll_view_rubber_banding; }; +enum RenderProcessState { + kVisible, + // Hidden render processes can still be foregrounded. For example, a hidden + // renderer playing audio would be foregrounded. + kHidden, + // Refers to a renderer that is hidden and running at background process + // priority. + kBackgrounded, +}; + // The primordial Channel-associated interface implemented by a render process. // This should be used for implementing browser-to-renderer control messages // which need to retain FIFO with respect to legacy IPC messages. @@ -242,8 +252,8 @@ PurgePluginListCache(bool reload_pages); - // Tells the renderer process to enter or leave background mode. - SetProcessBackgrounded(bool background); + // Tells the renderer process of a change in visibility or background state. + SetProcessState(RenderProcessState process_state); // Tells the scheduler about "keep-alive" state which can be due to: // service workers, shared workers, or fetch keep-alive.
diff --git a/content/public/renderer/media_stream_utils.h b/content/public/renderer/media_stream_utils.h index c7da1ba..1494a70 100644 --- a/content/public/renderer/media_stream_utils.h +++ b/content/public/renderer/media_stream_utils.h
@@ -20,13 +20,12 @@ } namespace media { -class AudioCapturerSource; class VideoCapturerSource; } namespace content { -// These methods create a WebMediaStreamSource + MediaStreamSource pair with the -// provided audio or video capturer source. A new WebMediaStreamTrack + +// This method creates a WebMediaStreamSource + MediaStreamSource pair with the +// provided video capturer source. A new WebMediaStreamTrack + // MediaStreamTrack pair is created, connected to the source and is plugged into // the WebMediaStream (|web_media_stream|). // |is_remote| should be true if the source of the data is not a local device. @@ -37,18 +36,6 @@ bool is_remote, blink::WebMediaStream* web_media_stream); -// |sample_rate|, |channel_layout|, and |frames_per_buffer| specify the audio -// parameters of the track. Generally, these should match the |audio_source| so -// that it does not have to perform unnecessary sample rate conversion or -// channel mixing. -CONTENT_EXPORT bool AddAudioTrackToMediaStream( - scoped_refptr<media::AudioCapturerSource> audio_source, - int sample_rate, - media::ChannelLayout channel_layout, - int frames_per_buffer, - bool is_remote, - blink::WebMediaStream* web_media_stream); - // Requests that a refresh frame be sent "soon" (e.g., to resolve picture loss // or quality issues). CONTENT_EXPORT void RequestRefreshFrameFromVideoTrack(
diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc index c2402c94..eadcd51 100644 --- a/content/public/test/browser_test_utils.cc +++ b/content/public/test/browser_test_utils.cc
@@ -1785,7 +1785,7 @@ DCHECK(cc.get()); cookie_manager->SetCanonicalCookie( - *cc.get(), true /* secure_source */, true /* modify_http_only */, + *cc.get(), url.scheme(), true /* modify_http_only */, base::BindOnce( [](bool* result, base::RunLoop* run_loop, bool success) { *result = success;
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn index e214e00..296ba288 100644 --- a/content/renderer/BUILD.gn +++ b/content/renderer/BUILD.gn
@@ -256,6 +256,8 @@ "media/stream/external_media_stream_audio_source.h", "media/stream/local_media_stream_audio_source.cc", "media/stream/local_media_stream_audio_source.h", + "media/stream/local_video_capturer_source.cc", + "media/stream/local_video_capturer_source.h", "media/stream/media_stream_audio_level_calculator.cc", "media/stream/media_stream_audio_level_calculator.h", "media/stream/media_stream_audio_processor.cc",
diff --git a/content/renderer/media/stream/local_video_capturer_source.cc b/content/renderer/media/stream/local_video_capturer_source.cc new file mode 100644 index 0000000..93cd648 --- /dev/null +++ b/content/renderer/media/stream/local_video_capturer_source.cc
@@ -0,0 +1,124 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "content/renderer/media/stream/local_video_capturer_source.h" + +#include "base/bind.h" +#include "base/callback_helpers.h" +#include "content/renderer/media/video_capture_impl_manager.h" +#include "content/renderer/render_thread_impl.h" +#include "media/base/bind_to_current_loop.h" + +namespace content { + +LocalVideoCapturerSource::LocalVideoCapturerSource(int session_id) + : session_id_(session_id), + manager_(RenderThreadImpl::current()->video_capture_impl_manager()), + release_device_cb_(manager_->UseDevice(session_id_)), + weak_factory_(this) { + DCHECK(RenderThreadImpl::current()); +} + +LocalVideoCapturerSource::~LocalVideoCapturerSource() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + release_device_cb_.Run(); +} + +media::VideoCaptureFormats LocalVideoCapturerSource::GetPreferredFormats() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + return media::VideoCaptureFormats(); +} + +void LocalVideoCapturerSource::StartCapture( + const media::VideoCaptureParams& params, + const blink::VideoCaptureDeliverFrameCB& new_frame_callback, + const RunningCallback& running_callback) { + DCHECK(params.requested_format.IsValid()); + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + running_callback_ = running_callback; + + stop_capture_cb_ = + manager_->StartCapture(session_id_, params, + media::BindToCurrentLoop(base::Bind( + &LocalVideoCapturerSource::OnStateUpdate, + weak_factory_.GetWeakPtr())), + new_frame_callback); +} + +void LocalVideoCapturerSource::RequestRefreshFrame() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + if (stop_capture_cb_.is_null()) + return; // Do not request frames if the source is stopped. + manager_->RequestRefreshFrame(session_id_); +} + +void LocalVideoCapturerSource::MaybeSuspend() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + manager_->Suspend(session_id_); +} + +void LocalVideoCapturerSource::Resume() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + manager_->Resume(session_id_); +} + +void LocalVideoCapturerSource::StopCapture() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + // Immediately make sure we don't provide more frames. + if (!stop_capture_cb_.is_null()) + base::ResetAndReturn(&stop_capture_cb_).Run(); +} + +void LocalVideoCapturerSource::OnFrameDropped( + media::VideoCaptureFrameDropReason reason) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + manager_->OnFrameDropped(session_id_, reason); +} + +void LocalVideoCapturerSource::OnLog(const std::string& message) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + manager_->OnLog(session_id_, message); +} + +void LocalVideoCapturerSource::OnStateUpdate(blink::VideoCaptureState state) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + if (running_callback_.is_null()) { + OnLog("LocalVideoCapturerSource::OnStateUpdate discarding state update."); + return; + } + switch (state) { + case blink::VIDEO_CAPTURE_STATE_STARTED: + OnLog( + "LocalVideoCapturerSource::OnStateUpdate signaling to " + "consumer that source is now running."); + running_callback_.Run(true); + break; + + case blink::VIDEO_CAPTURE_STATE_STOPPING: + case blink::VIDEO_CAPTURE_STATE_STOPPED: + case blink::VIDEO_CAPTURE_STATE_ERROR: + case blink::VIDEO_CAPTURE_STATE_ENDED: + release_device_cb_.Run(); + release_device_cb_ = manager_->UseDevice(session_id_); + OnLog( + "LocalVideoCapturerSource::OnStateUpdate signaling to " + "consumer that source is no longer running."); + running_callback_.Run(false); + break; + + case blink::VIDEO_CAPTURE_STATE_STARTING: + case blink::VIDEO_CAPTURE_STATE_PAUSED: + case blink::VIDEO_CAPTURE_STATE_RESUMED: + // Not applicable to reporting on device starts or errors. + break; + } +} + +// static +std::unique_ptr<media::VideoCapturerSource> LocalVideoCapturerSource::Create( + int session_id) { + return std::make_unique<LocalVideoCapturerSource>(session_id); +} + +} // namespace content
diff --git a/content/renderer/media/stream/local_video_capturer_source.h b/content/renderer/media/stream/local_video_capturer_source.h new file mode 100644 index 0000000..02021c39 --- /dev/null +++ b/content/renderer/media/stream/local_video_capturer_source.h
@@ -0,0 +1,71 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_RENDERER_MEDIA_STREAM_LOCAL_VIDEO_CAPTURER_SOURCE_H_ +#define CONTENT_RENDERER_MEDIA_STREAM_LOCAL_VIDEO_CAPTURER_SOURCE_H_ + +#include <memory> +#include <string> + +#include "base/callback.h" +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "base/threading/thread_checker.h" +#include "media/capture/video_capture_types.h" +#include "media/capture/video_capturer_source.h" +#include "third_party/blink/public/common/media/video_capture.h" + +namespace content { + +class VideoCaptureImplManager; + +// LocalVideoCapturerSource is a delegate used by MediaStreamVideoCapturerSource +// for local video capture. It uses the Render singleton VideoCaptureImplManager +// to start / stop and receive I420 frames from Chrome's video capture +// implementation. This is a main Render thread only object. +class LocalVideoCapturerSource : public media::VideoCapturerSource { + public: + static std::unique_ptr<media::VideoCapturerSource> Create(int session_id); + explicit LocalVideoCapturerSource(int session_id); + ~LocalVideoCapturerSource() override; + + // VideoCaptureSource Implementation. + media::VideoCaptureFormats GetPreferredFormats() override; + void StartCapture(const media::VideoCaptureParams& params, + const blink::VideoCaptureDeliverFrameCB& new_frame_callback, + const RunningCallback& running_callback) override; + void RequestRefreshFrame() override; + void MaybeSuspend() override; + void Resume() override; + void StopCapture() override; + void OnFrameDropped(media::VideoCaptureFrameDropReason reason) override; + void OnLog(const std::string& message) override; + + private: + void OnStateUpdate(blink::VideoCaptureState state); + + // |session_id_| identifies the capture device used for this capture session. + const media::VideoCaptureSessionId session_id_; + + VideoCaptureImplManager* const manager_; + + base::Closure release_device_cb_; + + // These two are valid between StartCapture() and StopCapture(). + // |running_call_back_| is run when capture is successfully started, and when + // it is stopped or error happens. + RunningCallback running_callback_; + base::Closure stop_capture_cb_; + + // Bound to the main render thread. + THREAD_CHECKER(thread_checker_); + + base::WeakPtrFactory<LocalVideoCapturerSource> weak_factory_; + + DISALLOW_COPY_AND_ASSIGN(LocalVideoCapturerSource); +}; + +} // namespace content + +#endif // CONTENT_RENDERER_MEDIA_STREAM_LOCAL_VIDEO_CAPTURER_SOURCE_H_
diff --git a/content/renderer/media/stream/media_stream_video_capturer_source.cc b/content/renderer/media/stream/media_stream_video_capturer_source.cc index a3717a6..50c9445a 100644 --- a/content/renderer/media/stream/media_stream_video_capturer_source.cc +++ b/content/renderer/media/stream/media_stream_video_capturer_source.cc
@@ -4,181 +4,17 @@ #include "content/renderer/media/stream/media_stream_video_capturer_source.h" -#include <algorithm> #include <utility> #include "base/bind.h" -#include "base/callback_helpers.h" -#include "base/debug/stack_trace.h" -#include "base/location.h" -#include "base/macros.h" -#include "base/strings/utf_string_conversions.h" #include "content/public/renderer/render_frame.h" #include "content/renderer/media/stream/media_stream_constraints_util.h" -#include "content/renderer/media/video_capture_impl_manager.h" -#include "content/renderer/render_thread_impl.h" -#include "media/base/bind_to_current_loop.h" -#include "media/base/limits.h" -#include "media/base/video_frame.h" #include "media/capture/video_capturer_source.h" #include "services/service_manager/public/cpp/interface_provider.h" -#include "third_party/blink/public/common/mediastream/media_stream_request.h" #include "third_party/blink/public/web/web_local_frame.h" namespace content { -namespace { - -// LocalVideoCapturerSource is a delegate used by MediaStreamVideoCapturerSource -// for local video capture. It uses the Render singleton VideoCaptureImplManager -// to start / stop and receive I420 frames from Chrome's video capture -// implementation. This is a main Render thread only object. -class LocalVideoCapturerSource final : public media::VideoCapturerSource { - public: - explicit LocalVideoCapturerSource(int session_id); - ~LocalVideoCapturerSource() override; - - // VideoCaptureSource Implementation. - media::VideoCaptureFormats GetPreferredFormats() override; - void StartCapture(const media::VideoCaptureParams& params, - const blink::VideoCaptureDeliverFrameCB& new_frame_callback, - const RunningCallback& running_callback) override; - void RequestRefreshFrame() override; - void MaybeSuspend() override; - void Resume() override; - void StopCapture() override; - void OnFrameDropped(media::VideoCaptureFrameDropReason reason) override; - void OnLog(const std::string& message) override; - - private: - void OnStateUpdate(blink::VideoCaptureState state); - - // |session_id_| identifies the capture device used for this capture session. - const media::VideoCaptureSessionId session_id_; - - VideoCaptureImplManager* const manager_; - - base::Closure release_device_cb_; - - // These two are valid between StartCapture() and StopCapture(). - // |running_call_back_| is run when capture is successfully started, and when - // it is stopped or error happens. - RunningCallback running_callback_; - base::Closure stop_capture_cb_; - - // Bound to the main render thread. - THREAD_CHECKER(thread_checker_); - - base::WeakPtrFactory<LocalVideoCapturerSource> weak_factory_; - - DISALLOW_COPY_AND_ASSIGN(LocalVideoCapturerSource); -}; - -LocalVideoCapturerSource::LocalVideoCapturerSource(int session_id) - : session_id_(session_id), - manager_(RenderThreadImpl::current()->video_capture_impl_manager()), - release_device_cb_(manager_->UseDevice(session_id_)), - weak_factory_(this) { - DCHECK(RenderThreadImpl::current()); -} - -LocalVideoCapturerSource::~LocalVideoCapturerSource() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - release_device_cb_.Run(); -} - -media::VideoCaptureFormats LocalVideoCapturerSource::GetPreferredFormats() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - return media::VideoCaptureFormats(); -} - -void LocalVideoCapturerSource::StartCapture( - const media::VideoCaptureParams& params, - const blink::VideoCaptureDeliverFrameCB& new_frame_callback, - const RunningCallback& running_callback) { - DCHECK(params.requested_format.IsValid()); - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - running_callback_ = running_callback; - - stop_capture_cb_ = - manager_->StartCapture(session_id_, params, - media::BindToCurrentLoop(base::Bind( - &LocalVideoCapturerSource::OnStateUpdate, - weak_factory_.GetWeakPtr())), - new_frame_callback); -} - -void LocalVideoCapturerSource::RequestRefreshFrame() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - if (stop_capture_cb_.is_null()) - return; // Do not request frames if the source is stopped. - manager_->RequestRefreshFrame(session_id_); -} - -void LocalVideoCapturerSource::MaybeSuspend() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - manager_->Suspend(session_id_); -} - -void LocalVideoCapturerSource::Resume() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - manager_->Resume(session_id_); -} - -void LocalVideoCapturerSource::StopCapture() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - // Immediately make sure we don't provide more frames. - if (!stop_capture_cb_.is_null()) - base::ResetAndReturn(&stop_capture_cb_).Run(); -} - -void LocalVideoCapturerSource::OnFrameDropped( - media::VideoCaptureFrameDropReason reason) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - manager_->OnFrameDropped(session_id_, reason); -} - -void LocalVideoCapturerSource::OnLog(const std::string& message) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - manager_->OnLog(session_id_, message); -} - -void LocalVideoCapturerSource::OnStateUpdate(blink::VideoCaptureState state) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - if (running_callback_.is_null()) { - OnLog("LocalVideoCapturerSource::OnStateUpdate discarding state update."); - return; - } - switch (state) { - case blink::VIDEO_CAPTURE_STATE_STARTED: - OnLog( - "LocalVideoCapturerSource::OnStateUpdate signaling to " - "consumer that source is now running."); - running_callback_.Run(true); - break; - - case blink::VIDEO_CAPTURE_STATE_STOPPING: - case blink::VIDEO_CAPTURE_STATE_STOPPED: - case blink::VIDEO_CAPTURE_STATE_ERROR: - case blink::VIDEO_CAPTURE_STATE_ENDED: - release_device_cb_.Run(); - release_device_cb_ = manager_->UseDevice(session_id_); - OnLog( - "LocalVideoCapturerSource::OnStateUpdate signaling to " - "consumer that source is no longer running."); - running_callback_.Run(false); - break; - - case blink::VIDEO_CAPTURE_STATE_STARTING: - case blink::VIDEO_CAPTURE_STATE_PAUSED: - case blink::VIDEO_CAPTURE_STATE_RESUMED: - // Not applicable to reporting on device starts or errors. - break; - } -} - -} // namespace - MediaStreamVideoCapturerSource::MediaStreamVideoCapturerSource( const SourceStoppedCallback& stop_callback, std::unique_ptr<media::VideoCapturerSource> source) @@ -198,25 +34,25 @@ int render_frame_id, const SourceStoppedCallback& stop_callback, const blink::MediaStreamDevice& device, - const media::VideoCaptureParams& capture_params) + const media::VideoCaptureParams& capture_params, + DeviceCapturerFactoryCallback device_capturer_factory_callback) : render_frame_id_(render_frame_id), - source_(new LocalVideoCapturerSource(device.session_id)), - capture_params_(capture_params) { + source_(device_capturer_factory_callback.Run(device.session_id)), + capture_params_(capture_params), + device_capturer_factory_callback_( + std::move(device_capturer_factory_callback)) { SetStopCallback(stop_callback); SetDevice(device); SetDeviceRotationDetection(true /* enabled */); - device_video_capturer_factory_callback_ = base::BindRepeating( - &MediaStreamVideoCapturerSource::RecreateLocalVideoCapturerSource); } MediaStreamVideoCapturerSource::~MediaStreamVideoCapturerSource() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); } -void MediaStreamVideoCapturerSource:: - SetDeviceVideoCapturerFactoryCallbackForTesting( - DeviceVideoCapturerFactoryCallback testing_factory_callback) { - device_video_capturer_factory_callback_ = std::move(testing_factory_callback); +void MediaStreamVideoCapturerSource::SetDeviceCapturerFactoryCallbackForTesting( + DeviceCapturerFactoryCallback testing_factory_callback) { + device_capturer_factory_callback_ = std::move(testing_factory_callback); } void MediaStreamVideoCapturerSource::RequestRefreshFrame() { @@ -310,7 +146,7 @@ void MediaStreamVideoCapturerSource::ChangeSourceImpl( const blink::MediaStreamDevice& new_device) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DCHECK(device_video_capturer_factory_callback_); + DCHECK(device_capturer_factory_callback_); if (state_ != STARTED) { return; @@ -319,7 +155,7 @@ state_ = STOPPING_FOR_CHANGE_SOURCE; source_->StopCapture(); SetDevice(new_device); - source_ = device_video_capturer_factory_callback_.Run(new_device.session_id); + source_ = device_capturer_factory_callback_.Run(new_device.session_id); source_->StartCapture( capture_params_, frame_callback_, base::BindRepeating(&MediaStreamVideoCapturerSource::OnRunStateChanged, @@ -383,11 +219,4 @@ return dispatcher_host_; } -// static -std::unique_ptr<media::VideoCapturerSource> -MediaStreamVideoCapturerSource::RecreateLocalVideoCapturerSource( - int session_id) { - return std::make_unique<LocalVideoCapturerSource>(session_id); -} - } // namespace content
diff --git a/content/renderer/media/stream/media_stream_video_capturer_source.h b/content/renderer/media/stream/media_stream_video_capturer_source.h index 00b28faa..d0b63cb 100644 --- a/content/renderer/media/stream/media_stream_video_capturer_source.h +++ b/content/renderer/media/stream/media_stream_video_capturer_source.h
@@ -13,6 +13,7 @@ #include "base/memory/weak_ptr.h" #include "base/threading/thread_checker.h" #include "content/renderer/media/stream/media_stream_video_source.h" +#include "media/capture/video_capture_types.h" #include "third_party/blink/public/common/media/video_capture.h" #include "third_party/blink/public/mojom/mediastream/media_stream.mojom.h" @@ -31,6 +32,9 @@ class CONTENT_EXPORT MediaStreamVideoCapturerSource : public MediaStreamVideoSource { public: + using DeviceCapturerFactoryCallback = + base::RepeatingCallback<std::unique_ptr<media::VideoCapturerSource>( + int session_id)>; MediaStreamVideoCapturerSource( const SourceStoppedCallback& stop_callback, std::unique_ptr<media::VideoCapturerSource> source); @@ -38,14 +42,12 @@ int render_frame_id, const SourceStoppedCallback& stop_callback, const blink::MediaStreamDevice& device, - const media::VideoCaptureParams& capture_params); + const media::VideoCaptureParams& capture_params, + DeviceCapturerFactoryCallback device_capturer_factory_callback); ~MediaStreamVideoCapturerSource() override; - using DeviceVideoCapturerFactoryCallback = - base::RepeatingCallback<std::unique_ptr<media::VideoCapturerSource>( - int session_id)>; - void SetDeviceVideoCapturerFactoryCallbackForTesting( - DeviceVideoCapturerFactoryCallback testing_factory_callback); + void SetDeviceCapturerFactoryCallbackForTesting( + DeviceCapturerFactoryCallback testing_factory_callback); private: friend class CanvasCaptureHandlerTest; @@ -79,9 +81,6 @@ const blink::mojom::MediaStreamDispatcherHostPtr& GetMediaStreamDispatcherHost(RenderFrame* render_frame); - static std::unique_ptr<media::VideoCapturerSource> - RecreateLocalVideoCapturerSource(int session_id); - blink::mojom::MediaStreamDispatcherHostPtr dispatcher_host_; int render_frame_id_; @@ -101,7 +100,7 @@ media::VideoCaptureParams capture_params_; blink::VideoCaptureDeliverFrameCB frame_callback_; - DeviceVideoCapturerFactoryCallback device_video_capturer_factory_callback_; + DeviceCapturerFactoryCallback device_capturer_factory_callback_; DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoCapturerSource); };
diff --git a/content/renderer/media/stream/media_stream_video_capturer_source_unittest.cc b/content/renderer/media/stream/media_stream_video_capturer_source_unittest.cc index 2ce37b6..f9922ed 100644 --- a/content/renderer/media/stream/media_stream_video_capturer_source_unittest.cc +++ b/content/renderer/media/stream/media_stream_video_capturer_source_unittest.cc
@@ -122,11 +122,11 @@ webkit_source_.SetPlatformSource(base::WrapUnique(source_)); webkit_source_id_ = webkit_source_.Id(); - MediaStreamVideoCapturerSource::DeviceVideoCapturerFactoryCallback - callback = base::BindRepeating( + MediaStreamVideoCapturerSource::DeviceCapturerFactoryCallback callback = + base::BindRepeating( &MediaStreamVideoCapturerSourceTest::RecreateVideoCapturerSource, base::Unretained(this)); - source_->SetDeviceVideoCapturerFactoryCallbackForTesting(callback); + source_->SetDeviceCapturerFactoryCallbackForTesting(std::move(callback)); } void TearDown() override {
diff --git a/content/renderer/media/stream/user_media_processor.cc b/content/renderer/media/stream/user_media_processor.cc index 5e1cad7..f61c76f9a 100644 --- a/content/renderer/media/stream/user_media_processor.cc +++ b/content/renderer/media/stream/user_media_processor.cc
@@ -20,6 +20,7 @@ #include "base/task_runner_util.h" #include "base/threading/thread_task_runner_handle.h" #include "content/renderer/media/stream/local_media_stream_audio_source.h" +#include "content/renderer/media/stream/local_video_capturer_source.h" #include "content/renderer/media/stream/media_stream_audio_processor.h" #include "content/renderer/media/stream/media_stream_constraints_util.h" #include "content/renderer/media/stream/media_stream_constraints_util_audio.h" @@ -1043,7 +1044,8 @@ return std::make_unique<MediaStreamVideoCapturerSource>( render_frame_->GetRoutingID(), stop_callback, device, - current_request_info_->video_capture_settings().capture_params()); + current_request_info_->video_capture_settings().capture_params(), + base::BindRepeating(&LocalVideoCapturerSource::Create)); } void UserMediaProcessor::StartTracks(const std::string& label) {
diff --git a/content/renderer/media_stream_utils.cc b/content/renderer/media_stream_utils.cc index 1237b6e3..4913d8d4 100644 --- a/content/renderer/media_stream_utils.cc +++ b/content/renderer/media_stream_utils.cc
@@ -58,59 +58,6 @@ return true; } -bool AddAudioTrackToMediaStream( - scoped_refptr<media::AudioCapturerSource> audio_source, - int sample_rate, - media::ChannelLayout channel_layout, - int frames_per_buffer, - bool is_remote, - blink::WebMediaStream* web_media_stream) { - DCHECK(audio_source.get()); - if (!web_media_stream || web_media_stream->IsNull()) { - DLOG(ERROR) << "WebMediaStream is null"; - return false; - } - - const media::AudioParameters params( - media::AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, - sample_rate, frames_per_buffer); - if (!params.IsValid()) { - DLOG(ERROR) << "Invalid audio parameters."; - return false; - } - - blink::WebMediaStreamSource web_media_stream_source; - const blink::WebString track_id = - blink::WebString::FromUTF8(base::GenerateGUID()); - web_media_stream_source.Initialize( - track_id, blink::WebMediaStreamSource::kTypeAudio, track_id, is_remote); - blink::MediaStreamAudioSource* const media_stream_source = - new ExternalMediaStreamAudioSource(std::move(audio_source), sample_rate, - channel_layout, frames_per_buffer, - is_remote); - // Takes ownership of |media_stream_source|. - web_media_stream_source.SetPlatformSource( - base::WrapUnique(media_stream_source)); - - blink::WebMediaStreamSource::Capabilities capabilities; - capabilities.device_id = track_id; - capabilities.echo_cancellation = std::vector<bool>({false}); - capabilities.auto_gain_control = std::vector<bool>({false}); - capabilities.noise_suppression = std::vector<bool>({false}); - capabilities.sample_size = { - media::SampleFormatToBitsPerChannel(media::kSampleFormatS16), // min - media::SampleFormatToBitsPerChannel(media::kSampleFormatS16) // max - }; - web_media_stream_source.SetCapabilities(capabilities); - - blink::WebMediaStreamTrack web_media_stream_track; - web_media_stream_track.Initialize(web_media_stream_source); - if (!media_stream_source->ConnectToTrack(web_media_stream_track)) - return false; - web_media_stream->AddTrack(web_media_stream_track); - return true; -} - void RequestRefreshFrameFromVideoTrack( const blink::WebMediaStreamTrack& video_track) { if (video_track.IsNull())
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc index ff57196..44d96379 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc
@@ -145,7 +145,6 @@ #include "services/ws/public/cpp/gpu/gpu.h" #include "services/ws/public/mojom/constants.mojom.h" #include "skia/ext/skia_memory_dump_provider.h" -#include "third_party/blink/public/common/page/launching_process_state.h" #include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h" #include "third_party/blink/public/platform/web_cache.h" #include "third_party/blink/public/platform/web_image_generator.h" @@ -753,12 +752,6 @@ auto registry = std::make_unique<service_manager::BinderRegistry>(); InitializeWebKit(registry.get()); - is_backgrounded_ = blink::kLaunchingProcessIsBackgrounded; - - // In single process the single process is all there is. - widget_count_ = 0; - hidden_widget_count_ = 0; - dom_storage_dispatcher_.reset(new DomStorageDispatcher()); vc_manager_.reset(new VideoCaptureImplManager()); @@ -1307,6 +1300,11 @@ EstablishGpuChannelSync(); if (!gpu_channel_host) return nullptr; + // Currently, VideoResourceUpdater can't convert hardware resources to + // software resources in software compositing mode. So, fall back to software + // video decoding if gpu compositing is off. + if (is_gpu_compositing_disabled_) + return nullptr; // This context is only used to create textures and mailbox them, so // use lower limits than the default. gpu::SharedMemoryLimits limits = gpu::SharedMemoryLimits::ForMailboxContext(); @@ -1648,33 +1646,27 @@ main_thread_scheduler_->SetSchedulerKeepActive(keep_active); } -void RenderThreadImpl::SetProcessBackgrounded(bool backgrounded) { - main_thread_scheduler_->SetRendererBackgrounded(backgrounded); - if (backgrounded) { - needs_to_record_first_active_paint_ = false; - GetWebMainThreadScheduler()->DefaultTaskRunner()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&RenderThreadImpl::RecordMemoryUsageAfterBackgrounded, - base::Unretained(this), "5min", - process_foregrounded_count_), - base::TimeDelta::FromMinutes(5)); - GetWebMainThreadScheduler()->DefaultTaskRunner()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&RenderThreadImpl::RecordMemoryUsageAfterBackgrounded, - base::Unretained(this), "10min", - process_foregrounded_count_), - base::TimeDelta::FromMinutes(10)); - GetWebMainThreadScheduler()->DefaultTaskRunner()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&RenderThreadImpl::RecordMemoryUsageAfterBackgrounded, - base::Unretained(this), "15min", - process_foregrounded_count_), - base::TimeDelta::FromMinutes(15)); - was_backgrounded_time_ = base::TimeTicks::Now(); - } else { - process_foregrounded_count_++; +void RenderThreadImpl::SetProcessState( + mojom::RenderProcessState process_state) { + DCHECK(process_state_ != process_state); + + if (process_state_ == mojom::RenderProcessState::kBackgrounded || + (!process_state_.has_value() && + process_state != mojom::RenderProcessState::kBackgrounded)) { + OnRendererForegrounded(); } - is_backgrounded_ = backgrounded; + + if (process_state == mojom::RenderProcessState::kVisible) { + OnRendererVisible(); + } else if (process_state_ == mojom::RenderProcessState::kVisible || + !process_state_.has_value()) { + OnRendererHidden(); + } + + if (process_state == mojom::RenderProcessState::kBackgrounded) + OnRendererBackgrounded(); + + process_state_ = process_state; } void RenderThreadImpl::ProcessPurgeAndSuspend() { @@ -1696,6 +1688,9 @@ return; purge_and_suspend_memory_metrics_ = memory_metrics; + + // Use of Unretained(this) is safe because |this| has the same lifetime as a + // renderer process. GetWebMainThreadScheduler()->DefaultTaskRunner()->PostDelayedTask( FROM_HERE, base::BindOnce( @@ -2378,39 +2373,8 @@ } bool RenderThreadImpl::RendererIsHidden() const { - return widget_count_ > 0 && hidden_widget_count_ == widget_count_; -} - -void RenderThreadImpl::WidgetCreated() { - bool renderer_was_hidden = RendererIsHidden(); - widget_count_++; - if (renderer_was_hidden) - OnRendererVisible(); -} - -void RenderThreadImpl::WidgetDestroyed() { - // TODO(rmcilroy): Remove the restriction that destroyed widgets must be - // unhidden before WidgetDestroyed is called. - DCHECK_GT(widget_count_, 0); - DCHECK_GT(widget_count_, hidden_widget_count_); - widget_count_--; - if (RendererIsHidden()) - OnRendererHidden(); -} - -void RenderThreadImpl::WidgetHidden() { - DCHECK_LT(hidden_widget_count_, widget_count_); - hidden_widget_count_++; - if (RendererIsHidden()) - OnRendererHidden(); -} - -void RenderThreadImpl::WidgetRestored() { - bool renderer_was_hidden = RendererIsHidden(); - DCHECK_GT(hidden_widget_count_, 0); - hidden_widget_count_--; - if (renderer_was_hidden) - OnRendererVisible(); + return process_state_ == mojom::RenderProcessState::kHidden || + process_state_ == mojom::RenderProcessState::kBackgrounded; } void RenderThreadImpl::OnRendererHidden() { @@ -2429,6 +2393,39 @@ main_thread_scheduler_->SetRendererHidden(false); } +bool RenderThreadImpl::RendererIsBackgrounded() const { + return process_state_ == mojom::RenderProcessState::kBackgrounded; +} + +void RenderThreadImpl::OnRendererBackgrounded() { + main_thread_scheduler_->SetRendererBackgrounded(true); + needs_to_record_first_active_paint_ = false; + GetWebMainThreadScheduler()->DefaultTaskRunner()->PostDelayedTask( + FROM_HERE, + base::BindOnce(&RenderThreadImpl::RecordMemoryUsageAfterBackgrounded, + base::Unretained(this), "5min", + process_foregrounded_count_), + base::TimeDelta::FromMinutes(5)); + GetWebMainThreadScheduler()->DefaultTaskRunner()->PostDelayedTask( + FROM_HERE, + base::BindOnce(&RenderThreadImpl::RecordMemoryUsageAfterBackgrounded, + base::Unretained(this), "10min", + process_foregrounded_count_), + base::TimeDelta::FromMinutes(10)); + GetWebMainThreadScheduler()->DefaultTaskRunner()->PostDelayedTask( + FROM_HERE, + base::BindOnce(&RenderThreadImpl::RecordMemoryUsageAfterBackgrounded, + base::Unretained(this), "15min", + process_foregrounded_count_), + base::TimeDelta::FromMinutes(15)); + was_backgrounded_time_ = base::TimeTicks::Now(); +} + +void RenderThreadImpl::OnRendererForegrounded() { + main_thread_scheduler_->SetRendererBackgrounded(false); + process_foregrounded_count_++; +} + void RenderThreadImpl::ReleaseFreeMemory() { base::allocator::ReleaseFreeMemory(); discardable_shared_memory_manager_->ReleaseFreeMemory();
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h index b3f3ffbc..afa96183 100644 --- a/content/renderer/render_thread_impl.h +++ b/content/renderer/render_thread_impl.h
@@ -458,15 +458,6 @@ return &histogram_customizer_; } - // Called by a RenderWidget when it is created or destroyed. This - // allows the process to know when there are no visible widgets. - void WidgetCreated(); - // Note: A widget must not be hidden when it is destroyed - ensure that - // WidgetRestored is called before WidgetDestroyed for any hidden widget. - void WidgetDestroyed(); - void WidgetHidden(); - void WidgetRestored(); - void RegisterPendingFrameCreate( const service_manager::BindSourceInfo& source_info, int routing_id, @@ -504,6 +495,8 @@ } private: + friend class RenderThreadImplBrowserTest; + void OnProcessFinalRelease() override; // IPC::Listener void OnChannelError() override; @@ -555,7 +548,7 @@ const std::string& highlight_text_color, const std::string& highlight_color) override; void PurgePluginListCache(bool reload_pages) override; - void SetProcessBackgrounded(bool backgrounded) override; + void SetProcessState(mojom::RenderProcessState process_state) override; void SetSchedulerKeepActive(bool keep_active) override; void ProcessPurgeAndSuspend() override; void SetIsLockedToSite() override; @@ -568,6 +561,10 @@ void OnRendererHidden(); void OnRendererVisible(); + bool RendererIsBackgrounded() const; + void OnRendererBackgrounded(); + void OnRendererForegrounded(); + void RecordMemoryUsageAfterBackgrounded(const char* suffix, int foregrounded_count); void RecordPurgeAndSuspendMemoryGrowthMetrics( @@ -621,14 +618,10 @@ // Used on the render thread. std::unique_ptr<VideoCaptureImplManager> vc_manager_; - // Used to keep track of the renderer's backgrounded state. - bool is_backgrounded_; - - // The count of RenderWidgets running through this thread. - int widget_count_; - - // The count of hidden RenderWidgets running through this thread. - int hidden_widget_count_; + // Used to keep track of the renderer's backgrounded and visibility state. + // Updated via an IPC from the browser process. If nullopt, the browser + // process has yet to send an update and the state is unknown. + base::Optional<mojom::RenderProcessState> process_state_; blink::WebString user_agent_; blink::UserAgentMetadata user_agent_metadata_;
diff --git a/content/renderer/render_thread_impl_browsertest.cc b/content/renderer/render_thread_impl_browsertest.cc index 16836320..7a3a0eea 100644 --- a/content/renderer/render_thread_impl_browsertest.cc +++ b/content/renderer/render_thread_impl_browsertest.cc
@@ -58,6 +58,7 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h" +#include "third_party/blink/public/platform/scheduler/test/web_mock_thread_scheduler.h" #include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h" #include "ui/base/ui_base_switches.h" #include "ui/gfx/buffer_format_util.h" @@ -87,7 +88,6 @@ #endif namespace content { -namespace { // FIXME: It would be great if there was a reusable mock SingleThreadTaskRunner class TestTaskCounter : public base::SingleThreadTaskRunner { @@ -203,9 +203,8 @@ // in RenderThreadImpl::Init(). cmd->AppendSwitch(switches::kIgnoreGpuBlacklist); - std::unique_ptr<blink::scheduler::WebThreadScheduler> - main_thread_scheduler = - blink::scheduler::WebThreadScheduler::CreateMainThreadScheduler(); + auto main_thread_scheduler = + blink::scheduler::CreateMockWebMainThreadSchedulerForTests(); scoped_refptr<base::SingleThreadTaskRunner> test_task_counter( test_task_counter_.get()); @@ -221,6 +220,10 @@ test_msg_filter_ = base::MakeRefCounted<QuitOnTestMsgFilter>( run_loop_->QuitWhenIdleClosure()); thread_->AddFilter(test_msg_filter_.get()); + + main_thread_scheduler_ = + static_cast<blink::scheduler::WebMockThreadScheduler*>( + thread_->GetWebMainThreadScheduler()); } void TearDown() override { @@ -237,6 +240,14 @@ protected: IPC::Sender* sender() { return channel_.get(); } + void SetProcessState(mojom::RenderProcessState process_state) { + mojom::Renderer* renderer_interface = thread_; + renderer_interface->SetProcessState(process_state); + } + + bool RendererIsBackgrounded() { return thread_->RendererIsBackgrounded(); } + bool RendererIsHidden() { return thread_->RendererIsHidden(); } + scoped_refptr<TestTaskCounter> test_task_counter_; TestContentClientInitializer content_client_initializer_; std::unique_ptr<ContentRendererClient> content_renderer_client_; @@ -250,6 +261,8 @@ std::unique_ptr<MockRenderProcess> mock_process_; scoped_refptr<QuitOnTestMsgFilter> test_msg_filter_; + blink::scheduler::WebMockThreadScheduler* main_thread_scheduler_; + // RenderThreadImpl doesn't currently support a proper shutdown sequence // and it's okay when we're running in multi-process mode because renderers // get killed by the OS. Memory leaks aren't nice but it's test-only. @@ -290,6 +303,127 @@ EXPECT_EQ(0, test_task_counter_->NumTasksPosted()); } +TEST_F(RenderThreadImplBrowserTest, RendererIsBackgrounded) { + SetProcessState(mojom::RenderProcessState::kBackgrounded); + EXPECT_TRUE(RendererIsBackgrounded()); + + SetProcessState(mojom::RenderProcessState::kHidden); + EXPECT_FALSE(RendererIsBackgrounded()); + + SetProcessState(mojom::RenderProcessState::kVisible); + EXPECT_FALSE(RendererIsBackgrounded()); +} + +TEST_F(RenderThreadImplBrowserTest, RendererIsHidden) { + SetProcessState(mojom::RenderProcessState::kBackgrounded); + EXPECT_TRUE(RendererIsHidden()); + + SetProcessState(mojom::RenderProcessState::kHidden); + EXPECT_TRUE(RendererIsHidden()); + + SetProcessState(mojom::RenderProcessState::kVisible); + EXPECT_FALSE(RendererIsHidden()); +} + +TEST_F(RenderThreadImplBrowserTest, RendererStateTransitionVisible) { + // Going from an unknown to a visible state should mark the renderer as + // foregrounded and visible. + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(false)); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(false)); + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(true)).Times(0); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(true)).Times(0); + SetProcessState(mojom::RenderProcessState::kVisible); + testing::Mock::VerifyAndClear(main_thread_scheduler_); + + // Going from a hidden to a visible state should mark the renderer as visible. + // A hidden renderer is already foregrounded. + SetProcessState(mojom::RenderProcessState::kHidden); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(false)); + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(false)).Times(0); + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(true)).Times(0); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(true)).Times(0); + SetProcessState(mojom::RenderProcessState::kVisible); + testing::Mock::VerifyAndClear(main_thread_scheduler_); + + // Going from a backgrounded to a visible state should mark the renderer as + // foregrounded and visible. + SetProcessState(mojom::RenderProcessState::kBackgrounded); + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(false)); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(false)); + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(true)).Times(0); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(true)).Times(0); + SetProcessState(mojom::RenderProcessState::kVisible); + testing::Mock::VerifyAndClear(main_thread_scheduler_); + + testing::Mock::AllowLeak(main_thread_scheduler_); +} + +TEST_F(RenderThreadImplBrowserTest, RendererStateTransitionHidden) { + // Going from an unknown to a visible state should mark the renderer as + // foregrounded and hidden. + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(false)); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(true)); + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(true)).Times(0); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(false)).Times(0); + SetProcessState(mojom::RenderProcessState::kHidden); + testing::Mock::VerifyAndClear(main_thread_scheduler_); + + // Going from a visible to a hidden state should mark the renderer as hidden. + // A visible renderer is already foregrounded. + SetProcessState(mojom::RenderProcessState::kVisible); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(true)); + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(false)).Times(0); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(false)).Times(0); + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(true)).Times(0); + SetProcessState(mojom::RenderProcessState::kHidden); + testing::Mock::VerifyAndClear(main_thread_scheduler_); + + // Going from a backgrounded to a hidden state should mark the renderer as + // foregrounded and hidden. + SetProcessState(mojom::RenderProcessState::kBackgrounded); + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(false)); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(true)).Times(0); + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(true)).Times(0); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(false)).Times(0); + SetProcessState(mojom::RenderProcessState::kHidden); + testing::Mock::VerifyAndClear(main_thread_scheduler_); + + testing::Mock::AllowLeak(main_thread_scheduler_); +} + +TEST_F(RenderThreadImplBrowserTest, RendererStateTransitionBackgrounded) { + // Going from an unknown to a backgrounded state should mark the renderer as + // hidden and backgrounded. + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(true)); + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(true)); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(false)).Times(0); + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(false)).Times(0); + SetProcessState(mojom::RenderProcessState::kBackgrounded); + testing::Mock::VerifyAndClear(main_thread_scheduler_); + + // Going from a visible to a backgrounded state should mark the renderer as + // hidden and backgrounded. + SetProcessState(mojom::RenderProcessState::kVisible); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(true)); + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(true)); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(false)).Times(0); + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(false)).Times(0); + SetProcessState(mojom::RenderProcessState::kBackgrounded); + testing::Mock::VerifyAndClear(main_thread_scheduler_); + + // Going from a hidden state to a backgrounded state should mark the renderer + // backgrounded. A hidden renderer is already marked as hidden. + SetProcessState(mojom::RenderProcessState::kHidden); + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(true)); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(true)).Times(0); + EXPECT_CALL(*main_thread_scheduler_, SetRendererHidden(false)).Times(0); + EXPECT_CALL(*main_thread_scheduler_, SetRendererBackgrounded(false)).Times(0); + SetProcessState(mojom::RenderProcessState::kBackgrounded); + testing::Mock::VerifyAndClear(main_thread_scheduler_); + + testing::Mock::AllowLeak(main_thread_scheduler_); +} + enum NativeBufferFlag { kDisableNativeBuffers, kEnableNativeBuffers }; class RenderThreadImplGpuMemoryBufferBrowserTest @@ -391,5 +525,5 @@ gfx::BufferFormat::RGBA_8888, gfx::BufferFormat::BGRA_8888, gfx::BufferFormat::YVU_420))); -} // namespace + } // namespace content
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc index 846a66c..82907ab 100644 --- a/content/renderer/render_widget.cc +++ b/content/renderer/render_widget.cc
@@ -581,11 +581,6 @@ // Take a reference on behalf of the RenderThread. This will be balanced // when we receive WidgetMsg_Close. AddRef(); - if (RenderThreadImpl::current()) { - RenderThreadImpl::current()->WidgetCreated(); - if (is_hidden_) - RenderThreadImpl::current()->WidgetHidden(); - } } void RenderWidget::ApplyEmulatedScreenMetricsForPopupWidget( @@ -721,15 +716,6 @@ if (routing_id_ != MSG_ROUTING_NONE) { RenderThread::Get()->RemoveRoute(routing_id_); g_routing_id_widget_map.Get().erase(routing_id_); - if (RenderThreadImpl::current()) { - // RenderWidgets may be hidden when they are closed. If we were previously - // hidden, we are being counted as such in RenderThreadImpl. Thus we - // remove that count here by calling WidgetRestored() even though we're - // clearly not becoming visible here. - if (is_hidden_) - RenderThreadImpl::current()->WidgetRestored(); - RenderThreadImpl::current()->WidgetDestroyed(); - } } // Stop handling main thread input events immediately so we don't have them @@ -2486,14 +2472,8 @@ RendererWindowTreeClient::Get(routing_id_)->SetVisible(!hidden); #endif - // RenderThreadImpl::current() could be null in tests. - if (RenderThreadImpl::current()) { - if (is_hidden_) { - RenderThreadImpl::current()->WidgetHidden(); - first_update_visual_state_after_hidden_ = true; - } else { - RenderThreadImpl::current()->WidgetRestored(); - } + if (is_hidden_) { + first_update_visual_state_after_hidden_ = true; } if (render_widget_scheduling_state_)
diff --git a/content/shell/renderer/web_test/blink_test_runner.cc b/content/shell/renderer/web_test/blink_test_runner.cc index 3f2d825..7996345 100644 --- a/content/shell/renderer/web_test/blink_test_runner.cc +++ b/content/shell/renderer/web_test/blink_test_runner.cc
@@ -673,26 +673,6 @@ ForceTextInputStateUpdateForRenderFrame(RenderFrame::FromWebFrame(frame)); } -bool BlinkTestRunner::AddMediaStreamVideoSourceAndTrack( - blink::WebMediaStream* stream) { - DCHECK(stream); - return AddVideoTrackToMediaStream(std::make_unique<MockVideoCapturerSource>(), - false, // is_remote - stream); -} - -bool BlinkTestRunner::AddMediaStreamAudioSourceAndTrack( - blink::WebMediaStream* stream) { - DCHECK(stream); - return AddAudioTrackToMediaStream( - base::MakeRefCounted<MockAudioCapturerSource>(), - 48000, // sample rate - media::CHANNEL_LAYOUT_STEREO, - 480, // sample frames per buffer - false, // is_remote - stream); -} - // RenderViewObserver -------------------------------------------------------- void BlinkTestRunner::DidClearWindowObject(WebLocalFrame* frame) {
diff --git a/content/shell/renderer/web_test/blink_test_runner.h b/content/shell/renderer/web_test/blink_test_runner.h index d97628db..380cc03 100644 --- a/content/shell/renderer/web_test/blink_test_runner.h +++ b/content/shell/renderer/web_test/blink_test_runner.h
@@ -133,10 +133,6 @@ const GURL& origin, const GURL& embedding_origin) override; void ResetPermissions() override; - bool AddMediaStreamVideoSourceAndTrack( - blink::WebMediaStream* stream) override; - bool AddMediaStreamAudioSourceAndTrack( - blink::WebMediaStream* stream) override; void DispatchBeforeInstallPromptEvent( const std::vector<std::string>& event_platforms, base::OnceCallback<void(bool)> callback) override;
diff --git a/content/shell/test_runner/web_test_delegate.h b/content/shell/test_runner/web_test_delegate.h index 6a39a4e1..8b9a30b 100644 --- a/content/shell/test_runner/web_test_delegate.h +++ b/content/shell/test_runner/web_test_delegate.h
@@ -28,7 +28,6 @@ struct Manifest; class WebInputEvent; class WebLocalFrame; -class WebMediaStream; class WebPlugin; struct WebPluginParams; struct WebSize; @@ -229,12 +228,6 @@ // Clear all the permissions set via SetPermission(). virtual void ResetPermissions() = 0; - // Add content MediaStream classes to the Blink MediaStream ones. - virtual bool AddMediaStreamVideoSourceAndTrack( - blink::WebMediaStream* stream) = 0; - virtual bool AddMediaStreamAudioSourceAndTrack( - blink::WebMediaStream* stream) = 0; - // Causes the beforeinstallprompt event to be sent to the renderer. // |event_platforms| are the platforms to be sent with the event. Once the // event listener completes, |callback| will be called with a boolean
diff --git a/content/test/test_render_frame_host.cc b/content/test/test_render_frame_host.cc index b7cf360..6d9991ed 100644 --- a/content/test/test_render_frame_host.cc +++ b/content/test/test_render_frame_host.cc
@@ -336,9 +336,9 @@ std::string() /* searchable_form_encoding */, GURL() /* client_side_redirect_url */, base::nullopt /* devtools_initiator_info */); - // TODO(mkwst): The initiator origin in |common_params| is missing/incorrect. CommonNavigationParams common_params; common_params.url = url; + common_params.initiator_origin = GetLastCommittedOrigin(); common_params.referrer = Referrer(GURL(), network::mojom::ReferrerPolicy::kDefault); common_params.transition = ui::PAGE_TRANSITION_LINK;
diff --git a/ios/chrome/app/strings/ios_chromium_strings.grd b/ios/chrome/app/strings/ios_chromium_strings.grd index aa6a2cd..2225f37 100644 --- a/ios/chrome/app/strings/ios_chromium_strings.grd +++ b/ios/chrome/app/strings/ios_chromium_strings.grd
@@ -192,6 +192,9 @@ <message name="IDS_IOS_LONG_PRESS_TOOLBAR_IPH_PROMOTION_VOICE_OVER" desc="Text to be read by VoiceOver when the LongPress Toolbar Tip is presented to the user. Read by Text-to-Speech."> Chromium tip. For more tab options, press and hold the Show Tabs button in the toolbar, which is at the bottom or top of your screen. </message> + <message name="IDS_IOS_MANAGE_SYNC_DATA_FROM_CHROME_SYNC_TITLE" desc="Title for the cell to open 'Data from Chromium sync' web page where the user can control all their data data from sync."> + Data from Chromium sync + </message> <message name="IDS_IOS_MANAGED_DISCONNECT_DIALOG_INFO" desc="Message explaining that signing out of a managed account will clear all the Chromium data.[Length: 200em, may be line wrapped to multiple lines at run time.] [iOS only]."> You are signing out of an account managed by <ph name="SIGNOUT_MANAGED_DOMAIN">$1<ex>google.com</ex></ph>. This will delete your Chromium data from this device, but your data will remain in your Google account. </message>
diff --git a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_MANAGE_SYNC_DATA_FROM_CHROME_SYNC_TITLE.png.sha1 b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_MANAGE_SYNC_DATA_FROM_CHROME_SYNC_TITLE.png.sha1 new file mode 100644 index 0000000..f2dd850 --- /dev/null +++ b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_MANAGE_SYNC_DATA_FROM_CHROME_SYNC_TITLE.png.sha1
@@ -0,0 +1 @@ +f3aaab1df0c7173170a14cf973e251fadbf12be1 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_chromium_strings_grd/OWNERS b/ios/chrome/app/strings/ios_chromium_strings_grd/OWNERS new file mode 100644 index 0000000..f1a318c9 --- /dev/null +++ b/ios/chrome/app/strings/ios_chromium_strings_grd/OWNERS
@@ -0,0 +1,4 @@ +per-file *.sha1=* + +# TEAM: ios-directory-owners@chromium.org +# OS: iOS
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings.grd b/ios/chrome/app/strings/ios_google_chrome_strings.grd index 87b0410..672add3 100644 --- a/ios/chrome/app/strings/ios_google_chrome_strings.grd +++ b/ios/chrome/app/strings/ios_google_chrome_strings.grd
@@ -192,6 +192,9 @@ <message name="IDS_IOS_LONG_PRESS_TOOLBAR_IPH_PROMOTION_VOICE_OVER" desc="Text to be read by VoiceOver when the LongPress Toolbar Tip is presented to the user. Read by Text-to-Speech."> Chrome tip. For more tab options, press and hold the Show Tabs button in the toolbar, which is at the bottom or top of your screen. </message> + <message name="IDS_IOS_MANAGE_SYNC_DATA_FROM_CHROME_SYNC_TITLE" desc="Title for the cell to open 'Data from Chrome sync' web page where the user can control all their data data from sync."> + Data from Chrome sync + </message> <message name="IDS_IOS_MANAGED_DISCONNECT_DIALOG_INFO" desc="Message explaining that signing out of a managed account will clear all the Chrome data.[Length: 200em, may be line wrapped to multiple lines at run time.] [iOS only]."> You are signing out of an account managed by <ph name="SIGNOUT_MANAGED_DOMAIN">$1<ex>google.com</ex></ph>. This will delete your Chrome data from this device, but your data will remain in your Google account. </message>
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_MANAGE_SYNC_DATA_FROM_CHROME_SYNC_TITLE.png.sha1 b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_MANAGE_SYNC_DATA_FROM_CHROME_SYNC_TITLE.png.sha1 new file mode 100644 index 0000000..f2dd850 --- /dev/null +++ b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_MANAGE_SYNC_DATA_FROM_CHROME_SYNC_TITLE.png.sha1
@@ -0,0 +1 @@ +f3aaab1df0c7173170a14cf973e251fadbf12be1 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings_grd/OWNERS b/ios/chrome/app/strings/ios_google_chrome_strings_grd/OWNERS new file mode 100644 index 0000000..f1a318c9 --- /dev/null +++ b/ios/chrome/app/strings/ios_google_chrome_strings_grd/OWNERS
@@ -0,0 +1,4 @@ +per-file *.sha1=* + +# TEAM: ios-directory-owners@chromium.org +# OS: iOS
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd index 6949cac..ed806b2 100644 --- a/ios/chrome/app/strings/ios_strings.grd +++ b/ios/chrome/app/strings/ios_strings.grd
@@ -196,7 +196,7 @@ Google may use your history to personalize Search, ads, and other Google services. </message> <message name="IDS_IOS_ACCOUNT_UNIFIED_CONSENT_SETTINGS" desc="Explination text on the sync consent dialog to explain the user they can customize sync settings. [iOS only]"> - You can always <ph name="BEGIN_LINK">BEGIN_LINK</ph>choose what to sync in settings<ph name="END_LINK">END_LINK</ph> + You can always choose what to sync in <ph name="BEGIN_LINK">BEGIN_LINK</ph>settings<ph name="END_LINK">END_LINK</ph>. </message> <message name="IDS_IOS_ACCOUNT_UNIFIED_CONSENT_ADD_ACCOUNT" desc="Title of the button to add an account [Length: 15m] [iOS only]"> ADD ACCOUNT @@ -823,6 +823,18 @@ <message name="IDS_IOS_MANAGE_SYNC_SETTINGS_TITLE" desc="Title for the view in the Settings for enabling/disabling Sync. [iOS only]"> Manage Sync </message> + <message name="IDS_IOS_MANAGE_SYNC_ENCRYPTION" desc="Title for the cell to open the encryption dialog."> + Encryption + </message> + <message name="IDS_IOS_MANAGE_SYNC_GOOGLE_ACTIVITY_CONTROLS_TITLE" desc="Title for the cell to open 'Google Activity Controls' dialog."> + Google Activity Controls + </message> + <message name="IDS_IOS_MANAGE_SYNC_GOOGLE_ACTIVITY_CONTROLS_DESCRIPTION" desc="Subtitle for the cell to open 'Google Activity Controls' dialog."> + Control how your browsing history is used to personalize Search, ads and more + </message> + <message name="IDS_IOS_MANAGE_SYNC_DATA_FROM_CHROME_SYNC_DESCRIPTION" desc="Subtitle for the cell to open 'Data from Chromium sync' web page where the user can control all their data data from sync."> + Manage synced data on Google Dashboard + </message> <message name="IDS_IOS_MANAGED_DISCONNECT_DIALOG_ACCEPT" desc="Label on the button to proceed with signout and clear all Chrome data.[Length: 30em]."> Accept and sign out </message>
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_MANAGE_SYNC_DATA_FROM_CHROME_SYNC_DESCRIPTION.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_MANAGE_SYNC_DATA_FROM_CHROME_SYNC_DESCRIPTION.png.sha1 new file mode 100644 index 0000000..f2dd850 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_MANAGE_SYNC_DATA_FROM_CHROME_SYNC_DESCRIPTION.png.sha1
@@ -0,0 +1 @@ +f3aaab1df0c7173170a14cf973e251fadbf12be1 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_MANAGE_SYNC_ENCRYPTION.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_MANAGE_SYNC_ENCRYPTION.png.sha1 new file mode 100644 index 0000000..f2dd850 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_MANAGE_SYNC_ENCRYPTION.png.sha1
@@ -0,0 +1 @@ +f3aaab1df0c7173170a14cf973e251fadbf12be1 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_MANAGE_SYNC_GOOGLE_ACTIVITY_CONTROLS_DESCRIPTION.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_MANAGE_SYNC_GOOGLE_ACTIVITY_CONTROLS_DESCRIPTION.png.sha1 new file mode 100644 index 0000000..f2dd850 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_MANAGE_SYNC_GOOGLE_ACTIVITY_CONTROLS_DESCRIPTION.png.sha1
@@ -0,0 +1 @@ +f3aaab1df0c7173170a14cf973e251fadbf12be1 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_MANAGE_SYNC_GOOGLE_ACTIVITY_CONTROLS_TITLE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_MANAGE_SYNC_GOOGLE_ACTIVITY_CONTROLS_TITLE.png.sha1 new file mode 100644 index 0000000..f2dd850 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_MANAGE_SYNC_GOOGLE_ACTIVITY_CONTROLS_TITLE.png.sha1
@@ -0,0 +1 @@ +f3aaab1df0c7173170a14cf973e251fadbf12be1 \ No newline at end of file
diff --git a/ios/chrome/browser/notification_promo.cc b/ios/chrome/browser/notification_promo.cc index 3917e0e..cdf6696 100644 --- a/ios/chrome/browser/notification_promo.cc +++ b/ios/chrome/browser/notification_promo.cc
@@ -35,7 +35,7 @@ NotificationPromo::NotificationPromo(PrefService* local_state) : local_state_(local_state), - promo_payload_(new base::DictionaryValue()), + promo_payload_(base::Value::Type::DICTIONARY), start_(0.0), end_(0.0), promo_id_(-1), @@ -61,58 +61,66 @@ // paremeters. The payload is then added to the overall dictionary. This code // can be removed if this class is refactored and the payload is then // disregarded (crbug.com/608525). - base::DictionaryValue json; - base::DictionaryValue payload; - std::map<std::string, std::string>::iterator iter; - for (iter = params.begin(); iter != params.end(); ++iter) { + base::Value json(base::Value::Type::DICTIONARY); + base::Value payload(base::Value::Type::DICTIONARY); + for (const auto& param : params) { int converted_number; - bool converted = base::StringToInt(iter->second, &converted_number); + bool converted = base::StringToInt(param.second, &converted_number); // Choose the dictionary to which parameter is added based on whether the // parameter belongs in the payload or not. - base::DictionaryValue& json_or_payload = - IsPayloadParam(iter->first) ? payload : json; + base::Value& json_or_payload = IsPayloadParam(param.first) ? payload : json; if (converted) { - json_or_payload.SetInteger(iter->first, converted_number); + json_or_payload.SetKey(param.first, base::Value(converted_number)); } else { - json_or_payload.SetString(iter->first, iter->second); + json_or_payload.SetKey(param.first, base::Value(param.second)); } } - json.SetKey("payload", payload.Clone()); + json.SetKey("payload", std::move(payload)); - InitFromJson(json); + InitFromJson(std::move(json)); } -void NotificationPromo::InitFromJson(const base::DictionaryValue& promo) { - std::string time_str; +void NotificationPromo::InitFromJson(base::Value promo) { base::Time time; - if (promo.GetString("start", &time_str) && - base::Time::FromString(time_str.c_str(), &time)) { + const std::string* str = nullptr; + + str = promo.FindStringKey("start"); + if (str && base::Time::FromString(str->c_str(), &time)) { start_ = time.ToDoubleT(); - DVLOG(1) << "start str=" << time_str + DVLOG(1) << "start str=" << *str << ", start_=" << base::NumberToString(start_); } - if (promo.GetString("end", &time_str) && - base::Time::FromString(time_str.c_str(), &time)) { + + str = promo.FindStringKey("end"); + if (str && base::Time::FromString(str->c_str(), &time)) { end_ = time.ToDoubleT(); - DVLOG(1) << "end str =" << time_str - << ", end_=" << base::NumberToString(end_); + DVLOG(1) << "end str =" << *str << ", end_=" << base::NumberToString(end_); } - promo.GetString("promo_text", &promo_text_); + str = promo.FindStringKey("promo_text"); + if (str) + promo_text_ = *str; DVLOG(1) << "promo_text_=" << promo_text_; - const base::DictionaryValue* payload = NULL; - if (promo.GetDictionary("payload", &payload)) { - promo_payload_.reset(payload->DeepCopy()); + const base::Value* payload = + promo.FindKeyOfType("payload", base::Value::Type::DICTIONARY); + if (payload) { + promo_payload_ = payload->Clone(); } - promo.GetInteger("max_views", &max_views_); + base::Optional<int> max_views = promo.FindIntKey("max_views"); + if (max_views.has_value()) + max_views_ = max_views.value(); DVLOG(1) << "max_views_ " << max_views_; - promo.GetInteger("max_seconds", &max_seconds_); + base::Optional<int> max_seconds = promo.FindIntKey("max_seconds"); + if (max_seconds.has_value()) + max_seconds_ = max_seconds.value(); DVLOG(1) << "max_seconds_ " << max_seconds_; - promo.GetInteger("promo_id", &promo_id_); + base::Optional<int> promo_id = promo.FindIntKey("promo_id"); + if (promo_id.has_value()) + promo_id_ = promo_id.value(); DVLOG(1) << "promo_id_ " << promo_id_; }
diff --git a/ios/chrome/browser/notification_promo.h b/ios/chrome/browser/notification_promo.h index fef0bb6..6da47dc 100644 --- a/ios/chrome/browser/notification_promo.h +++ b/ios/chrome/browser/notification_promo.h
@@ -9,14 +9,11 @@ #include <string> #include "base/macros.h" +#include "base/values.h" class PrefRegistrySimple; class PrefService; -namespace base { -class DictionaryValue; -} - namespace user_prefs { class PrefRegistrySyncable; } @@ -34,7 +31,7 @@ void InitFromVariations(); // Initialize from json/prefs. - void InitFromJson(const base::DictionaryValue& json); + void InitFromJson(base::Value json); void InitFromPrefs(); // Can this promo be shown? @@ -51,8 +48,9 @@ void HandleViewed(); const std::string& promo_text() const { return promo_text_; } - const base::DictionaryValue* promo_payload() const { - return promo_payload_.get(); + const base::Value& promo_payload() const { + DCHECK(promo_payload_.is_dict()); + return promo_payload_; } // Register preferences. @@ -86,7 +84,7 @@ std::string promo_text_; - std::unique_ptr<const base::DictionaryValue> promo_payload_; + base::Value promo_payload_; double start_; double end_;
diff --git a/ios/chrome/browser/notification_promo_unittest.cc b/ios/chrome/browser/notification_promo_unittest.cc index 8a7b086da..08963ef 100644 --- a/ios/chrome/browser/notification_promo_unittest.cc +++ b/ios/chrome/browser/notification_promo_unittest.cc
@@ -81,27 +81,33 @@ std::string json_with_end_date( base::ReplaceStringPlaceholders(json, replacements, NULL)); - test_json_ = base::DictionaryValue::From( - base::JSONReader::ReadDeprecated(json_with_end_date)); - ASSERT_TRUE(test_json_); + base::Optional<base::Value> value = + base::JSONReader::Read(json_with_end_date); + ASSERT_TRUE(value.has_value()); + ASSERT_TRUE(value.value().is_dict()); + + test_json_ = std::move(value).value(); + + const std::string* start_param = test_json_.FindStringKey("start"); + ASSERT_TRUE(start_param); std::map<std::string, std::string> field_trial_params; - std::string start_param; - test_json_->GetString("start", &start_param); - field_trial_params["start"] = start_param; + field_trial_params["start"] = *start_param; field_trial_params["end"] = year_from_now_string; field_trial_params["promo_text"] = promo_text; field_trial_params["max_views"] = base::NumberToString(max_views); field_trial_params["max_seconds"] = base::NumberToString(max_seconds); field_trial_params["promo_id"] = base::NumberToString(promo_id); + // Payload parameters. - base::DictionaryValue* payload; - test_json_->GetDictionary("payload", &payload); - for (base::DictionaryValue::Iterator it(*payload); !it.IsAtEnd(); - it.Advance()) { - std::string value; - it.value().GetAsString(&value); - field_trial_params[it.key()] = value; + base::Value* payload = + test_json_.FindKeyOfType("payload", base::Value::Type::DICTIONARY); + ASSERT_TRUE(payload); + ASSERT_TRUE(payload->is_dict()); + + for (const auto& pair : payload->DictItems()) { + field_trial_params[pair.first] = + pair.second.is_string() ? pair.second.GetString() : std::string(); } variations::AssociateVariationParams("IOSNTPPromotion", "Group1", @@ -129,7 +135,7 @@ } void InitPromoFromJson() { - notification_promo_.InitFromJson(*test_json_); + notification_promo_.InitFromJson(test_json_.Clone()); // Test the fields. TestServerProvidedParameters(); @@ -289,7 +295,7 @@ NotificationPromo notification_promo_; std::unique_ptr<base::FieldTrialList> field_trial_list_; bool received_notification_; - std::unique_ptr<base::DictionaryValue> test_json_; + base::Value test_json_; std::string promo_text_;
diff --git a/ios/chrome/browser/signin/gaia_auth_fetcher_ios_ns_url_session_bridge.mm b/ios/chrome/browser/signin/gaia_auth_fetcher_ios_ns_url_session_bridge.mm index 2703b29..c816de0 100644 --- a/ios/chrome/browser/signin/gaia_auth_fetcher_ios_ns_url_session_bridge.mm +++ b/ios/chrome/browser/signin/gaia_auth_fetcher_ios_ns_url_session_bridge.mm
@@ -118,8 +118,8 @@ for (NSHTTPCookie* cookie : cookies) { cookie_manager->SetCanonicalCookie( net::CanonicalCookieFromSystemCookie(cookie, base::Time::Now()), - /*secure_source=*/true, - /*modify_http_only=*/true, base::DoNothing()); + base::SysNSStringToUTF8(response.URL.scheme), /*modify_http_only=*/true, + base::DoNothing()); } }
diff --git a/ios/chrome/browser/signin/gaia_auth_fetcher_ios_ns_url_session_bridge_unittests.mm b/ios/chrome/browser/signin/gaia_auth_fetcher_ios_ns_url_session_bridge_unittests.mm index c3349e0..670f595c 100644 --- a/ios/chrome/browser/signin/gaia_auth_fetcher_ios_ns_url_session_bridge_unittests.mm +++ b/ios/chrome/browser/signin/gaia_auth_fetcher_ios_ns_url_session_bridge_unittests.mm
@@ -261,8 +261,7 @@ for (NSHTTPCookie* cookie in cookies) { cookie_manager->SetCanonicalCookie( net::CanonicalCookieFromSystemCookie(cookie, base::Time::Now()), - /*secure_source=*/true, - /*modify_http_only=*/true, base::DoNothing()); + "https", /*modify_http_only=*/true, base::DoNothing()); } WaitForBackgroundTasks(); }
diff --git a/ios/chrome/browser/ui/ntp/notification_promo_whats_new.h b/ios/chrome/browser/ui/ntp/notification_promo_whats_new.h index 811949d6..dfcf19be 100644 --- a/ios/chrome/browser/ui/ntp/notification_promo_whats_new.h +++ b/ios/chrome/browser/ui/ntp/notification_promo_whats_new.h
@@ -14,7 +14,7 @@ #include "url/gurl.h" namespace base { -class DictionaryValue; +class Value; } // The What's New promo command for testing. @@ -32,7 +32,7 @@ bool Init(); // Used by experimental setting to always show a promo. - bool ClearAndInitFromJson(const base::DictionaryValue& json); + bool ClearAndInitFromJson(base::Value json); // Return true if the promo is valid and can be shown. bool CanShow() const;
diff --git a/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm b/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm index e2cdaec..c5d4539 100644 --- a/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm +++ b/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm
@@ -99,12 +99,11 @@ return InitFromNotificationPromo(); } -bool NotificationPromoWhatsNew::ClearAndInitFromJson( - const base::DictionaryValue& json) { +bool NotificationPromoWhatsNew::ClearAndInitFromJson(base::Value json) { // This clears away old promos. notification_promo_.MigrateUserPrefs(local_state_); - notification_promo_.InitFromJson(json); + notification_promo_.InitFromJson(std::move(json)); return InitFromNotificationPromo(); } @@ -191,20 +190,31 @@ if (promo_text_.empty()) return valid_; - notification_promo_.promo_payload()->GetString("metric_name", &metric_name_); - if (metric_name_.empty()) + const std::string* metric_name = + notification_promo_.promo_payload().FindStringKey("metric_name"); + if (!metric_name || metric_name->empty()) { return valid_; + } + metric_name_ = *metric_name; - notification_promo_.promo_payload()->GetString("promo_type", &promo_type_); + const std::string* promo_type = + notification_promo_.promo_payload().FindStringKey("promo_type"); + if (promo_type) + promo_type_ = *promo_type; + if (IsURLPromo()) { - std::string url_text; - notification_promo_.promo_payload()->GetString("url", &url_text); - url_ = GURL(url_text); + const std::string* url_text = + notification_promo_.promo_payload().FindStringKey("url"); + url_ = GURL(url_text ? *url_text : std::string()); if (url_.is_empty() || !url_.is_valid()) { return valid_; } } else if (IsChromeCommandPromo()) { - notification_promo_.promo_payload()->GetString("command", &command_); + const std::string* command = + notification_promo_.promo_payload().FindStringKey("command"); + if (command) + command_ = *command; + // There is only one valid command for NTP Promotions, and that is the // test command itself. if (command_ != kTestWhatsNewCommand) { @@ -217,16 +227,17 @@ valid_ = true; // Optional values don't need validation. - std::string icon_name; - notification_promo_.promo_payload()->GetString("icon", &icon_name); - icon_ = ParseIconName(icon_name); + const std::string* icon_name = + notification_promo_.promo_payload().FindStringKey("icon"); + icon_ = ParseIconName(icon_name ? *icon_name : std::string()); - seconds_since_install_ = 0; - notification_promo_.promo_payload()->GetInteger("seconds_since_install", - &seconds_since_install_); - max_seconds_since_install_ = 0; - notification_promo_.promo_payload()->GetInteger("max_seconds_since_install", - &max_seconds_since_install_); + seconds_since_install_ = notification_promo_.promo_payload() + .FindIntKey("seconds_since_install") + .value_or(0); + max_seconds_since_install_ = notification_promo_.promo_payload() + .FindIntKey("max_seconds_since_install") + .value_or(0); + return valid_; } @@ -247,30 +258,28 @@ replacements.push_back(icon); replacements.push_back(promo_id); - std::string promo_json = - "{" - " \"start\":\"1 Jan 1999 0:26:06 GMT\"," - " \"end\":\"1 Jan 2199 0:26:06 GMT\"," - " \"promo_text\":\"$1\"," - " \"max_views\":20," - " \"payload\":" - " {" - " \"promo_type\":\"$2\"," - " \"metric_name\":\"$3\"," - " \"command\":\"$4\"," - " \"url\":\"$5\"," - " \"icon\":\"$6\"" - " }," - " \"max_seconds\":259200," - " \"promo_id\":$7" - "}"; + const char promo_json[] = "{" + " \"start\":\"1 Jan 1999 0:26:06 GMT\"," + " \"end\":\"1 Jan 2199 0:26:06 GMT\"," + " \"promo_text\":\"$1\"," + " \"max_views\":20," + " \"payload\":" + " {" + " \"promo_type\":\"$2\"," + " \"metric_name\":\"$3\"," + " \"command\":\"$4\"," + " \"url\":\"$5\"," + " \"icon\":\"$6\"" + " }," + " \"max_seconds\":259200," + " \"promo_id\":$7" + "}"; std::string promo_json_filled_in = base::ReplaceStringPlaceholders(promo_json, replacements, NULL); - std::unique_ptr<base::Value> value( - base::JSONReader::ReadDeprecated(promo_json_filled_in)); - base::DictionaryValue* dict = NULL; - if (value->GetAsDictionary(&dict)) { - notification_promo_.InitFromJson(*dict); - } + base::Optional<base::Value> value = + base::JSONReader::Read(promo_json_filled_in); + DCHECK(value.has_value()); + DCHECK(value.value().is_dict()); + notification_promo_.InitFromJson(std::move(value).value()); }
diff --git a/ios/chrome/browser/ui/ntp/notification_promo_whats_new_unittest.mm b/ios/chrome/browser/ui/ntp/notification_promo_whats_new_unittest.mm index 665b7a0c..78cfae4 100644 --- a/ios/chrome/browser/ui/ntp/notification_promo_whats_new_unittest.mm +++ b/ios/chrome/browser/ui/ntp/notification_promo_whats_new_unittest.mm
@@ -47,7 +47,7 @@ } void TearDown() override { - promo_.ClearAndInitFromJson(base::DictionaryValue()); + promo_.ClearAndInitFromJson(base::Value(base::Value::Type::DICTIONARY)); PlatformTest::TearDown(); }
diff --git a/ios/chrome/browser/ui/settings/google_services/BUILD.gn b/ios/chrome/browser/ui/settings/google_services/BUILD.gn index 2bd5a4a..c66f9550 100644 --- a/ios/chrome/browser/ui/settings/google_services/BUILD.gn +++ b/ios/chrome/browser/ui/settings/google_services/BUILD.gn
@@ -19,6 +19,7 @@ "google_services_settings_view_controller.h", "google_services_settings_view_controller.mm", "google_services_settings_view_controller_model_delegate.h", + "manage_sync_settings_command_handler.h", "manage_sync_settings_consumer.h", "manage_sync_settings_coordinator.h", "manage_sync_settings_coordinator.mm", @@ -32,6 +33,7 @@ deps = [ "resources:google_services_sync_error", "//base", + "//components/browser_sync", "//components/metrics", "//components/prefs", "//components/strings", @@ -57,6 +59,7 @@ "//ios/chrome/browser/ui/settings/utils", "//ios/chrome/browser/ui/signin_interaction", "//ios/chrome/browser/ui/table_view", + "//ios/chrome/browser/ui/util", "//ios/public/provider/chrome/browser", "//ios/public/provider/chrome/browser/images", "//ios/public/provider/chrome/browser/signin",
diff --git a/ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.mm b/ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.mm index 118400c..837decba 100644 --- a/ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.mm +++ b/ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.mm
@@ -177,6 +177,7 @@ self.manageSyncSettingsCoordinator = [[ManageSyncSettingsCoordinator alloc] initWithBaseViewController:self.viewController browserState:self.browserState]; + self.manageSyncSettingsCoordinator.dispatcher = self.dispatcher; self.manageSyncSettingsCoordinator.navigationController = self.navigationController; self.manageSyncSettingsCoordinator.delegate = self;
diff --git a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_command_handler.h b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_command_handler.h new file mode 100644 index 0000000..b1e5d87 --- /dev/null +++ b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_command_handler.h
@@ -0,0 +1,22 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_GOOGLE_SERVICES_MANAGE_SYNC_SETTINGS_COMMAND_HANDLER_H_ +#define IOS_CHROME_BROWSER_UI_SETTINGS_GOOGLE_SERVICES_MANAGE_SYNC_SETTINGS_COMMAND_HANDLER_H_ + +#import <UIKit/UIKit.h> + +// Protocol to communicate user actions from the mediator to its coordinator. +@protocol ManageSyncSettingsCommandHandler <NSObject> + +// Opens the passphrase dialog. +- (void)openPassphraseDialog; +// Opens the "Web & App Activity" dialog. +- (void)openWebAppActivityDialog; +// Opens the "Data from Chrome sync" web page. +- (void)openDataFromChromeSyncWebPage; + +@end + +#endif // IOS_CHROME_BROWSER_UI_SETTINGS_GOOGLE_SERVICES_MANAGE_SYNC_SETTINGS_COMMAND_HANDLER_H_
diff --git a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.h b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.h index c62d3a8..902a23a 100644 --- a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.h +++ b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.h
@@ -7,6 +7,7 @@ #import "ios/chrome/browser/ui/coordinators/chrome_coordinator.h" +@protocol ApplicationCommands; @class ManageSyncSettingsCoordinator; // Delegate for ManageSyncSettingsCoordinator. @@ -21,7 +22,10 @@ // Coordinator for the Manage Sync Settings TableView Controller. @interface ManageSyncSettingsCoordinator : ChromeCoordinator +// Delegate. @property(nonatomic, weak) id<ManageSyncSettingsCoordinatorDelegate> delegate; +// Global dispatcher. +@property(nonatomic, weak) id<ApplicationCommands> dispatcher; @end
diff --git a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.mm b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.mm index e3f294bd..0e57520 100644 --- a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.mm +++ b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.mm
@@ -5,16 +5,21 @@ #import "ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.h" #include "base/logging.h" +#include "components/browser_sync/profile_sync_service.h" #include "ios/chrome/browser/sync/profile_sync_service_factory.h" #include "ios/chrome/browser/sync/sync_setup_service_factory.h" +#import "ios/chrome/browser/ui/settings/google_services/manage_sync_settings_command_handler.h" #import "ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.h" #import "ios/chrome/browser/ui/settings/google_services/manage_sync_settings_table_view_controller.h" +#import "ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.h" +#import "ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." #endif @interface ManageSyncSettingsCoordinator () < + ManageSyncSettingsCommandHandler, ManageSyncSettingsTableViewControllerPresentationDelegate> // View controller. @@ -34,6 +39,7 @@ [[ManageSyncSettingsMediator alloc] initWithSyncService:syncService]; self.mediator.syncSetupService = SyncSetupServiceFactory::GetForBrowserState(self.browserState); + self.mediator.commandHandler = self; self.viewController = [[ManageSyncSettingsTableViewController alloc] initWithTableViewStyle:UITableViewStyleGrouped appBarStyle:ChromeTableViewControllerStyleNoAppBar]; @@ -54,4 +60,30 @@ [self.delegate manageSyncSettingsCoordinatorWasPopped:self]; } +#pragma mark - ManageSyncSettingsCommandHandler + +- (void)openPassphraseDialog { + DCHECK(self.mediator.shouldEncryptionItemBeEnabled); + syncer::SyncService* syncService = + ProfileSyncServiceFactory::GetForBrowserState(self.browserState); + UIViewController<SettingsRootViewControlling>* controllerToPush; + // If there was a sync error, prompt the user to enter the passphrase. + // Otherwise, show the full encryption options. + if (syncService->GetUserSettings()->IsPassphraseRequired()) { + controllerToPush = [[SyncEncryptionPassphraseTableViewController alloc] + initWithBrowserState:self.browserState]; + } else { + controllerToPush = [[SyncEncryptionTableViewController alloc] + initWithBrowserState:self.browserState]; + } + controllerToPush.dispatcher = self.dispatcher; + [self.navigationController pushViewController:controllerToPush animated:YES]; +} + +- (void)openWebAppActivityDialog { +} + +- (void)openDataFromChromeSyncWebPage { +} + @end
diff --git a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.h b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.h index d68212c..1240dc5 100644 --- a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.h +++ b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.h
@@ -7,10 +7,11 @@ #import <UIKit/UIKit.h> -#import "ios/chrome/browser/ui/settings/google_services/manage_sync_settings_consumer.h" #import "ios/chrome/browser/ui/settings/google_services/manage_sync_settings_service_delegate.h" #import "ios/chrome/browser/ui/settings/google_services/manage_sync_settings_view_controller_model_delegate.h" +@protocol ManageSyncSettingsCommandHandler; +@protocol ManageSyncSettingsConsumer; class SyncSetupService; namespace syncer { class SyncService; @@ -25,6 +26,10 @@ @property(nonatomic, weak) id<ManageSyncSettingsConsumer> consumer; // Sync setup service. @property(nonatomic, assign) SyncSetupService* syncSetupService; +// Command handler. +@property(nonatomic, weak) id<ManageSyncSettingsCommandHandler> commandHandler; +// Returns YES if the encryption item should be enabled. +@property(nonatomic, assign, readonly) BOOL shouldEncryptionItemBeEnabled; // Designated initializer. // |syncService|: Sync service. Should not be null.
diff --git a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm index 3568969..67ed80a 100644 --- a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm +++ b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm
@@ -7,10 +7,19 @@ #include "base/auto_reset.h" #include "base/logging.h" #include "components/strings/grit/components_strings.h" +#include "components/sync/driver/sync_service.h" +#include "ios/chrome/browser/sync/profile_sync_service_factory.h" #include "ios/chrome/browser/sync/sync_observer_bridge.h" #include "ios/chrome/browser/sync/sync_setup_service.h" #import "ios/chrome/browser/ui/list_model/list_model.h" +#import "ios/chrome/browser/ui/settings/cells/settings_multiline_detail_item.h" #import "ios/chrome/browser/ui/settings/cells/sync_switch_item.h" +#import "ios/chrome/browser/ui/settings/google_services/manage_sync_settings_command_handler.h" +#import "ios/chrome/browser/ui/settings/google_services/manage_sync_settings_consumer.h" +#import "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h" +#import "ios/chrome/browser/ui/table_view/cells/table_view_image_item.h" +#import "ios/chrome/browser/ui/table_view/cells/table_view_item.h" +#import "ios/chrome/browser/ui/util/uikit_ui_util.h" #include "ios/chrome/grit/ios_chromium_strings.h" #include "ios/chrome/grit/ios_strings.h" #include "ui/base/l10n/l10n_util.h" @@ -25,7 +34,10 @@ // List of sections. typedef NS_ENUM(NSInteger, SectionIdentifier) { + // Section for all the sync settings. SyncDataTypeSectionIdentifier = kSectionIdentifierEnumZero, + // Advanced settings. + AdvancedSettingsSectionIdentifier, }; // List of items. For implementation details in @@ -35,6 +47,7 @@ // on the type. typedef NS_ENUM(NSInteger, ItemType) { // SyncDataTypeSectionIdentifier section. + // Sync everything item. SyncEverythingItemType = kItemTypeEnumZero, // kSyncAutofill. AutofillDataTypeItemType, @@ -50,8 +63,17 @@ ReadingListDataTypeItemType, // kSyncPreferences. SettingsDataTypeItemType, + // AdvancedSettingsSectionIdentifier section. + // Encryption item. + EncryptionItemType, + // Google activity controls item. + GoogleActivityControlsItemType, + // Data from Chrome sync. + DataFromChromeSync, }; +NSString* kGoogleServicesSyncErrorImage = @"google_services_sync_error"; + } // namespace @interface ManageSyncSettingsMediator () <SyncObserverModelBridge> { @@ -61,10 +83,14 @@ BOOL _ignoreSyncStateChanges; } +// Sync service. +@property(nonatomic, assign) syncer::SyncService* syncService; // Model item for sync everything. @property(nonatomic, strong) SyncSwitchItem* syncEverythingItem; // Model item for each data types. @property(nonatomic, strong) NSArray<SyncSwitchItem*>* syncSwitchItems; +// Encryption item. +@property(nonatomic, strong) TableViewImageItem* encryptionItem; // Returns whether the Sync settings should be disabled because of a Sync error. @property(nonatomic, assign, readonly) BOOL disabledBecauseOfSyncError; @@ -76,6 +102,7 @@ self = [super init]; if (self) { DCHECK(syncService); + self.syncService = syncService; _syncObserver.reset(new SyncObserverBridge(self, syncService)); } return self; @@ -152,6 +179,74 @@ } } +#pragma mark - Loads the advanced settings section + +// Loads the advanced settings section. +- (void)loadAdvancedSettingsSection { + TableViewModel* model = self.consumer.tableViewModel; + [model addSectionWithIdentifier:AdvancedSettingsSectionIdentifier]; + // EncryptionItemType. + self.encryptionItem = + [[TableViewImageItem alloc] initWithType:EncryptionItemType]; + self.encryptionItem.title = GetNSString(IDS_IOS_MANAGE_SYNC_ENCRYPTION); + self.encryptionItem.accessoryType = + UITableViewCellAccessoryDisclosureIndicator; + [model addItem:self.encryptionItem + toSectionWithIdentifier:AdvancedSettingsSectionIdentifier]; + [self updateEncryptionItem:NO]; + + // GoogleActivityControlsItemType. + SettingsMultilineDetailItem* googleActivityControlsItem = + [[SettingsMultilineDetailItem alloc] + initWithType:GoogleActivityControlsItemType]; + googleActivityControlsItem.text = + GetNSString(IDS_IOS_MANAGE_SYNC_GOOGLE_ACTIVITY_CONTROLS_TITLE); + googleActivityControlsItem.detailText = + GetNSString(IDS_IOS_MANAGE_SYNC_GOOGLE_ACTIVITY_CONTROLS_DESCRIPTION); + [model addItem:googleActivityControlsItem + toSectionWithIdentifier:AdvancedSettingsSectionIdentifier]; + + // AdvancedSettingsSectionIdentifier. + SettingsMultilineDetailItem* dataFromChromeSyncItem = + [[SettingsMultilineDetailItem alloc] initWithType:DataFromChromeSync]; + dataFromChromeSyncItem.text = + GetNSString(IDS_IOS_MANAGE_SYNC_DATA_FROM_CHROME_SYNC_TITLE); + dataFromChromeSyncItem.detailText = + GetNSString(IDS_IOS_MANAGE_SYNC_DATA_FROM_CHROME_SYNC_DESCRIPTION); + [model addItem:dataFromChromeSyncItem + toSectionWithIdentifier:AdvancedSettingsSectionIdentifier]; +} + +// Updates encryption item, and notifies the consumer if |notifyConsumer| is set +// to YES. +- (void)updateEncryptionItem:(BOOL)notifyConsumer { + BOOL needsUpdate = + self.shouldEncryptionItemBeEnabled && + (self.encryptionItem.enabled != self.shouldEncryptionItemBeEnabled); + if (self.syncSetupService->GetSyncServiceState() == + SyncSetupService::kSyncServiceNeedsPassphrase) { + needsUpdate = needsUpdate || self.encryptionItem.image == nil; + self.encryptionItem.image = + [UIImage imageNamed:kGoogleServicesSyncErrorImage]; + self.encryptionItem.detailText = GetNSString( + IDS_IOS_GOOGLE_SERVICES_SETTINGS_ENTER_PASSPHRASE_TO_START_SYNC); + } else { + needsUpdate = needsUpdate || self.encryptionItem.image != nil; + self.encryptionItem.image = nil; + self.encryptionItem.detailText = nil; + } + self.encryptionItem.enabled = self.shouldEncryptionItemBeEnabled; + if (self.shouldEncryptionItemBeEnabled) { + self.encryptionItem.textColor = nil; + } else { + self.encryptionItem.textColor = + UIColorFromRGB(kTableViewSecondaryLabelLightGrayTextColor); + } + if (needsUpdate && notifyConsumer) { + [self.consumer reloadItem:self.self.encryptionItem]; + } +} + #pragma mark - Private // Creates a SyncSwitchItem instance. @@ -209,12 +304,19 @@ state != SyncSetupService::kSyncServiceNeedsPassphrase; } +- (BOOL)shouldEncryptionItemBeEnabled { + return self.syncService->IsEngineInitialized() && + self.syncSetupService->IsSyncEnabled() && + !self.disabledBecauseOfSyncError; +} + #pragma mark - ManageSyncSettingsTableViewControllerModelDelegate - (void)manageSyncSettingsTableViewControllerLoadModel: (id<ManageSyncSettingsConsumer>)controller { DCHECK_EQ(self.consumer, controller); [self loadSyncDataTypeSection]; + [self loadAdvancedSettingsSection]; } #pragma mark - SyncObserverModelBridge @@ -226,6 +328,7 @@ } [self updateSyncEverythingItemNotifyConsumer:YES]; [self updateSyncDataItemsNotifyConsumer:YES]; + [self updateEncryptionItem:YES]; } #pragma mark - ManageSyncSettingsServiceDelegate @@ -251,4 +354,29 @@ [self updateSyncDataItemsNotifyConsumer:YES]; } +- (void)didSelectItem:(TableViewItem*)item { + ItemType itemType = static_cast<ItemType>(item.type); + switch (itemType) { + case EncryptionItemType: + [self.commandHandler openPassphraseDialog]; + break; + case GoogleActivityControlsItemType: + [self.commandHandler openWebAppActivityDialog]; + break; + case DataFromChromeSync: + [self.commandHandler openDataFromChromeSyncWebPage]; + break; + case SyncEverythingItemType: + case AutofillDataTypeItemType: + case BookmarksDataTypeItemType: + case HistoryDataTypeItemType: + case OpenTabsDataTypeItemType: + case PasswordsDataTypeItemType: + case ReadingListDataTypeItemType: + case SettingsDataTypeItemType: + // Nothing to do. + break; + } +} + @end
diff --git a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_service_delegate.h b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_service_delegate.h index b3c21c22..7bbb53d 100644 --- a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_service_delegate.h +++ b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_service_delegate.h
@@ -14,6 +14,9 @@ // Called when the UISwitch from the SyncSwitchItem is toggled. - (void)toggleSwitchItem:(SyncSwitchItem*)switchItem withValue:(BOOL)value; +// Called when the cell is tapped. +- (void)didSelectItem:(TableViewItem*)item; + @end #endif // IOS_CHROME_BROWSER_UI_SETTINGS_GOOGLE_SERVICES_MANAGE_SYNC_SETTINGS_SERVICE_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_table_view_controller.mm b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_table_view_controller.mm index c937230..e44dd0b 100644 --- a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_table_view_controller.mm
@@ -88,4 +88,14 @@ withRowAnimation:UITableViewRowAnimationNone]; } +#pragma mark - UITableViewDelegate + +- (void)tableView:(UITableView*)tableView + didSelectRowAtIndexPath:(NSIndexPath*)indexPath { + [super tableView:tableView didSelectRowAtIndexPath:indexPath]; + TableViewItem* item = [self.tableViewModel itemAtIndexPath:indexPath]; + [self.serviceDelegate didSelectItem:item]; + [tableView deselectRowAtIndexPath:indexPath animated:YES]; +} + @end
diff --git a/ios/chrome/browser/web/chrome_web_client.h b/ios/chrome/browser/web/chrome_web_client.h index 507e772..32602cf 100644 --- a/ios/chrome/browser/web/chrome_web_client.h +++ b/ios/chrome/browser/web/chrome_web_client.h
@@ -51,7 +51,9 @@ const GURL& request_url, bool overridable, const base::Callback<void(bool)>& callback) override; - void PrepareErrorPage(NSError* error, + void PrepareErrorPage(web::WebState* web_state, + const GURL& url, + NSError* error, bool is_post, bool is_off_the_record, NSString** error_html) override;
diff --git a/ios/chrome/browser/web/chrome_web_client.mm b/ios/chrome/browser/web/chrome_web_client.mm index 20171216..765d03b 100644 --- a/ios/chrome/browser/web/chrome_web_client.mm +++ b/ios/chrome/browser/web/chrome_web_client.mm
@@ -203,12 +203,14 @@ overridable, callback); } -void ChromeWebClient::PrepareErrorPage(NSError* error, +void ChromeWebClient::PrepareErrorPage(web::WebState* web_state, + const GURL& url, + NSError* error, bool is_post, bool is_off_the_record, NSString** error_html) { DCHECK(error); - *error_html = GetErrorPage(error, is_post, is_off_the_record); + *error_html = GetErrorPage(url, error, is_post, is_off_the_record); } std::unique_ptr<service_manager::Service> ChromeWebClient::HandleServiceRequest(
diff --git a/ios/chrome/browser/web/chrome_web_client_unittest.mm b/ios/chrome/browser/web/chrome_web_client_unittest.mm index 463de89..0dbb9cb 100644 --- a/ios/chrome/browser/web/chrome_web_client_unittest.mm +++ b/ios/chrome/browser/web/chrome_web_client_unittest.mm
@@ -30,12 +30,17 @@ #endif namespace { +const char kTestUrl[] = "http://chromium.test"; + // Error used to test PrepareErrorPage method. NSError* CreateTestError() { return web::testing::CreateTestNetError([NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorNetworkConnectionLost - userInfo:nil]); + userInfo:@{ + NSURLErrorFailingURLStringErrorKey : + base::SysUTF8ToNSString(kTestUrl) + }]); } } // namespace @@ -182,11 +187,12 @@ ChromeWebClient web_client; NSError* error = CreateTestError(); NSString* page = nil; - web_client.PrepareErrorPage(error, /*is_post=*/false, + web_client.PrepareErrorPage(/*web_state*/ nullptr, GURL(kTestUrl), error, + /*is_post=*/false, /*is_off_the_record=*/false, &page); - EXPECT_NSEQ( - GetErrorPage(error, /*is_post=*/false, /*is_off_the_record=*/false), - page); + EXPECT_NSEQ(GetErrorPage(GURL(kTestUrl), error, /*is_post=*/false, + /*is_off_the_record=*/false), + page); } // Tests PrepareErrorPage with post, not Off The Record error. @@ -194,10 +200,12 @@ ChromeWebClient web_client; NSError* error = CreateTestError(); NSString* page = nil; - web_client.PrepareErrorPage(error, /*is_post=*/true, + web_client.PrepareErrorPage(/*web_state*/ nullptr, GURL(kTestUrl), error, + /*is_post=*/true, /*is_off_the_record=*/false, &page); - EXPECT_NSEQ( - GetErrorPage(error, /*is_post=*/true, /*is_off_the_record=*/false), page); + EXPECT_NSEQ(GetErrorPage(GURL(kTestUrl), error, /*is_post=*/true, + /*is_off_the_record=*/false), + page); } // Tests PrepareErrorPage with non-post, Off The Record error. @@ -205,10 +213,12 @@ ChromeWebClient web_client; NSError* error = CreateTestError(); NSString* page = nil; - web_client.PrepareErrorPage(error, /*is_post=*/false, + web_client.PrepareErrorPage(/*web_state*/ nullptr, GURL(kTestUrl), error, + /*is_post=*/false, /*is_off_the_record=*/true, &page); - EXPECT_NSEQ( - GetErrorPage(error, /*is_post=*/false, /*is_off_the_record=*/true), page); + EXPECT_NSEQ(GetErrorPage(GURL(kTestUrl), error, /*is_post=*/false, + /*is_off_the_record=*/true), + page); } // Tests PrepareErrorPage with post, Off The Record error. @@ -216,8 +226,10 @@ ChromeWebClient web_client; NSError* error = CreateTestError(); NSString* page = nil; - web_client.PrepareErrorPage(error, /*is_post=*/true, + web_client.PrepareErrorPage(/*web_state*/ nullptr, GURL(kTestUrl), error, + /*is_post=*/true, /*is_off_the_record=*/true, &page); - EXPECT_NSEQ(GetErrorPage(error, /*is_post=*/true, /*is_off_the_record=*/true), + EXPECT_NSEQ(GetErrorPage(GURL(kTestUrl), error, /*is_post=*/true, + /*is_off_the_record=*/true), page); }
diff --git a/ios/chrome/browser/web/error_page_util.h b/ios/chrome/browser/web/error_page_util.h index e033e87..94d5e73 100644 --- a/ios/chrome/browser/web/error_page_util.h +++ b/ios/chrome/browser/web/error_page_util.h
@@ -5,10 +5,14 @@ #ifndef IOS_CHROME_BROWSER_WEB_ERROR_PAGE_UTIL_H_ #define IOS_CHROME_BROWSER_WEB_ERROR_PAGE_UTIL_H_ +class GURL; @class NSError; @class NSString; // Returns error page HTML to display in WebState if the page load has failed. -NSString* GetErrorPage(NSError* error, bool is_post, bool is_off_the_record); +NSString* GetErrorPage(const GURL& url, + NSError* error, + bool is_post, + bool is_off_the_record); #endif // IOS_CHROME_BROWSER_WEB_ERROR_PAGE_UTIL_H_
diff --git a/ios/chrome/browser/web/error_page_util.mm b/ios/chrome/browser/web/error_page_util.mm index a1b78ac..63f01123 100644 --- a/ios/chrome/browser/web/error_page_util.mm +++ b/ios/chrome/browser/web/error_page_util.mm
@@ -26,8 +26,12 @@ #error "This file requires ARC support." #endif -NSString* GetErrorPage(NSError* error, bool is_post, bool is_off_the_record) { - NSString* url_spec = error.userInfo[NSURLErrorFailingURLStringErrorKey]; +NSString* GetErrorPage(const GURL& url, + NSError* error, + bool is_post, + bool is_off_the_record) { + DCHECK_EQ(url, GURL(base::SysNSStringToUTF8( + error.userInfo[NSURLErrorFailingURLStringErrorKey]))); NSError* final_error = base::ios::GetFinalUnderlyingErrorFromError(error); if (!final_error) final_error = error; @@ -43,8 +47,7 @@ base::DictionaryValue error_strings; error_page::LocalizedError::GetStrings( - net_error, error_page::Error::kNetErrorDomain, - GURL(base::SysNSStringToUTF16(url_spec)), is_post, + net_error, error_page::Error::kNetErrorDomain, url, is_post, /*stale_copy_in_cache=*/false, /*can_show_network_diagnostics_dialog=*/false, is_off_the_record, error_page::LocalizedError::OfflineContentOnNetErrorFeatureState::
diff --git a/ios/chrome/browser/web/error_page_util_unittest.mm b/ios/chrome/browser/web/error_page_util_unittest.mm index 57ecc59f..803e6e9 100644 --- a/ios/chrome/browser/web/error_page_util_unittest.mm +++ b/ios/chrome/browser/web/error_page_util_unittest.mm
@@ -12,6 +12,7 @@ #include "net/base/net_errors.h" #include "testing/platform_test.h" #include "ui/base/l10n/l10n_util.h" +#include "url/gurl.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -49,7 +50,8 @@ // Tests error page for non-POST and non-OTR error. The expected strings are: // error code, failing url, reload button. TEST_F(ErrorPageUtilTest, NonPostNonOtrError) { - NSString* html = GetErrorPage(CreateTestError(NSURLErrorTimedOut), + NSString* html = GetErrorPage(GURL(base::SysNSStringToUTF8(kTestUrl)), + CreateTestError(NSURLErrorTimedOut), /*is_post=*/false, /*is_off_the_record=*/false); @@ -62,7 +64,8 @@ // not have Reload button. The expected strings are: error code and failing // url. TEST_F(ErrorPageUtilTest, PostNonOtrError) { - NSString* html = GetErrorPage(CreateTestError(NSURLErrorTimedOut), + NSString* html = GetErrorPage(GURL(base::SysNSStringToUTF8(kTestUrl)), + CreateTestError(NSURLErrorTimedOut), /*is_post=*/true, /*is_off_the_record=*/false); @@ -75,7 +78,8 @@ // same as non-OTR. The expected strings are: error code, failing url, reload // button. TEST_F(ErrorPageUtilTest, NonPostOtrError) { - NSString* html = GetErrorPage(CreateTestError(NSURLErrorTimedOut), + NSString* html = GetErrorPage(GURL(base::SysNSStringToUTF8(kTestUrl)), + CreateTestError(NSURLErrorTimedOut), /*is_post=*/false, /*is_off_the_record=*/true); @@ -88,7 +92,8 @@ // as non-OTR. Error pages for POST requests do not have Reload button. The // expected strings are: error code and failing url. TEST_F(ErrorPageUtilTest, PostOtrError) { - NSString* html = GetErrorPage(CreateTestError(NSURLErrorTimedOut), + NSString* html = GetErrorPage(GURL(base::SysNSStringToUTF8(kTestUrl)), + CreateTestError(NSURLErrorTimedOut), /*is_post=*/true, /*is_off_the_record=*/true); @@ -104,7 +109,7 @@ errorWithDomain:NSURLErrorDomain code:NSURLErrorTimedOut userInfo:nil]); - NSString* html = GetErrorPage(error, + NSString* html = GetErrorPage(GURL::EmptyGURL(), error, /*is_post=*/false, /*is_off_the_record=*/false);
diff --git a/ios/chrome/browser/web_state_list/web_state_list_order_controller.mm b/ios/chrome/browser/web_state_list/web_state_list_order_controller.mm index 9f5d237..0c8b70d 100644 --- a/ios/chrome/browser/web_state_list/web_state_list_order_controller.mm +++ b/ios/chrome/browser/web_state_list/web_state_list_order_controller.mm
@@ -84,7 +84,10 @@ int WebStateListOrderController::GetValidIndex(int index, int removing_index) const { - if (removing_index < index) - return std::min(0, index - 1); + DCHECK_GE(removing_index, 0); + if (removing_index < index) { + DCHECK_GE(index, 1); + return index - 1; + } return index; }
diff --git a/ios/chrome/browser/web_state_list/web_state_list_order_controller_unittest.mm b/ios/chrome/browser/web_state_list/web_state_list_order_controller_unittest.mm index 0c06ca21..3d99fb3 100644 --- a/ios/chrome/browser/web_state_list/web_state_list_order_controller_unittest.mm +++ b/ios/chrome/browser/web_state_list/web_state_list_order_controller_unittest.mm
@@ -84,3 +84,41 @@ EXPECT_EQ(3, order_controller_.DetermineInsertionIndex(opener)); } + +// Test that the selection of the next tab to show when closing a tab respect +// the opener-opened relationship (note: the index returned always omit the +// would be closed WebState, so there is a - 1 offset). +TEST_F(WebStateListOrderControllerTest, DetermineNewActiveIndex) { + InsertNewWebState(0, WebStateOpener()); + + // Verify that if closing the last WebState, no WebState is selected. + EXPECT_EQ(WebStateList::kInvalidIndex, + order_controller_.DetermineNewActiveIndex(0)); + + InsertNewWebState(1, WebStateOpener()); + InsertNewWebState(2, WebStateOpener()); + InsertNewWebState(3, WebStateOpener(web_state_list_.GetWebStateAt(0))); + InsertNewWebState(4, WebStateOpener(web_state_list_.GetWebStateAt(0))); + InsertNewWebState(5, WebStateOpener(web_state_list_.GetWebStateAt(1))); + InsertNewWebState(6, WebStateOpener()); + + // Verify that if closing a WebState with siblings, the next sibling is + // selected. + EXPECT_EQ(3, order_controller_.DetermineNewActiveIndex(3)); + + // Verify that if closing a WebState with siblings, the opener is selected + // if there is no next sibling. + EXPECT_EQ(0, order_controller_.DetermineNewActiveIndex(4)); + + // Verify that if closing a WebState with no sibling, the opener is selected. + EXPECT_EQ(1, order_controller_.DetermineNewActiveIndex(5)); + + // Verify that if closing a WebState with children, the first child is + // selected. + EXPECT_EQ(4, order_controller_.DetermineNewActiveIndex(1)); + + // Verify that if closing a WebState with no child, the next WebState is + // selected, or the previous one if the last WebState was closed. + EXPECT_EQ(2, order_controller_.DetermineNewActiveIndex(2)); + EXPECT_EQ(5, order_controller_.DetermineNewActiveIndex(6)); +}
diff --git a/ios/net/cookies/cookie_store_ios.h b/ios/net/cookies/cookie_store_ios.h index 9cf07461..d859679 100644 --- a/ios/net/cookies/cookie_store_ios.h +++ b/ios/net/cookies/cookie_store_ios.h
@@ -88,7 +88,7 @@ const net::CookieOptions& options, SetCookiesCallback callback) override; void SetCanonicalCookieAsync(std::unique_ptr<CanonicalCookie> cookie, - bool secure_source, + std::string source_scheme, bool modify_http_only, SetCookiesCallback callback) override; void GetCookieListWithOptionsAsync(const GURL& url,
diff --git a/ios/net/cookies/cookie_store_ios.mm b/ios/net/cookies/cookie_store_ios.mm index d2d85815..92df7be 100644 --- a/ios/net/cookies/cookie_store_ios.mm +++ b/ios/net/cookies/cookie_store_ios.mm
@@ -340,7 +340,7 @@ void CookieStoreIOS::SetCanonicalCookieAsync( std::unique_ptr<net::CanonicalCookie> cookie, - bool secure_source, + std::string source_scheme, bool modify_http_only, SetCookiesCallback callback) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); @@ -354,6 +354,9 @@ // engine. DCHECK(modify_http_only); + bool secure_source = + GURL::SchemeIsCryptographic(base::ToLowerASCII(source_scheme)); + if (cookie->IsSecure() && !secure_source) { if (!callback.is_null()) std::move(callback).Run(
diff --git a/ios/net/cookies/cookie_store_ios_persistent.h b/ios/net/cookies/cookie_store_ios_persistent.h index 46b5fef..7a0a5170 100644 --- a/ios/net/cookies/cookie_store_ios_persistent.h +++ b/ios/net/cookies/cookie_store_ios_persistent.h
@@ -47,7 +47,7 @@ const net::CookieOptions& options, SetCookiesCallback callback) override; void SetCanonicalCookieAsync(std::unique_ptr<CanonicalCookie> cookie, - bool secure_source, + std::string source_scheme, bool modify_http_only, SetCookiesCallback callback) override; void GetCookieListWithOptionsAsync(const GURL& url,
diff --git a/ios/net/cookies/cookie_store_ios_persistent.mm b/ios/net/cookies/cookie_store_ios_persistent.mm index d779f89..c117783 100644 --- a/ios/net/cookies/cookie_store_ios_persistent.mm +++ b/ios/net/cookies/cookie_store_ios_persistent.mm
@@ -70,13 +70,13 @@ void CookieStoreIOSPersistent::SetCanonicalCookieAsync( std::unique_ptr<CanonicalCookie> cookie, - bool secure_source, + std::string source_scheme, bool modify_http_only, SetCookiesCallback callback) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); cookie_monster()->SetCanonicalCookieAsync( - std::move(cookie), secure_source, modify_http_only, + std::move(cookie), std::move(source_scheme), modify_http_only, WrapSetCallback(std::move(callback))); }
diff --git a/ios/web/BUILD.gn b/ios/web/BUILD.gn index 5b92183..a86dd21 100644 --- a/ios/web/BUILD.gn +++ b/ios/web/BUILD.gn
@@ -460,7 +460,7 @@ "web_state/js/crw_js_injection_manager_unittest.mm", "web_state/js/crw_js_post_request_loader_unittest.mm", "web_state/js/crw_js_window_id_manager_unittest.mm", - "web_state/js/find_in_page_unittest.mm", + "web_state/js/find_in_page_js_unittest.mm", "web_state/js/message_js_unittest.mm", "web_state/js/page_script_util_unittest.mm", ]
diff --git a/ios/web/public/web_client.h b/ios/web/public/web_client.h index d7767ec..f3a99f3e 100644 --- a/ios/web/public/web_client.h +++ b/ios/web/public/web_client.h
@@ -178,7 +178,9 @@ // |error| and |error_html| are always valid pointers. Embedder may set // |error_html| to an HTML page containing the details of the error and maybe // links to more info. - virtual void PrepareErrorPage(NSError* error, + virtual void PrepareErrorPage(WebState* web_state, + const GURL& url, + NSError* error, bool is_post, bool is_off_the_record, NSString** error_html);
diff --git a/ios/web/shell/test/BUILD.gn b/ios/web/shell/test/BUILD.gn index 22beafa..5f8fac25 100644 --- a/ios/web/shell/test/BUILD.gn +++ b/ios/web/shell/test/BUILD.gn
@@ -22,7 +22,6 @@ "meta_tags_egtest.mm", "navigation_egtest.mm", "page_state_egtest.mm", - "pdf_egtest.mm", "plugin_placeholder_egtest.mm", "redirect_egtest.mm", "service_manager_egtest.mm", @@ -101,7 +100,6 @@ sources = [ "http_server_files/basic_navigation_test.html", "http_server_files/tall_page.html", - "http_server_files/testpage.pdf", ] outputs = [ "{{bundle_resources_dir}}/{{source_root_relative_dir}}/" +
diff --git a/ios/web/shell/test/http_server_files/testpage.pdf b/ios/web/shell/test/http_server_files/testpage.pdf deleted file mode 100644 index 9999e928..0000000 --- a/ios/web/shell/test/http_server_files/testpage.pdf +++ /dev/null Binary files differ
diff --git a/ios/web/shell/test/pdf_egtest.mm b/ios/web/shell/test/pdf_egtest.mm deleted file mode 100644 index d0b2a42..0000000 --- a/ios/web/shell/test/pdf_egtest.mm +++ /dev/null
@@ -1,63 +0,0 @@ -// Copyright 2016 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 <EarlGrey/EarlGrey.h> - -#import "base/test/ios/wait_util.h" -#import "ios/web/public/test/earl_grey/web_view_matchers.h" -#import "ios/web/public/test/http_server/http_server.h" -#include "ios/web/public/test/http_server/http_server_util.h" -#import "ios/web/shell/test/app/web_shell_test_util.h" -#import "ios/web/shell/test/earl_grey/shell_earl_grey.h" -#import "ios/web/shell/test/earl_grey/web_shell_test_case.h" - -#if !defined(__has_feature) || !__has_feature(objc_arc) -#error "This file requires ARC support." -#endif - -namespace { -// URL spec for test PDF page. -const char kTestPDFURL[] = - "http://ios/web/shell/test/http_server_files/testpage.pdf"; - -// Matcher for WKWebView displaying PDF. -id<GREYMatcher> WebViewWithPdf() { - web::WebState* web_state = web::shell_test_util::GetCurrentWebState(); - MatchesBlock matches = ^BOOL(UIView* view) { - return base::test::ios::WaitUntilConditionOrTimeout( - base::test::ios::kWaitForUIElementTimeout, ^{ - return web_state->GetContentsMimeType() == "application/pdf"; - }); - }; - - DescribeToBlock describe = ^(id<GREYDescription> description) { - [description appendText:@"web view with PDF"]; - }; - - return grey_allOf( - WebViewInWebState(web_state), - [[GREYElementMatcherBlock alloc] initWithMatchesBlock:matches - descriptionBlock:describe], - nil); -} - -} // namespace - -using web::test::HttpServer; - -// PDF test cases for the web shell. -@interface PDFTestCase : WebShellTestCase -@end - -@implementation PDFTestCase - -// Tests MIME type of the loaded PDF document. -- (void)testMIMEType { - web::test::SetUpFileBasedHttpServer(); - [ShellEarlGrey loadURL:HttpServer::MakeUrl(kTestPDFURL)]; - [[EarlGrey selectElementWithMatcher:WebViewWithPdf()] - assertWithMatcher:grey_notNil()]; -} - -@end
diff --git a/ios/web/web_client.mm b/ios/web/web_client.mm index 24d97ce9..3532472 100644 --- a/ios/web/web_client.mm +++ b/ios/web/web_client.mm
@@ -102,7 +102,9 @@ return base::FeatureList::IsEnabled(web::features::kSlimNavigationManager); } -void WebClient::PrepareErrorPage(NSError* error, +void WebClient::PrepareErrorPage(WebState* web_state, + const GURL& url, + NSError* error, bool is_post, bool is_off_the_record, NSString** error_html) {
diff --git a/ios/web/web_client_unittest.mm b/ios/web/web_client_unittest.mm index 8fd96b6..e013d33 100644 --- a/ios/web/web_client_unittest.mm +++ b/ios/web/web_client_unittest.mm
@@ -8,6 +8,7 @@ #include "testing/gtest_mac.h" #include "testing/platform_test.h" +#include "url/gurl.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -26,7 +27,8 @@ userInfo:@{NSLocalizedDescriptionKey : description}]; NSString* html = nil; - web_client.PrepareErrorPage(error, /*is_post=*/false, + web_client.PrepareErrorPage(/*web_state*/ nullptr, GURL::EmptyGURL(), error, + /*is_post=*/false, /*is_off_the_record=*/false, &html); EXPECT_NSEQ(description, html); }
diff --git a/ios/web/web_state/error_page_inttest.mm b/ios/web/web_state/error_page_inttest.mm index 6cca6c83..5f22e26 100644 --- a/ios/web/web_state/error_page_inttest.mm +++ b/ios/web/web_state/error_page_inttest.mm
@@ -3,6 +3,8 @@ // found in the LICENSE file. #include "base/bind.h" +#include "base/strings/stringprintf.h" +#include "base/strings/sys_string_conversions.h" #import "base/test/ios/wait_util.h" #include "base/test/scoped_feature_list.h" #include "ios/testing/embedded_test_server_handlers.h" @@ -30,16 +32,31 @@ namespace web { namespace { + +// Builds the text for the error page in TestWebClient. +std::string GetErrorText(WebState* web_state, + const GURL& url, + const std::string& error_domain, + long error_code, + bool is_post, + bool is_off_the_record) { + return base::StringPrintf( + "web_state: %p url: %s domain: %s code: %ld post: %d otr: %d", web_state, + url.spec().c_str(), error_domain.c_str(), error_code, is_post, + is_off_the_record); +} + // Overrides PrepareErrorPage to render all important arguments. class TestWebClient : public WebClient { - void PrepareErrorPage(NSError* error, + void PrepareErrorPage(WebState* web_state, + const GURL& url, + NSError* error, bool is_post, bool is_off_the_record, NSString** error_html) override { - *error_html = - [NSString stringWithFormat:@"domain: %@ code: %ld post: %d otr: %d", - error.domain, static_cast<long>(error.code), - is_post, is_off_the_record]; + *error_html = base::SysUTF8ToNSString( + GetErrorText(web_state, url, base::SysNSStringToUTF8(error.domain), + error.code, is_post, is_off_the_record)); } }; } // namespace @@ -99,7 +116,9 @@ server_responds_with_content_ = false; test::LoadUrl(web_state(), server_.GetURL("/echo-query?foo")); ASSERT_TRUE(test::WaitForWebViewContainingText( - web_state(), "domain: NSURLErrorDomain code: -1005 post: 0 otr: 0")); + web_state(), GetErrorText(web_state(), server_.GetURL("/echo-query?foo"), + "NSURLErrorDomain", /*error_code*/ -1005, + /*is_post*/ false, /*is_otr*/ false))); // Reload the page, which should load without errors. server_responds_with_content_ = true; @@ -120,7 +139,9 @@ web_state()->GetNavigationManager()->Reload(ReloadType::NORMAL, /*check_for_repost=*/false); ASSERT_TRUE(test::WaitForWebViewContainingText( - web_state(), "domain: NSURLErrorDomain code: -1005 post: 0 otr: 0")); + web_state(), GetErrorText(web_state(), server_.GetURL("/echo-query?foo"), + "NSURLErrorDomain", /*error_code*/ -1005, + /*is_post*/ false, /*is_otr*/ false))); } // Sucessfully loads the page, goes back, stops the server, goes forward and @@ -151,7 +172,9 @@ web_state()->GetNavigationManager()->Reload(ReloadType::NORMAL, /*check_for_repost=*/false); ASSERT_TRUE(test::WaitForWebViewContainingText( - web_state(), "domain: NSURLErrorDomain code: -1005 post: 0 otr: 0")); + web_state(), GetErrorText(web_state(), server_.GetURL("/echo-query?foo"), + "NSURLErrorDomain", /*error_code*/ -1005, + /*is_post*/ false, /*is_otr*/ false))); #endif // TARGET_IPHONE_SIMULATOR } @@ -166,7 +189,9 @@ // Second page fails to load. test::LoadUrl(web_state(), server_.GetURL("/close-socket")); ASSERT_TRUE(test::WaitForWebViewContainingText( - web_state(), "domain: NSURLErrorDomain code: -1005 post: 0 otr: 0")); + web_state(), GetErrorText(web_state(), server_.GetURL("/close-socket"), + "NSURLErrorDomain", /*error_code*/ -1005, + /*is_post*/ false, /*is_otr*/ false))); // Going back should sucessfully load the first page. web_state()->GetNavigationManager()->GoBack(); @@ -175,7 +200,9 @@ // Going forward fails the load. web_state()->GetNavigationManager()->GoForward(); ASSERT_TRUE(test::WaitForWebViewContainingText( - web_state(), "domain: NSURLErrorDomain code: -1005 post: 0 otr: 0")); + web_state(), GetErrorText(web_state(), server_.GetURL("/close-socket"), + "NSURLErrorDomain", /*error_code*/ -1005, + /*is_post*/ false, /*is_otr*/ false))); } // Sucessfully loads the page, then loads the URL which fails to load, then @@ -195,7 +222,9 @@ // Second page fails to load. test::LoadUrl(web_state(), server_.GetURL("/close-socket")); ASSERT_TRUE(test::WaitForWebViewContainingText( - web_state(), "domain: NSURLErrorDomain code: -1005 post: 0 otr: 0")); + web_state(), GetErrorText(web_state(), server_.GetURL("/close-socket"), + "NSURLErrorDomain", /*error_code*/ -1005, + /*is_post*/ false, /*is_otr*/ false))); // Going back should sucessfully load the first page. ExecuteJavaScript(@"window.history.back();"); @@ -204,7 +233,9 @@ // Going forward fails the load. ExecuteJavaScript(@"window.history.forward();"); ASSERT_TRUE(test::WaitForWebViewContainingText( - web_state(), "domain: NSURLErrorDomain code: -1005 post: 0 otr: 0")); + web_state(), GetErrorText(web_state(), server_.GetURL("/close-socket"), + "NSURLErrorDomain", /*error_code*/ -1005, + /*is_post*/ false, /*is_otr*/ false))); } // Loads the URL which redirects to unresponsive server. @@ -212,8 +243,11 @@ // No response leads to -1005 error code. server_responds_with_content_ = false; test::LoadUrl(web_state(), server_.GetURL("/server-redirect?echo-query")); + // Error is displayed after the resdirection to /echo-query. ASSERT_TRUE(test::WaitForWebViewContainingText( - web_state(), "domain: NSURLErrorDomain code: -1005 post: 0 otr: 0")); + web_state(), GetErrorText(web_state(), server_.GetURL("/echo-query"), + "NSURLErrorDomain", /*error_code*/ -1005, + /*is_post*/ false, /*is_otr*/ false))); } // Loads the page with iframe, and that iframe fails to load. There should be no @@ -241,7 +275,10 @@ // loading the page. TODO(crbug.com/705819): Remove this call. web_state->GetNavigationManager()->LoadIfNecessary(); ASSERT_TRUE(test::WaitForWebViewContainingText( - web_state.get(), "domain: NSURLErrorDomain code: -1005 post: 0 otr: 1")); + web_state.get(), + GetErrorText(web_state.get(), server_.GetURL("/echo-query?foo"), + "NSURLErrorDomain", /*error_code*/ -1005, + /*is_post*/ false, /*is_otr*/ true))); } // Loads the URL with form which fails to submit. @@ -253,8 +290,11 @@ // Submit the form using JavaScript. ExecuteJavaScript(@"document.getElementById('form').submit();"); + // Error is displayed after the form submission navigation. ASSERT_TRUE(test::WaitForWebViewContainingText( - web_state(), "domain: NSURLErrorDomain code: -1005 post: 1 otr: 0")); + web_state(), GetErrorText(web_state(), server_.GetURL("/close-socket"), + "NSURLErrorDomain", /*error_code*/ -1005, + /*is_post*/ true, /*is_otr*/ false))); } INSTANTIATE_TEST_SUITE_P(ProgrammaticErrorPageTest,
diff --git a/ios/web/web_state/js/find_in_page_unittest.mm b/ios/web/web_state/js/find_in_page_js_unittest.mm similarity index 95% rename from ios/web/web_state/js/find_in_page_unittest.mm rename to ios/web/web_state/js/find_in_page_js_unittest.mm index b5932d7..a1bd7837 100644 --- a/ios/web/web_state/js/find_in_page_unittest.mm +++ b/ios/web/web_state/js/find_in_page_js_unittest.mm
@@ -35,7 +35,7 @@ // Calls FindInPage Javascript handlers and checks that return values are // correct. -class FindInPageWebJsTest : public WebTestWithWebState { +class FindInPageJsTest : public WebTestWithWebState { protected: // Returns WebFramesManager instance. WebFramesManager* frames_manager() { @@ -47,7 +47,7 @@ // Tests that FindInPage searches in main frame containing a match and responds // with 1 match. -TEST_F(FindInPageWebJsTest, FindText) { +TEST_F(FindInPageJsTest, FindText) { ASSERT_TRUE(LoadHtml("<span>foo</span>")); WaitForCondition(^{ return frames_manager()->GetAllWebFrames().size() == 1; @@ -74,7 +74,7 @@ // Tests that FindInPage searches in main frame for text that exists but is // hidden and responds with 0 matches. -TEST_F(FindInPageWebJsTest, FindTextNoResults) { +TEST_F(FindInPageJsTest, FindTextNoResults) { ASSERT_TRUE(LoadHtml("<span style='display:none'>foo</span>")); WaitForCondition(^{ return frames_manager()->GetAllWebFrames().size() == 1; @@ -99,7 +99,7 @@ // Tests that FindInPage searches in child iframe and asserts that a result was // found. -TEST_F(FindInPageWebJsTest, FindIFrameText) { +TEST_F(FindInPageJsTest, FindIFrameText) { // TODO(crbug.com/872818): Remove if check after deprecate iOS 10. // WebFrame will not have a key on iOS 10, so function cannot be called. if (@available(iOS 11.0, *)) { @@ -138,7 +138,7 @@ } // Tests that FindInPage works when searching for white space. -TEST_F(FindInPageWebJsTest, FindWhiteSpace) { +TEST_F(FindInPageJsTest, FindWhiteSpace) { ASSERT_TRUE(LoadHtml("<span> </span>")); WaitForCondition(^{ return frames_manager()->GetAllWebFrames().size() == 1; @@ -162,7 +162,7 @@ } // Tests that FindInPage works when match results cover multiple HTML Nodes. -TEST_F(FindInPageWebJsTest, FindAcrossMultipleNodes) { +TEST_F(FindInPageJsTest, FindAcrossMultipleNodes) { ASSERT_TRUE( LoadHtml("<p>xx1<span>2</span>3<a>4512345xxx12</a>34<a>5xxx12345xx</p>")); WaitForCondition(^{
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm index d4d1485..953ac872 100644 --- a/ios/web/web_state/ui/crw_web_controller.mm +++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -1805,11 +1805,12 @@ } else { error = web::NetErrorFromError(error); } - + NSString* failing_url = error.userInfo[NSURLErrorFailingURLStringErrorKey]; NSString* errorHTML = nil; web::GetWebClient()->PrepareErrorPage( - error, context->IsPost(), - _webStateImpl->GetBrowserState()->IsOffTheRecord(), &errorHTML); + _webStateImpl, GURL(base::SysNSStringToUTF8(failing_url)), error, + context->IsPost(), _webStateImpl->GetBrowserState()->IsOffTheRecord(), + &errorHTML); WKNavigation* navigation = [_webView loadHTMLString:errorHTML
diff --git a/ios/web/web_state/ui/crw_web_controller_unittest.mm b/ios/web/web_state/ui/crw_web_controller_unittest.mm index 3c0adc5..e4c14da 100644 --- a/ios/web/web_state/ui/crw_web_controller_unittest.mm +++ b/ios/web/web_state/ui/crw_web_controller_unittest.mm
@@ -156,7 +156,8 @@ void SetUp() override { ProgrammaticTestMixin::SetUp(); WebTestWithWebController::SetUp(); - mock_web_view_ = CreateMockWebView(); + fake_wk_list_ = [[CRWFakeBackForwardList alloc] init]; + mock_web_view_ = CreateMockWebView(fake_wk_list_); scroll_view_ = [[UIScrollView alloc] init]; SetWebViewURL(@(kTestURLString)); [[[mock_web_view_ stub] andReturn:scroll_view_] scrollView]; @@ -192,36 +193,37 @@ } // Creates WebView mock. - UIView* CreateMockWebView() { + UIView* CreateMockWebView(CRWFakeBackForwardList* wk_list) { id result = [OCMockObject mockForClass:[WKWebView class]]; - [[result stub] serverTrust]; - mock_wk_list_ = [[CRWFakeBackForwardList alloc] init]; - OCMStub([result backForwardList]).andReturn(mock_wk_list_); + OCMStub([result backForwardList]).andReturn(wk_list); // This uses |andDo| rather than |andReturn| since the URL it returns needs // to change when |test_url_| changes. OCMStub([result URL]).andDo(^(NSInvocation* invocation) { [invocation setReturnValue:&test_url_]; }); - [[result stub] setNavigationDelegate:[OCMArg checkWithBlock:^(id delegate) { - navigation_delegate_ = delegate; - return YES; - }]]; - [[result stub] setUIDelegate:OCMOCK_ANY]; - [[result stub] frame]; - [[result stub] setCustomUserAgent:OCMOCK_ANY]; - [[result stub] customUserAgent]; - [static_cast<WKWebView*>([result stub]) loadRequest:OCMOCK_ANY]; - [[result stub] setFrame:GetExpectedWebViewFrame()]; - [[result stub] addObserver:web_controller() - forKeyPath:OCMOCK_ANY - options:0 - context:nullptr]; - [[result stub] removeObserver:web_controller() forKeyPath:OCMOCK_ANY]; - [[result stub] evaluateJavaScript:OCMOCK_ANY completionHandler:OCMOCK_ANY]; - [[result stub] setAllowsBackForwardNavigationGestures:YES]; - [[result stub] setAllowsBackForwardNavigationGestures:NO]; - [[result stub] isLoading]; + OCMStub( + [result setNavigationDelegate:[OCMArg checkWithBlock:^(id delegate) { + navigation_delegate_ = delegate; + return YES; + }]]); + OCMStub([result serverTrust]); + OCMStub([result setUIDelegate:OCMOCK_ANY]); + OCMStub([result frame]).andReturn(UIScreen.mainScreen.bounds); + OCMStub([result setCustomUserAgent:OCMOCK_ANY]); + OCMStub([result customUserAgent]); + OCMStub([static_cast<WKWebView*>(result) loadRequest:OCMOCK_ANY]); + OCMStub([result setFrame:GetExpectedWebViewFrame()]); + OCMStub([result addObserver:web_controller() + forKeyPath:OCMOCK_ANY + options:0 + context:nullptr]); + OCMStub([result removeObserver:web_controller() forKeyPath:OCMOCK_ANY]); + OCMStub([result evaluateJavaScript:OCMOCK_ANY + completionHandler:OCMOCK_ANY]); + OCMStub([result setAllowsBackForwardNavigationGestures:NO]); + OCMStub([result setAllowsBackForwardNavigationGestures:YES]); + OCMStub([result isLoading]); return result; } @@ -229,7 +231,7 @@ __weak id<WKNavigationDelegate> navigation_delegate_; UIScrollView* scroll_view_; id mock_web_view_; - CRWFakeBackForwardList* mock_wk_list_; + CRWFakeBackForwardList* fake_wk_list_; NSURL* test_url_; }; @@ -743,7 +745,7 @@ // Simulate a page load to trigger a URL update. [navigation_delegate_ webView:mock_web_view_ didStartProvisionalNavigation:nil]; - [mock_wk_list_ setCurrentURL:@"http://chromium.test"]; + [fake_wk_list_ setCurrentURL:@"http://chromium.test"]; [navigation_delegate_ webView:mock_web_view_ didCommitNavigation:nil]; URLVerificationTrustLevel trust_level = kNone;
diff --git a/ios/web_view/internal/web_view_web_main_parts.mm b/ios/web_view/internal/web_view_web_main_parts.mm index f829c2f..a5a901a1 100644 --- a/ios/web_view/internal/web_view_web_main_parts.mm +++ b/ios/web_view/internal/web_view_web_main_parts.mm
@@ -58,9 +58,7 @@ switches::kSyncUSSAutofillWalletData.name}, ","); std::string disabled_features = base::JoinString( - {// TODO(crbug.com/873790): Remove after supporting user consents. - switches::kSyncUserConsentEvents.name, - // Allows form_structure.cc to run heuristics on single field forms. + {// Allows form_structure.cc to run heuristics on single field forms. // This is needed to find autofillable password forms with less than 3 // fields in CWVAutofillControllerDelegate's // |autofillController:didScanForAutofillableForms:| method.
diff --git a/net/base/directory_lister.cc b/net/base/directory_lister.cc index c898aaa..bdde8379 100644 --- a/net/base/directory_lister.cc +++ b/net/base/directory_lister.cc
@@ -83,7 +83,7 @@ base::PostTaskWithTraits( FROM_HERE, {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, - base::Bind(&Core::Start, core_)); + base::BindOnce(&Core::Start, core_)); } void DirectoryLister::Cancel() {
diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc index 2152392..4fa8571 100644 --- a/net/cookies/cookie_monster.cc +++ b/net/cookies/cookie_monster.cc
@@ -419,7 +419,7 @@ void CookieMonster::SetCanonicalCookieAsync( std::unique_ptr<CanonicalCookie> cookie, - bool secure_source, + std::string source_scheme, bool modify_http_only, SetCookiesCallback callback) { DCHECK(cookie->IsCanonical()); @@ -431,7 +431,7 @@ // the callback on |*this|, so the callback will not outlive // the object. &CookieMonster::SetCanonicalCookie, base::Unretained(this), - std::move(cookie), secure_source, modify_http_only, + std::move(cookie), std::move(source_scheme), modify_http_only, std::move(callback)), domain); } @@ -728,8 +728,8 @@ } DCHECK(cc); - SetCanonicalCookie(std::move(cc), url.SchemeIsCryptographic(), - !options.exclude_httponly(), std::move(callback)); + SetCanonicalCookie(std::move(cc), url.scheme(), !options.exclude_httponly(), + std::move(callback)); } void CookieMonster::DeleteCanonicalCookie(const CanonicalCookie& cookie, @@ -1202,11 +1202,13 @@ } void CookieMonster::SetCanonicalCookie(std::unique_ptr<CanonicalCookie> cc, - bool secure_source, + std::string source_scheme, bool modify_http_only, SetCookiesCallback callback) { DCHECK(thread_checker_.CalledOnValidThread()); + std::string scheme_lower = base::ToLowerASCII(source_scheme); + bool secure_source = GURL::SchemeIsCryptographic(scheme_lower); if ((cc->IsSecure() && !secure_source)) { MaybeRunCookieCallback( std::move(callback), @@ -1221,6 +1223,13 @@ return; } + if (!IsCookieableScheme(scheme_lower)) { + MaybeRunCookieCallback( + std::move(callback), + CanonicalCookie::CookieInclusionStatus::EXCLUDE_NONCOOKIEABLE_SCHEME); + return; + } + const std::string key(GetKey(cc->Domain())); base::Time creation_date = cc->CreationDate();
diff --git a/net/cookies/cookie_monster.h b/net/cookies/cookie_monster.h index 680df39..b9aeaaf 100644 --- a/net/cookies/cookie_monster.h +++ b/net/cookies/cookie_monster.h
@@ -161,7 +161,7 @@ const CookieOptions& options, SetCookiesCallback callback) override; void SetCanonicalCookieAsync(std::unique_ptr<CanonicalCookie> cookie, - bool secure_source, + std::string source_scheme, bool modify_http_only, SetCookiesCallback callback) override; void GetCookieListWithOptionsAsync(const GURL& url, @@ -364,7 +364,7 @@ // |modify_http_only| indicates if this setting operation is allowed // to affect http_only cookies. void SetCanonicalCookie(std::unique_ptr<CanonicalCookie> cookie, - bool secure_source, + std::string source_scheme, bool can_modify_httponly, SetCookiesCallback callback);
diff --git a/net/cookies/cookie_monster_unittest.cc b/net/cookies/cookie_monster_unittest.cc index e20ef24..b4c354c 100644 --- a/net/cookies/cookie_monster_unittest.cc +++ b/net/cookies/cookie_monster_unittest.cc
@@ -188,7 +188,7 @@ cm->SetCanonicalCookieAsync( CanonicalCookie::Create(url, cookie_line, creation_time, CookieOptions()), - url.SchemeIsCryptographic(), /* modify_httponly = */ false, + url.scheme(), /* modify_httponly = */ false, base::BindOnce(&ResultSavingCookieCallback< CanonicalCookie::CookieInclusionStatus>::Run, base::Unretained(&callback))); @@ -246,21 +246,21 @@ "dom_1", "A", ".harvard.edu", "/", base::Time(), base::Time(), base::Time(), false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /*secure_source*/, true /*modify_httponly*/)); + "http", true /*modify_httponly*/)); EXPECT_TRUE(this->SetCanonicalCookie( cm, std::make_unique<CanonicalCookie>( "dom_2", "B", ".math.harvard.edu", "/", base::Time(), base::Time(), base::Time(), false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /*secure_source*/, true /*modify_httponly*/)); + "http", true /*modify_httponly*/)); EXPECT_TRUE(this->SetCanonicalCookie( cm, std::make_unique<CanonicalCookie>( "dom_3", "C", ".bourbaki.math.harvard.edu", "/", base::Time(), base::Time(), base::Time(), false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /*secure_source*/, true /*modify_httponly*/)); + "http", true /*modify_httponly*/)); // Host cookies EXPECT_TRUE(this->SetCanonicalCookie( @@ -269,21 +269,21 @@ "host_1", "A", url_top_level_domain_plus_1, "/", base::Time(), base::Time(), base::Time(), false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /*secure_source*/, true /*modify_httponly*/)); + "http", true /*modify_httponly*/)); EXPECT_TRUE(this->SetCanonicalCookie( cm, std::make_unique<CanonicalCookie>( "host_2", "B", url_top_level_domain_plus_2, "/", base::Time(), base::Time(), base::Time(), false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /*secure_source*/, true /*modify_httponly*/)); + "http", true /*modify_httponly*/)); EXPECT_TRUE(this->SetCanonicalCookie( cm, std::make_unique<CanonicalCookie>( "host_3", "C", url_top_level_domain_plus_3, "/", base::Time(), base::Time(), base::Time(), false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /*secure_source*/, true /*modify_httponly*/)); + "http", true /*modify_httponly*/)); // http_only cookie EXPECT_TRUE(this->SetCanonicalCookie( @@ -292,7 +292,7 @@ "httpo_check", "A", url_top_level_domain_plus_2, "/", base::Time(), base::Time(), base::Time(), false, true, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /*secure_source*/, true /*modify_httponly*/)); + "http", true /*modify_httponly*/)); // same-site cookie EXPECT_TRUE(this->SetCanonicalCookie( @@ -301,7 +301,7 @@ "firstp_check", "A", url_top_level_domain_plus_2, "/", base::Time(), base::Time(), base::Time(), false, false, CookieSameSite::STRICT_MODE, COOKIE_PRIORITY_DEFAULT), - false /*secure_source*/, true /*modify_httponly*/)); + "http", true /*modify_httponly*/)); // Secure cookies EXPECT_TRUE(this->SetCanonicalCookie( @@ -310,7 +310,7 @@ "sec_dom", "A", ".math.harvard.edu", "/", base::Time(), base::Time(), base::Time(), true, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); EXPECT_TRUE(this->SetCanonicalCookie( cm, @@ -318,7 +318,7 @@ "sec_host", "B", url_top_level_domain_plus_2, "/", base::Time(), base::Time(), base::Time(), true, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); // Domain path cookies EXPECT_TRUE(this->SetCanonicalCookie( @@ -327,14 +327,14 @@ "dom_path_1", "A", ".math.harvard.edu", "/dir1", base::Time(), base::Time(), base::Time(), false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /*secure_source*/, true /*modify_httponly*/)); + "http", true /*modify_httponly*/)); EXPECT_TRUE(this->SetCanonicalCookie( cm, std::make_unique<CanonicalCookie>( "dom_path_2", "B", ".math.harvard.edu", "/dir1/dir2", base::Time(), base::Time(), base::Time(), false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /*secure_source*/, true /*modify_httponly*/)); + "http", true /*modify_httponly*/)); // Host path cookies EXPECT_TRUE(this->SetCanonicalCookie( @@ -343,7 +343,7 @@ "host_path_1", "A", url_top_level_domain_plus_2, "/dir1", base::Time(), base::Time(), base::Time(), false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /*secure_source*/, true /*modify_httponly*/)); + "http", true /*modify_httponly*/)); EXPECT_TRUE(this->SetCanonicalCookie( cm, @@ -351,7 +351,7 @@ "host_path_2", "B", url_top_level_domain_plus_2, "/dir1/dir2", base::Time(), base::Time(), base::Time(), false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /*secure_source*/, true /*modify_httponly*/)); + "http", true /*modify_httponly*/)); EXPECT_EQ(14U, this->GetAllCookies(cm).size()); } @@ -1556,16 +1556,42 @@ GURL foo_url("foo://host/path"); GURL http_url("http://host/path"); + base::Time now = base::Time::Now(); EXPECT_EQ(CanonicalCookie::CookieInclusionStatus::INCLUDE, SetCookieReturnStatus(cm.get(), http_url, "x=1")); + EXPECT_EQ(CanonicalCookie::CookieInclusionStatus::INCLUDE, + SetCanonicalCookieReturnStatus( + cm.get(), + CanonicalCookie::Create(http_url, "y=1", now, CookieOptions()), + "http", false /*modify_httponly*/)); + EXPECT_EQ( CanonicalCookie::CookieInclusionStatus::EXCLUDE_NONCOOKIEABLE_SCHEME, SetCookieReturnStatus(cm.get(), foo_url, "x=1")); + EXPECT_EQ( + CanonicalCookie::CookieInclusionStatus::EXCLUDE_NONCOOKIEABLE_SCHEME, + SetCanonicalCookieReturnStatus( + cm.get(), + CanonicalCookie::Create(foo_url, "y=1", now, CookieOptions()), "foo", + false /*modify_httponly*/)); + EXPECT_EQ(CanonicalCookie::CookieInclusionStatus::INCLUDE, SetCookieReturnStatus(cm_foo.get(), foo_url, "x=1")); + EXPECT_EQ(CanonicalCookie::CookieInclusionStatus::INCLUDE, + SetCanonicalCookieReturnStatus( + cm_foo.get(), + CanonicalCookie::Create(foo_url, "y=1", now, CookieOptions()), + "foo", false /*modify_httponly*/)); + EXPECT_EQ( CanonicalCookie::CookieInclusionStatus::EXCLUDE_NONCOOKIEABLE_SCHEME, SetCookieReturnStatus(cm_foo.get(), http_url, "x=1")); + EXPECT_EQ( + CanonicalCookie::CookieInclusionStatus::EXCLUDE_NONCOOKIEABLE_SCHEME, + SetCanonicalCookieReturnStatus( + cm_foo.get(), + CanonicalCookie::Create(http_url, "y=1", now, CookieOptions()), + "http", false /*modify_httponly*/)); } TEST_F(CookieMonsterTest, GetAllCookiesForURL) { @@ -2067,7 +2093,7 @@ cookie.name, cookie.value, cookie.domain, cookie.path, base::Time(), cookie.expiration_time, base::Time(), cookie.secure, cookie.http_only, cookie.same_site, cookie.priority), - cookie.url.SchemeIsCryptographic(), true /*modify_httponly*/)); + cookie.url.scheme(), true /*modify_httponly*/)); } EXPECT_TRUE(FindAndDeleteCookie(cmout.get(), @@ -2659,7 +2685,7 @@ "a", "b", "a.url", "/", base::Time(), base::Time::Now() + base::TimeDelta::FromMinutes(59), base::Time(), false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /*secure_source*/, true /*modify_httponly*/)); + "http", true /*modify_httponly*/)); std::unique_ptr<base::HistogramSamples> samples2( expired_histogram->SnapshotSamples()); @@ -3275,7 +3301,7 @@ cm.SetCanonicalCookieAsync( CanonicalCookie::Create(GURL("http://a.com/"), "A=B", base::Time::Now(), CookieOptions()), - false /* secure_source */, false /* modify_httponly */, + "http", false /* modify_httponly */, base::BindOnce(&ResultSavingCookieCallback< CanonicalCookie::CookieInclusionStatus>::Run, base::Unretained(&callback_set))); @@ -3359,8 +3385,7 @@ ResultSavingCookieCallback<CanonicalCookie::CookieInclusionStatus> set_callback_1; cm.SetCanonicalCookieAsync( - std::move(cookie), url.SchemeIsCryptographic(), - !options.exclude_httponly(), + std::move(cookie), url.scheme(), !options.exclude_httponly(), base::BindOnce(&ResultSavingCookieCallback< CanonicalCookie::CookieInclusionStatus>::Run, base::Unretained(&set_callback_1))); @@ -3371,8 +3396,7 @@ ResultSavingCookieCallback<CanonicalCookie::CookieInclusionStatus> set_callback_2; cm.SetCanonicalCookieAsync( - std::move(cookie), url.SchemeIsCryptographic(), - !options.exclude_httponly(), + std::move(cookie), url.scheme(), !options.exclude_httponly(), base::BindOnce(&ResultSavingCookieCallback< CanonicalCookie::CookieInclusionStatus>::Run, base::Unretained(&set_callback_2)));
diff --git a/net/cookies/cookie_store.h b/net/cookies/cookie_store.h index 086115f3..fb89b5d9 100644 --- a/net/cookies/cookie_store.h +++ b/net/cookies/cookie_store.h
@@ -65,13 +65,12 @@ SetCookiesCallback callback) = 0; // Set the cookie on the cookie store. |cookie.IsCanonical()| must - // be true. |secure_source| indicates if the source of the setting - // may be considered secure (if from a URL, the scheme is - // cryptographic), and |modify_http_only| indicates if the source of - // the setting may modify http_only cookies. The current time will - // be used in place of a null creation time. + // be true. |source_scheme| denotes the scheme of the resource setting this, + // and |modify_http_only| indicates if the source of the setting may modify + // http_only cookies. The current time will be used in place of a null + // creation time. virtual void SetCanonicalCookieAsync(std::unique_ptr<CanonicalCookie> cookie, - bool secure_source, + std::string source_scheme, bool modify_http_only, SetCookiesCallback callback) = 0;
diff --git a/net/cookies/cookie_store_test_helpers.cc b/net/cookies/cookie_store_test_helpers.cc index 022b73a..047082f 100644 --- a/net/cookies/cookie_store_test_helpers.cc +++ b/net/cookies/cookie_store_test_helpers.cc
@@ -106,12 +106,12 @@ void DelayedCookieMonster::SetCanonicalCookieAsync( std::unique_ptr<CanonicalCookie> cookie, - bool secure_source, + std::string source_scheme, bool modify_http_only, SetCookiesCallback callback) { did_run_ = false; cookie_monster_->SetCanonicalCookieAsync( - std::move(cookie), secure_source, modify_http_only, + std::move(cookie), std::move(source_scheme), modify_http_only, base::Bind(&DelayedCookieMonster::SetCookiesInternalCallback, base::Unretained(this))); DCHECK_EQ(did_run_, true);
diff --git a/net/cookies/cookie_store_test_helpers.h b/net/cookies/cookie_store_test_helpers.h index eb7934cee..85935fa 100644 --- a/net/cookies/cookie_store_test_helpers.h +++ b/net/cookies/cookie_store_test_helpers.h
@@ -58,7 +58,7 @@ CookieMonster::SetCookiesCallback callback) override; void SetCanonicalCookieAsync(std::unique_ptr<CanonicalCookie> cookie, - bool secure_source, + std::string source_scheme, bool modify_http_only, SetCookiesCallback callback) override;
diff --git a/net/cookies/cookie_store_unittest.h b/net/cookies/cookie_store_unittest.h index d546f45..34f8f23 100644 --- a/net/cookies/cookie_store_unittest.h +++ b/net/cookies/cookie_store_unittest.h
@@ -211,12 +211,12 @@ bool SetCanonicalCookie(CookieStore* cs, std::unique_ptr<CanonicalCookie> cookie, - bool secure_source, + std::string source_scheme, bool can_modify_httponly) { DCHECK(cs); ResultSavingCookieCallback<CanonicalCookie::CookieInclusionStatus> callback; cs->SetCanonicalCookieAsync( - std::move(cookie), secure_source, can_modify_httponly, + std::move(cookie), std::move(source_scheme), can_modify_httponly, base::BindOnce(&ResultSavingCookieCallback< CanonicalCookie::CookieInclusionStatus>::Run, base::Unretained(&callback))); @@ -266,12 +266,12 @@ CanonicalCookie::CookieInclusionStatus SetCanonicalCookieReturnStatus( CookieStore* cs, std::unique_ptr<CanonicalCookie> cookie, - bool secure_source, + std::string source_scheme, bool can_modify_httponly) { DCHECK(cs); ResultSavingCookieCallback<CanonicalCookie::CookieInclusionStatus> callback; cs->SetCanonicalCookieAsync( - std::move(cookie), secure_source, can_modify_httponly, + std::move(cookie), std::move(source_scheme), can_modify_httponly, base::BindOnce(&ResultSavingCookieCallback< CanonicalCookie::CookieInclusionStatus>::Run, base::Unretained(&callback))); @@ -420,8 +420,8 @@ one_hour_from_now, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); ASSERT_TRUE(cc); - EXPECT_TRUE(this->SetCanonicalCookie( - cs, std::move(cc), true /*secure_source*/, true /*modify_httponly*/)); + EXPECT_TRUE(this->SetCanonicalCookie(cs, std::move(cc), "https", + true /*modify_httponly*/)); // Note that for the creation time to be set exactly, without modification, // it must be different from the one set by the line above. @@ -430,8 +430,8 @@ two_hours_ago, base::Time(), one_hour_ago, false, true, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT); ASSERT_TRUE(cc); - EXPECT_TRUE(this->SetCanonicalCookie( - cs, std::move(cc), true /*secure_source*/, true /*modify_httponly*/)); + EXPECT_TRUE(this->SetCanonicalCookie(cs, std::move(cc), "https", + true /*modify_httponly*/)); // Because of strict secure cookies, it should not be possible to create // a secure cookie with an HTTP URL. @@ -447,8 +447,8 @@ base::Time(), base::Time(), base::Time(), true, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT); ASSERT_TRUE(cc); - EXPECT_TRUE(this->SetCanonicalCookie( - cs, std::move(cc), true /*secure_source*/, true /*modify_httponly*/)); + EXPECT_TRUE(this->SetCanonicalCookie(cs, std::move(cc), "https", + true /*modify_httponly*/)); // Get all the cookies for a given URL, regardless of properties. This 'get()' // operation shouldn't update the access time, as the test checks that the @@ -552,7 +552,7 @@ "A", "B", foo_foo_host, "/foo", one_hour_ago, one_hour_from_now, base::Time(), false /* secure */, false /* httponly */, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /* secure_source */, true)); + "http", true)); // Note that for the creation time to be set exactly, without modification, // it must be different from the one set by the line above. EXPECT_TRUE(this->SetCanonicalCookie( @@ -561,7 +561,7 @@ "C", "D", "." + foo_bar_domain, "/bar", two_hours_ago, base::Time(), one_hour_ago, false, true, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /* secure_source */, true)); + "http", true)); // A secure source is required for creating secure cookies. EXPECT_EQ(CanonicalCookie::CookieInclusionStatus::EXCLUDE_SECURE_ONLY, @@ -571,7 +571,7 @@ "E", "F", http_foo_host, "/", base::Time(), base::Time(), base::Time(), true, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /* secure_source */, true)); + "http", true)); // A secure source is also required for overwriting secure cookies. Writing // a secure cookie then overwriting it from a non-secure source should fail. @@ -581,7 +581,7 @@ "E", "F", http_foo_host, "/", base::Time(), base::Time(), base::Time(), true /* secure */, false /* httponly */, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - true /* secure_source */, true /* modify_http_only */)); + "https", true /* modify_http_only */)); EXPECT_EQ(CanonicalCookie::CookieInclusionStatus::EXCLUDE_SECURE_ONLY, this->SetCanonicalCookieReturnStatus( @@ -590,7 +590,7 @@ "E", "F", http_foo_host, "/", base::Time(), base::Time(), base::Time(), true /* secure */, false /* httponly */, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /* secure_source */, true /* modify_http_only */)); + "http", true /* modify_http_only */)); if (TypeParam::supports_http_only) { // Permission to modify http only cookies is required to create an @@ -603,7 +603,7 @@ "G", "H", http_foo_host, "/unique", base::Time(), base::Time(), base::Time(), false /* secure */, true /* httponly */, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /* secure_source */, false /* modify_http_only */)); + "http", false /* modify_http_only */)); // Permission to modify httponly cookies is also required to overwrite // an httponly cookie. @@ -613,7 +613,7 @@ "G", "H", http_foo_host, "/unique", base::Time(), base::Time(), base::Time(), false /* secure */, true /* httponly */, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /* secure_source */, true /* modify_http_only */)); + "http", true /* modify_http_only */)); EXPECT_EQ( CanonicalCookie::CookieInclusionStatus::EXCLUDE_HTTP_ONLY, @@ -623,7 +623,7 @@ "G", "H", http_foo_host, "/unique", base::Time(), base::Time(), base::Time(), false /* secure */, true /* httponly */, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /* secure_source */, false /* modify_http_only */)); + "http", false /* modify_http_only */)); } else { // Leave store in same state as if the above tests had been run. EXPECT_TRUE(this->SetCanonicalCookie( @@ -632,7 +632,7 @@ "G", "H", http_foo_host, "/unique", base::Time(), base::Time(), base::Time(), false /* secure */, true /* httponly */, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT), - false /* secure_source */, true /* modify_http_only */)); + "http", true /* modify_http_only */)); } // Get all the cookies for a given URL, regardless of properties. This 'get()' @@ -719,28 +719,28 @@ "A", "B", http_domain, "/", base::Time::Now(), base::Time(), base::Time(), true, false, CookieSameSite::NO_RESTRICTION, COOKIE_PRIORITY_DEFAULT), - false /*secure_source*/, true /*modify_httponly*/)); + "http", true /*modify_httponly*/)); EXPECT_TRUE(this->SetCanonicalCookie( cs, std::make_unique<CanonicalCookie>( "A", "B", http_domain, "/", base::Time::Now(), base::Time(), base::Time(), true, false, CookieSameSite::NO_RESTRICTION, COOKIE_PRIORITY_DEFAULT), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); EXPECT_TRUE(this->SetCanonicalCookie( cs, std::make_unique<CanonicalCookie>( "A", "B", http_domain, "/", base::Time::Now(), base::Time(), base::Time(), false, false, CookieSameSite::NO_RESTRICTION, COOKIE_PRIORITY_DEFAULT), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); EXPECT_TRUE(this->SetCanonicalCookie( cs, std::make_unique<CanonicalCookie>( "A", "B", http_domain, "/", base::Time::Now(), base::Time(), base::Time(), false, false, CookieSameSite::NO_RESTRICTION, COOKIE_PRIORITY_DEFAULT), - false /*secure_source*/, true /*modify_httponly*/)); + "http", true /*modify_httponly*/)); } // The iOS networking stack uses the iOS cookie parser, which we do not
diff --git a/net/disk_cache/blockfile/file_ios.cc b/net/disk_cache/blockfile/file_ios.cc index a9da7f1..914899b 100644 --- a/net/disk_cache/blockfile/file_ios.cc +++ b/net/disk_cache/blockfile/file_ios.cc
@@ -124,7 +124,7 @@ base::PostTaskWithTraits( FROM_HERE, {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, - base::Bind(&FileBackgroundIO::Read, operation.get())); + base::BindOnce(&FileBackgroundIO::Read, operation.get())); OnOperationPosted(operation.get()); } @@ -138,7 +138,7 @@ base::PostTaskWithTraits( FROM_HERE, {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, - base::Bind(&FileBackgroundIO::Write, operation.get())); + base::BindOnce(&FileBackgroundIO::Write, operation.get())); OnOperationPosted(operation.get()); }
diff --git a/net/disk_cache/cache_util.cc b/net/disk_cache/cache_util.cc index b78c49e..173dc9d 100644 --- a/net/disk_cache/cache_util.cc +++ b/net/disk_cache/cache_util.cc
@@ -146,7 +146,7 @@ base::PostTaskWithTraits(FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, - base::Bind(&CleanupCallback, path, name_str)); + base::BindOnce(&CleanupCallback, path, name_str)); return true; }
diff --git a/net/dns/dns_test_util.cc b/net/dns/dns_test_util.cc index 285a2d5..701d8d5 100644 --- a/net/dns/dns_test_util.cc +++ b/net/dns/dns_test_util.cc
@@ -191,6 +191,7 @@ hostname_(hostname), qtype_(qtype), callback_(std::move(callback)), + secure_(false), started_(false), delayed_(false) { // Find the relevant rule which matches |qtype| and prefix of |hostname|. @@ -200,6 +201,7 @@ (hostname.compare(0, prefix.size(), prefix) == 0)) { const MockDnsClientRule::Result* result = &rules[i].result; result_ = MockDnsClientRule::Result(result->type); + secure_ = result->secure; delayed_ = rules[i].delay; // Generate a DnsResponse when not provided with the rule. @@ -285,15 +287,15 @@ case MockDnsClientRule::NODOMAIN: case MockDnsClientRule::FAIL: std::move(callback_).Run(this, ERR_NAME_NOT_RESOLVED, - result_.response.get()); + result_.response.get(), secure_); break; case MockDnsClientRule::EMPTY: case MockDnsClientRule::OK: case MockDnsClientRule::MALFORMED: - std::move(callback_).Run(this, OK, result_.response.get()); + std::move(callback_).Run(this, OK, result_.response.get(), secure_); break; case MockDnsClientRule::TIMEOUT: - std::move(callback_).Run(this, ERR_DNS_TIMED_OUT, nullptr); + std::move(callback_).Run(this, ERR_DNS_TIMED_OUT, nullptr, secure_); break; } } @@ -305,6 +307,7 @@ const std::string hostname_; const uint16_t qtype_; DnsTransactionFactory::CallbackType callback_; + bool secure_; bool started_; bool delayed_; };
diff --git a/net/dns/dns_test_util.h b/net/dns/dns_test_util.h index 260227a..a72cbfae 100644 --- a/net/dns/dns_test_util.h +++ b/net/dns/dns_test_util.h
@@ -211,6 +211,8 @@ ResultType type; std::unique_ptr<DnsResponse> response; + // Whether the mock result was obtained securely or not. + bool secure = false; }; // If |delay| is true, matching transactions will be delayed until triggered
diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc index 242528e..ea505c84 100644 --- a/net/dns/dns_transaction.cc +++ b/net/dns/dns_transaction.cc
@@ -142,6 +142,10 @@ // Returns the net log bound to the source of the socket. virtual const NetLogWithSource& GetSocketNetLog() const = 0; + // Returns true if a secure transport was used for the attempt. This method + // should be overridden for subclasses using a secure transport. + virtual bool secure() const { return false; } + // Returns the index of the destination server within DnsConfig::nameservers. unsigned server_index() const { return server_index_; } @@ -417,6 +421,7 @@ return (resp != NULL && resp->IsValid()) ? resp : NULL; } const NetLogWithSource& GetSocketNetLog() const override { return net_log_; } + bool secure() const override { return true; } // URLRequest::Delegate overrides @@ -934,12 +939,14 @@ result.attempt ? result.attempt->GetResponse() : NULL; CHECK(result.rv != OK || response != NULL); + bool secure = result.attempt ? result.attempt->secure() : false; + timer_.Stop(); net_log_.EndEventWithNetErrorCode(NetLogEventType::DNS_TRANSACTION, result.rv); - std::move(callback_).Run(this, result.rv, response); + std::move(callback_).Run(this, result.rv, response, secure); } AttemptResult MakeAttempt() {
diff --git a/net/dns/dns_transaction.h b/net/dns/dns_transaction.h index c9ee1514..9576551c 100644 --- a/net/dns/dns_transaction.h +++ b/net/dns/dns_transaction.h
@@ -55,10 +55,12 @@ public: // Called with the response or NULL if no matching response was received. // Note that the |GetDottedName()| of the response may be different than the - // original |hostname| as a result of suffix search. + // original |hostname| as a result of suffix search. |secure| is true if the + // response was obtained using secure DNS. typedef base::OnceCallback<void(DnsTransaction* transaction, int neterror, - const DnsResponse* response)> + const DnsResponse* response, + bool secure)> CallbackType; virtual ~DnsTransactionFactory() {}
diff --git a/net/dns/dns_transaction_unittest.cc b/net/dns/dns_transaction_unittest.cc index 48d7e148d..db3e7c58 100644 --- a/net/dns/dns_transaction_unittest.cc +++ b/net/dns/dns_transaction_unittest.cc
@@ -277,12 +277,14 @@ // If |expected_answer_count| < 0 then it is the expected net error. TransactionHelper(const char* hostname, uint16_t qtype, - int expected_answer_count) + int expected_answer_count, + bool expected_secure) : hostname_(hostname), qtype_(qtype), secure_dns_mode_(SecureDnsMode::AUTOMATIC), response_(nullptr), expected_answer_count_(expected_answer_count), + expected_secure_(expected_secure), cancel_in_callback_(false), completed_(false) {} @@ -316,7 +318,8 @@ void OnTransactionComplete(DnsTransaction* t, int rv, - const DnsResponse* response) { + const DnsResponse* response, + bool secure) { EXPECT_FALSE(completed_); EXPECT_EQ(transaction_.get(), t); @@ -349,6 +352,8 @@ } else { EXPECT_EQ(expected_answer_count_, rv); } + + EXPECT_EQ(expected_secure_, secure); } bool has_completed() const { return completed_; } @@ -382,6 +387,7 @@ std::unique_ptr<DnsTransaction> transaction_; const DnsResponse* response_; int expected_answer_count_; + bool expected_secure_; bool cancel_in_callback_; TestURLRequestContext request_context_; std::unique_ptr<base::RunLoop> transaction_complete_run_loop_; @@ -876,7 +882,8 @@ kT0ResponseDatagram, base::size(kT0ResponseDatagram)); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -891,7 +898,8 @@ kT0ResponseDatagram, base::size(kT0ResponseDatagram), &expected_opt_rdata); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -913,7 +921,8 @@ kT0ResponseDatagram, base::size(kT0ResponseDatagram), &expected_opt_rdata); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -927,9 +936,11 @@ kT1ResponseDatagram, base::size(kT1ResponseDatagram)); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); helper0.StartTransaction(transaction_factory_.get()); - TransactionHelper helper1(kT1HostName, kT1Qtype, kT1RecordCount); + TransactionHelper helper1(kT1HostName, kT1Qtype, kT1RecordCount, + false /* expected_secure */); helper1.StartTransaction(transaction_factory_.get()); base::RunLoop().RunUntilIdle(); @@ -946,9 +957,11 @@ kT1ResponseDatagram, base::size(kT1ResponseDatagram)); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); helper0.StartTransaction(transaction_factory_.get()); - TransactionHelper helper1(kT1HostName, kT1Qtype, kT1RecordCount); + TransactionHelper helper1(kT1HostName, kT1Qtype, kT1RecordCount, + false /* expected_secure */); helper1.StartTransaction(transaction_factory_.get()); helper0.Cancel(); @@ -964,7 +977,8 @@ kT0ResponseDatagram, base::size(kT0ResponseDatagram)); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); helper0.StartTransaction(transaction_factory_.get()); // Destroying the client does not affect running requests. @@ -980,7 +994,8 @@ kT0ResponseDatagram, base::size(kT0ResponseDatagram)); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); helper0.set_cancel_in_callback(); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -1003,7 +1018,8 @@ SYNCHRONOUS); AddSocketData(std::move(data1)); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -1025,7 +1041,8 @@ ASYNC); AddSocketData(std::move(data1)); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -1038,7 +1055,8 @@ kT0ResponseDatagram, base::size(kT0ResponseDatagram)); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -1057,14 +1075,16 @@ AddSocketData(std::move(data)); AddSyncQueryAndRcode(kT0HostName, kT0Qtype, dns_protocol::kRcodeNXDOMAIN); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_NAME_NOT_RESOLVED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_NAME_NOT_RESOLVED, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } TEST_F(DnsTransactionTest, ServerFail) { AddAsyncQueryAndRcode(kT0HostName, kT0Qtype, dns_protocol::kRcodeSERVFAIL); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_SERVER_FAILED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_SERVER_FAILED, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); ASSERT_NE(helper0.response(), nullptr); EXPECT_EQ(helper0.response()->rcode(), dns_protocol::kRcodeSERVFAIL); @@ -1073,7 +1093,8 @@ TEST_F(DnsTransactionTest, NoDomain) { AddAsyncQueryAndRcode(kT0HostName, kT0Qtype, dns_protocol::kRcodeNXDOMAIN); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_NAME_NOT_RESOLVED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_NAME_NOT_RESOLVED, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -1085,7 +1106,8 @@ AddQueryAndTimeout(kT0HostName, kT0Qtype); AddQueryAndTimeout(kT0HostName, kT0Qtype); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_TIMED_OUT); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_TIMED_OUT, + false /* expected_secure */); // Finish when the third attempt times out. EXPECT_FALSE(helper0.Run(transaction_factory_.get())); @@ -1116,8 +1138,10 @@ AddAsyncQueryAndRcode(kT1HostName, kT1Qtype, dns_protocol::kRcodeSERVFAIL); AddAsyncQueryAndRcode(kT1HostName, kT1Qtype, dns_protocol::kRcodeNXDOMAIN); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_NAME_NOT_RESOLVED); - TransactionHelper helper1(kT1HostName, kT1Qtype, ERR_NAME_NOT_RESOLVED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_NAME_NOT_RESOLVED, + false /* expected_secure */); + TransactionHelper helper1(kT1HostName, kT1Qtype, ERR_NAME_NOT_RESOLVED, + false /* expected_secure */); EXPECT_FALSE(helper0.Run(transaction_factory_.get())); FastForwardUntilNoTasksRemain(); @@ -1150,7 +1174,7 @@ dns_protocol::kRcodeNXDOMAIN); TransactionHelper helper0("x.y.z", dns_protocol::kTypeA, - ERR_NAME_NOT_RESOLVED); + ERR_NAME_NOT_RESOLVED, false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); @@ -1186,18 +1210,20 @@ AddAsyncQueryAndRcode("x", dns_protocol::kTypeAAAA, dns_protocol::kRcodeNXDOMAIN); - TransactionHelper helper0("x.y", dns_protocol::kTypeA, ERR_NAME_NOT_RESOLVED); + TransactionHelper helper0("x.y", dns_protocol::kTypeA, ERR_NAME_NOT_RESOLVED, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); // A single-label name. - TransactionHelper helper1("x", dns_protocol::kTypeA, ERR_NAME_NOT_RESOLVED); + TransactionHelper helper1("x", dns_protocol::kTypeA, ERR_NAME_NOT_RESOLVED, + false /* expected_secure */); EXPECT_TRUE(helper1.Run(transaction_factory_.get())); // A fully-qualified name. TransactionHelper helper2("x.", dns_protocol::kTypeAAAA, - ERR_NAME_NOT_RESOLVED); + ERR_NAME_NOT_RESOLVED, false /* expected_secure */); EXPECT_TRUE(helper2.Run(transaction_factory_.get())); } @@ -1208,13 +1234,14 @@ dns_protocol::kRcodeNXDOMAIN); // A fully-qualified name. - TransactionHelper helper0("x.", dns_protocol::kTypeA, ERR_NAME_NOT_RESOLVED); + TransactionHelper helper0("x.", dns_protocol::kTypeA, ERR_NAME_NOT_RESOLVED, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); // A single label name is not even attempted. TransactionHelper helper1("singlelabel", dns_protocol::kTypeA, - ERR_DNS_SEARCH_EMPTY); + ERR_DNS_SEARCH_EMPTY, false /* expected_secure */); helper1.Run(transaction_factory_.get()); EXPECT_TRUE(helper1.has_completed()); @@ -1242,13 +1269,15 @@ dns_protocol::kRcodeNXDOMAIN); TransactionHelper helper0("x.y.z", dns_protocol::kTypeA, - ERR_NAME_NOT_RESOLVED); + ERR_NAME_NOT_RESOLVED, false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); - TransactionHelper helper1("x.y", dns_protocol::kTypeA, ERR_NAME_NOT_RESOLVED); + TransactionHelper helper1("x.y", dns_protocol::kTypeA, ERR_NAME_NOT_RESOLVED, + false /* expected_secure */); EXPECT_TRUE(helper1.Run(transaction_factory_.get())); - TransactionHelper helper2("x", dns_protocol::kTypeA, ERR_NAME_NOT_RESOLVED); + TransactionHelper helper2("x", dns_protocol::kTypeA, ERR_NAME_NOT_RESOLVED, + false /* expected_secure */); EXPECT_TRUE(helper2.Run(transaction_factory_.get())); } @@ -1277,7 +1306,8 @@ AddAsyncQueryAndResponse(0 /* id */, "x.y.z.b", dns_protocol::kTypeA, kResponseNoData, base::size(kResponseNoData)); - TransactionHelper helper0("x.y.z", dns_protocol::kTypeA, 0 /* answers */); + TransactionHelper helper0("x.y.z", dns_protocol::kTypeA, 0 /* answers */, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -1290,7 +1320,8 @@ AddSyncQueryAndResponse(0 /* id */, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram)); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -1306,7 +1337,8 @@ kT2ResponseDatagram, base::size(kT2ResponseDatagram)); - TransactionHelper helper0("www", kT2Qtype, kT2RecordCount); + TransactionHelper helper0("www", kT2Qtype, kT2RecordCount, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -1320,7 +1352,8 @@ AddSyncQueryAndResponse(2 /* id */, kT2HostName, kT2Qtype, kT2ResponseDatagram, base::size(kT2ResponseDatagram)); - TransactionHelper helper0("www", kT2Qtype, kT2RecordCount); + TransactionHelper helper0("www", kT2Qtype, kT2RecordCount, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -1328,7 +1361,8 @@ socket_factory_->fail_next_socket_ = true; transaction_ids_.push_back(0); // Needed to make a DnsUDPAttempt. TransactionHelper helper0("www.chromium.org", dns_protocol::kTypeA, - ERR_CONNECTION_REFUSED); + ERR_CONNECTION_REFUSED, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -1343,7 +1377,8 @@ AddAsyncQueryAndResponse(0 /* id */, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram)); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -1352,7 +1387,8 @@ AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1361,7 +1397,8 @@ AddQueryAndRcode(kT0HostName, kT0Qtype, dns_protocol::kRcodeSERVFAIL, SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_SERVER_FAILED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_SERVER_FAILED, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); ASSERT_NE(helper0.response(), nullptr); EXPECT_EQ(helper0.response()->rcode(), dns_protocol::kRcodeSERVFAIL); @@ -1372,7 +1409,8 @@ AddQueryAndResponse(1 /* id */, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1381,7 +1419,8 @@ AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1390,7 +1429,8 @@ AddQueryAndRcode(kT0HostName, kT0Qtype, dns_protocol::kRcodeSERVFAIL, SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_SERVER_FAILED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_SERVER_FAILED, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); ASSERT_NE(helper0.response(), nullptr); EXPECT_EQ(helper0.response()->rcode(), dns_protocol::kRcodeSERVFAIL); @@ -1402,7 +1442,8 @@ base::size(kT0ResponseDatagram), SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1410,7 +1451,8 @@ ConfigDohServers(true /* clear_udp */, true /* use_post */); AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), ASYNC, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1427,7 +1469,8 @@ AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_FAILED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_FAILED, + true /* expected_secure */); SetDohJobMakerCallback(base::BindRepeating(DohJobMakerCallbackFailStart)); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1446,7 +1489,8 @@ 0, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::HTTPS)); data->AddResponseWithLength(std::make_unique<DnsResponse>(), SYNCHRONOUS, 0); AddSocketData(std::move(data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE, + true /* expected_secure */); SetDohJobMakerCallback(base::BindRepeating(DohJobMakerCallbackFailSync)); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1464,7 +1508,8 @@ AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE, + true /* expected_secure */); SetDohJobMakerCallback(base::BindRepeating(DohJobMakerCallbackFailAsync)); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1477,7 +1522,8 @@ data->AddResponseData(kT0ResponseDatagram + 20, base::size(kT0ResponseDatagram) - 20, SYNCHRONOUS); AddSocketData(std::move(data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1489,7 +1535,8 @@ data->AddResponseData(kT0ResponseDatagram + 20, base::size(kT0ResponseDatagram) - 20, ASYNC); AddSocketData(std::move(data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1501,7 +1548,8 @@ ASYNC); data->AddResponseData(kT0ResponseDatagram, 0, ASYNC); AddSocketData(std::move(data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1513,7 +1561,8 @@ SYNCHRONOUS); data->AddResponseData(kT0ResponseDatagram, 0, ASYNC); AddSocketData(std::move(data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1525,7 +1574,8 @@ data->AddResponseData(kT0ResponseDatagram + 20, base::size(kT0ResponseDatagram) - 20, SYNCHRONOUS); AddSocketData(std::move(data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1536,7 +1586,8 @@ data->AddResponseData(kT0ResponseDatagram, 20, ASYNC); data->AddReadError(ERR_FAILED, SYNCHRONOUS); AddSocketData(std::move(data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_FAILED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_FAILED, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1547,7 +1598,8 @@ data->AddResponseData(kT0ResponseDatagram, 20, ASYNC); data->AddReadError(ERR_FAILED, ASYNC); AddSocketData(std::move(data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_FAILED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_FAILED, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1558,7 +1610,8 @@ data->AddResponseData(kT0ResponseDatagram, 20, SYNCHRONOUS); data->AddReadError(ERR_FAILED, ASYNC); AddSocketData(std::move(data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_FAILED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_FAILED, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1569,7 +1622,8 @@ data->AddResponseData(kT0ResponseDatagram, 20, SYNCHRONOUS); data->AddReadError(ERR_FAILED, SYNCHRONOUS); AddSocketData(std::move(data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_FAILED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_FAILED, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1581,7 +1635,8 @@ Transport::HTTPS); AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), ASYNC, Transport::UDP); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); SetDohJobMakerCallback(base::BindRepeating(DohJobMakerCallbackFailStart)); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); unsigned kOrder0[] = {1, 0}; @@ -1596,7 +1651,8 @@ SYNCHRONOUS, Transport::HTTPS); AddQueryAndErrorResponse(0, kT0HostName, kT0Qtype, ERR_CONNECTION_REFUSED, SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_FAILED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_FAILED, + true /* expected_secure */); helper0.set_secure_dns_mode(SecureDnsMode::SECURE); SetDohJobMakerCallback(base::BindRepeating(DohJobMakerCallbackFailStart)); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); @@ -1616,7 +1672,8 @@ SYNCHRONOUS, Transport::UDP); AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), ASYNC, Transport::UDP); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); helper0.set_secure_dns_mode(SecureDnsMode::OFF); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); unsigned kOrder0[] = {0, 1, 0, 1}; @@ -1636,7 +1693,8 @@ base::size(kT0ResponseDatagram), ASYNC, Transport::UDP); transaction_ids_.push_back(0); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); // Servers 3 (HTTP) and 0 (UDP) should be marked as bad. 1 and 2 should be @@ -1659,7 +1717,8 @@ AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), ASYNC, Transport::UDP); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); // Server 0 (UDP) should be marked bad. Server 1 (UDP) should be good // and since 2 is our only Doh server, it will be good. @@ -1677,7 +1736,8 @@ AddQueryAndResponse(1, kT1HostName, kT1Qtype, kT1ResponseDatagram, base::size(kT1ResponseDatagram), ASYNC, Transport::UDP); - TransactionHelper helper1(kT1HostName, kT1Qtype, kT1RecordCount); + TransactionHelper helper1(kT1HostName, kT1Qtype, kT1RecordCount, + false /* expected_secure */); EXPECT_TRUE(helper1.RunUntilDone(transaction_factory_.get())); // Since 0 was bad to start, we started with 1 which will now be the // most recent failure, so Server 1 (UDP) should be marked bad. @@ -1707,8 +1767,10 @@ SYNCHRONOUS, Transport::HTTPS); AddQueryAndResponse(1, kT1HostName, kT1Qtype, kT1ResponseDatagram, base::size(kT1ResponseDatagram), ASYNC, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); - TransactionHelper helper1(kT1HostName, kT1Qtype, kT1RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + true /* expected_secure */); + TransactionHelper helper1(kT1HostName, kT1Qtype, kT1RecordCount, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); // Server 0 is our only UDP server, so it will be good. HTTPS // servers 1 and 2 failed and will be marked bad. Server 3 succeeded @@ -1744,7 +1806,8 @@ AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + true /* expected_secure */); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); unsigned kOrder0[] = {0, 1}; CheckServerOrder(kOrder0, base::size(kOrder0)); @@ -1761,7 +1824,8 @@ Transport::HTTPS); AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), ASYNC, Transport::UDP); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); SetDohJobMakerCallback(base::BindRepeating(DohJobMakerCallbackFailStart)); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); unsigned kOrder0[] = {1, 2, 0}; @@ -1777,7 +1841,8 @@ AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_FAILED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_FAILED, + true /* expected_secure */); SetDohJobMakerCallback(base::BindRepeating(DohJobMakerCallbackFailStart)); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); unsigned kOrder0[] = {0, 1}; @@ -1825,8 +1890,10 @@ AddQueryAndResponse(1, kT1HostName, kT1Qtype, kT1ResponseDatagram, base::size(kT1ResponseDatagram), SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); - TransactionHelper helper1(kT1HostName, kT1Qtype, kT1RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + true /* expected_secure */); + TransactionHelper helper1(kT1HostName, kT1Qtype, kT1RecordCount, + true /* expected_secure */); SetResponseModifierCallback(base::BindRepeating(MakeResponseWithCookie)); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); @@ -1858,7 +1925,8 @@ AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + true /* expected_secure */); SetResponseModifierCallback(base::BindRepeating(MakeResponseWithoutLength)); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1873,7 +1941,8 @@ AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE, + true /* expected_secure */); SetResponseModifierCallback( base::BindRepeating(MakeResponseWithBadRequestResponse)); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); @@ -1889,7 +1958,8 @@ AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE, + true /* expected_secure */); SetResponseModifierCallback(base::BindRepeating(MakeResponseWrongType)); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1910,7 +1980,8 @@ AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + true /* expected_secure */); SetResponseModifierCallback(base::BindRepeating(MakeResponseRedirect)); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } @@ -1924,14 +1995,16 @@ AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE, + true /* expected_secure */); SetResponseModifierCallback(base::BindRepeating(MakeResponseNoType)); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); } TEST_F(DnsTransactionTest, HttpsCantLookupDohServers) { ConfigDohServers(true /* clear_udp */, true /* use_post */, 2); - TransactionHelper helper0(kMockHostname, kT0Qtype, ERR_CONNECTION_REFUSED); + TransactionHelper helper0(kMockHostname, kT0Qtype, ERR_CONNECTION_REFUSED, + true /* expected_secure */); transaction_ids_.push_back(0); transaction_ids_.push_back(1); EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get())); @@ -1967,7 +2040,8 @@ AddQueryAndResponse(0, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), SYNCHRONOUS, Transport::HTTPS); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + true /* expected_secure */); CountingObserver observer; helper0.net_log()->AddObserver(&observer, NetLogCaptureMode::IncludeSocketBytes()); @@ -1983,7 +2057,8 @@ AddQueryAndResponse(0 /* id */, kT0HostName, kT0Qtype, kT0ResponseDatagram, base::size(kT0ResponseDatagram), ASYNC, Transport::TCP); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -1993,7 +2068,8 @@ AddQueryAndRcode(kT0HostName, kT0Qtype, dns_protocol::kRcodeSERVFAIL, ASYNC, Transport::TCP); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_SERVER_FAILED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_SERVER_FAILED, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); ASSERT_NE(helper0.response(), nullptr); EXPECT_EQ(helper0.response()->rcode(), dns_protocol::kRcodeSERVFAIL); @@ -2015,7 +2091,8 @@ ASYNC, static_cast<uint16_t>(kT0QuerySize - 1)); AddSocketData(std::move(data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_MALFORMED_RESPONSE, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -2026,7 +2103,8 @@ AddSocketData(std::make_unique<DnsSocketData>( 1 /* id */, kT0HostName, kT0Qtype, ASYNC, Transport::TCP)); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_TIMED_OUT); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_DNS_TIMED_OUT, + false /* expected_secure */); EXPECT_FALSE(helper0.Run(transaction_factory_.get())); FastForwardUntilNoTasksRemain(); EXPECT_TRUE(helper0.has_completed()); @@ -2047,7 +2125,8 @@ data->AddReadError(0, ASYNC); AddSocketData(std::move(data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_CONNECTION_CLOSED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_CONNECTION_CLOSED, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -2066,7 +2145,8 @@ data->AddReadError(0, SYNCHRONOUS); AddSocketData(std::move(data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_CONNECTION_CLOSED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_CONNECTION_CLOSED, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -2078,7 +2158,8 @@ data->AddReadError(ERR_CONNECTION_CLOSED, ASYNC); AddSocketData(std::move(data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_CONNECTION_CLOSED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_CONNECTION_CLOSED, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -2090,7 +2171,8 @@ data->AddReadError(ERR_CONNECTION_CLOSED, SYNCHRONOUS); AddSocketData(std::move(data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_CONNECTION_CLOSED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_CONNECTION_CLOSED, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -2112,7 +2194,8 @@ tcp_data->AddReadError(ERR_CONNECTION_CLOSED, SYNCHRONOUS); AddSocketData(std::move(tcp_data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_NAME_NOT_RESOLVED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_NAME_NOT_RESOLVED, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -2136,7 +2219,8 @@ tcp_data->AddReadError(ERR_CONNECTION_CLOSED, SYNCHRONOUS); AddSocketData(std::move(tcp_data)); - TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount); + TransactionHelper helper0(kT0HostName, kT0Qtype, kT0RecordCount, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } @@ -2177,18 +2261,20 @@ AddQueryAndErrorResponse(0 /* id */, kT0HostName, kT0Qtype, ERR_CONNECTION_REFUSED, SYNCHRONOUS, Transport::UDP); - TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_CONNECTION_REFUSED); + TransactionHelper helper0(kT0HostName, kT0Qtype, ERR_CONNECTION_REFUSED, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); } TEST_F(DnsTransactionTest, InvalidQuery) { ConfigureFactory(); - TransactionHelper helper0(".", dns_protocol::kTypeA, ERR_INVALID_ARGUMENT); + TransactionHelper helper0(".", dns_protocol::kTypeA, ERR_INVALID_ARGUMENT, + false /* expected_secure */); EXPECT_TRUE(helper0.Run(transaction_factory_.get())); TransactionHelper helper1("foo,bar.com", dns_protocol::kTypeA, - ERR_INVALID_ARGUMENT); + ERR_INVALID_ARGUMENT, false /* expected_secure */); EXPECT_TRUE(helper1.Run(transaction_factory_.get())); }
diff --git a/net/dns/host_cache.cc b/net/dns/host_cache.cc index c227581..ac5802b 100644 --- a/net/dns/host_cache.cc +++ b/net/dns/host_cache.cc
@@ -38,6 +38,7 @@ const char kDnsQueryTypeKey[] = "dns_query_type"; const char kFlagsKey[] = "flags"; const char kHostResolverSourceKey[] = "host_resolver_source"; +const char kSecureKey[] = "secure"; const char kExpirationKey[] = "expiration"; const char kTtlKey[] = "ttl"; const char kNetworkChangesKey[] = "network_changes"; @@ -111,7 +112,8 @@ : hostname(hostname), dns_query_type(dns_query_type), host_resolver_flags(host_resolver_flags), - host_resolver_source(host_resolver_source) {} + host_resolver_source(host_resolver_source), + secure(false) {} HostCache::Key::Key(const std::string& hostname, AddressFamily address_family, @@ -366,44 +368,106 @@ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); } -const HostCache::Entry* HostCache::Lookup(const Key& key, base::TimeTicks now) { +const std::pair<const HostCache::Key, HostCache::Entry>* +HostCache::Lookup(const Key& key, base::TimeTicks now, bool ignore_secure) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); if (caching_is_disabled()) return nullptr; - HostCache::Entry* entry = LookupInternal(key); - if (!entry) + auto* result = LookupInternalIgnoringFields(key, now, ignore_secure); + if (!result) return nullptr; + + auto* entry = &result->second; if (entry->IsStale(now, network_changes_)) return nullptr; entry->CountHit(/* hit_is_stale= */ false); - return entry; + return result; } -const HostCache::Entry* HostCache::LookupStale( +const std::pair<const HostCache::Key, HostCache::Entry>* HostCache::LookupStale( const Key& key, base::TimeTicks now, - HostCache::EntryStaleness* stale_out) { + HostCache::EntryStaleness* stale_out, + bool ignore_secure) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); if (caching_is_disabled()) return nullptr; - HostCache::Entry* entry = LookupInternal(key); - if (!entry) + auto* result = LookupInternalIgnoringFields(key, now, ignore_secure); + if (!result) return nullptr; + auto* entry = &result->second; bool is_stale = entry->IsStale(now, network_changes_); entry->CountHit(/* hit_is_stale= */ is_stale); if (stale_out) entry->GetStaleness(now, network_changes_, stale_out); - return entry; + return result; } -HostCache::Entry* HostCache::LookupInternal(const Key& key) { +// static +std::pair<const HostCache::Key, HostCache::Entry>* +HostCache::GetLessStaleMoreSecureResult( + base::TimeTicks now, + std::pair<const HostCache::Key, HostCache::Entry>* result1, + std::pair<const HostCache::Key, HostCache::Entry>* result2) { + // Prefer a non-null result if possible. + if (!result1 && !result2) + return nullptr; + if (result1 && !result2) + return result1; + if (!result1 && result2) + return result2; + + // Both result1 are result2 are non-null. + EntryStaleness staleness1, staleness2; + result1->second.GetStaleness(now, 0, &staleness1); + result2->second.GetStaleness(now, 0, &staleness2); + if (staleness1.network_changes == staleness2.network_changes) { + // Exactly one of the results should be secure. + DCHECK(result1->first.secure != result2->first.secure); + // If the results have the same number of network changes, prefer a + // non-expired result. + if (staleness1.expired_by < base::TimeDelta() && + staleness2.expired_by >= base::TimeDelta()) { + return result1; + } + if (staleness1.expired_by >= base::TimeDelta() && + staleness2.expired_by < base::TimeDelta()) { + return result2; + } + // Both results are equally stale, so prefer a secure result. + return (result1->first.secure) ? result1 : result2; + } + // Prefer the result with the fewest network changes. + return (staleness1.network_changes < staleness2.network_changes) ? result1 + : result2; +} + +std::pair<const HostCache::Key, HostCache::Entry>* +HostCache::LookupInternalIgnoringFields(const Key& initial_key, + base::TimeTicks now, + bool ignore_secure) { + std::pair<const HostCache::Key, HostCache::Entry>* preferred_result = + LookupInternal(initial_key); + + if (ignore_secure) { + Key effective_key = initial_key; + effective_key.secure = !initial_key.secure; + preferred_result = GetLessStaleMoreSecureResult( + now, preferred_result, LookupInternal(effective_key)); + } + + return preferred_result; +} + +std::pair<const HostCache::Key, HostCache::Entry>* HostCache::LookupInternal( + const Key& key) { auto it = entries_.find(key); - return (it != entries_.end()) ? &it->second : nullptr; + return (it != entries_.end()) ? &*it : nullptr; } void HostCache::Set(const Key& key, @@ -479,7 +543,7 @@ EvictOneEntry(now); } - AddEntry(Key(key), Entry(entry, now, ttl, network_changes_)); + AddEntry(key, Entry(entry, now, ttl, network_changes_)); if (delegate_ && result_changed) delegate_->ScheduleWrite(); @@ -558,6 +622,7 @@ entry_dict->SetInteger(kFlagsKey, key.host_resolver_flags); entry_dict->SetInteger(kHostResolverSourceKey, static_cast<int>(key.host_resolver_source)); + entry_dict->SetBoolean(kSecureKey, static_cast<bool>(key.secure)); entry_list->Append(std::move(entry_dict)); } @@ -611,6 +676,11 @@ host_resolver_source = static_cast<int>(HostResolverSource::ANY); } + bool secure; + if (!entry_dict->GetBoolean(kSecureKey, &secure)) { + secure = false; + } + int error = OK; const base::ListValue* addresses_value = nullptr; const base::ListValue* text_records_value = nullptr; @@ -680,6 +750,7 @@ Key key(hostname, dns_query_type, flags, static_cast<HostResolverSource>(host_resolver_source)); + key.secure = secure; // If the key is already in the cache, assume it's more recent and don't // replace the entry. @@ -729,15 +800,17 @@ entries_.erase(oldest_it); } -bool HostCache::HasEntry(base::StringPiece hostname, - HostCache::Entry::Source* source_out, - HostCache::EntryStaleness* stale_out) { +const HostCache::Key* HostCache::GetMatchingKey( + base::StringPiece hostname, + HostCache::Entry::Source* source_out, + HostCache::EntryStaleness* stale_out) { net::HostCache::Key cache_key; hostname.CopyToString(&cache_key.hostname); - const HostCache::Entry* entry = - LookupStale(cache_key, tick_clock_->NowTicks(), stale_out); - if (!entry && IsAddressType(cache_key.dns_query_type)) { + const std::pair<const HostCache::Key, HostCache::Entry>* cache_result = + LookupStale(cache_key, tick_clock_->NowTicks(), stale_out, + true /* ignore_secure */); + if (!cache_result && IsAddressType(cache_key.dns_query_type)) { // Might not have found the cache entry because the address_family or // host_resolver_flags in cache_key do not match those used for the // original DNS lookup. Try another common combination of address_family @@ -745,15 +818,16 @@ cache_key.dns_query_type = DnsQueryType::A; cache_key.host_resolver_flags = net::HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6; - entry = LookupStale(cache_key, tick_clock_->NowTicks(), stale_out); - if (!entry) - return false; + cache_result = LookupStale(cache_key, tick_clock_->NowTicks(), stale_out, + true /* ignore_secure */); + if (!cache_result) + return nullptr; } if (source_out != nullptr) - *source_out = entry->source(); + *source_out = cache_result->second.source(); - return true; + return &cache_result->first; } } // namespace net
diff --git a/net/dns/host_cache.h b/net/dns/host_cache.h index 3788e8e..0fca6de 100644 --- a/net/dns/host_cache.h +++ b/net/dns/host_cache.h
@@ -53,21 +53,33 @@ HostResolverFlags host_resolver_flags); Key(); + // This is a helper used in comparing keys. The order of comparisons of + // |Key| fields is arbitrary, but the tuple is constructed with + // |dns_query_type| and |host_resolver_flags| before |hostname| under the + // assumption that integer comparisons are faster than string comparisons. + std::tuple<DnsQueryType, + HostResolverFlags, + const std::string&, + HostResolverSource, + bool> + GetTuple(const Key* key) const { + return std::tie(key->dns_query_type, key->host_resolver_flags, + key->hostname, key->host_resolver_source, key->secure); + } + + bool operator==(const Key& other) const { + return GetTuple(this) == GetTuple(&other); + } + bool operator<(const Key& other) const { - // The order of comparisons of |Key| fields is arbitrary, thus - // |dns_query_type| and |host_resolver_flags| are compared before - // |hostname| under assumption that integer comparisons are faster than - // string comparisons. - return std::tie(dns_query_type, host_resolver_flags, hostname, - host_resolver_source) < - std::tie(other.dns_query_type, other.host_resolver_flags, - other.hostname, other.host_resolver_source); + return GetTuple(this) < GetTuple(&other); } std::string hostname; DnsQueryType dns_query_type; HostResolverFlags host_resolver_flags; HostResolverSource host_resolver_source; + bool secure; }; struct NET_EXPORT EntryStaleness { @@ -246,16 +258,21 @@ ~HostCache(); - // Returns a pointer to the entry for |key|, which is valid at time - // |now|. If there is no such entry, returns NULL. - const Entry* Lookup(const Key& key, base::TimeTicks now); + // Returns a pointer to the matching (key, entry) pair, which is valid at time + // |now|. If |ignore_secure| is true, ignores the secure field in |key| when + // looking for a match. If there is no matching entry, returns NULL. + const std::pair<const Key, Entry>* Lookup(const Key& key, + base::TimeTicks now, + bool ignore_secure = false); - // Returns a pointer to the entry for |key|, whether it is valid or stale at - // time |now|. Fills in |stale_out| with information about how stale it is. - // If there is no entry for |key| at all, returns NULL. - const Entry* LookupStale(const Key& key, - base::TimeTicks now, - EntryStaleness* stale_out); + // Returns a pointer to the matching (key, entry) pair, whether it is valid or + // stale at time |now|. Fills in |stale_out| with information about how stale + // it is. If |ignore_secure| is true, ignores the secure field in |key| when + // looking for a match. If there is no matching entry, returns NULL. + const std::pair<const Key, Entry>* LookupStale(const Key& key, + base::TimeTicks now, + EntryStaleness* stale_out, + bool ignore_secure = false); // Overwrites or creates an entry for |key|. // |entry| is the value to set, |now| is the current time @@ -266,14 +283,15 @@ base::TimeDelta ttl); // Checks whether an entry exists for |hostname|. - // If so, returns true and writes the source (e.g. DNS, HOSTS file, etc.) to - // |source_out| and the staleness to |stale_out| (if they are not null). - // It tries using two common address_family and host_resolver_flag + // If so, returns the matching key and writes the source (e.g. DNS, HOSTS + // file, etc.) to |source_out| and the staleness to |stale_out| (if they are + // not null). It tries using two common address_family and host_resolver_flag // combinations when performing lookups in the cache; this means false - // negatives are possible, but unlikely. - bool HasEntry(base::StringPiece hostname, - HostCache::Entry::Source* source_out, - HostCache::EntryStaleness* stale_out); + // negatives are possible, but unlikely. It also ignores the secure field + // while searching for matches. If no entry exists, returns nullptr. + const HostCache::Key* GetMatchingKey(base::StringPiece hostname, + HostCache::Entry::Source* source_out, + HostCache::EntryStaleness* stale_out); // Marks all entries as stale on account of a network change. void OnNetworkChange(); @@ -322,7 +340,26 @@ enum LookupOutcome : int; enum EraseReason : int; - Entry* LookupInternal(const Key& key); + // Returns the result that is least stale, based on the number of network + // changes since the result was cached. If the results are equally stale, + // prefers a securely retrieved result. Returns nullptr if both results are + // nullptr. + static std::pair<const HostCache::Key, HostCache::Entry>* + GetLessStaleMoreSecureResult( + base::TimeTicks now, + std::pair<const HostCache::Key, HostCache::Entry>* result1, + std::pair<const HostCache::Key, HostCache::Entry>* result2); + + // Returns matching key and entry from cache and nullptr if no match. Ignores + // the secure field in |initial_key| if |ignore_secure| is true. + std::pair<const Key, Entry>* LookupInternalIgnoringFields( + const Key& initial_key, + base::TimeTicks now, + bool ignore_secure); + + // Returns matching key and entry from cache and nullptr if no match. An exact + // match for |key| is required. + std::pair<const Key, Entry>* LookupInternal(const Key& key); // Returns true if this HostCache can contain no entries. bool caching_is_disabled() const { return max_entries_ == 0; }
diff --git a/net/dns/host_cache_unittest.cc b/net/dns/host_cache_unittest.cc index f60f269..cf5f0253 100644 --- a/net/dns/host_cache_unittest.cc +++ b/net/dns/host_cache_unittest.cc
@@ -65,7 +65,7 @@ EXPECT_FALSE(cache.Lookup(key1, now)); cache.Set(key1, entry, now, kTTL); EXPECT_TRUE(cache.Lookup(key1, now)); - EXPECT_TRUE(cache.Lookup(key1, now)->error() == entry.error()); + EXPECT_TRUE(cache.Lookup(key1, now)->second.error() == entry.error()); EXPECT_EQ(1U, cache.size()); @@ -282,6 +282,150 @@ EXPECT_NE(cache.Lookup(key2, now), cache.Lookup(key3, now)); } +// Tests that the same hostname can be duplicated in the cache, so long as +// the HostResolverSource differs. +TEST(HostCacheTest, HostResolverSourceIsPartOfKey) { + const base::TimeDelta kSuccessEntryTTL = base::TimeDelta::FromSeconds(10); + + HostCache cache(kMaxCacheEntries); + + // t=0. + base::TimeTicks now; + + HostCache::Key key1("foobar.com", DnsQueryType::UNSPECIFIED, 0, + HostResolverSource::ANY); + HostCache::Key key2("foobar.com", DnsQueryType::UNSPECIFIED, 0, + HostResolverSource::DNS); + HostCache::Entry entry = + HostCache::Entry(OK, AddressList(), HostCache::Entry::SOURCE_UNKNOWN); + + EXPECT_EQ(0U, cache.size()); + + // Add an entry for ("foobar.com", UNSPECIFIED, ANY) at t=0. + EXPECT_FALSE(cache.Lookup(key1, now)); + cache.Set(key1, entry, now, kSuccessEntryTTL); + EXPECT_TRUE(cache.Lookup(key1, now)); + EXPECT_EQ(1U, cache.size()); + + // Add an entry for ("foobar.com", UNSPECIFIED, DNS) at t=0. + EXPECT_FALSE(cache.Lookup(key2, now)); + cache.Set(key2, entry, now, kSuccessEntryTTL); + EXPECT_TRUE(cache.Lookup(key2, now)); + EXPECT_EQ(2U, cache.size()); + + // Even though the hostnames were the same, we should have two unique + // entries (because the HostResolverSource differs). + EXPECT_NE(cache.Lookup(key1, now), cache.Lookup(key2, now)); +} + +// Tests that the same hostname can be duplicated in the cache, so long as +// the secure field in the key differs. +TEST(HostCacheTest, SecureIsPartOfKey) { + const base::TimeDelta kSuccessEntryTTL = base::TimeDelta::FromSeconds(10); + + HostCache cache(kMaxCacheEntries); + + // t=0. + base::TimeTicks now; + HostCache::EntryStaleness stale; + + HostCache::Key key1("foobar.com", DnsQueryType::A, 0, + HostResolverSource::ANY); + key1.secure = true; + HostCache::Key key2("foobar.com", DnsQueryType::A, 0, + HostResolverSource::ANY); + key2.secure = false; + HostCache::Entry entry = + HostCache::Entry(OK, AddressList(), HostCache::Entry::SOURCE_UNKNOWN); + + EXPECT_EQ(0U, cache.size()); + + // Add an entry for ("foobar.com", IPV4, true /* secure */) at t=0. + EXPECT_FALSE(cache.Lookup(key1, now)); + cache.Set(key1, entry, now, kSuccessEntryTTL); + EXPECT_TRUE(cache.Lookup(key1, now)); + EXPECT_EQ(1U, cache.size()); + + // Lookup a key that is identical to the inserted key except for the secure + // field. + EXPECT_FALSE(cache.Lookup(key2, now)); + EXPECT_FALSE(cache.LookupStale(key2, now, &stale)); + const std::pair<const HostCache::Key, HostCache::Entry>* result; + result = cache.Lookup(key2, now, true /* ignore_secure */); + EXPECT_TRUE(result); + EXPECT_TRUE(result->first.secure); + result = cache.LookupStale(key2, now, &stale, true /* ignore_secure */); + EXPECT_TRUE(result); + EXPECT_TRUE(result->first.secure); + + // Add an entry for ("foobar.com", IPV4, false */ secure */) at t=0. + cache.Set(key2, entry, now, kSuccessEntryTTL); + EXPECT_TRUE(cache.Lookup(key2, now)); + EXPECT_TRUE(cache.LookupStale(key2, now, &stale)); + EXPECT_EQ(2U, cache.size()); +} + +TEST(HostCacheTest, PreferLessStaleMoreSecure) { + const base::TimeDelta kSuccessEntryTTL = base::TimeDelta::FromSeconds(10); + + HostCache cache(kMaxCacheEntries); + + // t=0. + base::TimeTicks now; + HostCache::EntryStaleness stale; + + HostCache::Key insecure_key("foobar.com", DnsQueryType::A, 0, + HostResolverSource::ANY); + HostCache::Key secure_key("foobar.com", DnsQueryType::A, 0, + HostResolverSource::ANY); + secure_key.secure = true; + HostCache::Entry entry = + HostCache::Entry(OK, AddressList(), HostCache::Entry::SOURCE_UNKNOWN); + + EXPECT_EQ(0U, cache.size()); + + // Add both insecure and secure entries. + cache.Set(insecure_key, entry, now, kSuccessEntryTTL); + cache.Set(secure_key, entry, now, kSuccessEntryTTL); + EXPECT_EQ(insecure_key, cache.Lookup(insecure_key, now)->first); + EXPECT_EQ(secure_key, cache.Lookup(secure_key, now)->first); + // Secure key is preferred when equally stale. + EXPECT_EQ(secure_key, + cache.Lookup(insecure_key, now, true /* ignore_secure */)->first); + EXPECT_EQ(secure_key, + cache.Lookup(insecure_key, now, true /* ignore_secure */)->first); + + // Simulate network change. + cache.OnNetworkChange(); + + // Re-add insecure entry. + cache.Set(insecure_key, entry, now, kSuccessEntryTTL); + EXPECT_EQ(insecure_key, cache.Lookup(insecure_key, now)->first); + EXPECT_FALSE(cache.Lookup(secure_key, now)); + EXPECT_EQ(secure_key, cache.LookupStale(secure_key, now, &stale)->first); + // Result with fewer network changes is preferred. + EXPECT_EQ( + insecure_key, + cache.LookupStale(secure_key, now, &stale, true /* ignore-secure */) + ->first); + + // Add both insecure and secure entries to a cleared cache, still at t=0. + cache.clear(); + cache.Set(insecure_key, entry, now, base::TimeDelta::FromSeconds(20)); + cache.Set(secure_key, entry, now, kSuccessEntryTTL); + + // Advance to t=15 to expire the secure entry only. + now += base::TimeDelta::FromSeconds(15); + EXPECT_EQ(insecure_key, cache.Lookup(insecure_key, now)->first); + EXPECT_FALSE(cache.Lookup(secure_key, now)); + EXPECT_EQ(secure_key, cache.LookupStale(secure_key, now, &stale)->first); + // Non-expired result is preferred. + EXPECT_EQ( + insecure_key, + cache.LookupStale(secure_key, now, &stale, true /* ignore-secure */) + ->first); +} + TEST(HostCacheTest, NoCache) { const base::TimeDelta kTTL = base::TimeDelta::FromSeconds(10); @@ -530,7 +674,12 @@ // Tests the less than and equal operators for HostCache::Key work. TEST(HostCacheTest, KeyComparators) { - struct { + struct CacheTestParameters { + CacheTestParameters(const HostCache::Key key1, + const HostCache::Key key2, + int expected_comparison) + : key1(key1), key2(key2), expected_comparison(expected_comparison) {} + // Inputs. HostCache::Key key1; HostCache::Key key2; @@ -540,7 +689,8 @@ // 0 means key1 equals key2 // 1 means key1 is greater than key2 int expected_comparison; - } tests[] = { + }; + std::vector<CacheTestParameters> tests = { {HostCache::Key("host1", DnsQueryType::UNSPECIFIED, 0, HostResolverSource::ANY), HostCache::Key("host1", DnsQueryType::UNSPECIFIED, 0, @@ -583,6 +733,12 @@ HOST_RESOLVER_CANONNAME, HostResolverSource::ANY), -1}, }; + HostCache::Key insecure_key = HostCache::Key( + "host1", DnsQueryType::UNSPECIFIED, 0, HostResolverSource::ANY); + HostCache::Key secure_key = HostCache::Key("host1", DnsQueryType::UNSPECIFIED, + 0, HostResolverSource::ANY); + secure_key.secure = true; + tests.emplace_back(insecure_key, secure_key, -1); for (size_t i = 0; i < base::size(tests); ++i) { SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]", i)); @@ -618,6 +774,7 @@ base::TimeTicks now; HostCache::Key key1 = Key("foobar.com"); + key1.secure = true; HostCache::Key key2 = Key("foobar2.com"); HostCache::Key key3 = Key("foobar3.com"); HostCache::Key key4 = Key("foobar4.com"); @@ -644,7 +801,7 @@ EXPECT_FALSE(cache.Lookup(key1, now)); cache.Set(key1, entry1, now, kTTL); EXPECT_TRUE(cache.Lookup(key1, now)); - EXPECT_TRUE(cache.Lookup(key1, now)->error() == entry1.error()); + EXPECT_TRUE(cache.Lookup(key1, now)->second.error() == entry1.error()); EXPECT_EQ(1u, cache.size()); @@ -692,14 +849,16 @@ // The "foobar.com" entry is stale due to both network changes and expiration // time. EXPECT_FALSE(restored_cache.Lookup(key1, now)); - const HostCache::Entry* result1 = + const std::pair<const HostCache::Key, HostCache::Entry>* result1 = restored_cache.LookupStale(key1, now, &stale); EXPECT_TRUE(result1); - ASSERT_TRUE(result1->addresses()); - EXPECT_FALSE(result1->text_records()); - EXPECT_FALSE(result1->hostnames()); - EXPECT_EQ(1u, result1->addresses().value().size()); - EXPECT_EQ(address_ipv4, result1->addresses().value().front().address()); + EXPECT_TRUE(result1->first.secure); + ASSERT_TRUE(result1->second.addresses()); + EXPECT_FALSE(result1->second.text_records()); + EXPECT_FALSE(result1->second.hostnames()); + EXPECT_EQ(1u, result1->second.addresses().value().size()); + EXPECT_EQ(address_ipv4, + result1->second.addresses().value().front().address()); EXPECT_EQ(1, stale.network_changes); // Time to TimeTicks conversion is fuzzy, so just check that expected and // actual expiration times are close. @@ -708,30 +867,36 @@ // The "foobar2.com" entry is stale only due to network changes. EXPECT_FALSE(restored_cache.Lookup(key2, now)); - const HostCache::Entry* result2 = + const std::pair<const HostCache::Key, HostCache::Entry>* result2 = restored_cache.LookupStale(key2, now, &stale); EXPECT_TRUE(result2); - ASSERT_TRUE(result2->addresses()); - EXPECT_EQ(2u, result2->addresses().value().size()); - EXPECT_EQ(address_ipv6, result2->addresses().value().front().address()); - EXPECT_EQ(address_ipv4, result2->addresses().value().back().address()); + EXPECT_FALSE(result2->first.secure); + ASSERT_TRUE(result2->second.addresses()); + EXPECT_EQ(2u, result2->second.addresses().value().size()); + EXPECT_EQ(address_ipv6, + result2->second.addresses().value().front().address()); + EXPECT_EQ(address_ipv4, result2->second.addresses().value().back().address()); EXPECT_EQ(1, stale.network_changes); EXPECT_GT(base::TimeDelta::FromMilliseconds(100), (base::TimeDelta::FromSeconds(-3) - stale.expired_by).magnitude()); // The "foobar3.com" entry is the new one, not the restored one. - const HostCache::Entry* result3 = restored_cache.Lookup(key3, now); + const std::pair<const HostCache::Key, HostCache::Entry>* result3 = + restored_cache.Lookup(key3, now); EXPECT_TRUE(result3); - ASSERT_TRUE(result3->addresses()); - EXPECT_EQ(1u, result3->addresses().value().size()); - EXPECT_EQ(address_ipv4, result3->addresses().value().front().address()); + ASSERT_TRUE(result3->second.addresses()); + EXPECT_EQ(1u, result3->second.addresses().value().size()); + EXPECT_EQ(address_ipv4, + result3->second.addresses().value().front().address()); // The "foobar4.com" entry is still present and usable. - const HostCache::Entry* result4 = restored_cache.Lookup(key4, now); + const std::pair<const HostCache::Key, HostCache::Entry>* result4 = + restored_cache.Lookup(key4, now); EXPECT_TRUE(result4); - ASSERT_TRUE(result4->addresses()); - EXPECT_EQ(1u, result4->addresses().value().size()); - EXPECT_EQ(address_ipv4, result4->addresses().value().front().address()); + ASSERT_TRUE(result4->second.addresses()); + EXPECT_EQ(1u, result4->second.addresses().value().size()); + EXPECT_EQ(address_ipv4, + result4->second.addresses().value().front().address()); EXPECT_EQ(2u, restored_cache.last_restore_size()); } @@ -743,6 +908,7 @@ std::vector<std::string> text_records({"foo", "bar"}); HostCache::Key key("example.com", DnsQueryType::A, 0, HostResolverSource::DNS); + key.secure = true; HostCache::Entry entry(OK, text_records, HostCache::Entry::SOURCE_DNS, ttl); EXPECT_TRUE(entry.text_records()); @@ -756,12 +922,14 @@ restored_cache.RestoreFromListValue(serialized_cache); ASSERT_EQ(1u, cache.size()); - const HostCache::Entry* result = cache.Lookup(key, now); + const std::pair<const HostCache::Key, HostCache::Entry>* result = + cache.Lookup(key, now); ASSERT_TRUE(result); - EXPECT_FALSE(result->addresses()); - ASSERT_TRUE(result->text_records()); - EXPECT_FALSE(result->hostnames()); - EXPECT_EQ(text_records, result->text_records().value()); + EXPECT_TRUE(result->first.secure); + EXPECT_FALSE(result->second.addresses()); + ASSERT_TRUE(result->second.text_records()); + EXPECT_FALSE(result->second.hostnames()); + EXPECT_EQ(text_records, result->second.text_records().value()); } TEST(HostCacheTest, SerializeAndDeserialize_Hostname) { @@ -785,12 +953,14 @@ restored_cache.RestoreFromListValue(serialized_cache); ASSERT_EQ(1u, cache.size()); - const HostCache::Entry* result = cache.Lookup(key, now); + const std::pair<const HostCache::Key, HostCache::Entry>* result = + cache.Lookup(key, now); ASSERT_TRUE(result); - EXPECT_FALSE(result->addresses()); - EXPECT_FALSE(result->text_records()); - ASSERT_TRUE(result->hostnames()); - EXPECT_EQ(hostnames, result->hostnames().value()); + EXPECT_FALSE(result->first.secure); + EXPECT_FALSE(result->second.addresses()); + EXPECT_FALSE(result->second.text_records()); + ASSERT_TRUE(result->second.hostnames()); + EXPECT_EQ(hostnames, result->second.hostnames().value()); } TEST(HostCacheTest, PersistenceDelegate) { @@ -1027,4 +1197,75 @@ EXPECT_EQ(kCanonicalNameBack, result.addresses().value().canonical_name()); } +void GetMatchingKeyHelper(const HostCache::Key key, bool expect_match) { + HostCache cache(kMaxCacheEntries); + HostCache::Entry entry = + HostCache::Entry(OK, AddressList(), HostCache::Entry::SOURCE_DNS); + + // t=0. + base::TimeTicks now; + HostCache::Entry::Source source; + HostCache::EntryStaleness stale; + + cache.Set(key, entry, now, base::TimeDelta::FromSeconds(10)); + + const HostCache::Key* result = + cache.GetMatchingKey(key.hostname, &source, &stale); + EXPECT_EQ(expect_match, (result != nullptr)); + if (result) { + EXPECT_EQ(key.hostname, result->hostname); + EXPECT_EQ(key.secure, result->secure); + EXPECT_EQ(key.dns_query_type, result->dns_query_type); + EXPECT_EQ(key.host_resolver_flags, result->host_resolver_flags); + EXPECT_EQ(HostCache::Entry::SOURCE_DNS, source); + } +} + +TEST(HostCacheTest, GetMatchingKey_ExactMatch) { + // Should find match because this mimics the default Key struct. + GetMatchingKeyHelper(HostCache::Key("foobar.com", DnsQueryType::UNSPECIFIED, + 0, HostResolverSource::ANY), + true); +} + +TEST(HostCacheTest, GetMatchingKey_IgnoreSecureField) { + // Should find match because lookups ignore the secure field. + HostCache::Key secure_key = HostCache::Key( + "foobar.com", DnsQueryType::UNSPECIFIED, 0, HostResolverSource::ANY); + secure_key.secure = true; + GetMatchingKeyHelper(secure_key, true); +} + +TEST(HostCacheTest, GetMatchingKey_UnsupportedDnsQueryType) { + // Should not find match because the DnsQueryType field matters. + GetMatchingKeyHelper( + HostCache::Key("foobar.com", DnsQueryType::A, 0, HostResolverSource::ANY), + false); +} + +TEST(HostCacheTest, GetMatchingKey_UnsupportedHostResolverFlags) { + // Should not find match because the HostResolverFlags field matters. + GetMatchingKeyHelper( + HostCache::Key("foobar.com", DnsQueryType::UNSPECIFIED, + HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6, + HostResolverSource::ANY), + false); +} + +TEST(HostCacheTest, GetMatchingKey_UnsupportedHostResolverSource) { + // Should not find match because the HostResolverSource field matters. + GetMatchingKeyHelper(HostCache::Key("foobar.com", DnsQueryType::UNSPECIFIED, + 0, HostResolverSource::DNS), + false); +} + +TEST(HostCacheTest, GetMatchingKey_AlternativeMatch) { + // Should find match because a lookup with these alternate fields is tried. + HostCache::Key secure_key = HostCache::Key( + "foobar.com", DnsQueryType::A, + HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6, HostResolverSource::ANY); + secure_key.secure = true; + GetMatchingKeyHelper(secure_key, true); +} + } // namespace net
diff --git a/net/dns/host_resolver_impl.cc b/net/dns/host_resolver_impl.cc index e64c46d3..ffb42c7 100644 --- a/net/dns/host_resolver_impl.cc +++ b/net/dns/host_resolver_impl.cc
@@ -928,7 +928,8 @@ class Delegate { public: virtual void OnDnsTaskComplete(base::TimeTicks start_time, - const HostCache::Entry& results) = 0; + const HostCache::Entry& results, + bool secure) = 0; // Called when the first of two jobs succeeds. If the first completed // transaction fails, this is not called. Also not called when the DnsTask @@ -1016,11 +1017,12 @@ DnsQueryType dns_query_type, DnsTransaction* transaction, int net_error, - const DnsResponse* response) { + const DnsResponse* response, + bool secure) { DCHECK(transaction); if (net_error != OK && !(net_error == ERR_NAME_NOT_RESOLVED && response && response->IsValid())) { - OnFailure(net_error, DnsResponse::DNS_PARSE_OK, base::nullopt); + OnFailure(net_error, DnsResponse::DNS_PARSE_OK, base::nullopt, secure); return; } @@ -1048,11 +1050,13 @@ DCHECK_LT(parse_result, DnsResponse::DNS_PARSE_RESULT_MAX); if (results.error() != OK && results.error() != ERR_NAME_NOT_RESOLVED) { - OnFailure(results.error(), parse_result, results.GetOptionalTtl()); + OnFailure(results.error(), parse_result, results.GetOptionalTtl(), + secure); return; } // Merge results with saved results from previous transactions. + DCHECK_EQ(saved_results_.has_value(), saved_secure_.has_value()); if (saved_results_) { DCHECK(needs_two_transactions()); DCHECK_GE(1u, num_completed_transactions_); @@ -1074,6 +1078,10 @@ // Only expect address query types with multiple transactions. NOTREACHED(); } + // If the earlier result was retrieved insecurely, the merged result + // should be stored accordingly. + if (!saved_secure_.value()) + secure = false; } // If not all transactions are complete, the task cannot yet be completed @@ -1081,6 +1089,7 @@ ++num_completed_transactions_; if (needs_two_transactions() && num_completed_transactions_ == 1) { saved_results_ = std::move(results); + saved_secure_ = secure; // No need to repeat the suffix search. key_.hostname = transaction->GetHostname(); delegate_->OnFirstDnsTransactionComplete(); @@ -1096,11 +1105,11 @@ client_->GetAddressSorter()->Sort( results.addresses().value(), base::BindOnce(&DnsTask::OnSortComplete, AsWeakPtr(), - tick_clock_->NowTicks(), std::move(results))); + tick_clock_->NowTicks(), std::move(results), secure)); return; } - OnSuccess(results); + OnSuccess(results, secure); } DnsResponse::Result ParseAddressDnsResponse(const DnsResponse* response, @@ -1304,13 +1313,14 @@ void OnSortComplete(base::TimeTicks sort_start_time, HostCache::Entry results, + bool secure, bool success, const AddressList& addr_list) { results.set_addresses(addr_list); if (!success) { OnFailure(ERR_DNS_SORT_ERROR, DnsResponse::DNS_PARSE_OK, - results.GetOptionalTtl()); + results.GetOptionalTtl(), secure); return; } @@ -1320,16 +1330,17 @@ results.hostnames().value_or(std::vector<HostPortPair>()).empty()) { LOG(WARNING) << "Address list empty after RFC3484 sort"; OnFailure(ERR_NAME_NOT_RESOLVED, DnsResponse::DNS_PARSE_OK, - results.GetOptionalTtl()); + results.GetOptionalTtl(), secure); return; } - OnSuccess(results); + OnSuccess(results, secure); } void OnFailure(int net_error, DnsResponse::Result parse_result, - base::Optional<base::TimeDelta> ttl) { + base::Optional<base::TimeDelta> ttl, + bool secure) { DCHECK_NE(OK, net_error); HostCache::Entry results(net_error, HostCache::Entry::SOURCE_UNKNOWN); @@ -1339,6 +1350,7 @@ parse_result, results.CreateNetLogCallback())); // If we have a TTL from a previously completed transaction, use it. + DCHECK_EQ(saved_results_.has_value(), saved_secure_.has_value()); base::TimeDelta previous_transaction_ttl; if (saved_results_ && saved_results_.value().has_ttl() && saved_results_.value().ttl() < @@ -1352,14 +1364,18 @@ } else if (ttl) { results.set_ttl(ttl.value()); } + // If the earlier result was retrieved insecurely, any entry stored in the + // cache for this transaction should be stored with an insecure key. + if (saved_secure_ && !saved_secure_.value()) + secure = false; - delegate_->OnDnsTaskComplete(task_start_time_, results); + delegate_->OnDnsTaskComplete(task_start_time_, results, secure); } - void OnSuccess(const HostCache::Entry& results) { + void OnSuccess(const HostCache::Entry& results, bool secure) { net_log_.EndEvent(NetLogEventType::HOST_RESOLVER_IMPL_DNS_TASK, results.CreateNetLogCallback()); - delegate_->OnDnsTaskComplete(task_start_time_, results); + delegate_->OnDnsTaskComplete(task_start_time_, results, secure); } DnsClient* client_; @@ -1381,6 +1397,10 @@ // Result from previously completed transactions. Only set if a transaction // has completed while others are still in progress. base::Optional<HostCache::Entry> saved_results_; + // Whether the result from the previously completed transaction was retrieved + // securely. Only set if a transaction has completed while others are still + // in progress. + base::Optional<bool> saved_secure_; const base::TickClock* tick_clock_; base::TimeTicks task_start_time_; @@ -1580,7 +1600,7 @@ if (results) { // This will destroy the Job. CompleteRequests(results.value(), base::TimeDelta(), - true /* allow_cache */); + true /* allow_cache */, true /* secure */); return true; } return false; @@ -1731,7 +1751,7 @@ ? AddressList::CopyWithPort(addr_list, 0) : AddressList(), HostCache::Entry::SOURCE_UNKNOWN), - ttl, true /* allow_cache */); + ttl, true /* allow_cache */, false /* secure */); } void StartDnsTask(bool allow_fallback_resolution) { @@ -1762,7 +1782,8 @@ base::BindOnce( &Job::OnDnsTaskFailure, weak_ptr_factory_.GetWeakPtr(), dns_task_->AsWeakPtr(), base::TimeDelta(), - HostCache::Entry(ERR_FAILED, HostCache::Entry::SOURCE_UNKNOWN))); + HostCache::Entry(ERR_FAILED, HostCache::Entry::SOURCE_UNKNOWN), + false /* secure */)); } } @@ -1776,7 +1797,8 @@ // so we use it as indicator whether Job is still valid. void OnDnsTaskFailure(const base::WeakPtr<DnsTask>& dns_task, base::TimeDelta duration, - const HostCache::Entry& failure_results) { + const HostCache::Entry& failure_results, + bool secure) { DCHECK_NE(OK, failure_results.error()); UMA_HISTOGRAM_LONG_TIMES_100("Net.DNS.DnsTask.FailureTime", duration); @@ -1806,19 +1828,20 @@ base::TimeDelta ttl = failure_results.has_ttl() ? failure_results.ttl() : base::TimeDelta::FromSeconds(0); - CompleteRequests(failure_results, ttl, true /* allow_cache */); + CompleteRequests(failure_results, ttl, true /* allow_cache */, secure); } } // HostResolverImpl::DnsTask::Delegate implementation: void OnDnsTaskComplete(base::TimeTicks start_time, - const HostCache::Entry& results) override { + const HostCache::Entry& results, + bool secure) override { DCHECK(is_dns_running()); base::TimeDelta duration = tick_clock_->NowTicks() - start_time; if (results.error() != OK) { - OnDnsTaskFailure(dns_task_->AsWeakPtr(), duration, results); + OnDnsTaskFailure(dns_task_->AsWeakPtr(), duration, results, secure); return; } @@ -1835,7 +1858,7 @@ return; } - CompleteRequests(results, bounded_ttl, true /* allow_cache */); + CompleteRequests(results, bounded_ttl, true /* allow_cache */, secure); } void OnFirstDnsTransactionComplete() override { @@ -1976,10 +1999,12 @@ // Performs Job's last rites. Completes all Requests. Deletes this. // // If not |allow_cache|, result will not be stored in the host cache, even if - // result would otherwise allow doing so. + // result would otherwise allow doing so. Update the key to reflect |secure|, + // which indicates whether or not the result was obtained securely. void CompleteRequests(const HostCache::Entry& results, base::TimeDelta ttl, - bool allow_cache) { + bool allow_cache, + bool secure) { CHECK(resolver_.get()); // This job must be removed from resolver's |jobs_| now to make room for a @@ -2014,8 +2039,11 @@ bool did_complete = (results.error() != ERR_NETWORK_CHANGED) && (results.error() != ERR_HOST_RESOLVER_QUEUE_TOO_LARGE); - if (did_complete && allow_cache) - resolver_->CacheResult(key_, results, ttl); + if (did_complete && allow_cache) { + Key effective_key = key_; + effective_key.secure = secure; + resolver_->CacheResult(effective_key, results, ttl); + } RecordJobHistograms(results.error()); @@ -2047,7 +2075,8 @@ } void CompleteRequestsWithoutCache(const HostCache::Entry& results) { - CompleteRequests(results, base::TimeDelta(), false /* allow_cache */); + CompleteRequests(results, base::TimeDelta(), false /* allow_cache */, + false /* secure */); } // Convenience wrapper for CompleteRequests in case of failure. @@ -2055,7 +2084,7 @@ DCHECK_NE(OK, net_error); CompleteRequests( HostCache::Entry(net_error, HostCache::Entry::SOURCE_UNKNOWN), - base::TimeDelta(), true /* allow_cache */); + base::TimeDelta(), true /* allow_cache */, false /* secure */); } RequestPriority priority() const override { @@ -2350,7 +2379,7 @@ if (!cache_) return false; - return cache_->HasEntry(hostname, source_out, stale_out); + return !!cache_->GetMatchingKey(hostname, source_out, stale_out); } std::unique_ptr<base::Value> HostResolverImpl::GetDnsConfigAsValue() const { @@ -2524,7 +2553,9 @@ } // Build a key that identifies the request in the cache and in the - // outstanding jobs map. + // outstanding jobs map. If this key is used in the future to store an entry + // in the cache, it will be modified first to indicate whether the result was + // obtained securely or not. *out_key = GetEffectiveKeyForRequest(hostname, dns_query_type, source, flags, ip_address_ptr, source_net_log); @@ -2642,20 +2673,21 @@ if (effective_key.host_resolver_source == HostResolverSource::LOCAL_ONLY) effective_key.host_resolver_source = HostResolverSource::ANY; - const HostCache::Entry* cache_entry; + const std::pair<const HostCache::Key, HostCache::Entry>* cache_result; HostCache::EntryStaleness staleness; if (allow_stale) { - cache_entry = - cache_->LookupStale(effective_key, tick_clock_->NowTicks(), &staleness); + cache_result = cache_->LookupStale(effective_key, tick_clock_->NowTicks(), + &staleness, true /* ignore_secure */); } else { - cache_entry = cache_->Lookup(effective_key, tick_clock_->NowTicks()); + cache_result = cache_->Lookup(effective_key, tick_clock_->NowTicks(), + true /* ignore_secure */); staleness = HostCache::kNotStale; } - if (!cache_entry) + if (!cache_result) return base::nullopt; *out_stale_info = std::move(staleness); - return *cache_entry; + return cache_result->second; } base::Optional<HostCache::Entry> HostResolverImpl::ServeFromHosts(
diff --git a/net/dns/host_resolver_impl_unittest.cc b/net/dns/host_resolver_impl_unittest.cc index 5c98ef9..2bfba68 100644 --- a/net/dns/host_resolver_impl_unittest.cc +++ b/net/dns/host_resolver_impl_unittest.cc
@@ -523,10 +523,11 @@ return resolver_->IsIPv6Reachable(net_log); } - const HostCache::Entry* GetCacheEntry(const HostCache::Key& key) { + const std::pair<const HostCache::Key, HostCache::Entry>* GetCacheHit( + const HostCache::Key& key) { DCHECK(resolver_.get() && resolver_->GetHostCache()); - return resolver_->GetHostCache()->LookupStale(key, base::TimeTicks(), - nullptr); + return resolver_->GetHostCache()->LookupStale( + key, base::TimeTicks(), nullptr, false /* ignore_secure */); } void MakeCacheStale() { @@ -559,10 +560,11 @@ EXPECT_EQ("just.testing", proc_->GetCaptureList()[0].hostname); - const HostCache::Entry* cache_entry = GetCacheEntry( - HostCache::Key("just.testing", DnsQueryType::UNSPECIFIED, - 0 /* host_resolver_flags */, HostResolverSource::ANY)); - EXPECT_TRUE(cache_entry); + const std::pair<const HostCache::Key, HostCache::Entry>* cache_result = + GetCacheHit(HostCache::Key("just.testing", DnsQueryType::UNSPECIFIED, + 0 /* host_resolver_flags */, + HostResolverSource::ANY)); + EXPECT_TRUE(cache_result); } TEST_F(HostResolverImplTest, DnsQueryType) { @@ -685,10 +687,11 @@ EXPECT_EQ("just.testing", proc_->GetCaptureList()[0].hostname); // Also test that the error is not cached. - const HostCache::Entry* cache_entry = GetCacheEntry( - HostCache::Key("just.testing", DnsQueryType::UNSPECIFIED, - 0 /* host_resolver_flags */, HostResolverSource::ANY)); - EXPECT_FALSE(cache_entry); + const std::pair<const HostCache::Key, HostCache::Entry>* cache_result = + GetCacheHit(HostCache::Key("just.testing", DnsQueryType::UNSPECIFIED, + 0 /* host_resolver_flags */, + HostResolverSource::ANY)); + EXPECT_FALSE(cache_result); } TEST_F(HostResolverImplTest, AbortedAsynchronousLookup) { @@ -1838,10 +1841,11 @@ // ERR_ICANN_NAME_COLLISION is cached like any other error, using a fixed TTL // for failed entries from proc-based resolver. That said, the fixed TTL is 0, // so it should never be cached. - const HostCache::Entry* cache_entry = GetCacheEntry( - HostCache::Key("single", DnsQueryType::UNSPECIFIED, - 0 /* host_resolver_flags */, HostResolverSource::ANY)); - EXPECT_FALSE(cache_entry); + const std::pair<const HostCache::Key, HostCache::Entry>* cache_result = + GetCacheHit(HostCache::Key("single", DnsQueryType::UNSPECIFIED, + 0 /* host_resolver_flags */, + HostResolverSource::ANY)); + EXPECT_FALSE(cache_result); ResolveHostResponseHelper multiple_response(resolver_->CreateRequest( HostPortPair("multiple", 80), NetLogWithSource(), base::nullopt)); @@ -2840,69 +2844,70 @@ MockDnsClientRuleList rules; AddDnsRule(&rules, "nodomain", dns_protocol::kTypeA, - MockDnsClientRule::NODOMAIN, false); + MockDnsClientRule::NODOMAIN, false /* delay */); AddDnsRule(&rules, "nodomain", dns_protocol::kTypeAAAA, - MockDnsClientRule::NODOMAIN, false); + MockDnsClientRule::NODOMAIN, false /* delay */); AddDnsRule(&rules, "nx", dns_protocol::kTypeA, MockDnsClientRule::FAIL, - false); + false /* delay */); AddDnsRule(&rules, "nx", dns_protocol::kTypeAAAA, MockDnsClientRule::FAIL, - false); + false /* delay */); AddDnsRule(&rules, "ok", dns_protocol::kTypeA, MockDnsClientRule::OK, - false); + false /* delay */); AddDnsRule(&rules, "ok", dns_protocol::kTypeAAAA, MockDnsClientRule::OK, - false); + false /* delay */); AddDnsRule(&rules, "4ok", dns_protocol::kTypeA, MockDnsClientRule::OK, - false); + false /* delay */); AddDnsRule(&rules, "4ok", dns_protocol::kTypeAAAA, MockDnsClientRule::EMPTY, - false); + false /* delay */); AddDnsRule(&rules, "6ok", dns_protocol::kTypeA, MockDnsClientRule::EMPTY, - false); + false /* delay */); AddDnsRule(&rules, "6ok", dns_protocol::kTypeAAAA, MockDnsClientRule::OK, - false); + false /* delay */); AddDnsRule(&rules, "4nx", dns_protocol::kTypeA, MockDnsClientRule::OK, - false); + false /* delay */); AddDnsRule(&rules, "4nx", dns_protocol::kTypeAAAA, MockDnsClientRule::FAIL, - false); + false /* delay */); AddDnsRule(&rules, "empty", dns_protocol::kTypeA, MockDnsClientRule::EMPTY, - false); + false /* delay */); AddDnsRule(&rules, "empty", dns_protocol::kTypeAAAA, - MockDnsClientRule::EMPTY, false); + MockDnsClientRule::EMPTY, false /* delay */); AddDnsRule(&rules, "slow_nx", dns_protocol::kTypeA, MockDnsClientRule::FAIL, - true); + true /* delay */); AddDnsRule(&rules, "slow_nx", dns_protocol::kTypeAAAA, - MockDnsClientRule::FAIL, true); + MockDnsClientRule::FAIL, true /* delay */); AddDnsRule(&rules, "4slow_ok", dns_protocol::kTypeA, MockDnsClientRule::OK, - true); + true /* delay */); AddDnsRule(&rules, "4slow_ok", dns_protocol::kTypeAAAA, - MockDnsClientRule::OK, false); + MockDnsClientRule::OK, false /* delay */); AddDnsRule(&rules, "6slow_ok", dns_protocol::kTypeA, MockDnsClientRule::OK, - false); + false /* delay */); AddDnsRule(&rules, "6slow_ok", dns_protocol::kTypeAAAA, - MockDnsClientRule::OK, true); + MockDnsClientRule::OK, true /* delay */); AddDnsRule(&rules, "4slow_4ok", dns_protocol::kTypeA, MockDnsClientRule::OK, - true); + true /* delay */); AddDnsRule(&rules, "4slow_4ok", dns_protocol::kTypeAAAA, - MockDnsClientRule::EMPTY, false); + MockDnsClientRule::EMPTY, false /* delay */); AddDnsRule(&rules, "4slow_4timeout", dns_protocol::kTypeA, - MockDnsClientRule::TIMEOUT, true); + MockDnsClientRule::TIMEOUT, true /* delay */); AddDnsRule(&rules, "4slow_4timeout", dns_protocol::kTypeAAAA, - MockDnsClientRule::OK, false); + MockDnsClientRule::OK, false /* delay */); AddDnsRule(&rules, "4slow_6timeout", dns_protocol::kTypeA, - MockDnsClientRule::OK, true); + MockDnsClientRule::OK, true /* delay */); AddDnsRule(&rules, "4slow_6timeout", dns_protocol::kTypeAAAA, - MockDnsClientRule::TIMEOUT, false); + MockDnsClientRule::TIMEOUT, false /* delay */); + AddDnsRule(&rules, "4collision", dns_protocol::kTypeA, - IPAddress(127, 0, 53, 53), false); + IPAddress(127, 0, 53, 53), false /* delay */); AddDnsRule(&rules, "4collision", dns_protocol::kTypeAAAA, - MockDnsClientRule::EMPTY, false); + MockDnsClientRule::EMPTY, false /* delay */); AddDnsRule(&rules, "6collision", dns_protocol::kTypeA, - MockDnsClientRule::EMPTY, false); + MockDnsClientRule::EMPTY, false /* delay */); // This isn't the expected IP for collisions (but looks close to it). AddDnsRule(&rules, "6collision", dns_protocol::kTypeAAAA, IPAddress(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 53, 53), - false); + false /* delay */); return rules; } @@ -2941,6 +2946,16 @@ delay); } + static void AddSecureDnsRule(MockDnsClientRuleList* rules, + const std::string& prefix, + uint16_t qtype, + MockDnsClientRule::ResultType result_type, + bool delay) { + MockDnsClientRule::Result result(result_type); + result.secure = true; + rules->emplace_back(prefix, qtype, std::move(result), delay); + } + void ChangeDnsConfig(const DnsConfig& config) { NetworkChangeNotifier::SetDnsConfig(config); // Notification is delivered asynchronously. @@ -3403,12 +3418,15 @@ testing::ElementsAre(CreateExpected("::1", 80))); // Resolutions done by consulting the HOSTS file when the DNS config changes - // should result in a cache entry with SOURCE_HOSTS. - const HostCache::Entry* cache_entry = GetCacheEntry( + // should result in a secure cache entry with SOURCE_HOSTS. + HostCache::Key key = HostCache::Key("nx_ipv6", DnsQueryType::UNSPECIFIED, - 0 /* host_resolver_flags */, HostResolverSource::ANY)); - ASSERT_THAT(cache_entry, NotNull()); - EXPECT_EQ(HostCache::Entry::SOURCE_HOSTS, cache_entry->source()); + 0 /* host_resolver_flags */, HostResolverSource::ANY); + key.secure = true; + const std::pair<const HostCache::Key, HostCache::Entry>* cache_result = + GetCacheHit(key); + ASSERT_THAT(cache_result, NotNull()); + EXPECT_EQ(HostCache::Entry::SOURCE_HOSTS, cache_result->second.source()); } // Test that hosts ending in ".local" or ".local." are resolved using the system @@ -3802,6 +3820,129 @@ EXPECT_THAT(responses[2]->result_error(), IsError(ERR_DNS_TIMED_OUT)); } +// Test cases where transactions return secure or mixed secure/insecure results. +TEST_F(HostResolverImplDnsTest, SecureOrMixedSecurityResults) { + MockDnsClientRuleList rules; + AddSecureDnsRule(&rules, "secure", dns_protocol::kTypeA, + MockDnsClientRule::OK, false /* delay */); + AddSecureDnsRule(&rules, "secure", dns_protocol::kTypeAAAA, + MockDnsClientRule::OK, false /* delay */); + AddDnsRule(&rules, "4insecure_6slowsecure", dns_protocol::kTypeA, + MockDnsClientRule::OK, false /* delay */); + AddSecureDnsRule(&rules, "4insecure_6slowsecure", dns_protocol::kTypeAAAA, + MockDnsClientRule::OK, true /* delay */); + AddDnsRule(&rules, "4insecure_6slowemptysecure", dns_protocol::kTypeA, + MockDnsClientRule::OK, false /* delay */); + AddSecureDnsRule(&rules, "4insecure_6slowemptysecure", + dns_protocol::kTypeAAAA, MockDnsClientRule::EMPTY, + true /* delay */); + AddDnsRule(&rules, "4insecureempty_6slowsecure", dns_protocol::kTypeA, + MockDnsClientRule::EMPTY, false /* delay */); + AddSecureDnsRule(&rules, "4insecureempty_6slowsecure", + dns_protocol::kTypeAAAA, MockDnsClientRule::OK, + true /* delay */); + AddDnsRule(&rules, "4insecure_6slowfailsecure", dns_protocol::kTypeA, + MockDnsClientRule::OK, false /* delay */); + AddSecureDnsRule(&rules, "4insecure_6slowfailsecure", dns_protocol::kTypeAAAA, + MockDnsClientRule::FAIL, true /* delay */); + AddSecureDnsRule(&rules, "4secure_6slowinsecure", dns_protocol::kTypeA, + MockDnsClientRule::OK, false /* delay */); + AddDnsRule(&rules, "4secure_6slowinsecure", dns_protocol::kTypeAAAA, + MockDnsClientRule::OK, true /* delay */); + + CreateResolver(); + UseMockDnsClient(CreateValidDnsConfig(), std::move(rules)); + set_allow_fallback_to_proctask(false); + + std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses; + responses.emplace_back( + std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest( + HostPortPair("secure", 80), NetLogWithSource(), base::nullopt))); + responses.emplace_back(std::make_unique<ResolveHostResponseHelper>( + resolver_->CreateRequest(HostPortPair("4insecure_6slowsecure", 80), + NetLogWithSource(), base::nullopt))); + responses.emplace_back(std::make_unique<ResolveHostResponseHelper>( + resolver_->CreateRequest(HostPortPair("4insecure_6slowemptysecure", 80), + NetLogWithSource(), base::nullopt))); + responses.emplace_back(std::make_unique<ResolveHostResponseHelper>( + resolver_->CreateRequest(HostPortPair("4insecureempty_6slowsecure", 80), + NetLogWithSource(), base::nullopt))); + responses.emplace_back(std::make_unique<ResolveHostResponseHelper>( + resolver_->CreateRequest(HostPortPair("4insecure_6slowfailsecure", 80), + NetLogWithSource(), base::nullopt))); + responses.emplace_back(std::make_unique<ResolveHostResponseHelper>( + resolver_->CreateRequest(HostPortPair("4secure_6slowinsecure", 80), + NetLogWithSource(), base::nullopt))); + + base::RunLoop().RunUntilIdle(); + EXPECT_TRUE(responses[0]->complete()); + EXPECT_FALSE(responses[1]->complete()); + EXPECT_FALSE(responses[2]->complete()); + EXPECT_FALSE(responses[3]->complete()); + EXPECT_FALSE(responses[4]->complete()); + EXPECT_FALSE(responses[5]->complete()); + + dns_client_->CompleteDelayedTransactions(); + const std::pair<const HostCache::Key, HostCache::Entry>* cache_result; + + EXPECT_THAT(responses[0]->result_error(), IsOk()); + EXPECT_THAT(responses[0]->request()->GetAddressResults().value().endpoints(), + testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80), + CreateExpected("::1", 80))); + HostCache::Key key = + HostCache::Key("secure", DnsQueryType::UNSPECIFIED, + 0 /* host_resolver_flags */, HostResolverSource::ANY); + key.secure = true; + cache_result = GetCacheHit(key); + EXPECT_TRUE(!!cache_result); + + EXPECT_TRUE(responses[1]->complete()); + EXPECT_THAT(responses[1]->result_error(), IsOk()); + EXPECT_THAT(responses[1]->request()->GetAddressResults().value().endpoints(), + testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80), + CreateExpected("::1", 80))); + cache_result = GetCacheHit( + HostCache::Key("4insecure_6slowsecure", DnsQueryType::UNSPECIFIED, + 0 /* host_resolver_flags */, HostResolverSource::ANY)); + EXPECT_TRUE(!!cache_result); + + EXPECT_TRUE(responses[2]->complete()); + EXPECT_THAT(responses[2]->result_error(), IsOk()); + EXPECT_THAT(responses[2]->request()->GetAddressResults().value().endpoints(), + testing::ElementsAre(CreateExpected("127.0.0.1", 80))); + cache_result = GetCacheHit( + HostCache::Key("4insecure_6slowemptysecure", DnsQueryType::UNSPECIFIED, + 0 /* host_resolver_flags */, HostResolverSource::ANY)); + EXPECT_TRUE(!!cache_result); + + EXPECT_TRUE(responses[3]->complete()); + EXPECT_THAT(responses[3]->result_error(), IsOk()); + EXPECT_THAT(responses[3]->request()->GetAddressResults().value().endpoints(), + testing::ElementsAre(CreateExpected("::1", 80))); + cache_result = GetCacheHit( + HostCache::Key("4insecureempty_6slowsecure", DnsQueryType::UNSPECIFIED, + 0 /* host_resolver_flags */, HostResolverSource::ANY)); + EXPECT_TRUE(!!cache_result); + + EXPECT_TRUE(responses[4]->complete()); + EXPECT_THAT(responses[4]->result_error(), IsError(ERR_NAME_NOT_RESOLVED)); + EXPECT_FALSE(responses[4]->request()->GetAddressResults()); + cache_result = GetCacheHit( + HostCache::Key("4insecure_6slowfailsecure", DnsQueryType::UNSPECIFIED, + 0 /* host_resolver_flags */, HostResolverSource::ANY)); + EXPECT_TRUE(!!cache_result); + + EXPECT_TRUE(responses[5]->complete()); + EXPECT_THAT(responses[5]->result_error(), IsOk()); + EXPECT_THAT(responses[5]->request()->GetAddressResults().value().endpoints(), + testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80), + CreateExpected("::1", 80))); + cache_result = GetCacheHit( + HostCache::Key("4secure_6slowinsecure", DnsQueryType::UNSPECIFIED, + 0 /* host_resolver_flags */, HostResolverSource::ANY)); + EXPECT_TRUE(!!cache_result); +} + // Test the case where only a single transaction slot is available. TEST_F(HostResolverImplDnsTest, SerialResolver) { CreateSerialResolver(); @@ -4188,11 +4329,12 @@ HostCache::Key key("empty", DnsQueryType::UNSPECIFIED, 0, HostResolverSource::ANY); HostCache::EntryStaleness staleness; - const HostCache::Entry* cache_entry = - resolver_->GetHostCache()->Lookup(key, base::TimeTicks::Now()); - EXPECT_TRUE(!!cache_entry); - EXPECT_TRUE(cache_entry->has_ttl()); - EXPECT_THAT(cache_entry->ttl(), base::TimeDelta::FromSeconds(86400)); + const std::pair<const HostCache::Key, HostCache::Entry>* cache_result = + resolver_->GetHostCache()->Lookup(key, base::TimeTicks::Now(), + false /* ignore_secure */); + EXPECT_TRUE(!!cache_result); + EXPECT_TRUE(cache_result->second.has_ttl()); + EXPECT_THAT(cache_result->second.ttl(), base::TimeDelta::FromSeconds(86400)); // NXDOMAIN ResolveHostResponseHelper no_domain_response(resolver_->CreateRequest( @@ -4202,11 +4344,11 @@ EXPECT_FALSE(no_domain_response.request()->GetAddressResults()); HostCache::Key nxkey("nodomain", DnsQueryType::UNSPECIFIED, 0, HostResolverSource::ANY); - cache_entry = - resolver_->GetHostCache()->Lookup(nxkey, base::TimeTicks::Now()); - EXPECT_TRUE(!!cache_entry); - EXPECT_TRUE(cache_entry->has_ttl()); - EXPECT_THAT(cache_entry->ttl(), base::TimeDelta::FromSeconds(86400)); + cache_result = resolver_->GetHostCache()->Lookup( + nxkey, base::TimeTicks::Now(), false /* ignore_secure */); + EXPECT_TRUE(!!cache_result); + EXPECT_TRUE(cache_result->second.has_ttl()); + EXPECT_THAT(cache_result->second.ttl(), base::TimeDelta::FromSeconds(86400)); } TEST_F(HostResolverImplDnsTest, CachedError) { @@ -4240,9 +4382,9 @@ TEST_F(HostResolverImplDnsTest, NoCanonicalName) { MockDnsClientRuleList rules; AddDnsRule(&rules, "alias", dns_protocol::kTypeA, IPAddress::IPv4Localhost(), - "canonical", false); + "canonical", false /* delay */); AddDnsRule(&rules, "alias", dns_protocol::kTypeAAAA, - IPAddress::IPv6Localhost(), "canonical", false); + IPAddress::IPv6Localhost(), "canonical", false /* delay */); CreateResolver(); UseMockDnsClient(CreateValidDnsConfig(), std::move(rules)); @@ -4261,9 +4403,9 @@ TEST_F(HostResolverImplDnsTest, CanonicalName) { MockDnsClientRuleList rules; AddDnsRule(&rules, "alias", dns_protocol::kTypeA, IPAddress::IPv4Localhost(), - "canonical", false); + "canonical", false /* delay */); AddDnsRule(&rules, "alias", dns_protocol::kTypeAAAA, - IPAddress::IPv6Localhost(), "canonical", false); + IPAddress::IPv6Localhost(), "canonical", false /* delay */); CreateResolver(); UseMockDnsClient(CreateValidDnsConfig(), std::move(rules)); @@ -4283,9 +4425,9 @@ TEST_F(HostResolverImplDnsTest, CanonicalName_PreferV6) { MockDnsClientRuleList rules; AddDnsRule(&rules, "alias", dns_protocol::kTypeA, IPAddress::IPv4Localhost(), - "wrong", false); + "wrong", false /* delay */); AddDnsRule(&rules, "alias", dns_protocol::kTypeAAAA, - IPAddress::IPv6Localhost(), "correct", true); + IPAddress::IPv6Localhost(), "correct", true /* delay */); CreateResolver(); UseMockDnsClient(CreateValidDnsConfig(), std::move(rules)); @@ -4307,7 +4449,7 @@ TEST_F(HostResolverImplDnsTest, CanonicalName_V4Only) { MockDnsClientRuleList rules; AddDnsRule(&rules, "alias", dns_protocol::kTypeA, IPAddress::IPv4Localhost(), - "correct", false); + "correct", false /* delay */); CreateResolver(); UseMockDnsClient(CreateValidDnsConfig(), std::move(rules)); set_allow_fallback_to_proctask(false);
diff --git a/net/dns/mock_host_resolver.cc b/net/dns/mock_host_resolver.cc index 7bff65d..44ddb0ab 100644 --- a/net/dns/mock_host_resolver.cc +++ b/net/dns/mock_host_resolver.cc
@@ -349,7 +349,7 @@ if (!cache_) return false; - return cache_->HasEntry(hostname, source_out, stale_out); + return !!cache_->GetMatchingKey(hostname, source_out, stale_out); } int MockHostResolverBase::LoadIntoCache( @@ -590,19 +590,21 @@ source == HostResolverSource::LOCAL_ONLY ? HostResolverSource::ANY : source; HostCache::Key key(host.host(), dns_query_type, flags, effective_source); - const HostCache::Entry* entry; + const std::pair<const HostCache::Key, HostCache::Entry>* cache_result; HostCache::EntryStaleness stale_info = HostCache::kNotStale; if (cache_usage == HostResolver::ResolveHostParameters::CacheUsage::STALE_ALLOWED) { - entry = cache_->LookupStale(key, tick_clock_->NowTicks(), &stale_info); + cache_result = cache_->LookupStale(key, tick_clock_->NowTicks(), + &stale_info, true /* ignore_secure */); } else { - entry = cache_->Lookup(key, tick_clock_->NowTicks()); + cache_result = cache_->Lookup(key, tick_clock_->NowTicks(), + true /* ignore_secure */); } - if (entry) { - rv = entry->error(); + if (cache_result) { + rv = cache_result->second.error(); if (rv == OK) { - *addresses = - AddressList::CopyWithPort(entry->addresses().value(), host.port()); + *addresses = AddressList::CopyWithPort( + cache_result->second.addresses().value(), host.port()); *out_stale_info = std::move(stale_info); } @@ -611,7 +613,7 @@ DCHECK_LE(1, cache_invalidation_iterator->second); cache_invalidation_iterator->second--; if (cache_invalidation_iterator->second == 0) { - HostCache::Entry new_entry(*entry); + HostCache::Entry new_entry(cache_result->second); cache_->Set(key, new_entry, tick_clock_->NowTicks(), base::TimeDelta()); cache_invalidation_nums_.erase(cache_invalidation_iterator);
diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc index 96dc0c83..199074f 100644 --- a/net/http/http_cache.cc +++ b/net/http/http_cache.cc
@@ -166,17 +166,19 @@ // information needed to complete that request. class HttpCache::WorkItem { public: - WorkItem(WorkItemOperation operation, Transaction* trans, ActiveEntry** entry) + WorkItem(WorkItemOperation operation, + Transaction* transaction, + ActiveEntry** entry) : operation_(operation), - trans_(trans), + transaction_(transaction), entry_(entry), backend_(NULL) {} WorkItem(WorkItemOperation operation, - Transaction* trans, + Transaction* transaction, CompletionOnceCallback callback, disk_cache::Backend** backend) : operation_(operation), - trans_(trans), + transaction_(transaction), entry_(NULL), callback_(std::move(callback)), backend_(backend) {} @@ -187,8 +189,8 @@ DCHECK(!entry || entry->disk_entry); if (entry_) *entry_ = entry; - if (trans_) - trans_->io_callback().Run(result); + if (transaction_) + transaction_->io_callback().Run(result); } // Notifies the caller about the operation completion. Returns true if the @@ -204,18 +206,22 @@ } WorkItemOperation operation() { return operation_; } - void ClearTransaction() { trans_ = NULL; } + void ClearTransaction() { transaction_ = NULL; } void ClearEntry() { entry_ = NULL; } void ClearCallback() { callback_.Reset(); } - bool Matches(Transaction* trans) const { return trans == trans_; } - bool IsValid() const { return trans_ || entry_ || !callback_.is_null(); } + bool Matches(Transaction* transaction) const { + return transaction == transaction_; + } + bool IsValid() const { + return transaction_ || entry_ || !callback_.is_null(); + } // Returns the estimate of dynamically allocated memory in bytes. size_t EstimateMemoryUsage() const { return 0; } private: WorkItemOperation operation_; - Transaction* trans_; + Transaction* transaction_; ActiveEntry** entry_; CompletionOnceCallback callback_; // User callback. disk_cache::Backend** backend_; @@ -227,8 +233,8 @@ // to a given entry. class HttpCache::MetadataWriter { public: - explicit MetadataWriter(HttpCache::Transaction* trans) - : verified_(false), buf_len_(0), transaction_(trans) {} + explicit MetadataWriter(HttpCache::Transaction* transaction) + : verified_(false), buf_len_(0), transaction_(transaction) {} ~MetadataWriter() = default; @@ -430,8 +436,9 @@ CreateBackend(NULL, CompletionOnceCallback()); } - HttpCache::Transaction* trans = new HttpCache::Transaction(priority, this); - MetadataWriter* writer = new MetadataWriter(trans); + HttpCache::Transaction* transaction = + new HttpCache::Transaction(priority, this); + MetadataWriter* writer = new MetadataWriter(transaction); // The writer will self destruct when done. writer->Write(url, expected_response_time, buf, buf_len); @@ -464,24 +471,25 @@ disk_cache_->OnExternalCacheHit(key); } -int HttpCache::CreateTransaction(RequestPriority priority, - std::unique_ptr<HttpTransaction>* trans) { +int HttpCache::CreateTransaction( + RequestPriority priority, + std::unique_ptr<HttpTransaction>* transaction) { // Do lazy initialization of disk cache if needed. if (!disk_cache_.get()) { // We don't care about the result. CreateBackend(NULL, CompletionOnceCallback()); } - HttpCache::Transaction* transaction = + HttpCache::Transaction* new_transaction = new HttpCache::Transaction(priority, this); if (bypass_lock_for_test_) - transaction->BypassLockForTest(); + new_transaction->BypassLockForTest(); if (bypass_lock_after_headers_for_test_) - transaction->BypassLockAfterHeadersForTest(); + new_transaction->BypassLockAfterHeadersForTest(); if (fail_conditionalization_for_test_) - transaction->FailConditionalizationForTest(); + new_transaction->FailConditionalizationForTest(); - trans->reset(transaction); + transaction->reset(new_transaction); return OK; } @@ -576,7 +584,7 @@ return rv; } -int HttpCache::GetBackendForTransaction(Transaction* trans) { +int HttpCache::GetBackendForTransaction(Transaction* transaction) { if (disk_cache_.get()) return OK; @@ -584,7 +592,7 @@ return ERR_FAILED; std::unique_ptr<WorkItem> item = std::make_unique<WorkItem>( - WI_CREATE_BACKEND, trans, CompletionOnceCallback(), nullptr); + WI_CREATE_BACKEND, transaction, CompletionOnceCallback(), nullptr); PendingOp* pending_op = GetPendingOp(std::string()); DCHECK(pending_op->writer); pending_op->pending_queue.push_back(std::move(item)); @@ -634,15 +642,15 @@ DCHECK_EQ(OK, rv); } -int HttpCache::DoomEntry(const std::string& key, Transaction* trans) { +int HttpCache::DoomEntry(const std::string& key, Transaction* transaction) { // Need to abandon the ActiveEntry, but any transaction attached to the entry // should not be impacted. Dooming an entry only means that it will no // longer be returned by FindActiveEntry (and it will also be destroyed once // all consumers are finished with the entry). auto it = active_entries_.find(key); if (it == active_entries_.end()) { - DCHECK(trans); - return AsyncDoomEntry(key, trans); + DCHECK(transaction); + return AsyncDoomEntry(key, transaction); } std::unique_ptr<ActiveEntry> entry = std::move(it->second); @@ -661,13 +669,16 @@ return OK; } -int HttpCache::AsyncDoomEntry(const std::string& key, Transaction* trans) { +int HttpCache::AsyncDoomEntry(const std::string& key, + Transaction* transaction) { PendingOp* pending_op = GetPendingOp(key); - int rv = CreateAndSetWorkItem(nullptr, trans, WI_DOOM_ENTRY, pending_op); + int rv = + CreateAndSetWorkItem(nullptr, transaction, WI_DOOM_ENTRY, pending_op); if (rv != OK) return rv; - net::RequestPriority priority = trans ? trans->priority() : net::LOWEST; + net::RequestPriority priority = + transaction ? transaction->priority() : net::LOWEST; rv = disk_cache_->DoomEntry(key, priority, base::BindOnce(&HttpCache::OnPendingOpComplete, GetWeakPtr(), pending_op)); @@ -785,17 +796,17 @@ int HttpCache::OpenOrCreateEntry(const std::string& key, ActiveEntry** entry, - Transaction* trans) { + Transaction* transaction) { DCHECK(!FindActiveEntry(key)); PendingOp* pending_op = GetPendingOp(key); - int rv = - CreateAndSetWorkItem(entry, trans, WI_OPEN_OR_CREATE_ENTRY, pending_op); + int rv = CreateAndSetWorkItem(entry, transaction, WI_OPEN_OR_CREATE_ENTRY, + pending_op); if (rv != OK) return rv; rv = disk_cache_->OpenOrCreateEntry( - key, trans->priority(), &(pending_op->disk_entry_struct), + key, transaction->priority(), &(pending_op->disk_entry_struct), base::BindOnce(&HttpCache::OnPendingOpComplete, GetWeakPtr(), pending_op)); @@ -811,15 +822,15 @@ int HttpCache::OpenEntry(const std::string& key, ActiveEntry** entry, - Transaction* trans) { + Transaction* transaction) { DCHECK(!FindActiveEntry(key)); PendingOp* pending_op = GetPendingOp(key); - int rv = CreateAndSetWorkItem(entry, trans, WI_OPEN_ENTRY, pending_op); + int rv = CreateAndSetWorkItem(entry, transaction, WI_OPEN_ENTRY, pending_op); if (rv != OK) return rv; - rv = disk_cache_->OpenEntry(key, trans->priority(), + rv = disk_cache_->OpenEntry(key, transaction->priority(), &(pending_op->disk_entry_struct.entry), base::BindOnce(&HttpCache::OnPendingOpComplete, GetWeakPtr(), pending_op)); @@ -839,17 +850,18 @@ int HttpCache::CreateEntry(const std::string& key, ActiveEntry** entry, - Transaction* trans) { + Transaction* transaction) { if (FindActiveEntry(key)) { return ERR_CACHE_RACE; } PendingOp* pending_op = GetPendingOp(key); - int rv = CreateAndSetWorkItem(entry, trans, WI_CREATE_ENTRY, pending_op); + int rv = + CreateAndSetWorkItem(entry, transaction, WI_CREATE_ENTRY, pending_op); if (rv != OK) return rv; - rv = disk_cache_->CreateEntry(key, trans->priority(), + rv = disk_cache_->CreateEntry(key, transaction->priority(), &(pending_op->disk_entry_struct.entry), base::BindOnce(&HttpCache::OnPendingOpComplete, GetWeakPtr(), pending_op)); @@ -1253,8 +1265,8 @@ } LoadState HttpCache::GetLoadStateForPendingTransaction( - const Transaction* trans) { - auto i = active_entries_.find(trans->key()); + const Transaction* transaction) { + auto i = active_entries_.find(transaction->key()); if (i == active_entries_.end()) { // If this is really a pending transaction, and it is not part of // active_entries_, we should be creating the backend or the entry. @@ -1265,11 +1277,11 @@ return !writers ? LOAD_STATE_WAITING_FOR_CACHE : writers->GetLoadState(); } -void HttpCache::RemovePendingTransaction(Transaction* trans) { - auto i = active_entries_.find(trans->key()); +void HttpCache::RemovePendingTransaction(Transaction* transaction) { + auto i = active_entries_.find(transaction->key()); bool found = false; if (i != active_entries_.end()) - found = RemovePendingTransactionFromEntry(i->second.get(), trans); + found = RemovePendingTransactionFromEntry(i->second.get(), transaction); if (found) return; @@ -1277,22 +1289,22 @@ if (building_backend_) { auto j = pending_ops_.find(std::string()); if (j != pending_ops_.end()) - found = RemovePendingTransactionFromPendingOp(j->second, trans); + found = RemovePendingTransactionFromPendingOp(j->second, transaction); if (found) return; } - auto j = pending_ops_.find(trans->key()); + auto j = pending_ops_.find(transaction->key()); if (j != pending_ops_.end()) - found = RemovePendingTransactionFromPendingOp(j->second, trans); + found = RemovePendingTransactionFromPendingOp(j->second, transaction); if (found) return; for (auto k = doomed_entries_.begin(); k != doomed_entries_.end() && !found; ++k) { - found = RemovePendingTransactionFromEntry(k->first, trans); + found = RemovePendingTransactionFromEntry(k->first, transaction); } DCHECK(found) << "Pending transaction not found"; @@ -1311,9 +1323,10 @@ return true; } -bool HttpCache::RemovePendingTransactionFromPendingOp(PendingOp* pending_op, - Transaction* trans) { - if (pending_op->writer->Matches(trans)) { +bool HttpCache::RemovePendingTransactionFromPendingOp( + PendingOp* pending_op, + Transaction* transaction) { + if (pending_op->writer->Matches(transaction)) { pending_op->writer->ClearTransaction(); pending_op->writer->ClearEntry(); return true; @@ -1321,7 +1334,7 @@ WorkItemList& pending_queue = pending_op->pending_queue; for (auto it = pending_queue.begin(); it != pending_queue.end(); ++it) { - if ((*it)->Matches(trans)) { + if ((*it)->Matches(transaction)) { pending_queue.erase(it); return true; }
diff --git a/net/http/http_cache.h b/net/http/http_cache.h index ec49e1fd..cb2792b 100644 --- a/net/http/http_cache.h +++ b/net/http/http_cache.h
@@ -256,7 +256,7 @@ // HttpTransactionFactory implementation: int CreateTransaction(RequestPriority priority, - std::unique_ptr<HttpTransaction>* trans) override; + std::unique_ptr<HttpTransaction>* transaction) override; HttpCache* GetCache() override; HttpNetworkSession* GetSession() override; @@ -402,11 +402,11 @@ CompletionOnceCallback callback); // Makes sure that the backend creation is complete before allowing the - // provided transaction to use the object. Returns an error code. |trans| - // will be notified via its IO callback if this method returns ERR_IO_PENDING. - // The transaction is free to use the backend directly at any time after - // receiving the notification. - int GetBackendForTransaction(Transaction* trans); + // provided transaction to use the object. Returns an error code. + // |transaction| will be notified via its IO callback if this method returns + // ERR_IO_PENDING. The transaction is free to use the backend directly at any + // time after receiving the notification. + int GetBackendForTransaction(Transaction* transaction); // Generates the cache key for this request. std::string GenerateCacheKey(const HttpRequestInfo*); @@ -415,17 +415,17 @@ // entries. void DoomActiveEntry(const std::string& key); - // Dooms the entry selected by |key|. |trans| will be notified via its IO - // callback if this method returns ERR_IO_PENDING. The entry can be - // currently in use or not. If entry is in use and the invoking transaction - // is associated with this entry and this entry is already doomed, this API + // Dooms the entry selected by |key|. |transaction| will be notified via its + // IO callback if this method returns ERR_IO_PENDING. The entry can be + // currently in use or not. If entry is in use and the invoking transaction is + // associated with this entry and this entry is already doomed, this API // should not be invoked. - int DoomEntry(const std::string& key, Transaction* trans); + int DoomEntry(const std::string& key, Transaction* transaction); - // Dooms the entry selected by |key|. |trans| will be notified via its IO - // callback if this method returns ERR_IO_PENDING. The entry should not - // be currently in use. - int AsyncDoomEntry(const std::string& key, Transaction* trans); + // Dooms the entry selected by |key|. |transaction| will be notified via its + // IO callback if this method returns ERR_IO_PENDING. The entry should not be + // currently in use. + int AsyncDoomEntry(const std::string& key, Transaction* transaction); // Dooms the entry associated with a GET for a given |url|, loaded from // a page with top-level frame at |top_frame_origin|. @@ -456,27 +456,29 @@ void DeletePendingOp(PendingOp* pending_op); // Opens the disk cache entry associated with |key|, creating the entry if it - // does not already exist, returning an ActiveEntry in |*entry|. |trans| will - // be notified via its IO callback if this method returns ERR_IO_PENDING. This - // should not be called if there already is an active entry associated with - // |key|, e.g. you should call FindActiveEntry first. + // does not already exist, returning an ActiveEntry in |*entry|. |transaction| + // will be notified via its IO callback if this method returns ERR_IO_PENDING. + // This should not be called if there already is an active entry associated + // with |key|, e.g. you should call FindActiveEntry first. int OpenOrCreateEntry(const std::string& key, ActiveEntry** entry, - Transaction* trans); + Transaction* transaction); // Opens the disk cache entry associated with |key|, returning an ActiveEntry - // in |*entry|. |trans| will be notified via its IO callback if this method - // returns ERR_IO_PENDING. This should not be called if there already is - // an active entry associated with |key|, e.g. you should call FindActiveEntry - // first. - int OpenEntry(const std::string& key, ActiveEntry** entry, - Transaction* trans); + // in |*entry|. |transaction| will be notified via its IO callback if this + // method returns ERR_IO_PENDING. This should not be called if there already + // is an active entry associated with |key|, e.g. you should call + // FindActiveEntry first. + int OpenEntry(const std::string& key, + ActiveEntry** entry, + Transaction* transaction); // Creates the disk cache entry associated with |key|, returning an - // ActiveEntry in |*entry|. |trans| will be notified via its IO callback if - // this method returns ERR_IO_PENDING. - int CreateEntry(const std::string& key, ActiveEntry** entry, - Transaction* trans); + // ActiveEntry in |*entry|. |transaction| will be notified via its IO callback + // if this method returns ERR_IO_PENDING. + int CreateEntry(const std::string& key, + ActiveEntry** entry, + Transaction* transaction); // Destroys an ActiveEntry (active or doomed). Should only be called if // entry->SafeToDestroy() returns true. @@ -581,19 +583,20 @@ bool IsWritingInProgress(ActiveEntry* entry) const; // Returns the LoadState of the provided pending transaction. - LoadState GetLoadStateForPendingTransaction(const Transaction* trans); + LoadState GetLoadStateForPendingTransaction(const Transaction* transaction); - // Removes the transaction |trans|, from the pending list of an entry + // Removes the transaction |transaction|, from the pending list of an entry // (PendingOp, active or doomed entry). - void RemovePendingTransaction(Transaction* trans); + void RemovePendingTransaction(Transaction* transaction); - // Removes the transaction |trans|, from the pending list of |entry|. + // Removes the transaction |transaction|, from the pending list of |entry|. bool RemovePendingTransactionFromEntry(ActiveEntry* entry, - Transaction* trans); + Transaction* transaction); - // Removes the transaction |trans|, from the pending list of |pending_op|. + // Removes the transaction |transaction|, from the pending list of + // |pending_op|. bool RemovePendingTransactionFromPendingOp(PendingOp* pending_op, - Transaction* trans); + Transaction* transaction); // Events (called via PostTask) ---------------------------------------------
diff --git a/net/proxy_resolution/polling_proxy_config_service.cc b/net/proxy_resolution/polling_proxy_config_service.cc index 793fd875..1035de7 100644 --- a/net/proxy_resolution/polling_proxy_config_service.cc +++ b/net/proxy_resolution/polling_proxy_config_service.cc
@@ -96,7 +96,7 @@ base::PostTaskWithTraits( FROM_HERE, {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, - base::Bind(&Core::PollAsync, this, get_config_func_)); + base::BindOnce(&Core::PollAsync, this, get_config_func_)); } private:
diff --git a/remoting/host/desktop_capturer_proxy.cc b/remoting/host/desktop_capturer_proxy.cc index db088a36..3aa5e5f8 100644 --- a/remoting/host/desktop_capturer_proxy.cc +++ b/remoting/host/desktop_capturer_proxy.cc
@@ -191,6 +191,7 @@ bool DesktopCapturerProxy::SelectSource(SourceId id_index) { DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(desktop_display_info_); + SourceId id = -1; if (id_index >= 0 && id_index < desktop_display_info_->NumDisplays()) { DisplayGeometry display = desktop_display_info_->displays()[id_index]; @@ -209,12 +210,6 @@ callback_->OnCaptureResult(result, std::move(frame)); -// On Windows, this is handled in the DesktopSessionAgent. -// Once WebRTC has a callback with the display geometry, then we can remove -// this and rely on WebRTC to pass this through the callbacks up to the -// ClientSession. -// See https://bugs.chromium.org/p/webrtc/issues/detail?id=10122 -#if !defined(OS_WIN) if (client_session_control_) { auto info = std::make_unique<DesktopDisplayInfo>(); info->LoadCurrentDisplayInfo(); @@ -234,7 +229,6 @@ client_session_control_->OnDesktopDisplayChanged(std::move(layout)); } } -#endif } } // namespace remoting
diff --git a/remoting/host/desktop_session_agent.cc b/remoting/host/desktop_session_agent.cc index 5355cb6c..eb2f574 100644 --- a/remoting/host/desktop_session_agent.cc +++ b/remoting/host/desktop_session_agent.cc
@@ -168,7 +168,6 @@ caller_task_runner_(caller_task_runner), input_task_runner_(input_task_runner), io_task_runner_(io_task_runner), - desktop_display_info_(new DesktopDisplayInfo()), current_process_stats_("DesktopSessionAgent"), weak_factory_(this) { DCHECK(caller_task_runner_->BelongsToCurrentThread()); @@ -285,7 +284,10 @@ } void DesktopSessionAgent::OnDesktopDisplayChanged( - std::unique_ptr<protocol::VideoLayout> layout) {} + std::unique_ptr<protocol::VideoLayout> layout) { + SendToNetwork(std::make_unique<ChromotingDesktopNetworkMsg_DisplayChanged>( + *layout.get())); +} void DesktopSessionAgent::OnProcessStats( const protocol::AggregatedProcessResourceUsage& usage) { @@ -383,27 +385,6 @@ SendToNetwork(std::make_unique<ChromotingDesktopNetworkMsg_CaptureResult>( result, serialized_frame)); - - auto info = std::make_unique<DesktopDisplayInfo>(); - info->LoadCurrentDisplayInfo(); - if (*desktop_display_info_ != *info) { - desktop_display_info_ = std::move(info); - // Generate and send VideoLayout message. - protocol::VideoLayout layout; - for (auto display : desktop_display_info_->displays()) { - protocol::VideoTrackLayout* track = layout.add_video_track(); - track->set_id(display.id); - track->set_position_x(display.x); - track->set_position_y(display.y); - track->set_width(display.width); - track->set_height(display.height); - track->set_x_dpi(display.dpi); - track->set_y_dpi(display.dpi); - } - - SendToNetwork( - std::make_unique<ChromotingDesktopNetworkMsg_DisplayChanged>(layout)); - } } void DesktopSessionAgent::OnMouseCursor(webrtc::MouseCursor* cursor) {
diff --git a/remoting/host/desktop_session_agent.h b/remoting/host/desktop_session_agent.h index 34d8ab5..58d7c86 100644 --- a/remoting/host/desktop_session_agent.h +++ b/remoting/host/desktop_session_agent.h
@@ -213,9 +213,6 @@ // Used to apply client-requested changes in screen resolution. std::unique_ptr<ScreenControls> screen_controls_; - // Contains the most recently gathered into about the desktop displays. - std::unique_ptr<DesktopDisplayInfo> desktop_display_info_; - // IPC channel connecting the desktop process with the network process. std::unique_ptr<IPC::ChannelProxy> network_channel_;
diff --git a/remoting/test/BUILD.gn b/remoting/test/BUILD.gn index 026e139..a8d155d 100644 --- a/remoting/test/BUILD.gn +++ b/remoting/test/BUILD.gn
@@ -42,7 +42,6 @@ "mock_access_token_fetcher.h", "refresh_token_store.cc", "refresh_token_store.h", - "remote_application_details.h", "remote_connection_observer.h", "remote_host_info.cc", "remote_host_info.h",
diff --git a/rlz/lib/rlz_lib_test.cc b/rlz/lib/rlz_lib_test.cc index de8d52c..59c89b4 100644 --- a/rlz/lib/rlz_lib_test.cc +++ b/rlz/lib/rlz_lib_test.cc
@@ -579,12 +579,9 @@ #endif network::TestURLLoaderFactory test_url_loader_factory; - scoped_refptr<network::SharedURLLoaderFactory> - test_shared_url_loader_factory = - base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( - &test_url_loader_factory); - URLLoaderFactoryRAII set_factory(test_shared_url_loader_factory.get()); + URLLoaderFactoryRAII set_factory( + test_url_loader_factory.GetSafeWeakWrapper().get()); #endif MachineDealCodeHelper::Clear(); @@ -639,11 +636,8 @@ ASSERT_TRUE(io_thread.StartWithOptions(options)); network::TestURLLoaderFactory test_url_loader_factory; - scoped_refptr<network::SharedURLLoaderFactory> - test_shared_url_loader_factory = - base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( - &test_url_loader_factory); - URLLoaderFactoryRAII set_factory(test_shared_url_loader_factory.get()); + URLLoaderFactoryRAII set_factory( + test_url_loader_factory.GetSafeWeakWrapper().get()); rlz_lib::AccessPoint points[] = {rlz_lib::IETB_SEARCH_BOX, rlz_lib::NO_ACCESS_POINT,
diff --git a/services/identity/public/cpp/identity_manager_unittest.cc b/services/identity/public/cpp/identity_manager_unittest.cc index 182ed37..7a93bf9 100644 --- a/services/identity/public/cpp/identity_manager_unittest.cc +++ b/services/identity/public/cpp/identity_manager_unittest.cc
@@ -499,7 +499,7 @@ // Test that the user signing in results in firing of the IdentityManager // observer callback and the IdentityManager's state being updated. TEST_F(IdentityManagerTest, PrimaryAccountInfoAfterSignin) { - signin_manager()->ForceSignOut(); + ClearPrimaryAccount(identity_manager(), ClearPrimaryAccountPolicy::DEFAULT); base::RunLoop run_loop; identity_manager_observer()->SetOnPrimaryAccountSetCallback( @@ -526,7 +526,7 @@ // Test that the user signing out results in firing of the IdentityManager // observer callback and the IdentityManager's state being updated. TEST_F(IdentityManagerTest, PrimaryAccountInfoAfterSigninAndSignout) { - signin_manager()->ForceSignOut(); + ClearPrimaryAccount(identity_manager(), ClearPrimaryAccountPolicy::DEFAULT); // First ensure that the user is signed in from the POV of the // IdentityManager. base::RunLoop run_loop; @@ -537,12 +537,7 @@ // Sign the user out and check that the IdentityManager responds // appropriately. - base::RunLoop run_loop2; - identity_manager_observer()->SetOnPrimaryAccountClearedCallback( - run_loop2.QuitClosure()); - - signin_manager()->ForceSignOut(); - run_loop2.Run(); + ClearPrimaryAccount(identity_manager(), ClearPrimaryAccountPolicy::DEFAULT); CoreAccountInfo primary_account_from_cleared_callback = identity_manager_observer()->PrimaryAccountFromClearedCallback(); @@ -562,7 +557,7 @@ // Test that the primary account's ID remains tracked by the IdentityManager // after signing in even after having removed the account without signing out. TEST_F(IdentityManagerTest, PrimaryAccountInfoAfterSigninAndAccountRemoval) { - signin_manager()->ForceSignOut(); + ClearPrimaryAccount(identity_manager(), ClearPrimaryAccountPolicy::DEFAULT); // First ensure that the user is signed in from the POV of the // IdentityManager. base::RunLoop run_loop; @@ -598,12 +593,7 @@ #if !defined(OS_CHROMEOS) // Signing out should cause IdentityManager to recognize that there is no // longer a primary account. - base::RunLoop run_loop; - identity_manager_observer()->SetOnPrimaryAccountClearedCallback( - run_loop.QuitClosure()); - - signin_manager()->ForceSignOut(); - run_loop.Run(); + ClearPrimaryAccount(identity_manager(), ClearPrimaryAccountPolicy::DEFAULT); EXPECT_FALSE(identity_manager()->HasPrimaryAccount()); #endif } @@ -1457,7 +1447,7 @@ TEST_F( IdentityManagerTest, IdentityManagerGivesConsistentValuesFromSigninManagerObserverNotificationOfSignIn) { - signin_manager()->ForceSignOut(); + ClearPrimaryAccount(identity_manager(), ClearPrimaryAccountPolicy::DEFAULT); base::RunLoop run_loop; TestSigninManagerObserver signin_manager_observer(signin_manager()); @@ -1497,7 +1487,7 @@ RecreateIdentityManager(); signin_manager_observer.set_identity_manager(identity_manager()); - signin_manager()->ForceSignOut(); + ClearPrimaryAccount(identity_manager(), ClearPrimaryAccountPolicy::DEFAULT); run_loop.Run(); CoreAccountInfo primary_account_from_signout_callback = @@ -1619,11 +1609,7 @@ TEST_F( IdentityManagerTest, CallbackSentOnSecondaryAccountRefreshTokenUpdateWithValidTokenWhenNoPrimaryAccount) { - base::RunLoop run_loop; - identity_manager_observer()->SetOnPrimaryAccountClearedCallback( - run_loop.QuitClosure()); - signin_manager()->ForceSignOut(); - run_loop.Run(); + ClearPrimaryAccount(identity_manager(), ClearPrimaryAccountPolicy::DEFAULT); AccountInfo expected_account_info = MakeAccountAvailable(identity_manager(), kTestEmail2); @@ -1639,11 +1625,7 @@ TEST_F( IdentityManagerTest, CallbackSentOnSecondaryAccountRefreshTokenUpdateWithInvalidTokenWhenNoPrimaryAccount) { - base::RunLoop run_loop; - identity_manager_observer()->SetOnPrimaryAccountClearedCallback( - run_loop.QuitClosure()); - signin_manager()->ForceSignOut(); - run_loop.Run(); + ClearPrimaryAccount(identity_manager(), ClearPrimaryAccountPolicy::DEFAULT); AccountInfo expected_account_info = MakeAccountAvailable(identity_manager(), kTestEmail2); @@ -1661,11 +1643,7 @@ TEST_F(IdentityManagerTest, CallbackSentOnSecondaryAccountRefreshTokenRemovalWhenNoPrimaryAccount) { - base::RunLoop run_loop; - identity_manager_observer()->SetOnPrimaryAccountClearedCallback( - run_loop.QuitClosure()); - signin_manager()->ForceSignOut(); - run_loop.Run(); + ClearPrimaryAccount(identity_manager(), ClearPrimaryAccountPolicy::DEFAULT); AccountInfo expected_account_info = MakeAccountAvailable(identity_manager(), kTestEmail2);
diff --git a/services/network/cookie_manager.cc b/services/network/cookie_manager.cc index 5565df5..cbc745a 100644 --- a/services/network/cookie_manager.cc +++ b/services/network/cookie_manager.cc
@@ -135,11 +135,11 @@ } void CookieManager::SetCanonicalCookie(const net::CanonicalCookie& cookie, - bool secure_source, + const std::string& source_scheme, bool modify_http_only, SetCanonicalCookieCallback callback) { cookie_store_->SetCanonicalCookieAsync( - std::make_unique<net::CanonicalCookie>(cookie), secure_source, + std::make_unique<net::CanonicalCookie>(cookie), source_scheme, modify_http_only, StatusToBool(std::move(callback))); }
diff --git a/services/network/cookie_manager.h b/services/network/cookie_manager.h index d08f3c5..aac75b5e 100644 --- a/services/network/cookie_manager.h +++ b/services/network/cookie_manager.h
@@ -62,7 +62,7 @@ const net::CookieOptions& cookie_options, GetCookieListCallback callback) override; void SetCanonicalCookie(const net::CanonicalCookie& cookie, - bool secure_source, + const std::string& source_scheme, bool modify_http_only, SetCanonicalCookieCallback callback) override; void DeleteCanonicalCookie(const net::CanonicalCookie& cookie,
diff --git a/services/network/cookie_manager_unittest.cc b/services/network/cookie_manager_unittest.cc index 848122d5..0647cf1 100644 --- a/services/network/cookie_manager_unittest.cc +++ b/services/network/cookie_manager_unittest.cc
@@ -92,12 +92,12 @@ } bool SetCanonicalCookie(const net::CanonicalCookie& cookie, - bool secure_source, + std::string source_scheme, bool modify_http_only) { base::RunLoop run_loop; bool result = false; cookie_service_->SetCanonicalCookie( - cookie, secure_source, modify_http_only, + cookie, std::move(source_scheme), modify_http_only, base::BindOnce(&SynchronousCookieManager::SetCookieCallback, &run_loop, &result)); run_loop.Run(); @@ -181,13 +181,13 @@ // Set a canonical cookie directly into the store. bool SetCanonicalCookie(const net::CanonicalCookie& cookie, - bool secure_source, + std::string source_scheme, bool can_modify_httponly) { net::ResultSavingCookieCallback<net::CanonicalCookie::CookieInclusionStatus> callback; cookie_monster_->SetCanonicalCookieAsync( - std::make_unique<net::CanonicalCookie>(cookie), secure_source, - can_modify_httponly, + std::make_unique<net::CanonicalCookie>(cookie), + std::move(source_scheme), can_modify_httponly, base::BindOnce(&net::ResultSavingCookieCallback< net::CanonicalCookie::CookieInclusionStatus>::Run, base::Unretained(&callback))); @@ -289,27 +289,27 @@ /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "C", "D", "foo_host2", "/with/path", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "Secure", "E", kCookieDomain, "/with/path", base::Time(), base::Time(), base::Time(), /*secure=*/true, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "HttpOnly", "F", kCookieDomain, "/with/path", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); base::Time after_creation(base::Time::Now()); @@ -384,27 +384,27 @@ /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "C", "D", "foo_host2", "/with/path", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "Secure", "E", kCookieDomain, "/with/path", base::Time(), base::Time(), base::Time(), /*secure=*/true, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "HttpOnly", "F", kCookieDomain, "/with/path", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); std::vector<net::CanonicalCookie> cookies = service_wrapper()->GetCookieList( GURL("https://foo_host.com/with/path"), net::CookieOptions()); @@ -428,7 +428,7 @@ /*secure=*/false, /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true); + "https", true); ASSERT_TRUE(result); result = SetCanonicalCookie( net::CanonicalCookie("C", "D", kCookieDomain, "/", base::Time(), @@ -436,7 +436,7 @@ /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true); + "https", true); ASSERT_TRUE(result); // Retrieve without httponly cookies (default) @@ -467,21 +467,21 @@ /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true); + "https", true); ASSERT_TRUE(result); result = SetCanonicalCookie( net::CanonicalCookie("C", "D", kCookieDomain, "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM), - true, true); + "https", true); ASSERT_TRUE(result); result = SetCanonicalCookie( net::CanonicalCookie("E", "F", kCookieDomain, "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::STRICT_MODE, net::COOKIE_PRIORITY_MEDIUM), - true, true); + "https", true); ASSERT_TRUE(result); // Retrieve only unrestricted cookies. @@ -522,7 +522,7 @@ /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true); + "https", true); ASSERT_TRUE(result); // Get the cookie without updating the access time and check @@ -554,7 +554,7 @@ "A", "B", "foo_host", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); std::vector<net::CanonicalCookie> cookies = service_wrapper()->GetAllCookies(); ASSERT_EQ(1U, cookies.size()); @@ -570,27 +570,27 @@ /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "C", "D", "foo_host2", "/with/path", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "Secure", "E", kCookieDomain, "/with/path", base::Time(), base::Time(), base::Time(), /*secure=*/true, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "HttpOnly", "F", kCookieDomain, "/with/path", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); base::Time yesterday = base::Time::Now() - base::TimeDelta::FromDays(1); EXPECT_TRUE(service_wrapper()->SetCanonicalCookie( @@ -598,7 +598,7 @@ "A", "E", kCookieDomain, "/", base::Time(), yesterday, base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - false, false)); + "http", false)); std::vector<net::CanonicalCookie> cookies = service_wrapper()->GetAllCookies(); @@ -623,7 +623,7 @@ /*secure=*/true, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - false, false)); + "http", false)); std::vector<net::CanonicalCookie> cookies = service_wrapper()->GetAllCookies(); @@ -637,7 +637,7 @@ /*secure=*/false, /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - false, false)); + "http", false)); std::vector<net::CanonicalCookie> cookies = service_wrapper()->GetAllCookies(); @@ -651,7 +651,7 @@ base::Time(), base::Time(), /*secure=*/false, /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_FALSE(service_wrapper()->SetCanonicalCookie( net::CanonicalCookie( @@ -659,7 +659,7 @@ base::Time(), base::Time(), /*secure=*/false, /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - false, false)); + "http", false)); std::vector<net::CanonicalCookie> cookies = service_wrapper()->GetAllCookies(); @@ -677,27 +677,27 @@ /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "C", "D", "foo_host2", "/with/path", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "Secure", "E", kCookieDomain, "/with/path", base::Time(), base::Time(), base::Time(), /*secure=*/true, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "HttpOnly", "F", kCookieDomain, "/with/path", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); mojom::CookieDeletionFilter filter; EXPECT_EQ(4u, service_wrapper()->DeleteCookies(filter)); @@ -717,7 +717,7 @@ base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( @@ -725,7 +725,7 @@ now - base::TimeDelta::FromMinutes(120), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( @@ -733,7 +733,7 @@ now - base::TimeDelta::FromMinutes(180), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); mojom::CookieDeletionFilter filter; filter.created_after_time = now - base::TimeDelta::FromMinutes(150); @@ -754,21 +754,21 @@ "A1", "val", "foo_host1", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A2", "val", "foo_host2", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A3", "val", "foo_host3", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); mojom::CookieDeletionFilter filter; filter.excluding_domains = std::vector<std::string>(); @@ -787,21 +787,21 @@ "A1", "val", "foo_host1", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A2", "val", "foo_host2", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A3", "val", "foo_host3", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); mojom::CookieDeletionFilter filter; filter.including_domains = std::vector<std::string>(); @@ -822,19 +822,19 @@ "A1", "val", "example.com", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A2", "val", "www.example.com", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A3", "val", "www.nonexample.com", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); mojom::CookieDeletionFilter filter; filter.including_domains = std::vector<std::string>(); @@ -853,19 +853,19 @@ "A1", "val", "example.co.uk", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A2", "val", "www.example.co.uk", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A3", "val", "www.nonexample.co.uk", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); filter.including_domains = std::vector<std::string>(); filter.including_domains->push_back("example.co.uk"); EXPECT_EQ(2u, service_wrapper()->DeleteCookies(filter)); @@ -882,19 +882,19 @@ "A1", "val", "example.co.uk", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A2", "val", "www.example.co.uk", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A3", "val", "www.nonexample.co.uk", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); filter.including_domains = std::vector<std::string>(); filter.including_domains->push_back("co.uk"); EXPECT_EQ(0u, service_wrapper()->DeleteCookies(filter)); @@ -915,25 +915,25 @@ "A1", "val", "foo_host.com", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A2", "val", ".foo_host.com", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A3", "val", "bar.host.com", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A4", "val", ".bar.host.com", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); mojom::CookieDeletionFilter filter; filter.including_domains = std::vector<std::string>(); @@ -953,31 +953,31 @@ "A1", "val", "random.co.uk", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A2", "val", "sub.domain.random.co.uk", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A3", "val", "random.com", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A4", "val", "random", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A5", "val", "normal.co.uk", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); mojom::CookieDeletionFilter filter; filter.including_domains = std::vector<std::string>(); @@ -998,7 +998,7 @@ "A1", "val", "privatedomain", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( @@ -1007,7 +1007,7 @@ "A2", "val", "privatedomain.com", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( @@ -1016,7 +1016,7 @@ "A3", "val", "subdomain.privatedomain", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); mojom::CookieDeletionFilter filter; filter.including_domains = std::vector<std::string>(); @@ -1050,13 +1050,13 @@ "A01", "RandomValue", "example.com", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A02", "RandomValue", "canonical.com", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); // Path EXPECT_TRUE(SetCanonicalCookie( @@ -1064,13 +1064,13 @@ "A03", "val", "example.com", "/this/is/a/long/path", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A04", "val", "canonical.com", "/this/is/a/long/path", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); // Last_access EXPECT_TRUE(SetCanonicalCookie( @@ -1080,7 +1080,7 @@ base::Time::Now() - base::TimeDelta::FromDays(3), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A06", "val", "canonical.com", "/", @@ -1088,7 +1088,7 @@ base::Time::Now() - base::TimeDelta::FromDays(3), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); // Same_site EXPECT_TRUE(SetCanonicalCookie( @@ -1096,13 +1096,13 @@ base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::STRICT_MODE, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie("A08", "val", "canonical.com", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::STRICT_MODE, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); // Priority EXPECT_TRUE(SetCanonicalCookie( @@ -1110,13 +1110,13 @@ "A09", "val", "example.com", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_HIGH), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A10", "val", "canonical.com", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_HIGH), - true, true)); + "https", true)); // Use the filter and make sure the result is the expected set. EXPECT_EQ(5u, service_wrapper()->DeleteCookies(filter)); @@ -1210,7 +1210,7 @@ "A1", "val", test_cases[i].domain, test_cases[i].path, base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); if (!exclude_domain_cookie) { // Host cookie @@ -1220,7 +1220,7 @@ base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); } // Httponly cookie @@ -1229,7 +1229,7 @@ "A3", "val", test_cases[i].domain, test_cases[i].path, base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); // Httponly and secure cookie EXPECT_TRUE(SetCanonicalCookie( @@ -1237,7 +1237,7 @@ "A4", "val", test_cases[i].domain, test_cases[i].path, base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); const uint32_t number_cookies = exclude_domain_cookie ? 3u : 4u; EXPECT_EQ(number_cookies, service_wrapper()->GetAllCookies().size()); @@ -1258,28 +1258,28 @@ "A1", "val", kCookieDomain, "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A1", "val", "bar_host", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A2", "val", kCookieDomain, "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A3", "val", "bar_host", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); mojom::CookieDeletionFilter filter; filter.cookie_name = std::string("A1"); @@ -1302,7 +1302,7 @@ "A01", "val", "www.example.com", "/path", base::Time(), base::Time(), base::Time(), /*secure=*/true, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); // Cookie that should not be deleted because it's a host cookie in a // subdomain that doesn't exactly match the passed URL. @@ -1311,7 +1311,7 @@ "A02", "val", "sub.www.example.com", "/path", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); // Cookie that shouldn't be deleted because the path doesn't match. EXPECT_TRUE(SetCanonicalCookie( @@ -1319,7 +1319,7 @@ "A03", "val", "www.example.com", "/otherpath", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); // Cookie that shouldn't be deleted because the path is more specific // than the URL. @@ -1328,7 +1328,7 @@ "A04", "val", "www.example.com", "/path/path2", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); // Cookie that shouldn't be deleted because it's at a host cookie domain that // doesn't exactly match the url's host. @@ -1337,7 +1337,7 @@ "A05", "val", "example.com", "/path", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); // Cookie that should not be deleted because it's not a host cookie and // has a domain that's more specific than the URL @@ -1346,7 +1346,7 @@ "A06", "val", ".sub.www.example.com", "/path", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); // Cookie that should be deleted because it's not a host cookie and has a // domain that matches the URL @@ -1355,7 +1355,7 @@ "A07", "val", ".www.example.com", "/path", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); // Cookie that should be deleted because it's not a host cookie and has a // domain that domain matches the URL. @@ -1364,7 +1364,7 @@ "A08", "val", ".example.com", "/path", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); // Cookie that should be deleted because it matches exactly. EXPECT_TRUE(SetCanonicalCookie( @@ -1372,7 +1372,7 @@ "A09", "val", "www.example.com", "/path", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); // Cookie that should be deleted because it applies to a larger set // of paths than the URL path. @@ -1381,7 +1381,7 @@ "A10", "val", "www.example.com", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true /*secure_source*/, true /*modify_httponly*/)); + "https", true /*modify_httponly*/)); mojom::CookieDeletionFilter filter; filter.url = filter_url; @@ -1408,7 +1408,7 @@ "A1", "val", kCookieDomain, "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie("A2", "val", kCookieDomain, "/", base::Time(), @@ -1416,14 +1416,14 @@ /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_TRUE(SetCanonicalCookie( net::CanonicalCookie( "A3", "val", kCookieDomain, "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); mojom::CookieDeletionFilter filter; filter.session_control = @@ -1476,7 +1476,7 @@ now + base::TimeDelta::FromDays(3), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); // Too old cookie. EXPECT_TRUE(SetCanonicalCookie( @@ -1485,7 +1485,7 @@ now + base::TimeDelta::FromDays(3), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); // Too young cookie. EXPECT_TRUE(SetCanonicalCookie( @@ -1494,7 +1494,7 @@ now + base::TimeDelta::FromDays(3), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); // Not in domains_and_ips_to_delete. EXPECT_TRUE(SetCanonicalCookie( @@ -1504,7 +1504,7 @@ now + base::TimeDelta::FromDays(3), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); // In domains_and_ips_to_ignore. EXPECT_TRUE(SetCanonicalCookie( @@ -1513,7 +1513,7 @@ now + base::TimeDelta::FromDays(3), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); // Doesn't match URL (by path). EXPECT_TRUE(SetCanonicalCookie( @@ -1523,7 +1523,7 @@ now + base::TimeDelta::FromDays(3), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); // Session EXPECT_TRUE(SetCanonicalCookie( @@ -1531,7 +1531,7 @@ "A7", "val7", "nope.com", "/path", now - base::TimeDelta::FromDays(3), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); EXPECT_EQ(1u, service_wrapper()->DeleteCookies(filter)); std::vector<net::CanonicalCookie> cookies = @@ -1619,7 +1619,7 @@ base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true); + "https", true); base::RunLoop().RunUntilIdle(); EXPECT_EQ(0u, listener.observed_changes().size()); @@ -1631,7 +1631,7 @@ base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true); + "https", true); base::RunLoop().RunUntilIdle(); EXPECT_EQ(0u, listener.observed_changes().size()); @@ -1643,7 +1643,7 @@ base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true); + "https", true); // Expect asynchrony EXPECT_EQ(0u, listener.observed_changes().size()); @@ -1699,7 +1699,7 @@ /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true); + "https", true); // Expect asynchrony EXPECT_EQ(0u, listener.observed_changes().size()); @@ -1723,14 +1723,14 @@ /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true); + "https", true); service_wrapper()->SetCanonicalCookie( net::CanonicalCookie("Thing2", "val", kThatHost, "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true); + "https", true); base::RunLoop().RunUntilIdle(); observed_changes = listener.observed_changes(); @@ -1788,7 +1788,7 @@ base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true); + "https", true); EXPECT_EQ(0u, listener1->observed_changes().size()); EXPECT_EQ(0u, listener2->observed_changes().size()); @@ -1840,7 +1840,7 @@ "X", "Y", "www.other.host", "/", base::Time(), base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM), - true, true)); + "https", true)); std::vector<net::CanonicalCookie> cookies = service_wrapper()->GetCookieList( GURL("http://www.other.host/"), net::CookieOptions()); @@ -2015,7 +2015,7 @@ }; TEST_F(SessionCleanupCookieManagerTest, PersistSessionCookies) { - EXPECT_TRUE(SetCanonicalCookie(CreateCookie(), true, true)); + EXPECT_TRUE(SetCanonicalCookie(CreateCookie(), "https", true)); EXPECT_EQ(1u, service_wrapper()->GetAllCookies().size()); @@ -2027,7 +2027,7 @@ } TEST_F(SessionCleanupCookieManagerTest, DeleteSessionCookies) { - EXPECT_TRUE(SetCanonicalCookie(CreateCookie(), true, true)); + EXPECT_TRUE(SetCanonicalCookie(CreateCookie(), "https", true)); EXPECT_EQ(1u, service_wrapper()->GetAllCookies().size()); @@ -2042,7 +2042,7 @@ } TEST_F(SessionCleanupCookieManagerTest, SettingMustMatchDomain) { - EXPECT_TRUE(SetCanonicalCookie(CreateCookie(), true, true)); + EXPECT_TRUE(SetCanonicalCookie(CreateCookie(), "https", true)); EXPECT_EQ(1u, service_wrapper()->GetAllCookies().size()); @@ -2057,7 +2057,7 @@ } TEST_F(SessionCleanupCookieManagerTest, FirstSettingTakesPrecedence) { - EXPECT_TRUE(SetCanonicalCookie(CreateCookie(), true, true)); + EXPECT_TRUE(SetCanonicalCookie(CreateCookie(), "https", true)); EXPECT_EQ(1u, service_wrapper()->GetAllCookies().size()); @@ -2075,7 +2075,7 @@ } TEST_F(SessionCleanupCookieManagerTest, ForceKeepSessionState) { - EXPECT_TRUE(SetCanonicalCookie(CreateCookie(), true, true)); + EXPECT_TRUE(SetCanonicalCookie(CreateCookie(), "https", true)); EXPECT_EQ(1u, service_wrapper()->GetAllCookies().size()); @@ -2092,7 +2092,7 @@ TEST_F(SessionCleanupCookieManagerTest, HttpCookieAllowedOnHttps) { EXPECT_TRUE(SetCanonicalCookie(CreateCookie(StrCat({"www.", kCookieDomain})), - true, true)); + "https", true)); EXPECT_EQ(1u, service_wrapper()->GetAllCookies().size());
diff --git a/services/network/network_context_unittest.cc b/services/network/network_context_unittest.cc index b0c52273..5534b9e 100644 --- a/services/network/network_context_unittest.cc +++ b/services/network/network_context_unittest.cc
@@ -1498,9 +1498,10 @@ for (size_t i = 0; i < base::size(kDomains); ++i) { bool expect_domain_cached = ((test_case.expected_cached_domains & (1 << i)) != 0); - EXPECT_EQ(expect_domain_cached, - host_cache->HasEntry(kDomains[i], nullptr /* source_out */, - nullptr /* stale_out */)); + EXPECT_EQ( + expect_domain_cached, + (host_cache->GetMatchingKey(kDomains[i], nullptr /* source_out */, + nullptr /* stale_out */) != nullptr)); } } } @@ -2037,7 +2038,7 @@ base::Time(), base::Time(), false, false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_LOW), - true, true, base::BindOnce(&SetCookieCallback, &run_loop1, &result)); + "https", true, base::BindOnce(&SetCookieCallback, &run_loop1, &result)); run_loop1.Run(); EXPECT_TRUE(result); @@ -3101,11 +3102,11 @@ rules.emplace_back(kQueryHostname, net::dns_protocol::kTypeA, net::MockDnsClientRule::Result( net::BuildTestDnsResponse(kQueryHostname, result)), - false); + false /* delay */); rules.emplace_back( kQueryHostname, net::dns_protocol::kTypeAAAA, net::MockDnsClientRule::Result(net::MockDnsClientRule::ResultType::EMPTY), - false); + false /* delay */); auto mock_dns_client = std::make_unique<net::MockDnsClient>(net::DnsConfig(), std::move(rules)); auto* mock_dns_client_ptr = mock_dns_client.get();
diff --git a/services/network/public/cpp/BUILD.gn b/services/network/public/cpp/BUILD.gn index b6fdba09..11acf0ebe 100644 --- a/services/network/public/cpp/BUILD.gn +++ b/services/network/public/cpp/BUILD.gn
@@ -85,6 +85,10 @@ ] defines = [ "IS_NETWORK_CPP_IMPL" ] + + if (is_chromecast) { + defines += [ "IS_CHROMECAST" ] + } } jumbo_component("cpp_base") {
diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc index 00066bac..6f81e483 100644 --- a/services/network/public/cpp/features.cc +++ b/services/network/public/cpp/features.cc
@@ -4,6 +4,8 @@ #include "services/network/public/cpp/features.h" +#include "build/build_config.h" + namespace network { namespace features { @@ -15,8 +17,16 @@ const base::Feature kNetworkErrorLogging{"NetworkErrorLogging", base::FEATURE_ENABLED_BY_DEFAULT}; // Enables the network service. -const base::Feature kNetworkService{"NetworkService", - base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kNetworkService { + "NetworkService", +#if defined(OS_WIN) || defined(OS_MACOSX) || \ + (defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)) + base::FEATURE_ENABLED_BY_DEFAULT +}; +#else + base::FEATURE_DISABLED_BY_DEFAULT +}; +#endif // Out of Blink CORS const base::Feature kOutOfBlinkCors{"OutOfBlinkCors",
diff --git a/services/network/public/mojom/cookie_manager.mojom b/services/network/public/mojom/cookie_manager.mojom index d991ce8..9afd983 100644 --- a/services/network/public/mojom/cookie_manager.mojom +++ b/services/network/public/mojom/cookie_manager.mojom
@@ -181,12 +181,13 @@ GetCookieList(url.mojom.Url url, CookieOptions cookie_options) => (array<CanonicalCookie> cookies); - // Set a cookie. |secure_source| indicates whether existing secure + // Set a cookie. |source_scheme| is used to check whether existing secure // cookies can be overwritten (secure cookies may be created from a - // non-secure source). |modify_http_only| indicates whether http_only + // non-secure source), and whether the scheme is permitted to use cookies in + // the first place. |modify_http_only| indicates whether http_only // cookies may be overwritten. SetCanonicalCookie( - CanonicalCookie cookie, bool secure_source, bool modify_http_only) => + CanonicalCookie cookie, string source_scheme, bool modify_http_only) => (bool success); // Delete a cookie. Returns true if a cookie was deleted.
diff --git a/services/network/restricted_cookie_manager.cc b/services/network/restricted_cookie_manager.cc index e6ddf37..a6e5a1e 100644 --- a/services/network/restricted_cookie_manager.cc +++ b/services/network/restricted_cookie_manager.cc
@@ -219,12 +219,10 @@ cookie.ExpiryDate(), now, cookie.IsSecure(), cookie.IsHttpOnly(), cookie.SameSite(), cookie.Priority()); - // TODO(pwnall): secure_source should depend on url, and might depend on the - // renderer. - bool secure_source = true; + // TODO(pwnall): source_scheme might depend on the renderer. bool modify_http_only = false; cookie_store_->SetCanonicalCookieAsync(std::move(sanitized_cookie), - secure_source, modify_http_only, + origin_.scheme(), modify_http_only, StatusToBool(std::move(callback))); }
diff --git a/services/network/restricted_cookie_manager_unittest.cc b/services/network/restricted_cookie_manager_unittest.cc index c20e8f2..293b14a 100644 --- a/services/network/restricted_cookie_manager_unittest.cc +++ b/services/network/restricted_cookie_manager_unittest.cc
@@ -105,13 +105,13 @@ // Set a canonical cookie directly into the store. bool SetCanonicalCookie(const net::CanonicalCookie& cookie, - bool secure_source, + std::string source_scheme, bool can_modify_httponly) { net::ResultSavingCookieCallback<net::CanonicalCookie::CookieInclusionStatus> callback; cookie_monster_.SetCanonicalCookieAsync( - std::make_unique<net::CanonicalCookie>(cookie), secure_source, - can_modify_httponly, + std::make_unique<net::CanonicalCookie>(cookie), + std::move(source_scheme), can_modify_httponly, base::BindOnce(&net::ResultSavingCookieCallback< net::CanonicalCookie::CookieInclusionStatus>::Run, base::Unretained(&callback))); @@ -134,7 +134,7 @@ /* httponly = */ false, net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_DEFAULT), - /* secure_source = */ true, /* can_modify_httponly = */ true)); + "https", /* can_modify_httponly = */ true)); } void ExpectBadMessage() { expecting_bad_message_ = true; }
diff --git a/services/network/test/test_cookie_manager.cc b/services/network/test/test_cookie_manager.cc index 782c5961..1654025 100644 --- a/services/network/test/test_cookie_manager.cc +++ b/services/network/test/test_cookie_manager.cc
@@ -14,7 +14,7 @@ void TestCookieManager::SetCanonicalCookie( const net::CanonicalCookie& cookie, - bool secure_source, + const std::string& source_scheme, bool modify_http_only, SetCanonicalCookieCallback callback) { std::move(callback).Run(false);
diff --git a/services/network/test/test_cookie_manager.h b/services/network/test/test_cookie_manager.h index 8d5bc4d..cce528a 100644 --- a/services/network/test/test_cookie_manager.h +++ b/services/network/test/test_cookie_manager.h
@@ -22,7 +22,7 @@ ~TestCookieManager() override; void SetCanonicalCookie(const net::CanonicalCookie& cookie, - bool secure_source, + const std::string& source_scheme, bool modify_http_only, SetCanonicalCookieCallback callback) override; void GetAllCookies(GetAllCookiesCallback callback) override {}
diff --git a/services/proxy_resolver/host_resolver_mojo.cc b/services/proxy_resolver/host_resolver_mojo.cc index b31e20b..d1a89b8 100644 --- a/services/proxy_resolver/host_resolver_mojo.cc +++ b/services/proxy_resolver/host_resolver_mojo.cc
@@ -109,13 +109,13 @@ DCHECK(host_cache_); net::HostCache::Key key = CacheKeyForRequest(hostname_, operation_); - const net::HostCache::Entry* entry = - host_cache_->Lookup(key, base::TimeTicks::Now()); - if (!entry) + const std::pair<const net::HostCache::Key, net::HostCache::Entry>* + cache_result = host_cache_->Lookup(key, base::TimeTicks::Now()); + if (!cache_result) return net::ERR_DNS_CACHE_MISS; - results_ = AddressListToAddresses(entry->addresses().value()); - return entry->error(); + results_ = AddressListToAddresses(cache_result->second.addresses().value()); + return cache_result->second.error(); } void OnConnectionError() { ReportResult(net::ERR_FAILED, {} /* result */); }
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json index 42aa207..91b9fa2 100644 --- a/testing/buildbot/chromium.clang.json +++ b/testing/buildbot/chromium.clang.json
@@ -85,17 +85,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -152,16 +141,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -182,17 +161,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -257,16 +225,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -357,17 +315,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -768,22 +715,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ], - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -913,21 +844,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ] - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -963,22 +879,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ], - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -1115,21 +1015,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ] - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1291,22 +1176,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ], - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -1958,22 +1827,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ], - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -2103,21 +1956,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ] - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2153,22 +1991,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ], - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -2305,21 +2127,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ] - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2481,22 +2288,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ], - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -3136,22 +2927,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ], - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -3281,21 +3056,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ] - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -3331,22 +3091,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ], - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -3483,21 +3227,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ] - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -3659,22 +3388,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ], - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -9520,17 +9233,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -9587,16 +9289,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -9617,17 +9309,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -9703,16 +9384,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -9785,17 +9456,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -10191,18 +9851,6 @@ }, { "args": [ - "--enable-features=NetworkService", - "--test-launcher-print-test-stdio=always" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter", "--test-launcher-print-test-stdio=always" @@ -10280,17 +9928,6 @@ }, { "args": [ - "--enable-features=NetworkService", - "--test-launcher-print-test-stdio=always" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { - "args": [ "--test-launcher-print-test-stdio=always" ], "swarming": { @@ -10319,18 +9956,6 @@ }, { "args": [ - "--enable-features=NetworkService", - "--test-launcher-print-test-stdio=always" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*", "--test-launcher-print-test-stdio=always" @@ -10436,17 +10061,6 @@ }, { "args": [ - "--enable-features=NetworkService", - "--test-launcher-print-test-stdio=always" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { - "args": [ "--test-launcher-print-test-stdio=always" ], "swarming": { @@ -10540,18 +10154,6 @@ }, { "args": [ - "--enable-features=NetworkService", - "--test-launcher-print-test-stdio=always" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter", "--test-launcher-print-test-stdio=always" @@ -11023,17 +10625,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -11090,16 +10681,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -11120,17 +10701,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -11206,16 +10776,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -11288,17 +10848,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -11635,17 +11184,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -11702,16 +11240,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -11732,17 +11260,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -11818,16 +11335,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -11900,17 +11407,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -12311,16 +11807,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -12416,16 +11902,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -12842,17 +12318,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -12909,16 +12374,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -12939,17 +12394,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -13025,16 +12469,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -13107,17 +12541,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -13463,17 +12886,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -13530,16 +12942,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -13560,17 +12962,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -13646,16 +13037,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -13728,17 +13109,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -14079,17 +13449,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -14146,16 +13505,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -14170,17 +13519,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -14245,16 +13583,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -14327,17 +13655,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -15474,17 +14791,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -15559,16 +14865,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -15589,17 +14885,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -15676,16 +14961,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -15781,17 +15056,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -16155,17 +15419,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -16240,16 +15493,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -16270,17 +15513,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -16357,16 +15589,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -16462,17 +15684,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -16836,17 +16047,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -16921,16 +16121,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -16951,17 +16141,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -17038,16 +16217,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -17143,17 +16312,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -17517,17 +16675,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -17602,16 +16749,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -17632,17 +16769,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -17719,16 +16845,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -17824,17 +16940,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -18198,17 +17303,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -18283,16 +17377,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -18313,17 +17397,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -18400,16 +17473,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -18505,17 +17568,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -18879,17 +17931,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -18964,16 +18005,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -18994,17 +18025,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -19081,16 +18101,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -19186,17 +18196,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -19560,17 +18559,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -19645,16 +18633,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -19675,17 +18653,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -19762,16 +18729,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -19867,17 +18824,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -20241,17 +19187,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -20326,16 +19261,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -20356,17 +19281,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -20443,16 +19357,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -20548,17 +19452,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -20922,17 +19815,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -21007,16 +19889,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -21037,17 +19909,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -21124,16 +19985,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -21229,17 +20080,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -21603,17 +20443,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -21688,16 +20517,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -21718,17 +20537,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -21805,16 +20613,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -21910,17 +20708,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -22284,17 +21071,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -22351,16 +21127,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -22381,17 +21147,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -22467,16 +21222,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -22549,17 +21294,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -22955,22 +21689,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10" - } - ], - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -23100,21 +21818,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10" - } - ] - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -23150,22 +21853,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10" - } - ], - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -23291,21 +21978,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10" - } - ] - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -23467,22 +22139,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10" - } - ], - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ],
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index c4aabb72..74062ec 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -2023,18 +2023,6 @@ "gtest_tests": [ { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "priority_adjustment": 30, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--enable-features=NetworkService,NetworkServiceInProcess" ], "name": "network_service_in_process_browser_tests", @@ -2047,7 +2035,7 @@ }, { "args": [ - "--enable-features=NetworkService,ForceWebRequestProxyForTest" + "--enable-features=ForceWebRequestProxyForTest" ], "name": "network_service_web_request_proxy_browser_tests", "swarming": { @@ -2059,29 +2047,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "priority_adjustment": 30 - }, - "test": "components_browsertests" - }, - { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "priority_adjustment": 30, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-features=NetworkService,NetworkServiceInProcess" ], "name": "network_service_in_process_content_browsertests", @@ -2091,51 +2056,6 @@ "shards": 2 }, "test": "content_browsertests" - }, - { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "priority_adjustment": 30 - }, - "test": "extensions_browsertests" - }, - { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "priority_adjustment": 30, - "shards": 3 - }, - "test": "interactive_ui_tests" - } - ], - "isolated_scripts": [ - { - "args": [ - "--additional-driver-flag=--enable-features=NetworkService", - "--num-retries=3" - ], - "isolate_name": "blink_web_tests_exparchive", - "merge": { - "args": [ - "--verbose" - ], - "script": "//third_party/blink/tools/merge_web_test_results.py" - }, - "name": "webkit_layout_tests", - "results_handler": "layout tests", - "swarming": { - "can_use_on_swarming_builders": true, - "priority_adjustment": 30, - "shards": 12 - } } ] }, @@ -2143,17 +2063,6 @@ "gtest_tests": [ { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--enable-features=NetworkService,NetworkServiceInProcess" ], "name": "network_service_in_process_browser_tests", @@ -2165,7 +2074,7 @@ }, { "args": [ - "--enable-features=NetworkService,ForceWebRequestProxyForTest" + "--enable-features=ForceWebRequestProxyForTest" ], "name": "network_service_web_request_proxy_browser_tests", "swarming": { @@ -2187,27 +2096,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-features=NetworkService,NetworkServiceInProcess" ], "name": "network_service_in_process_content_browsertests", @@ -2260,53 +2148,11 @@ "test": "content_unittests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, "test": "services_unittests" } - ], - "isolated_scripts": [ - { - "args": [ - "--additional-driver-flag=--enable-features=NetworkService", - "--num-retries=3" - ], - "isolate_name": "blink_web_tests_exparchive", - "merge": { - "args": [ - "--verbose" - ], - "script": "//third_party/blink/tools/merge_web_test_results.py" - }, - "name": "webkit_layout_tests", - "results_handler": "layout tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 12 - } - } ] }, "Site Isolation Android": { @@ -2609,16 +2455,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": false - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -2692,16 +2528,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": false - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": false }, @@ -2721,16 +2547,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": false - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -2807,16 +2623,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": false - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": false }, @@ -2906,16 +2712,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": false - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -6131,17 +5927,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -6198,16 +5983,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -6228,17 +6003,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -6314,16 +6078,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -6396,17 +6150,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -6920,18 +6663,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "isolate_coverage_data": true, - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -6996,17 +6727,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "isolate_coverage_data": true, - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "isolate_coverage_data": true, "swarming": { "can_use_on_swarming_builders": true @@ -7030,18 +6750,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "isolate_coverage_data": true, - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -7116,17 +6824,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "isolate_coverage_data": true, - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "isolate_coverage_data": true, "swarming": { "can_use_on_swarming_builders": true @@ -7210,18 +6907,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "isolate_coverage_data": true, - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -10335,17 +10020,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -10402,16 +10076,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -10432,17 +10096,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -10518,16 +10171,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -10600,17 +10243,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -11054,120 +10686,7 @@ "all" ] }, - "mac-mojo-rel": { - "gtest_tests": [ - { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "none", - "os": "Mac-10.13" - } - ], - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "none", - "os": "Mac-10.13" - } - ] - }, - "test": "components_browsertests" - }, - { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "none", - "os": "Mac-10.13" - } - ], - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "none", - "os": "Mac-10.13" - } - ] - }, - "test": "extensions_browsertests" - }, - { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "none", - "os": "Mac-10.13" - } - ], - "shards": 3 - }, - "test": "interactive_ui_tests" - } - ], - "isolated_scripts": [ - { - "args": [ - "--additional-driver-flag=--enable-features=NetworkService", - "--num-retries=3" - ], - "isolate_name": "blink_web_tests_exparchive", - "merge": { - "args": [ - "--verbose" - ], - "script": "//third_party/blink/tools/merge_web_test_results.py" - }, - "name": "webkit_layout_tests", - "results_handler": "layout tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "none", - "os": "Mac-10.13" - } - ], - "shards": 12 - } - } - ] - }, + "mac-mojo-rel": {}, "mac-osxbeta-rel": { "gtest_tests": [ { @@ -11334,24 +10853,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.14" - } - ], - "expiration": 21600, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=VizDisplayCompositor" ], "name": "non_viz_browser_tests", @@ -11482,23 +10983,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.14" - } - ], - "expiration": 21600 - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -11527,24 +11011,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.14" - } - ], - "expiration": 21600, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--disable-features=VizDisplayCompositor" ], "name": "non_viz_content_browsertests", @@ -11749,23 +11215,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.14" - } - ], - "expiration": 21600 - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -11915,24 +11364,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.14" - } - ], - "expiration": 21600, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ],
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json index 3254dc0b..22185c6 100644 --- a/testing/buildbot/chromium.linux.json +++ b/testing/buildbot/chromium.linux.json
@@ -1134,17 +1134,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -1201,16 +1190,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -1231,17 +1210,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -1317,16 +1285,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -1399,17 +1357,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -1937,17 +1884,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -2004,16 +1940,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -2034,17 +1960,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -2120,16 +2035,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -2202,17 +2107,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -2508,6 +2402,31 @@ } }, { + "args": [ + "--additional-driver-flag=--disable-features=NetworkService", + "--num-retries=3", + "--debug" + ], + "isolate_name": "blink_web_tests_exparchive", + "merge": { + "args": [ + "--verbose" + ], + "script": "//third_party/blink/tools/merge_web_test_results.py" + }, + "name": "non_network_service_webkit_layout_tests", + "results_handler": "layout tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ], + "shards": 20 + } + }, + { "isolate_name": "telemetry_gpu_unittests", "name": "telemetry_gpu_unittests", "swarming": { @@ -2676,17 +2595,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -2743,16 +2651,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -2773,17 +2671,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -2859,16 +2746,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -2941,17 +2818,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -3472,22 +3338,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ], - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -3584,21 +3434,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ] - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -3634,22 +3469,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ], - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -3780,21 +3599,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ] - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -3922,22 +3726,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ], - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ],
diff --git a/testing/buildbot/chromium.mac.json b/testing/buildbot/chromium.mac.json index d788972..949639e3 100644 --- a/testing/buildbot/chromium.mac.json +++ b/testing/buildbot/chromium.mac.json
@@ -2487,23 +2487,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.12.6" - } - ], - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -2608,22 +2591,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.12.6" - } - ] - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2650,23 +2617,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.12.6" - } - ], - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -2791,22 +2741,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.12.6" - } - ] - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2945,23 +2879,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.12.6" - } - ], - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ],
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json index 53f8b3e..55c77398 100644 --- a/testing/buildbot/chromium.memory.json +++ b/testing/buildbot/chromium.memory.json
@@ -3591,17 +3591,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -3658,16 +3647,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -3688,17 +3667,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -3763,16 +3731,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -3881,17 +3839,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -6865,24 +6812,6 @@ }, { "args": [ - "--enable-features=NetworkService", - "--test-launcher-print-test-stdio=always" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "os": "Ubuntu-14.04" - } - ], - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter", "--test-launcher-print-test-stdio=always" @@ -7008,23 +6937,6 @@ }, { "args": [ - "--enable-features=NetworkService", - "--test-launcher-print-test-stdio=always" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "os": "Ubuntu-14.04" - } - ] - }, - "test": "components_browsertests" - }, - { - "args": [ "--test-launcher-print-test-stdio=always" ], "swarming": { @@ -7071,24 +6983,6 @@ }, { "args": [ - "--enable-features=NetworkService", - "--test-launcher-print-test-stdio=always" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "os": "Ubuntu-14.04" - } - ], - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*", "--test-launcher-print-test-stdio=always" @@ -7242,23 +7136,6 @@ }, { "args": [ - "--enable-features=NetworkService", - "--test-launcher-print-test-stdio=always" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "os": "Ubuntu-14.04" - } - ] - }, - "test": "extensions_browsertests" - }, - { - "args": [ "--test-launcher-print-test-stdio=always" ], "swarming": { @@ -7442,24 +7319,6 @@ }, { "args": [ - "--enable-features=NetworkService", - "--test-launcher-print-test-stdio=always" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "os": "Ubuntu-14.04" - } - ], - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter", "--test-launcher-print-test-stdio=always" @@ -9825,22 +9684,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ], - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -9970,21 +9813,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ] - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -10020,22 +9848,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ], - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -10172,21 +9984,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ] - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -10348,22 +10145,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Windows-10-15063" - } - ], - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ],
diff --git a/testing/buildbot/chromium.win.json b/testing/buildbot/chromium.win.json index 8e0cb978..43333734 100644 --- a/testing/buildbot/chromium.win.json +++ b/testing/buildbot/chromium.win.json
@@ -112,17 +112,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -197,16 +186,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -227,17 +206,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -314,16 +282,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -419,17 +377,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -1000,24 +947,6 @@ }, { "args": [ - "--enable-features=NetworkService", - "--disable-features=WebRTC-H264WithOpenH264FFmpeg" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "os": "Windows-10-15063" - } - ], - "shards": 20 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -1158,22 +1087,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "os": "Windows-10-15063" - } - ] - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1215,23 +1128,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "os": "Windows-10-15063" - } - ], - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -1380,22 +1276,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "os": "Windows-10-15063" - } - ] - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1571,23 +1451,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "os": "Windows-10-15063" - } - ], - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -2778,24 +2641,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "experiment_percentage": 100, - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "os": "Windows-10-15063" - } - ], - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ], @@ -4387,17 +4232,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -4472,16 +4306,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -4502,17 +4326,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -4589,16 +4402,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true }, @@ -4694,17 +4497,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ],
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index 2cb77c3..41be928 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -921,6 +921,27 @@ }, }, }, + 'non_network_service_webkit_layout_tests' : { + 'remove_from': [ + 'Linux Tests (dbg)(1)(32)', # 32-bit linux is unsupported + ], + 'modifications': { + 'Linux Tests (dbg)(1)': { + 'args': [ + '--debug', + ], + 'swarming': { + 'dimension_sets': [ + { + # TODO(kbr): this is essentially redundant. + 'os': 'Ubuntu-14.04', + }, + ], + 'shards': 20, + }, + }, + }, + }, 'non_single_process_mash_browser_tests': { 'modifications': { # chromium.chromiumos
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 5a5b6ad..b89d92b9 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -3819,30 +3819,6 @@ 'wayland_client_perftests': {}, }, - 'mojo_network_isolated_scripts': { - 'webkit_layout_tests': { - 'args': [ - '--additional-driver-flag=--enable-features=NetworkService', - - # layout test failures are retried 3 times when '--test-list' is not - # passed, but 0 times when '--test-list' is passed. We want to always - # retry 3 times, so we explicitly specify it. - '--num-retries=3', - ], - 'isolate_name': 'blink_web_tests_exparchive', - 'merge': { - 'args': [ - '--verbose', - ], - 'script': '//third_party/blink/tools/merge_web_test_results.py', - }, - 'results_handler': 'layout tests', - 'swarming': { - 'shards': 12, - }, - }, - }, - 'mojo_windows_specific_gtests': { 'services_unittests': {}, }, @@ -3942,7 +3918,7 @@ 'network_service_fyi_gtests': { 'network_service_web_request_proxy_browser_tests': { 'args': [ - '--enable-features=NetworkService,ForceWebRequestProxyForTest', + '--enable-features=ForceWebRequestProxyForTest', ], 'swarming': { 'shards': 15, @@ -4081,6 +4057,30 @@ 'crashpad_tests': {}, }, + 'non_network_service_isolated_scripts': { + 'non_network_service_webkit_layout_tests': { + 'args': [ + '--additional-driver-flag=--disable-features=NetworkService', + + # layout test failures are retried 3 times when '--test-list' is not + # passed, but 0 times when '--test-list' is passed. We want to always + # retry 3 times, so we explicitly specify it. + '--num-retries=3', + ], + 'isolate_name': 'blink_web_tests_exparchive', + 'merge': { + 'args': [ + '--verbose', + ], + 'script': '//third_party/blink/tools/merge_web_test_results.py', + }, + 'results_handler': 'layout tests', + 'swarming': { + 'shards': 12, + }, + }, + }, + 'non_viz_fyi_chromium_gtests': { 'non_viz_content_browsertests': { 'args': [ @@ -4518,7 +4518,6 @@ 'chromium_gtests_for_linux_and_chromeos_only', 'chromium_gtests_for_win_and_linux_only', 'linux_flavor_specific_chromium_gtests', - 'network_service_gtests', 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', 'vr_platform_specific_chromium_gtests', @@ -4545,7 +4544,6 @@ 'chromium_gtests_for_linux_and_chromeos_only', 'chromium_gtests_for_win_and_linux_only', 'linux_flavor_specific_chromium_gtests', - 'network_service_gtests', 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', 'vr_platform_specific_chromium_gtests', @@ -4554,6 +4552,7 @@ 'chromium_linux_dbg_isolated_scripts': [ 'desktop_chromium_isolated_scripts', 'linux_specific_chromium_isolated_scripts', + 'non_network_service_isolated_scripts', 'telemetry_perf_unittests_isolated_scripts', ], @@ -4565,7 +4564,6 @@ 'chromium_gtests_for_win_and_linux_only', 'linux_flavor_specific_chromium_gtests', 'linux_specific_xr_gtests', - 'network_service_gtests', 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', 'skia_renderer_gtests', @@ -4584,7 +4582,6 @@ 'chromium_gtests', 'chromium_gtests_for_devices_with_graphical_output', 'mac_specific_chromium_gtests', - 'network_service_gtests', 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', 'non_linux_chromium_gtests', @@ -4598,7 +4595,6 @@ 'chromium_gtests', 'chromium_gtests_for_devices_with_graphical_output', 'mac_specific_chromium_gtests', - 'network_service_gtests', 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', 'non_linux_chromium_gtests', @@ -4616,7 +4612,6 @@ 'chromium_gtests', 'chromium_gtests_for_devices_with_graphical_output', 'chromium_gtests_for_win_and_linux_only', - 'network_service_gtests', 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', 'non_linux_chromium_gtests', @@ -5003,14 +4998,12 @@ ], 'mojo_linux_gtests': [ - 'network_service_gtests', 'network_service_fyi_gtests', 'network_service_in_process_gtests', ], 'mojo_windows_gtests': [ 'mojo_windows_specific_gtests', - 'network_service_gtests', 'network_service_fyi_gtests', 'network_service_in_process_gtests', 'non_viz_fyi_chromium_gtests',
diff --git a/testing/buildbot/tryserver.chromium.linux.json b/testing/buildbot/tryserver.chromium.linux.json index 4fd99cae..90f517f 100644 --- a/testing/buildbot/tryserver.chromium.linux.json +++ b/testing/buildbot/tryserver.chromium.linux.json
@@ -98,18 +98,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "isolate_coverage_data": true, - "name": "network_service_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 15 - }, - "test": "browser_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_browser_tests.filter" ], @@ -174,17 +162,6 @@ "test": "components_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "isolate_coverage_data": true, - "name": "network_service_components_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "components_browsertests" - }, - { "isolate_coverage_data": true, "swarming": { "can_use_on_swarming_builders": true @@ -208,18 +185,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "isolate_coverage_data": true, - "name": "network_service_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { - "args": [ "--enable-perfetto", "--gtest_filter=TracingControllerTest.*" ], @@ -294,17 +259,6 @@ "test": "extensions_browsertests" }, { - "args": [ - "--enable-features=NetworkService" - ], - "isolate_coverage_data": true, - "name": "network_service_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "extensions_browsertests" - }, - { "isolate_coverage_data": true, "swarming": { "can_use_on_swarming_builders": true @@ -388,18 +342,6 @@ }, { "args": [ - "--enable-features=NetworkService" - ], - "isolate_coverage_data": true, - "name": "network_service_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 3 - }, - "test": "interactive_ui_tests" - }, - { - "args": [ "--disable-features=WebUIPolymer2", "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer1_interactive_ui_tests.filter" ],
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index 7d1e57a..964e434c 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -1204,13 +1204,11 @@ }, 'test_suites': { 'gtest_tests': 'mojo_linux_gtests', - 'isolated_scripts': 'mojo_network_isolated_scripts', }, }, 'Mojo Windows': { 'test_suites': { 'gtest_tests': 'mojo_windows_gtests', - 'isolated_scripts': 'mojo_network_isolated_scripts', }, }, 'Site Isolation Android': { @@ -1528,10 +1526,6 @@ 'mac_10.13', 'no_gpu', ], - 'test_suites': { - 'gtest_tests': 'network_service_gtests', - 'isolated_scripts': 'mojo_network_isolated_scripts', - }, }, 'mac-osxbeta-rel': { 'mixins': [
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn index 94d12a3..6ec3344e 100644 --- a/third_party/blink/public/BUILD.gn +++ b/third_party/blink/public/BUILD.gn
@@ -166,7 +166,6 @@ "platform/modules/push_messaging/web_push_subscription.h", "platform/modules/push_messaging/web_push_subscription_options.h", "platform/modules/remoteplayback/web_remote_playback_client.h", - "platform/modules/remoteplayback/web_remote_playback_state.h", "platform/modules/service_worker/web_service_worker_clients_info.h", "platform/modules/service_worker/web_service_worker_error.h", "platform/modules/service_worker/web_service_worker_network_provider.h", @@ -217,7 +216,6 @@ "platform/web_content_decryption_module_session.h", "platform/web_content_security_policy.h", "platform/web_content_security_policy_struct.h", - "platform/web_content_setting_callbacks.h", "platform/web_content_settings_client.h", "platform/web_cookie_jar.h", "platform/web_crypto.h",
diff --git a/third_party/blink/public/platform/modules/remoteplayback/web_remote_playback_client.h b/third_party/blink/public/platform/modules/remoteplayback/web_remote_playback_client.h index 10ec2d3a..550df4b7 100644 --- a/third_party/blink/public/platform/modules/remoteplayback/web_remote_playback_client.h +++ b/third_party/blink/public/platform/modules/remoteplayback/web_remote_playback_client.h
@@ -7,7 +7,6 @@ namespace blink { -enum class WebRemotePlaybackState; class WebURL; class WebString; @@ -31,4 +30,4 @@ } // namespace blink -#endif // WebRemotePlaybackState_h +#endif // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_REMOTEPLAYBACK_WEB_REMOTE_PLAYBACK_CLIENT_H_
diff --git a/third_party/blink/public/platform/modules/remoteplayback/web_remote_playback_state.h b/third_party/blink/public/platform/modules/remoteplayback/web_remote_playback_state.h deleted file mode 100644 index 5ca4c4ee..0000000 --- a/third_party/blink/public/platform/modules/remoteplayback/web_remote_playback_state.h +++ /dev/null
@@ -1,18 +0,0 @@ -// Copyright 2016 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_PUBLIC_PLATFORM_MODULES_REMOTEPLAYBACK_WEB_REMOTE_PLAYBACK_STATE_H_ -#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_REMOTEPLAYBACK_WEB_REMOTE_PLAYBACK_STATE_H_ - -namespace blink { - -enum class WebRemotePlaybackState { - kConnecting = 0, - kConnected, - kDisconnected, -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_REMOTEPLAYBACK_WEB_REMOTE_PLAYBACK_STATE_H_
diff --git a/third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h b/third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h index 8eaaf0c..b5b1e80a 100644 --- a/third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h +++ b/third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h
@@ -5,6 +5,8 @@ #ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_SCHEDULER_TEST_RENDERER_SCHEDULER_TEST_SUPPORT_H_ #define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_SCHEDULER_TEST_RENDERER_SCHEDULER_TEST_SUPPORT_H_ +#include <memory> + #include "base/bind.h" namespace base { @@ -17,6 +19,7 @@ namespace scheduler { class WebThreadScheduler; +class WebMockThreadScheduler; // Creates simple scheduling infrastructure for unit tests. // It allows creation of FrameSchedulers and PageSchedulers, but doesn't provide @@ -25,6 +28,11 @@ // create base::debug::ScopedTaskEnvironment. std::unique_ptr<WebThreadScheduler> CreateWebMainThreadSchedulerForTests(); +// Simple scheduling infrastructure for unit tests, with the addition of mocked +// methods. +std::unique_ptr<WebMockThreadScheduler> +CreateMockWebMainThreadSchedulerForTests(); + void RunIdleTasksForTesting(WebThreadScheduler* scheduler, base::OnceClosure callback);
diff --git a/third_party/blink/public/platform/web_content_setting_callbacks.h b/third_party/blink/public/platform/web_content_setting_callbacks.h deleted file mode 100644 index e3d104b..0000000 --- a/third_party/blink/public/platform/web_content_setting_callbacks.h +++ /dev/null
@@ -1,46 +0,0 @@ -// Copyright 2015 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_PUBLIC_PLATFORM_WEB_CONTENT_SETTING_CALLBACKS_H_ -#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_CONTENT_SETTING_CALLBACKS_H_ - -#include "third_party/blink/public/platform/web_private_ptr.h" - -#if INSIDE_BLINK -#include <memory> -#endif - -namespace blink { - -class ContentSettingCallbacks; -class WebContentSettingCallbacksPrivate; - -class WebContentSettingCallbacks { - public: - ~WebContentSettingCallbacks() { Reset(); } - WebContentSettingCallbacks() = default; - WebContentSettingCallbacks(const WebContentSettingCallbacks& c) { Assign(c); } - WebContentSettingCallbacks& operator=(const WebContentSettingCallbacks& c) { - Assign(c); - return *this; - } - - BLINK_PLATFORM_EXPORT void Reset(); - BLINK_PLATFORM_EXPORT void Assign(const WebContentSettingCallbacks&); - -#if INSIDE_BLINK - BLINK_PLATFORM_EXPORT WebContentSettingCallbacks( - std::unique_ptr<ContentSettingCallbacks>&&); -#endif - - BLINK_PLATFORM_EXPORT void DoAllow(); - BLINK_PLATFORM_EXPORT void DoDeny(); - - private: - WebPrivatePtr<WebContentSettingCallbacksPrivate> private_; -}; - -} // namespace blink - -#endif
diff --git a/third_party/blink/public/platform/web_content_settings_client.h b/third_party/blink/public/platform/web_content_settings_client.h index b8721b53..d7da22c 100644 --- a/third_party/blink/public/platform/web_content_settings_client.h +++ b/third_party/blink/public/platform/web_content_settings_client.h
@@ -6,10 +6,11 @@ #define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_CONTENT_SETTINGS_CLIENT_H_ #include <memory> +#include <utility> +#include "base/callback.h" #include "base/time/time.h" #include "third_party/blink/public/platform/web_client_hints_type.h" -#include "third_party/blink/public/platform/web_content_setting_callbacks.h" namespace blink { @@ -32,9 +33,8 @@ // Controls whether access to File System is allowed for this frame. virtual void RequestFileSystemAccessAsync( - const WebContentSettingCallbacks& callbacks) { - WebContentSettingCallbacks permission_callbacks(callbacks); - permission_callbacks.DoAllow(); + base::OnceCallback<void(bool)> callback) { + std::move(callback).Run(true); } // Controls whether images are allowed for this frame.
diff --git a/third_party/blink/renderer/core/animation/number_property_functions.cc b/third_party/blink/renderer/core/animation/number_property_functions.cc index fd3845d..fbbe4e8 100644 --- a/third_party/blink/renderer/core/animation/number_property_functions.cc +++ b/third_party/blink/renderer/core/animation/number_property_functions.cc
@@ -107,10 +107,10 @@ return clampTo<short>(round(value), 1); case CSSPropertyColumnCount: - return clampTo<unsigned short>(round(value), 1); + return clampTo<uint16_t>(round(value), 1); case CSSPropertyColumnRuleWidth: - return clampTo<unsigned short>(round(value)); + return clampTo<uint16_t>(round(value)); case CSSPropertyOrder: case CSSPropertyZIndex:
diff --git a/third_party/blink/renderer/core/css/css_primitive_value.cc b/third_party/blink/renderer/core/css/css_primitive_value.cc index 58b5860..80c23aa 100644 --- a/third_party/blink/renderer/core/css/css_primitive_value.cc +++ b/third_party/blink/renderer/core/css/css_primitive_value.cc
@@ -294,9 +294,9 @@ } template <> -unsigned short CSSPrimitiveValue::ComputeLength( +uint16_t CSSPrimitiveValue::ComputeLength( const CSSToLengthConversionData& conversion_data) const { - return RoundForImpreciseConversion<unsigned short>( + return RoundForImpreciseConversion<uint16_t>( ComputeLengthDouble(conversion_data)); }
diff --git a/third_party/blink/renderer/core/css/css_primitive_value_mappings.h b/third_party/blink/renderer/core/css/css_primitive_value_mappings.h index 90c2e3c0..37338a64 100644 --- a/third_party/blink/renderer/core/css/css_primitive_value_mappings.h +++ b/third_party/blink/renderer/core/css/css_primitive_value_mappings.h
@@ -63,9 +63,9 @@ } template <> -inline unsigned short CSSPrimitiveValue::ConvertTo() const { +inline uint16_t CSSPrimitiveValue::ConvertTo() const { DCHECK(IsNumber()); - return clampTo<unsigned short>(GetDoubleValue()); + return clampTo<uint16_t>(GetDoubleValue()); } template <> @@ -842,8 +842,6 @@ value_id_ = CSSValueCover; break; case EFillSizeType::kSizeNone: - value_id_ = CSSValueNone; - break; case EFillSizeType::kSizeLength: default: NOTREACHED();
diff --git a/third_party/blink/renderer/core/css/invalidation/invalidation_set.cc b/third_party/blink/renderer/core/css/invalidation/invalidation_set.cc index 87d0988..47d3f644 100644 --- a/third_party/blink/renderer/core/css/invalidation/invalidation_set.cc +++ b/third_party/blink/renderer/core/css/invalidation/invalidation_set.cc
@@ -61,7 +61,7 @@ } InvalidationSet::InvalidationSet(InvalidationType type) - : type_(type), + : type_(static_cast<unsigned>(type)), invalidates_self_(false), is_alive_(true) {} @@ -136,7 +136,7 @@ CHECK_NE(&other, this); - if (GetType() == kInvalidateSiblings) { + if (IsSiblingInvalidationSet()) { SiblingInvalidationSet& siblings = ToSiblingInvalidationSet(*this); const SiblingInvalidationSet& other_siblings = ToSiblingInvalidationSet(other); @@ -377,7 +377,7 @@ SiblingInvalidationSet::SiblingInvalidationSet( scoped_refptr<DescendantInvalidationSet> descendants) - : InvalidationSet(kInvalidateSiblings), + : InvalidationSet(InvalidationType::kInvalidateSiblings), max_direct_adjacent_selectors_(1), descendant_invalidation_set_(std::move(descendants)) {}
diff --git a/third_party/blink/renderer/core/css/invalidation/invalidation_set.h b/third_party/blink/renderer/core/css/invalidation/invalidation_set.h index 01694f90..ba089ec 100644 --- a/third_party/blink/renderer/core/css/invalidation/invalidation_set.h +++ b/third_party/blink/renderer/core/css/invalidation/invalidation_set.h
@@ -49,7 +49,7 @@ class Element; class TracedValue; -enum InvalidationType { kInvalidateDescendants, kInvalidateSiblings }; +enum class InvalidationType { kInvalidateDescendants, kInvalidateSiblings }; class InvalidationSet; @@ -99,10 +99,10 @@ return static_cast<InvalidationType>(type_); } bool IsDescendantInvalidationSet() const { - return GetType() == kInvalidateDescendants; + return GetType() == InvalidationType::kInvalidateDescendants; } bool IsSiblingInvalidationSet() const { - return GetType() == kInvalidateSiblings; + return GetType() == InvalidationType::kInvalidateSiblings; } static void CacheTracingFlag(); @@ -394,7 +394,8 @@ } private: - DescendantInvalidationSet() : InvalidationSet(kInvalidateDescendants) {} + DescendantInvalidationSet() + : InvalidationSet(InvalidationType::kInvalidateDescendants) {} }; class CORE_EXPORT SiblingInvalidationSet final : public InvalidationSet {
diff --git a/third_party/blink/renderer/core/css/rule_feature_set.cc b/third_party/blink/renderer/core/css/rule_feature_set.cc index 9d4db03..4577e3b 100644 --- a/third_party/blink/renderer/core/css/rule_feature_set.cc +++ b/third_party/blink/renderer/core/css/rule_feature_set.cc
@@ -223,7 +223,7 @@ // See also InvalidationSet::Combine. scoped_refptr<InvalidationSet> CopyInvalidationSet( const InvalidationSet& invalidation_set) { - if (invalidation_set.GetType() == kInvalidateSiblings) { + if (invalidation_set.IsSiblingInvalidationSet()) { scoped_refptr<InvalidationSet> copy = SiblingInvalidationSet::Create(nullptr); copy->Combine(invalidation_set); @@ -246,7 +246,8 @@ InvalidationType type, PositionType position) { if (invalidation_set && invalidation_set->IsSelfInvalidationSet()) { - if (type == kInvalidateDescendants && position == kSubject) + if (type == InvalidationType::kInvalidateDescendants && + position == kSubject) return *invalidation_set; // If we are retrieving the invalidation set for a simple selector in a non- // rightmost compound, it means we plan to add features to the set. If so, @@ -260,7 +261,7 @@ DCHECK(invalidation_set->HasOneRef()); } if (!invalidation_set) { - if (type == kInvalidateDescendants) { + if (type == InvalidationType::kInvalidateDescendants) { if (position == kSubject) invalidation_set = InvalidationSet::SelfInvalidationSet(); else @@ -279,7 +280,7 @@ if (invalidation_set->GetType() == type) return *invalidation_set; - if (type == kInvalidateDescendants) + if (type == InvalidationType::kInvalidateDescendants) return ToSiblingInvalidationSet(*invalidation_set).EnsureDescendants(); scoped_refptr<InvalidationSet> descendants = invalidation_set; @@ -345,7 +346,7 @@ DescendantInvalidationSet*& descendants, SiblingInvalidationSet*& siblings) { CHECK(invalidation_set->IsAlive()); - if (invalidation_set->GetType() == kInvalidateDescendants) { + if (invalidation_set->IsDescendantInvalidationSet()) { descendants = ToDescendantInvalidationSet(invalidation_set); siblings = nullptr; return; @@ -698,7 +699,8 @@ // Initialize the entry in the invalidation set map for self- // invalidation, if supported. if (InvalidationSet* invalidation_set = InvalidationSetForSimpleSelector( - *simple_selector, kInvalidateDescendants, position)) { + *simple_selector, InvalidationType::kInvalidateDescendants, + position)) { if (invalidation_set == nth_invalidation_set_) features.has_nth_pseudo = true; else if (position == kSubject) @@ -802,7 +804,8 @@ InvalidationSetFeatures& descendant_features) { if (InvalidationSet* invalidation_set = InvalidationSetForSimpleSelector( simple_selector, - sibling_features ? kInvalidateSiblings : kInvalidateDescendants, + sibling_features ? InvalidationType::kInvalidateSiblings + : InvalidationType::kInvalidateDescendants, kAncestor)) { if (!sibling_features || invalidation_set == nth_invalidation_set_) { AddFeaturesToInvalidationSet(*invalidation_set, descendant_features); @@ -1053,7 +1056,7 @@ return; InvalidationSet* invalidation_set = it->value.get(); - if (invalidation_set->GetType() == kInvalidateDescendants) + if (invalidation_set->IsDescendantInvalidationSet()) return; SiblingInvalidationSet* sibling_set = @@ -1099,7 +1102,7 @@ return; InvalidationSet* invalidation_set = it->value.get(); - if (invalidation_set->GetType() == kInvalidateDescendants) + if (invalidation_set->IsDescendantInvalidationSet()) return; SiblingInvalidationSet* sibling_set = @@ -1148,7 +1151,7 @@ return; InvalidationSet* invalidation_set = it->value.get(); - if (invalidation_set->GetType() == kInvalidateDescendants) + if (invalidation_set->IsDescendantInvalidationSet()) return; SiblingInvalidationSet* sibling_set =
diff --git a/third_party/blink/renderer/core/css/rule_feature_set_test.cc b/third_party/blink/renderer/core/css/rule_feature_set_test.cc index 6890475..0b2f5cf 100644 --- a/third_party/blink/renderer/core/css/rule_feature_set_test.cc +++ b/third_party/blink/renderer/core/css/rule_feature_set_test.cc
@@ -316,7 +316,7 @@ // For SiblingInvalidationSets, we also require that the inner // InvalidationSets either don't exist, or have a refcount of 1. - if (it->value->GetType() == kInvalidateSiblings) { + if (it->value->IsSiblingInvalidationSet()) { const SiblingInvalidationSet& sibling_invalidation_set = ToSiblingInvalidationSet(*it->value); bool sibling_descendants_has_one_ref =
diff --git a/third_party/blink/renderer/core/css/select_rule_feature_set.cc b/third_party/blink/renderer/core/css/select_rule_feature_set.cc index 9c0afa5..239b8093 100644 --- a/third_party/blink/renderer/core/css/select_rule_feature_set.cc +++ b/third_party/blink/renderer/core/css/select_rule_feature_set.cc
@@ -42,8 +42,8 @@ selector = CSSSelectorList::Next(*selector)) { for (const CSSSelector* component = selector; component; component = component->TagHistory()) { - if (InvalidationSetForSimpleSelector(*component, kInvalidateDescendants, - kSubject)) { + if (InvalidationSetForSimpleSelector( + *component, InvalidationType::kInvalidateDescendants, kSubject)) { continue; }
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc index cff8cdd..54cb519 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc
@@ -5344,15 +5344,6 @@ } } -bool Document::IsInInvisibleSubframe() const { - if (!LocalOwner()) - return false; // this is a local root element - - // TODO(bokan): This looks like it doesn't work in OOPIF. - DCHECK(GetFrame()); - return !GetFrame()->OwnerLayoutObject(); -} - String Document::cookie(ExceptionState& exception_state) const { if (GetSettings() && !GetSettings()->GetCookieEnabled()) return String();
diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h index 813e3aa..f8e841a 100644 --- a/third_party/blink/renderer/core/dom/document.h +++ b/third_party/blink/renderer/core/dom/document.h
@@ -904,10 +904,6 @@ ScrollbarMode, bool is_display_none); - // Returns true if this document belongs to a frame that the parent document - // made invisible (for instance by setting as style display:none). - bool IsInInvisibleSubframe() const; - String title() const { return title_; } void setTitle(const String&);
diff --git a/third_party/blink/renderer/core/frame/event_handler_registry.cc b/third_party/blink/renderer/core/frame/event_handler_registry.cc index 2b3fbeb..6587794 100644 --- a/third_party/blink/renderer/core/frame/event_handler_registry.cc +++ b/third_party/blink/renderer/core/frame/event_handler_registry.cc
@@ -299,25 +299,23 @@ break; } - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) { - if (handler_class == kTouchStartOrMoveEventBlocking || - handler_class == kTouchStartOrMoveEventBlockingLowLatency) { - if (auto* node = target->ToNode()) { - if (auto* layout_object = node->GetLayoutObject()) { - layout_object->MarkEffectiveWhitelistedTouchActionChanged(); - auto* continuation = layout_object->VirtualContinuation(); - while (continuation) { - continuation->MarkEffectiveWhitelistedTouchActionChanged(); - continuation = continuation->VirtualContinuation(); - } + if (handler_class == kTouchStartOrMoveEventBlocking || + handler_class == kTouchStartOrMoveEventBlockingLowLatency) { + if (auto* node = target->ToNode()) { + if (auto* layout_object = node->GetLayoutObject()) { + layout_object->MarkEffectiveWhitelistedTouchActionChanged(); + auto* continuation = layout_object->VirtualContinuation(); + while (continuation) { + continuation->MarkEffectiveWhitelistedTouchActionChanged(); + continuation = continuation->VirtualContinuation(); } - } else if (auto* dom_window = target->ToLocalDOMWindow()) { - // This event handler is on a window. Ensure the layout view is - // invalidated because the layout view tracks the window's blocking - // touch event rects. - if (auto* layout_view = dom_window->GetFrame()->ContentLayoutObject()) - layout_view->MarkEffectiveWhitelistedTouchActionChanged(); } + } else if (auto* dom_window = target->ToLocalDOMWindow()) { + // This event handler is on a window. Ensure the layout view is + // invalidated because the layout view tracks the window's blocking + // touch event rects. + if (auto* layout_view = dom_window->GetFrame()->ContentLayoutObject()) + layout_view->MarkEffectiveWhitelistedTouchActionChanged(); } } }
diff --git a/third_party/blink/renderer/core/html/html_table_element.cc b/third_party/blink/renderer/core/html/html_table_element.cc index 9bad9c4a..8325798 100644 --- a/third_party/blink/renderer/core/html/html_table_element.cc +++ b/third_party/blink/renderer/core/html/html_table_element.cc
@@ -403,7 +403,7 @@ const AttributeModificationParams& params) { const QualifiedName& name = params.name; CellBorders borders_before = GetCellBorders(); - unsigned short old_padding = padding_; + uint16_t old_padding = padding_; if (name == kBorderAttr) { // FIXME: This attribute is a mess. @@ -431,10 +431,13 @@ else if (DeprecatedEqualIgnoringCase(params.new_value, "all")) rules_attr_ = kAllRules; } else if (params.name == kCellpaddingAttr) { - if (!params.new_value.IsEmpty()) - padding_ = std::max(0, params.new_value.ToInt()); - else + if (!params.new_value.IsEmpty()) { + padding_ = + std::max(0, std::min((int32_t)std::numeric_limits<uint16_t>::max(), + params.new_value.ToInt())); + } else { padding_ = 1; + } } else if (params.name == kColsAttr) { // ### } else {
diff --git a/third_party/blink/renderer/core/html/html_table_element.h b/third_party/blink/renderer/core/html/html_table_element.h index a8a7183..e3955093 100644 --- a/third_party/blink/renderer/core/html/html_table_element.h +++ b/third_party/blink/renderer/core/html/html_table_element.h
@@ -132,7 +132,7 @@ // otherwise). TableRules rules_attr_; - unsigned short padding_; + uint16_t padding_; Member<CSSPropertyValueSet> shared_cell_style_; };
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.cc b/third_party/blink/renderer/core/html/media/html_media_element.cc index 7eed8bec..d24302aff 100644 --- a/third_party/blink/renderer/core/html/media/html_media_element.cc +++ b/third_party/blink/renderer/core/html/media/html_media_element.cc
@@ -34,7 +34,6 @@ #include "base/memory/ptr_util.h" #include "media/base/logging_override_if_enabled.h" #include "third_party/blink/public/platform/modules/remoteplayback/web_remote_playback_client.h" -#include "third_party/blink/public/platform/modules/remoteplayback/web_remote_playback_state.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/task_type.h" #include "third_party/blink/public/platform/web_audio_source_provider.h" @@ -530,12 +529,6 @@ HTMLMediaElement::~HTMLMediaElement() { DVLOG(1) << "~HTMLMediaElement(" << (void*)this << ")"; - - // audio_source_node_ is explicitly cleared by AudioNode::dispose(). - // Since AudioNode::dispose() is guaranteed to be always called before - // the AudioNode is destructed, audio_source_node_ is explicitly cleared - // even if the AudioNode and the HTMLMediaElement die together. - DCHECK(!audio_source_node_); } void HTMLMediaElement::Dispose() { @@ -3901,6 +3894,7 @@ } void HTMLMediaElement::Trace(Visitor* visitor) { + visitor->Trace(audio_source_node_); visitor->Trace(viewport_intersection_observer_); visitor->Trace(played_time_ranges_); visitor->Trace(async_event_queue_); @@ -3922,9 +3916,6 @@ visitor->Trace(media_controls_); visitor->Trace(controls_list_); visitor->Trace(lazy_load_visibility_observer_); - visitor->template RegisterWeakMembers<HTMLMediaElement, - &HTMLMediaElement::ClearWeakMembers>( - this); Supplementable<HTMLMediaElement>::Trace(visitor); HTMLElement::Trace(visitor); ContextLifecycleStateObserver::Trace(visitor); @@ -4083,13 +4074,6 @@ PauseInternal(); } -void HTMLMediaElement::ClearWeakMembers(Visitor* visitor) { - if (!ThreadHeap::IsHeapObjectAlive(audio_source_node_)) { - GetAudioSourceProvider().SetClient(nullptr); - audio_source_node_ = nullptr; - } -} - void HTMLMediaElement::AudioSourceProviderImpl::Wrap( WebAudioSourceProvider* provider) { MutexLocker locker(provide_input_lock);
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.h b/third_party/blink/renderer/core/html/media/html_media_element.h index 9bbeefca..d6c1e1e 100644 --- a/third_party/blink/renderer/core/html/media/html_media_element.h +++ b/third_party/blink/renderer/core/html/media/html_media_element.h
@@ -115,7 +115,6 @@ void Trace(Visitor*) override; - void ClearWeakMembers(Visitor*); WebMediaPlayer* GetWebMediaPlayer() const { return web_media_player_.get(); } // Returns true if the loaded media has a video track. @@ -686,11 +685,9 @@ HeapVector<Member<ScriptPromiseResolver>> play_promise_reject_list_; DOMExceptionCode play_promise_error_code_; - // This is a weak reference, since audio_source_node_ holds a reference to us. - // TODO(Oilpan): Consider making this a strongly traced pointer with oilpan - // where strong cycles are not a problem. - GC_PLUGIN_IGNORE("http://crbug.com/404577") - WeakMember<AudioSourceProviderClient> audio_source_node_; + // HTMLMediaElement and its MediaElementAudioSourceNode in case it is provided + // die together. + Member<AudioSourceProviderClient> audio_source_node_; // AudioClientImpl wraps an AudioSourceProviderClient. // When the audio format is known, Chromium calls setFormat().
diff --git a/third_party/blink/renderer/core/html/media/remote_playback_observer.h b/third_party/blink/renderer/core/html/media/remote_playback_observer.h index 591eecc..12df51825 100644 --- a/third_party/blink/renderer/core/html/media/remote_playback_observer.h +++ b/third_party/blink/renderer/core/html/media/remote_playback_observer.h
@@ -5,9 +5,9 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_HTML_MEDIA_REMOTE_PLAYBACK_OBSERVER_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_MEDIA_REMOTE_PLAYBACK_OBSERVER_H_ -namespace blink { +#include "third_party/blink/public/mojom/presentation/presentation.mojom-blink.h" -enum class WebRemotePlaybackState; +namespace blink { // Interface to be implemented by objects that intend to be notified by remote // playback status changes on an HTMLMediaElement. The object should self-add @@ -16,7 +16,8 @@ public: // Called when the remote playback state is changed. The state is related to // the connection to a remote device. - virtual void OnRemotePlaybackStateChanged(WebRemotePlaybackState) = 0; + virtual void OnRemotePlaybackStateChanged( + mojom::blink::PresentationConnectionState) = 0; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/html/media/video_wake_lock.cc b/third_party/blink/renderer/core/html/media/video_wake_lock.cc index a9e5da87..0c3d96c 100644 --- a/third_party/blink/renderer/core/html/media/video_wake_lock.cc +++ b/third_party/blink/renderer/core/html/media/video_wake_lock.cc
@@ -55,7 +55,8 @@ Update(); } -void VideoWakeLock::OnRemotePlaybackStateChanged(WebRemotePlaybackState state) { +void VideoWakeLock::OnRemotePlaybackStateChanged( + mojom::blink::PresentationConnectionState state) { remote_playback_state_ = state; Update(); } @@ -74,7 +75,8 @@ bool in_picture_in_picture = PictureInPictureController::IsElementInPictureInPicture(&VideoElement()); return playing_ && (page_visible || in_picture_in_picture) && - remote_playback_state_ != WebRemotePlaybackState::kConnected; + remote_playback_state_ != + mojom::blink::PresentationConnectionState::CONNECTED; } void VideoWakeLock::EnsureWakeLockService() {
diff --git a/third_party/blink/renderer/core/html/media/video_wake_lock.h b/third_party/blink/renderer/core/html/media/video_wake_lock.h index bbe5b499..ae38febd 100644 --- a/third_party/blink/renderer/core/html/media/video_wake_lock.h +++ b/third_party/blink/renderer/core/html/media/video_wake_lock.h
@@ -6,7 +6,6 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_MEDIA_VIDEO_WAKE_LOCK_H_ #include "services/device/public/mojom/wake_lock.mojom-blink.h" -#include "third_party/blink/public/platform/modules/remoteplayback/web_remote_playback_state.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/events/native_event_listener.h" #include "third_party/blink/renderer/core/html/media/remote_playback_observer.h" @@ -39,7 +38,8 @@ void Invoke(ExecutionContext*, Event*) final; // RemotePlaybackObserver implementation. - void OnRemotePlaybackStateChanged(WebRemotePlaybackState) final; + void OnRemotePlaybackStateChanged( + mojom::blink::PresentationConnectionState) final; bool active_for_tests() const { return active_; } @@ -73,8 +73,8 @@ bool playing_ = false; bool active_ = false; - WebRemotePlaybackState remote_playback_state_ = - WebRemotePlaybackState::kDisconnected; + mojom::blink::PresentationConnectionState remote_playback_state_ = + mojom::blink::PresentationConnectionState::CLOSED; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/html/media/video_wake_lock_test.cc b/third_party/blink/renderer/core/html/media/video_wake_lock_test.cc index 6e6166e..2635fec6 100644 --- a/third_party/blink/renderer/core/html/media/video_wake_lock_test.cc +++ b/third_party/blink/renderer/core/html/media/video_wake_lock_test.cc
@@ -193,36 +193,36 @@ TEST_F(VideoWakeLockTest, RemotePlaybackDisconnectedDoesNotCancelLock) { SimulatePlaying(); GetVideoWakeLock()->OnRemotePlaybackStateChanged( - WebRemotePlaybackState::kDisconnected); + mojom::blink::PresentationConnectionState::CLOSED); EXPECT_TRUE(GetVideoWakeLock()->active_for_tests()); } TEST_F(VideoWakeLockTest, RemotePlaybackConnectingDoesNotCancelLock) { SimulatePlaying(); GetVideoWakeLock()->OnRemotePlaybackStateChanged( - WebRemotePlaybackState::kConnecting); + mojom::blink::PresentationConnectionState::CONNECTING); EXPECT_TRUE(GetVideoWakeLock()->active_for_tests()); } TEST_F(VideoWakeLockTest, ActiveRemotePlaybackCancelsLock) { SimulatePlaying(); GetVideoWakeLock()->OnRemotePlaybackStateChanged( - WebRemotePlaybackState::kDisconnected); + mojom::blink::PresentationConnectionState::CLOSED); EXPECT_TRUE(GetVideoWakeLock()->active_for_tests()); GetVideoWakeLock()->OnRemotePlaybackStateChanged( - WebRemotePlaybackState::kConnected); + mojom::blink::PresentationConnectionState::CONNECTED); EXPECT_FALSE(GetVideoWakeLock()->active_for_tests()); } TEST_F(VideoWakeLockTest, LeavingRemotePlaybackResumesLock) { SimulatePlaying(); GetVideoWakeLock()->OnRemotePlaybackStateChanged( - WebRemotePlaybackState::kConnected); + mojom::blink::PresentationConnectionState::CONNECTED); EXPECT_FALSE(GetVideoWakeLock()->active_for_tests()); GetVideoWakeLock()->OnRemotePlaybackStateChanged( - WebRemotePlaybackState::kDisconnected); + mojom::blink::PresentationConnectionState::CLOSED); EXPECT_TRUE(GetVideoWakeLock()->active_for_tests()); } @@ -287,7 +287,7 @@ SimulatePlaying(); SimulateEnterPictureInPicture(); GetVideoWakeLock()->OnRemotePlaybackStateChanged( - WebRemotePlaybackState::kConnected); + mojom::blink::PresentationConnectionState::CONNECTED); EXPECT_FALSE(GetVideoWakeLock()->active_for_tests()); }
diff --git a/third_party/blink/renderer/core/html/parser/BUILD.gn b/third_party/blink/renderer/core/html/parser/BUILD.gn index a5b2c93..16e082d 100644 --- a/third_party/blink/renderer/core/html/parser/BUILD.gn +++ b/third_party/blink/renderer/core/html/parser/BUILD.gn
@@ -65,6 +65,8 @@ "parser_synchronization_policy.h", "preload_request.cc", "preload_request.h", + "pump_session.cc", + "pump_session.h", "resource_preloader.cc", "resource_preloader.h", "text_document_parser.cc",
diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser.cc b/third_party/blink/renderer/core/html/parser/html_document_parser.cc index a1509de..a002311d 100644 --- a/third_party/blink/renderer/core/html/parser/html_document_parser.cc +++ b/third_party/blink/renderer/core/html/parser/html_document_parser.cc
@@ -44,6 +44,7 @@ #include "third_party/blink/renderer/core/html/parser/html_parser_scheduler.h" #include "third_party/blink/renderer/core/html/parser/html_resource_preloader.h" #include "third_party/blink/renderer/core/html/parser/html_tree_builder.h" +#include "third_party/blink/renderer/core/html/parser/pump_session.h" #include "third_party/blink/renderer/core/html_names.h" #include "third_party/blink/renderer/core/inspector/inspector_trace_events.h" #include "third_party/blink/renderer/core/loader/document_loader.h"
diff --git a/third_party/blink/renderer/core/html/parser/html_parser_scheduler.cc b/third_party/blink/renderer/core/html/parser/html_parser_scheduler.cc index 646d97aa..c8fbb18 100644 --- a/third_party/blink/renderer/core/html/parser/html_parser_scheduler.cc +++ b/third_party/blink/renderer/core/html/parser/html_parser_scheduler.cc
@@ -35,11 +35,6 @@ namespace blink { -PumpSession::PumpSession(unsigned& nesting_level) - : NestingLevelIncrementer(nesting_level) {} - -PumpSession::~PumpSession() = default; - SpeculationsPumpSession::SpeculationsPumpSession(unsigned& nesting_level) : NestingLevelIncrementer(nesting_level), start_time_(CurrentTime()),
diff --git a/third_party/blink/renderer/core/html/parser/html_parser_scheduler.h b/third_party/blink/renderer/core/html/parser/html_parser_scheduler.h index dd8ca0a3..bff4686 100644 --- a/third_party/blink/renderer/core/html/parser/html_parser_scheduler.h +++ b/third_party/blink/renderer/core/html/parser/html_parser_scheduler.h
@@ -39,14 +39,6 @@ class HTMLDocumentParser; -class PumpSession : public NestingLevelIncrementer { - STACK_ALLOCATED(); - - public: - PumpSession(unsigned& nesting_level); - ~PumpSession(); -}; - class SpeculationsPumpSession : public NestingLevelIncrementer { STACK_ALLOCATED();
diff --git a/third_party/blink/renderer/core/html/parser/pump_session.cc b/third_party/blink/renderer/core/html/parser/pump_session.cc new file mode 100644 index 0000000..39a80ae --- /dev/null +++ b/third_party/blink/renderer/core/html/parser/pump_session.cc
@@ -0,0 +1,14 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/core/html/parser/pump_session.h" + +namespace blink { + +PumpSession::PumpSession(unsigned& nesting_level) + : NestingLevelIncrementer(nesting_level) {} + +PumpSession::~PumpSession() = default; + +} // namespace blink
diff --git a/third_party/blink/renderer/core/html/parser/pump_session.h b/third_party/blink/renderer/core/html/parser/pump_session.h new file mode 100644 index 0000000..9fc3ec0 --- /dev/null +++ b/third_party/blink/renderer/core/html/parser/pump_session.h
@@ -0,0 +1,23 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_HTML_PARSER_PUMP_SESSION_H_ +#define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_PARSER_PUMP_SESSION_H_ + +#include "third_party/blink/renderer/core/html/parser/nesting_level_incrementer.h" +#include "third_party/blink/renderer/platform/wtf/allocator.h" + +namespace blink { + +class PumpSession : public NestingLevelIncrementer { + STACK_ALLOCATED(); + + public: + PumpSession(unsigned& nesting_level); + ~PumpSession(); +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_CORE_HTML_PARSER_PUMP_SESSION_H_
diff --git a/third_party/blink/renderer/core/layout/layout_block_flow.cc b/third_party/blink/renderer/core/layout/layout_block_flow.cc index 39a2a07..b3b0602 100644 --- a/third_party/blink/renderer/core/layout/layout_block_flow.cc +++ b/third_party/blink/renderer/core/layout/layout_block_flow.cc
@@ -2581,27 +2581,6 @@ AddLayoutOverflowFromFloats(); } -void LayoutBlockFlow::ComputeSelfHitTestRects( - Vector<LayoutRect>& rects, - const LayoutPoint& layer_offset) const { - LayoutBlock::ComputeSelfHitTestRects(rects, layer_offset); - - if (!HasHorizontalLayoutOverflow() && !HasVerticalLayoutOverflow()) - return; - - for (RootInlineBox* curr = FirstRootBox(); curr; curr = curr->NextRootBox()) { - LayoutUnit top = std::max<LayoutUnit>(curr->LineTop(), curr->Y()); - LayoutUnit bottom = - std::min<LayoutUnit>(curr->LineBottom(), curr->Y() + curr->Height()); - LayoutRect rect(layer_offset.X() + curr->X(), layer_offset.Y() + top, - curr->Width(), bottom - top); - // It's common for this rect to be entirely contained in our box, so exclude - // that simple case. - if (!rect.IsEmpty() && (rects.IsEmpty() || !rects[0].Contains(rect))) - rects.push_back(rect); - } -} - void LayoutBlockFlow::AbsoluteRects( Vector<IntRect>& rects, const LayoutPoint& accumulated_offset) const {
diff --git a/third_party/blink/renderer/core/layout/layout_block_flow.h b/third_party/blink/renderer/core/layout/layout_block_flow.h index ddd9f6f4..cf83fe1 100644 --- a/third_party/blink/renderer/core/layout/layout_block_flow.h +++ b/third_party/blink/renderer/core/layout/layout_block_flow.h
@@ -491,10 +491,6 @@ void UpdateBlockChildDirtyBitsBeforeLayout(bool relayout_children, LayoutBox&); - - void ComputeSelfHitTestRects(Vector<LayoutRect>&, - const LayoutPoint& layer_offset) const override; - void AbsoluteRects(Vector<IntRect>&, const LayoutPoint& accumulated_offset) const override; void AbsoluteQuads(Vector<FloatQuad>&,
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc index ba28d43f..bf21a63 100644 --- a/third_party/blink/renderer/core/layout/layout_box.cc +++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -358,11 +358,8 @@ } if (diff.TransformChanged()) { - if (ScrollingCoordinator* scrolling_coordinator = - GetDocument().GetFrame()->GetPage()->GetScrollingCoordinator()) { - if (LocalFrame* frame = GetFrame()) - scrolling_coordinator->NotifyTransformChanged(frame, *this); - } + if (auto* coordinator = GetFrame()->GetPage()->GetScrollingCoordinator()) + coordinator->NotifyTransformChanged(GetFrame()); } // Update the script style map, from the new computed style. @@ -960,25 +957,6 @@ StyleRef().Resize() != EResize::kNone; } -void LayoutBox::AddLayerHitTestRects( - LayerHitTestRects& layer_rects, - const PaintLayer* current_layer, - const LayoutPoint& layer_offset, - TouchAction supported_fast_actions, - const LayoutRect& container_rect, - TouchAction container_whitelisted_touch_action) const { - LayoutPoint adjusted_layer_offset = layer_offset + LocationOffset(); - LayoutBoxModelObject::AddLayerHitTestRects( - layer_rects, current_layer, adjusted_layer_offset, supported_fast_actions, - container_rect, container_whitelisted_touch_action); -} - -void LayoutBox::ComputeSelfHitTestRects(Vector<LayoutRect>& rects, - const LayoutPoint& layer_offset) const { - if (!Size().IsEmpty()) - rects.push_back(LayoutRect(layer_offset, Size())); -} - int LayoutBox::VerticalScrollbarWidth() const { if (!HasOverflowClip() || StyleRef().OverflowY() == EOverflow::kOverlay) return 0;
diff --git a/third_party/blink/renderer/core/layout/layout_box.h b/third_party/blink/renderer/core/layout/layout_box.h index 8808682..c7fc0ad 100644 --- a/third_party/blink/renderer/core/layout/layout_box.h +++ b/third_party/blink/renderer/core/layout/layout_box.h
@@ -1388,28 +1388,6 @@ bool HasRelativeLogicalWidth() const; bool HasRelativeLogicalHeight() const; - bool HasHorizontalLayoutOverflow() const { - if (!LayoutOverflowIsSet()) - return false; - - LayoutRect layout_overflow_rect = - overflow_->layout_overflow->LayoutOverflowRect(); - LayoutRect no_overflow_rect = NoOverflowRect(); - return layout_overflow_rect.X() < no_overflow_rect.X() || - layout_overflow_rect.MaxX() > no_overflow_rect.MaxX(); - } - - bool HasVerticalLayoutOverflow() const { - if (!LayoutOverflowIsSet()) - return false; - - LayoutRect layout_overflow_rect = - overflow_->layout_overflow->LayoutOverflowRect(); - LayoutRect no_overflow_rect = NoOverflowRect(); - return layout_overflow_rect.Y() < no_overflow_rect.Y() || - layout_overflow_rect.MaxY() > no_overflow_rect.MaxY(); - } - virtual LayoutBox* CreateAnonymousBoxWithSameTypeAs( const LayoutObject*) const { NOTREACHED(); @@ -1620,15 +1598,6 @@ const HitTestLocation& location_in_container, const LayoutPoint& accumulated_offset, HitTestAction); - void AddLayerHitTestRects( - LayerHitTestRects&, - const PaintLayer* current_composited_layer, - const LayoutPoint& layer_offset, - TouchAction supported_fast_actions, - const LayoutRect& container_rect, - TouchAction container_whitelisted_touch_action) const override; - void ComputeSelfHitTestRects(Vector<LayoutRect>&, - const LayoutPoint& layer_offset) const override; void InvalidatePaint(const PaintInvalidatorContext&) const override;
diff --git a/third_party/blink/renderer/core/layout/layout_box_model_object.cc b/third_party/blink/renderer/core/layout/layout_box_model_object.cc index d8e2018..0909aaa 100644 --- a/third_party/blink/renderer/core/layout/layout_box_model_object.cc +++ b/third_party/blink/renderer/core/layout/layout_box_model_object.cc
@@ -517,34 +517,6 @@ return Layer() ? Layer()->GetScrollableArea() : nullptr; } -void LayoutBoxModelObject::AddLayerHitTestRects( - LayerHitTestRects& rects, - const PaintLayer* current_layer, - const LayoutPoint& layer_offset, - TouchAction supported_fast_actions, - const LayoutRect& container_rect, - TouchAction container_whitelisted_touch_action) const { - if (HasLayer()) { - if (IsLayoutView()) { - // LayoutView is handled with a special fast-path, but it needs to know - // the current layer. - LayoutObject::AddLayerHitTestRects(rects, Layer(), LayoutPoint(), - supported_fast_actions, LayoutRect(), - TouchAction::kTouchActionAuto); - } else { - // Since a LayoutObject never lives outside it's container Layer, we can - // switch to marking entire layers instead. This may sometimes mark more - // than necessary (when a layer is made of disjoint objects) but in - // practice is a significant performance savings. - Layer()->AddLayerHitTestRects(rects, supported_fast_actions); - } - } else { - LayoutObject::AddLayerHitTestRects(rects, current_layer, layer_offset, - supported_fast_actions, container_rect, - container_whitelisted_touch_action); - } -} - void LayoutBoxModelObject::AddOutlineRectsForNormalChildren( Vector<LayoutRect>& rects, const LayoutPoint& additional_offset, @@ -1239,19 +1211,6 @@ } } -void LayoutBoxModelObject::ComputeLayerHitTestRects( - LayerHitTestRects& rects, - TouchAction supported_fast_actions) const { - LayoutObject::ComputeLayerHitTestRects(rects, supported_fast_actions); - - // If there is a continuation then we need to consult it here, since this is - // the root of the tree walk and it wouldn't otherwise get picked up. - // Continuations should always be siblings in the tree, so any others should - // get picked up already by the tree walk. - if (Continuation()) - Continuation()->ComputeLayerHitTestRects(rects, supported_fast_actions); -} - LayoutRect LayoutBoxModelObject::LocalCaretRectForEmptyElement( LayoutUnit width, LayoutUnit text_indent_offset) const {
diff --git a/third_party/blink/renderer/core/layout/layout_box_model_object.h b/third_party/blink/renderer/core/layout/layout_box_model_object.h index a318f31b..bbf1d964 100644 --- a/third_party/blink/renderer/core/layout/layout_box_model_object.h +++ b/third_party/blink/renderer/core/layout/layout_box_model_object.h
@@ -416,8 +416,6 @@ void ContentChanged(ContentChangeType); bool HasAcceleratedCompositing() const; - void ComputeLayerHitTestRects(LayerHitTestRects&, TouchAction) const override; - // Returns true if the background is painted opaque in the given rect. // The query rect is given in local coordinate system. virtual bool BackgroundIsKnownToBeOpaqueInRect(const LayoutRect&) const { @@ -501,13 +499,6 @@ const LayoutPoint& additional_offset, NGOutlineType) const; - void AddLayerHitTestRects(LayerHitTestRects&, - const PaintLayer*, - const LayoutPoint&, - TouchAction, - const LayoutRect&, - TouchAction) const override; - void StyleWillChange(StyleDifference, const ComputedStyle& new_style) override; void StyleDidChange(StyleDifference, const ComputedStyle* old_style) override;
diff --git a/third_party/blink/renderer/core/layout/layout_flexible_box.cc b/third_party/blink/renderer/core/layout/layout_flexible_box.cc index f790c756..251a195 100644 --- a/third_party/blink/renderer/core/layout/layout_flexible_box.cc +++ b/third_party/blink/renderer/core/layout/layout_flexible_box.cc
@@ -525,7 +525,8 @@ if (!CrossAxisLengthIsDefinite(child, child.StyleRef().LogicalWidth())) { MinMaxSize sizes{child.MinPreferredLogicalWidth(), child.MaxPreferredLogicalWidth()}; - return sizes.ShrinkToFit(ContentLogicalWidth()); + return sizes.ShrinkToFit(ContentLogicalWidth() - + child.MarginLogicalWidth()); } return child.LogicalWidth();
diff --git a/third_party/blink/renderer/core/layout/layout_inline.cc b/third_party/blink/renderer/core/layout/layout_inline.cc index 93361bc..d880fb0 100644 --- a/third_party/blink/renderer/core/layout/layout_inline.cc +++ b/third_party/blink/renderer/core/layout/layout_inline.cc
@@ -1794,13 +1794,6 @@ return FloatRect(UnionRect(rects)); } -void LayoutInline::ComputeSelfHitTestRects( - Vector<LayoutRect>& rects, - const LayoutPoint& layer_offset) const { - AbsoluteLayoutRectsGeneratorContext context(rects, layer_offset); - GenerateLineBoxRects(context); -} - void LayoutInline::AddAnnotatedRegions(Vector<AnnotatedRegionValue>& regions) { // Convert the style regions to absolute coordinates. if (StyleRef().Visibility() != EVisibility::kVisible)
diff --git a/third_party/blink/renderer/core/layout/layout_inline.h b/third_party/blink/renderer/core/layout/layout_inline.h index 0677db9..8e88a9e 100644 --- a/third_party/blink/renderer/core/layout/layout_inline.h +++ b/third_party/blink/renderer/core/layout/layout_inline.h
@@ -266,9 +266,6 @@ void StyleDidChange(StyleDifference, const ComputedStyle* old_style) override; - void ComputeSelfHitTestRects(Vector<LayoutRect>& rects, - const LayoutPoint& layer_offset) const override; - void InvalidateDisplayItemClients(PaintInvalidationReason) const override; void AbsoluteQuadsForSelf(Vector<FloatQuad>& quads,
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc index fc17a78..53e0e1f2 100644 --- a/third_party/blink/renderer/core/layout/layout_object.cc +++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -2343,8 +2343,7 @@ registry.DidRemoveEventHandler(*GetNode(), EventHandlerRegistry::kTouchAction); } - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) - MarkEffectiveWhitelistedTouchActionChanged(); + MarkEffectiveWhitelistedTouchActionChanged(); } } @@ -3029,118 +3028,6 @@ return LayoutRect(); } -void LayoutObject::ComputeLayerHitTestRects( - LayerHitTestRects& layer_rects, - TouchAction supported_fast_actions) const { - // Figure out what layer our container is in. Any offset (or new layer) for - // this layoutObject within it's container will be applied in - // addLayerHitTestRects. - LayoutPoint layer_offset; - const PaintLayer* current_layer = nullptr; - - if (!HasLayer()) { - LayoutObject* container = Container(); - if (container) { - current_layer = container->EnclosingLayer(); - if (current_layer->GetLayoutObject() != container) { - layer_offset.Move(container->OffsetFromAncestor( - ¤t_layer->GetLayoutObject())); - // If the layer itself is scrolled, we have to undo the subtraction of - // its scroll offset since we want the offset relative to the scrolling - // content, not the element itself. - if (current_layer->GetLayoutObject().HasOverflowClip()) { - layer_offset.Move( - current_layer->GetLayoutBox()->ScrolledContentOffset()); - } - } - } - } - - AddLayerHitTestRects(layer_rects, current_layer, layer_offset, - supported_fast_actions, LayoutRect(), - TouchAction::kTouchActionAuto); -} - -void LayoutObject::AddLayerHitTestRects( - LayerHitTestRects& layer_rects, - const PaintLayer* current_layer, - const LayoutPoint& layer_offset, - TouchAction supported_fast_actions, - const LayoutRect& container_rect, - TouchAction container_whitelisted_touch_action) const { - DCHECK(current_layer); - DCHECK_EQ(current_layer, EnclosingLayer()); - - // Compute the rects for this layoutObject only and add them to the results. - // Note that we could avoid passing the offset and instead adjust each result, - // but this seems slightly simpler. - Vector<LayoutRect> own_rects; - LayoutRect new_container_rect; - TouchAction new_container_whitelisted_touch_action = - TouchAction::kTouchActionAuto; - ComputeSelfHitTestRects(own_rects, layer_offset); - - // When we get to have a lot of rects on a layer, the performance cost of - // tracking those rects outweighs the benefit of doing compositor thread hit - // testing. - // FIXME: This limit needs to be low due to the O(n^2) algorithm in - // ScrollingCoordinator::SetTouchEventTargetRects() - crbug.com/300282. - const wtf_size_t kMaxRectsPerLayer = 100; - - LayerHitTestRects::iterator iter = layer_rects.find(current_layer); - Vector<HitTestRect>* iter_value; - if (iter == layer_rects.end()) { - iter_value = &layer_rects.insert(current_layer, Vector<HitTestRect>()) - .stored_value->value; - } else { - iter_value = &iter->value; - } - TouchAction whitelisted_touch_action = - StyleRef().GetEffectiveTouchAction() & supported_fast_actions; - for (wtf_size_t i = 0; i < own_rects.size(); i++) { - // If we have a different touch action than the container the rect needs to - // be reported even if it is contained. - if (whitelisted_touch_action != container_whitelisted_touch_action || - !container_rect.Contains(own_rects[i])) { - iter_value->push_back( - HitTestRect(own_rects[i], whitelisted_touch_action)); - if (iter_value->size() > kMaxRectsPerLayer) { - // Just mark the entire layer instead, and switch to walking the layer - // tree instead of the layout tree. - layer_rects.erase(current_layer); - current_layer->AddLayerHitTestRects(layer_rects, - supported_fast_actions); - return; - } - if (new_container_rect.IsEmpty()) { - new_container_whitelisted_touch_action = whitelisted_touch_action; - new_container_rect = own_rects[i]; - } - } - } - if (new_container_rect.IsEmpty()) { - new_container_whitelisted_touch_action = container_whitelisted_touch_action; - new_container_rect = container_rect; - } - - // If it's possible for children to have rects outside our bounds, then we - // need to descend into the children and compute them. - // Ideally there would be other cases where we could detect that children - // couldn't have rects outside our bounds and prune the tree walk. - // Note that we don't use Region here because Union is O(N) - better to just - // keep a list of partially redundant rectangles. If we find examples where - // this is expensive, then we could rewrite Region to be more efficient. See - // https://bugs.webkit.org/show_bug.cgi?id=100814. - if (!IsLayoutView()) { - for (LayoutObject* curr = SlowFirstChild(); curr; - curr = curr->NextSibling()) { - curr->AddLayerHitTestRects(layer_rects, current_layer, layer_offset, - supported_fast_actions, new_container_rect, - new_container_whitelisted_touch_action); - } - } -} - bool LayoutObject::IsRooted() const { const LayoutObject* object = this; while (object->Parent() && !object->HasLayer())
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h index 624c0ca..33b219c2 100644 --- a/third_party/blink/renderer/core/layout/layout_object.h +++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -54,7 +54,6 @@ #include "third_party/blink/renderer/platform/geometry/float_quad.h" #include "third_party/blink/renderer/platform/geometry/layout_rect.h" #include "third_party/blink/renderer/platform/graphics/compositing_reasons.h" -#include "third_party/blink/renderer/platform/graphics/hit_test_rect.h" #include "third_party/blink/renderer/platform/graphics/image_orientation.h" #include "third_party/blink/renderer/platform/graphics/paint/display_item_client.h" #include "third_party/blink/renderer/platform/graphics/paint_invalidation_reason.h" @@ -1805,10 +1804,6 @@ bitfields_.SetContainsInlineWithOutlineAndContinuation(b); } - // Compute a list of hit-test rectangles per layer rooted at this - // layoutObject with at most the given touch action. - virtual void ComputeLayerHitTestRects(LayerHitTestRects&, TouchAction) const; - static RespectImageOrientationEnum ShouldRespectImageOrientation( const LayoutObject*); @@ -2330,29 +2325,6 @@ node_ = document; } - // Add hit-test rects for the layout tree rooted at this node to the provided - // collection on a per-Layer basis. - // currentLayer must be the enclosing layer, and layerOffset is the current - // offset within this layer. Subclass implementations will add any offset for - // this layoutObject within it's container, so callers should provide only the - // offset of the container within it's layer. - // containerRect is a rect that has already been added for the currentLayer - // which is likely to be a container for child elements. Any rect wholly - // contained by containerRect can be skipped. - virtual void AddLayerHitTestRects( - LayerHitTestRects&, - const PaintLayer* current_layer, - const LayoutPoint& layer_offset, - TouchAction supported_fast_actions, - const LayoutRect& container_rect, - TouchAction container_whitelisted_touch_action) const; - - // Add hit-test rects for this layoutObject only to the provided list. - // layerOffset is the offset of this layoutObject within the current layer - // that should be used for each result. - virtual void ComputeSelfHitTestRects(Vector<LayoutRect>&, - const LayoutPoint& layer_offset) const {} - #if DCHECK_IS_ON() virtual bool PaintInvalidationStateIsDirty() const; #endif
diff --git a/third_party/blink/renderer/core/layout/layout_table_cell.cc b/third_party/blink/renderer/core/layout/layout_table_cell.cc index 482bfd8..4bf0743 100644 --- a/third_party/blink/renderer/core/layout/layout_table_cell.cc +++ b/third_party/blink/renderer/core/layout/layout_table_cell.cc
@@ -214,24 +214,6 @@ } } -void LayoutTableCell::AddLayerHitTestRects( - LayerHitTestRects& layer_rects, - const PaintLayer* current_layer, - const LayoutPoint& layer_offset, - TouchAction supported_fast_actions, - const LayoutRect& container_rect, - TouchAction container_whitelisted_touch_action) const { - LayoutPoint adjusted_layer_offset = layer_offset; - // LayoutTableCell's location includes the offset of it's containing - // LayoutTableRow, so we need to subtract that again here (as for - // LayoutTableCell::offsetFromContainer. - if (Parent()) - adjusted_layer_offset -= ParentBox()->LocationOffset(); - LayoutBox::AddLayerHitTestRects( - layer_rects, current_layer, adjusted_layer_offset, supported_fast_actions, - container_rect, container_whitelisted_touch_action); -} - void LayoutTableCell::ComputeIntrinsicPadding(int collapsed_height, int row_height, EVerticalAlign vertical_align,
diff --git a/third_party/blink/renderer/core/layout/layout_table_cell.h b/third_party/blink/renderer/core/layout/layout_table_cell.h index f6bfb601..4e56ea1 100644 --- a/third_party/blink/renderer/core/layout/layout_table_cell.h +++ b/third_party/blink/renderer/core/layout/layout_table_cell.h
@@ -347,14 +347,6 @@ void StyleDidChange(StyleDifference, const ComputedStyle* old_style) override; void ComputePreferredLogicalWidths() override; - void AddLayerHitTestRects( - LayerHitTestRects&, - const PaintLayer* current_composited_layer, - const LayoutPoint& layer_offset, - TouchAction supported_fast_actions, - const LayoutRect& container_rect, - TouchAction container_whitelisted_touch_action) const override; - void InvalidatePaint(const PaintInvalidatorContext&) const override; LayoutSize OffsetFromContainerInternal(
diff --git a/third_party/blink/renderer/core/layout/layout_text.cc b/third_party/blink/renderer/core/layout/layout_text.cc index 2138b179f..d4003128 100644 --- a/third_party/blink/renderer/core/layout/layout_text.cc +++ b/third_party/blink/renderer/core/layout/layout_text.cc
@@ -1798,16 +1798,6 @@ return prev; } -void LayoutText::AddLayerHitTestRects( - LayerHitTestRects&, - const PaintLayer* current_layer, - const LayoutPoint& layer_offset, - TouchAction supported_fast_actions, - const LayoutRect& container_rect, - TouchAction container_whitelisted_touch_action) const { - // Text nodes aren't event targets, so don't descend any further. -} - void LayoutText::SetTextInternal(scoped_refptr<StringImpl> text) { DCHECK(text); text_ = String(std::move(text));
diff --git a/third_party/blink/renderer/core/layout/layout_text.h b/third_party/blink/renderer/core/layout/layout_text.h index 0cc567b..3637bc9 100644 --- a/third_party/blink/renderer/core/layout/layout_text.h +++ b/third_party/blink/renderer/core/layout/layout_text.h
@@ -332,14 +332,6 @@ void InLayoutNGInlineFormattingContextWillChange(bool) final; - void AddLayerHitTestRects( - LayerHitTestRects&, - const PaintLayer* current_layer, - const LayoutPoint& layer_offset, - TouchAction supported_fast_actions, - const LayoutRect& container_rect, - TouchAction container_whitelisted_touch_action) const override; - virtual InlineTextBox* CreateTextBox(int start, uint16_t length); // Subclassed by SVG.
diff --git a/third_party/blink/renderer/core/layout/layout_view.cc b/third_party/blink/renderer/core/layout/layout_view.cc index 163b6ac..c4152b7 100644 --- a/third_party/blink/renderer/core/layout/layout_view.cc +++ b/third_party/blink/renderer/core/layout/layout_view.cc
@@ -433,16 +433,6 @@ transform_state.Move(OffsetForFixedPosition()); } -void LayoutView::ComputeSelfHitTestRects(Vector<LayoutRect>& rects, - const LayoutPoint&) const { - // Record the entire size of the contents of the frame. Note that we don't - // just use the viewport size (containing block) here because we want to - // ensure this includes all children (so we can avoid walking them - // explicitly). - rects.push_back( - LayoutRect(LayoutPoint::Zero(), LayoutSize(GetFrameView()->Size()))); -} - void LayoutView::Paint(const PaintInfo& paint_info) const { ViewPainter(*this).Paint(paint_info); }
diff --git a/third_party/blink/renderer/core/layout/layout_view.h b/third_party/blink/renderer/core/layout/layout_view.h index 7a99216..379b2cd 100644 --- a/third_party/blink/renderer/core/layout/layout_view.h +++ b/third_party/blink/renderer/core/layout/layout_view.h
@@ -284,8 +284,6 @@ void MapAncestorToLocal(const LayoutBoxModelObject*, TransformState&, MapCoordinatesFlags) const override; - void ComputeSelfHitTestRects(Vector<LayoutRect>&, - const LayoutPoint& layer_offset) const override; bool CanHaveChildren() const override;
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 2e2abcd7..1fa2cfb 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
@@ -796,7 +796,7 @@ } else { // Find the end of the run of space characters in this item. // Other white space characters (e.g., tab) are not included in this item. - DCHECK(style.BreakOnlyAfterWhiteSpace()); + DCHECK(!auto_wrap_ || style.BreakOnlyAfterWhiteSpace()); unsigned end = offset_; while (end < item.EndOffset() && IsBreakableSpace(text[end])) end++; @@ -1256,7 +1256,6 @@ void NGLineBreaker::HandleOpenTag(const NGInlineItem& item) { NGInlineItemResult* item_result = AddItem(item); - DCHECK(!item_result->can_break_after); if (ComputeOpenTagResult(item, constraint_space_, item_result)) { position_ += item_result->inline_size; @@ -1269,10 +1268,16 @@ item_result->should_create_line_box = true; } + bool was_auto_wrap = auto_wrap_; DCHECK(item.Style()); const ComputedStyle& style = *item.Style(); SetCurrentStyle(style); MoveToNextOf(item); + + DCHECK(!item_result->can_break_after); + if (UNLIKELY(!was_auto_wrap && auto_wrap_ && item_results_->size() >= 2)) { + ComputeCanBreakAfter(std::prev(item_result)); + } } void NGLineBreaker::HandleCloseTag(const NGInlineItem& item) { @@ -1292,32 +1297,30 @@ SetCurrentStyle(item.GetLayoutObject()->Parent()->StyleRef()); MoveToNextOf(item); - // Prohibit break before a close tag by setting can_break_after to the - // previous result. - // TODO(kojii): There should be a result before close tag, but there are cases - // that doesn't because of the way we handle trailing spaces. This needs to be - // revisited. - if (item_results_->size() >= 2) { - NGInlineItemResult* last = &(*item_results_)[item_results_->size() - 2]; - if (was_auto_wrap == auto_wrap_) { + // If the line can break after the previous item, prohibit it and allow break + // after this close tag instead. + if (was_auto_wrap) { + if (item_results_->size() >= 2) { + NGInlineItemResult* last = std::prev(item_result); item_result->can_break_after = last->can_break_after; last->can_break_after = false; - return; } - last->can_break_after = false; - if (!was_auto_wrap) { - DCHECK(auto_wrap_); - // When auto-wrap starts after no-wrap, the boundary is not allowed to - // wrap. However, when space characters follow the boundary, there should - // be a break opportunity after the space. The break_iterator cannot - // compute this because it considers break opportunities are before a run - // of spaces. - const String& text = Text(); - if (offset_ < text.length() && IsBreakableSpace(text[offset_])) { - item_result->can_break_after = true; - return; - } - } + return; + } + + DCHECK(!item_result->can_break_after); + if (!auto_wrap_) + return; + + // When auto-wrap follows no-wrap, the boundary is determined by the break + // iterator. However, when space characters follow the boundary, the break + // iterator cannot compute this because it considers break opportunities are + // before a run of spaces. + const String& text = Text(); + if (item_result->end_offset < text.length() && + IsBreakableSpace(text[item_result->end_offset])) { + item_result->can_break_after = true; + return; } ComputeCanBreakAfter(item_result); }
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.cc b/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.cc index b4ee5fb..9e54602 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.cc +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.cc
@@ -468,37 +468,6 @@ } template <typename Base> -void LayoutNGMixin<Base>::ComputeSelfHitTestRects( - Vector<LayoutRect>& rects, - const LayoutPoint& layer_offset) const { - // Deliberately skipping the LayoutBlockFlow override here. We need to check - // for visible overflow (and exit early if it's clipped) here anyway, and it's - // pointless to look for legacy line boxes if we're NG. - LayoutBlock::ComputeSelfHitTestRects(rects, layer_offset); - - if (!Base::HasHorizontalLayoutOverflow() && - !Base::HasVerticalLayoutOverflow()) - return; - - NGPaintFragment* block_fragment = PaintFragment(); - if (!block_fragment) - return; - for (const NGPaintFragment* line = block_fragment->FirstLineBox(); line; - line = line->NextSibling()) { - DCHECK(line->PhysicalFragment().IsLineBox()); - NGPhysicalOffset line_offset = line->Offset(); - NGPhysicalSize size = line->Size(); - LayoutRect rect(layer_offset.X() + line_offset.left, - layer_offset.Y() + line_offset.top, size.width, - size.height); - // It's common for this rect to be entirely contained in our box, so exclude - // that simple case. - if (!rect.IsEmpty() && (rects.IsEmpty() || !rects[0].Contains(rect))) - rects.push_back(rect); - } -} - -template <typename Base> void LayoutNGMixin<Base>::DirtyLinesFromChangedChild( LayoutObject* child, MarkingBehavior marking_behavior) {
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.h b/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.h index 286ad73..9574914 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.h +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.h
@@ -55,9 +55,6 @@ PositionWithAffinity PositionForPoint(const LayoutPoint&) const final; - void ComputeSelfHitTestRects(Vector<LayoutRect>&, - const LayoutPoint& layer_offset) const override; - // Returns the last layout result for this block flow with the given // constraint space and break token, or null if it is not up-to-date or // otherwise unavailable.
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc index a9b6885..902c448 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
@@ -353,6 +353,22 @@ } scoped_refptr<const NGLayoutResult> NGBlockLayoutAlgorithm::Layout() { + // Inline children require an inline child layout context to be + // passed between siblings. We want to stack-allocate that one, but + // only on demand, as it's quite big. + if (Node().ChildrenInline()) + return LayoutWithInlineChildLayoutContext(); + return Layout(nullptr); +} + +NOINLINE scoped_refptr<const NGLayoutResult> +NGBlockLayoutAlgorithm::LayoutWithInlineChildLayoutContext() { + NGInlineChildLayoutContext context; + return Layout(&context); +} + +inline scoped_refptr<const NGLayoutResult> NGBlockLayoutAlgorithm::Layout( + NGInlineChildLayoutContext* inline_child_layout_context) { NGBoxStrut borders = ComputeBorders(ConstraintSpace(), Node()); NGBoxStrut padding = ComputePadding(ConstraintSpace(), Style()); border_padding_ = borders + padding; @@ -529,9 +545,9 @@ &previous_inflow_position); previous_inline_break_token = nullptr; } else { - abort = - !HandleInflow(child, child_break_token, &previous_inflow_position, - &previous_inline_break_token); + abort = !HandleInflow( + child, child_break_token, &previous_inflow_position, + inline_child_layout_context, &previous_inline_break_token); } if (abort) { @@ -1218,6 +1234,7 @@ NGLayoutInputNode child, const NGBreakToken* child_break_token, NGPreviousInflowPosition* previous_inflow_position, + NGInlineChildLayoutContext* inline_child_layout_context, scoped_refptr<const NGInlineBreakToken>* previous_inline_break_token) { DCHECK(child); DCHECK(!child.IsFloating()); @@ -1261,15 +1278,16 @@ has_clearance_past_adjoining_floats, /* is_new_fc */ false); NGConstraintSpace child_space = CreateConstraintSpaceForChild(child, child_data, child_available_size_); - scoped_refptr<const NGLayoutResult> layout_result = child.Layout( - child_space, child_break_token, &inline_child_layout_context_); + scoped_refptr<const NGLayoutResult> layout_result = + child.Layout(child_space, child_break_token, inline_child_layout_context); // To save space of the stack when we recurse into |NGBlockNode::Layout| // above, the rest of this function is continued within |FinishInflow|. // However it should be read as one function. return FinishInflow(child, child_break_token, child_space, std::move(layout_result), &child_data, - previous_inflow_position, previous_inline_break_token); + previous_inflow_position, inline_child_layout_context, + previous_inline_break_token); } bool NGBlockLayoutAlgorithm::FinishInflow( @@ -1279,6 +1297,7 @@ scoped_refptr<const NGLayoutResult> layout_result, NGInflowChildData* child_data, NGPreviousInflowPosition* previous_inflow_position, + NGInlineChildLayoutContext* inline_child_layout_context, scoped_refptr<const NGInlineBreakToken>* previous_inline_break_token) { base::Optional<LayoutUnit> child_bfc_block_offset = layout_result->BfcBlockOffset(); @@ -1406,7 +1425,7 @@ NGConstraintSpace new_child_space = CreateConstraintSpaceForChild( child, *child_data, child_available_size_, child_bfc_block_offset); layout_result = child.Layout(new_child_space, child_break_token, - &inline_child_layout_context_); + inline_child_layout_context); if (layout_result->Status() == NGLayoutResult::kBfcBlockOffsetResolved) { // Even a second layout pass may abort, if the BFC block offset initially @@ -1419,7 +1438,7 @@ new_child_space = CreateConstraintSpaceForChild( child, *child_data, child_available_size_, child_bfc_block_offset); layout_result = child.Layout(new_child_space, child_break_token, - &inline_child_layout_context_); + inline_child_layout_context); } DCHECK_EQ(layout_result->Status(), NGLayoutResult::kSuccess);
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h index ad89f55..3d9d89c 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h
@@ -68,6 +68,12 @@ scoped_refptr<const NGLayoutResult> Layout() override; private: + NOINLINE scoped_refptr<const NGLayoutResult> + LayoutWithInlineChildLayoutContext(); + + inline scoped_refptr<const NGLayoutResult> Layout( + NGInlineChildLayoutContext* inline_child_layout_context); + // Return the BFC block offset of this block. LayoutUnit BfcBlockOffset() const { // If we have resolved our BFC block offset, use that. @@ -183,6 +189,7 @@ NGLayoutInputNode child, const NGBreakToken* child_break_token, NGPreviousInflowPosition*, + NGInlineChildLayoutContext*, scoped_refptr<const NGInlineBreakToken>* previous_inline_break_token); bool FinishInflow( @@ -192,6 +199,7 @@ scoped_refptr<const NGLayoutResult>, NGInflowChildData*, NGPreviousInflowPosition*, + NGInlineChildLayoutContext*, scoped_refptr<const NGInlineBreakToken>* previous_inline_break_token); // Return the amount of block space available in the current fragmentainer @@ -297,8 +305,6 @@ NGBoxStrut border_scrollbar_padding_; LayoutUnit intrinsic_block_size_; - NGInlineChildLayoutContext inline_child_layout_context_; - // The line box index at which we ran out of space. This where we'll actually // end up breaking, unless we determine that we should break earlier in order // to satisfy the widows request.
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_node.cc b/third_party/blink/renderer/core/layout/ng/ng_block_node.cc index e75681a..c8bdaec 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_block_node.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_block_node.cc
@@ -838,6 +838,12 @@ } } +bool NGBlockNode::ChildrenInline() const { + if (const auto* block = ToLayoutBlockFlowOrNull(box_)) + return AreNGBlockFlowChildrenInline(block); + return false; +} + bool NGBlockNode::IsInlineLevel() const { return GetLayoutBox()->IsInline(); }
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_node.h b/third_party/blink/renderer/core/layout/ng/ng_block_node.h index 9f16e1b..dea4afd 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_block_node.h +++ b/third_party/blink/renderer/core/layout/ng/ng_block_node.h
@@ -69,6 +69,7 @@ NGBlockNode GetRenderedLegend() const; NGBlockNode GetFieldsetContent() const; + bool ChildrenInline() const; bool IsInlineLevel() const; bool IsAtomicInlineLevel() const;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h index 621d6769..6e042ea 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h +++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h
@@ -37,7 +37,7 @@ // // This enum is used for communicating to *direct* children of table cells, // which layout phase the table cell is in. -enum NGTableCellChildLayoutPhase { +enum class NGTableCellChildLayoutPhase { kNotTableCellChild, // The node isn't a table cell child. kMeasure, // The node is a table cell child, in the "measure" phase. kLayout // The node is a table cell child, in the "layout" phase. @@ -555,8 +555,8 @@ Bitfields() : Bitfields(WritingMode::kHorizontalTb) {} explicit Bitfields(WritingMode writing_mode) - : table_cell_child_layout_phase( - static_cast<unsigned>(kNotTableCellChild)), + : table_cell_child_layout_phase(static_cast<unsigned>( + NGTableCellChildLayoutPhase::kNotTableCellChild)), adjoining_floats(static_cast<unsigned>(kFloatTypeNone)), writing_mode(static_cast<unsigned>(writing_mode)), direction(static_cast<unsigned>(TextDirection::kLtr)),
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h index e7a0eea..41670b6f 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h +++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h
@@ -245,7 +245,7 @@ NGConstraintSpaceBuilder& SetTableCellChildLayoutPhase( NGTableCellChildLayoutPhase table_cell_child_layout_phase) { space_.bitfields_.table_cell_child_layout_phase = - table_cell_child_layout_phase; + static_cast<unsigned>(table_cell_child_layout_phase); return *this; }
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_model_object.cc b/third_party/blink/renderer/core/layout/svg/layout_svg_model_object.cc index 5864f8a..537c7eb 100644 --- a/third_party/blink/renderer/core/layout/svg/layout_svg_model_object.cc +++ b/third_party/blink/renderer/core/layout/svg/layout_svg_model_object.cc
@@ -32,11 +32,9 @@ #include "third_party/blink/renderer/core/layout/layout_view.h" #include "third_party/blink/renderer/core/layout/svg/layout_svg_container.h" -#include "third_party/blink/renderer/core/layout/svg/layout_svg_root.h" #include "third_party/blink/renderer/core/layout/svg/svg_layout_support.h" #include "third_party/blink/renderer/core/layout/svg/svg_resources.h" #include "third_party/blink/renderer/core/layout/svg/svg_resources_cache.h" -#include "third_party/blink/renderer/core/paint/paint_layer.h" #include "third_party/blink/renderer/core/svg/svg_graphics_element.h" namespace blink { @@ -105,24 +103,6 @@ LayoutObject::WillBeDestroyed(); } -void LayoutSVGModelObject::ComputeLayerHitTestRects( - LayerHitTestRects& rects, - TouchAction supported_fast_actions) const { - // Using just the rect for the SVGRoot is good enough for now. - SVGLayoutSupport::FindTreeRootObject(this)->ComputeLayerHitTestRects( - rects, supported_fast_actions); -} - -void LayoutSVGModelObject::AddLayerHitTestRects( - LayerHitTestRects&, - const PaintLayer* current_layer, - const LayoutPoint& layer_offset, - TouchAction supported_fast_actions, - const LayoutRect& container_rect, - TouchAction container_whitelisted_touch_action) const { - // We don't walk into SVG trees at all - just report their container. -} - void LayoutSVGModelObject::StyleDidChange(StyleDifference diff, const ComputedStyle* old_style) { // Since layout depends on the bounds of the filter, we need to force layout
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_model_object.h b/third_party/blink/renderer/core/layout/svg/layout_svg_model_object.h index b28f725d..9ee70778 100644 --- a/third_party/blink/renderer/core/layout/svg/layout_svg_model_object.h +++ b/third_party/blink/renderer/core/layout/svg/layout_svg_model_object.h
@@ -71,8 +71,6 @@ LayoutGeometryMap&) const final; void StyleDidChange(StyleDifference, const ComputedStyle* old_style) override; - void ComputeLayerHitTestRects(LayerHitTestRects&, TouchAction) const final; - SVGElement* GetElement() const { return ToSVGElement(LayoutObject::GetNode()); } @@ -82,13 +80,6 @@ } protected: - void AddLayerHitTestRects( - LayerHitTestRects&, - const PaintLayer* current_composited_layer, - const LayoutPoint& layer_offset, - TouchAction supported_fast_actions, - const LayoutRect& container_rect, - TouchAction container_whitelisted_touch_action) const final; void WillBeDestroyed() override; private:
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_shape.cc b/third_party/blink/renderer/core/layout/svg/layout_svg_shape.cc index a421fd8a..ffd52eb 100644 --- a/third_party/blink/renderer/core/layout/svg/layout_svg_shape.cc +++ b/third_party/blink/renderer/core/layout/svg/layout_svg_shape.cc
@@ -315,10 +315,13 @@ // current approach of applying/painting non-scaling-stroke, that can break in // unpleasant ways (see crbug.com/747708 for an example.) Maybe it would be // better to apply this effect during rasterization? - const LayoutSVGRoot* svg_root = SVGLayoutSupport::FindTreeRootObject(this); + const LayoutObject* root = this; + while (root && !root->IsSVGRoot()) + root = root->Parent(); AffineTransform host_transform; host_transform.Scale(1 / StyleRef().EffectiveZoom()) - .Multiply(LocalToAncestorTransform(svg_root).ToAffineTransform()); + .Multiply( + LocalToAncestorTransform(ToLayoutSVGRoot(root)).ToAffineTransform()); // Width of non-scaling stroke is independent of translation, so zero it out // here. host_transform.SetE(0);
diff --git a/third_party/blink/renderer/core/layout/svg/svg_layout_support.cc b/third_party/blink/renderer/core/layout/svg/svg_layout_support.cc index e59c0a2..fdbf27f1 100644 --- a/third_party/blink/renderer/core/layout/svg/svg_layout_support.cc +++ b/third_party/blink/renderer/core/layout/svg/svg_layout_support.cc
@@ -282,16 +282,6 @@ local_visual_rect); } -const LayoutSVGRoot* SVGLayoutSupport::FindTreeRootObject( - const LayoutObject* start) { - while (start && !start->IsSVGRoot()) - start = start->Parent(); - - DCHECK(start); - DCHECK(start->IsSVGRoot()); - return ToLayoutSVGRoot(start); -} - bool SVGLayoutSupport::LayoutSizeOfNearestViewportChanged( const LayoutObject* start) { for (; start; start = start->Parent()) {
diff --git a/third_party/blink/renderer/core/layout/svg/svg_layout_support.h b/third_party/blink/renderer/core/layout/svg/svg_layout_support.h index 5486a30..7e53866 100644 --- a/third_party/blink/renderer/core/layout/svg/svg_layout_support.h +++ b/third_party/blink/renderer/core/layout/svg/svg_layout_support.h
@@ -40,7 +40,6 @@ class LayoutBoxModelObject; class LayoutObject; class ComputedStyle; -class LayoutSVGRoot; class SVGLengthContext; class StrokeData; class TransformState; @@ -133,9 +132,6 @@ // Determines if any ancestor's layout size has changed. static bool LayoutSizeOfNearestViewportChanged(const LayoutObject*); - // FIXME: These methods do not belong here. - static const LayoutSVGRoot* FindTreeRootObject(const LayoutObject*); - // Helper method for determining if a LayoutObject marked as text (isText()== // true) can/will be laid out as part of a <text>. static bool IsLayoutableTextNode(const LayoutObject*);
diff --git a/third_party/blink/renderer/core/page/drag_controller.cc b/third_party/blink/renderer/core/page/drag_controller.cc index 3226f06..fc6a0b1 100644 --- a/third_party/blink/renderer/core/page/drag_controller.cc +++ b/third_party/blink/renderer/core/page/drag_controller.cc
@@ -995,6 +995,11 @@ // FIXME: For DHTML/draggable element drags, write element markup to // clipboard. } + + // Observe context related to source to allow dropping drag_state_ when the + // Document goes away. + SetContext(src->GetDocument()); + return true; }
diff --git a/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.cc b/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.cc index 44301fb6..6853623 100644 --- a/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.cc +++ b/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.cc
@@ -38,9 +38,7 @@ #include "cc/layers/scrollbar_layer_interface.h" #include "cc/layers/solid_color_scrollbar_layer.h" #include "third_party/blink/renderer/core/dom/document.h" -#include "third_party/blink/renderer/core/dom/node.h" #include "third_party/blink/renderer/core/exported/web_plugin_container_impl.h" -#include "third_party/blink/renderer/core/frame/event_handler_registry.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/core/frame/local_frame_ukm_aggregator.h" @@ -48,16 +46,12 @@ #include "third_party/blink/renderer/core/frame/page_scale_constraints_set.h" #include "third_party/blink/renderer/core/frame/settings.h" #include "third_party/blink/renderer/core/frame/visual_viewport.h" -#include "third_party/blink/renderer/core/html/html_element.h" -#include "third_party/blink/renderer/core/input/touch_action_util.h" -#include "third_party/blink/renderer/core/layout/layout_embedded_content.h" -#include "third_party/blink/renderer/core/layout/layout_geometry_map.h" #include "third_party/blink/renderer/core/layout/layout_view.h" #include "third_party/blink/renderer/core/page/chrome_client.h" #include "third_party/blink/renderer/core/page/page.h" #include "third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_context.h" #include "third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.h" -#include "third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.h" +#include "third_party/blink/renderer/core/paint/paint_layer.h" #include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h" #include "third_party/blink/renderer/platform/animation/compositor_animation_timeline.h" #include "third_party/blink/renderer/platform/geometry/region.h" @@ -75,8 +69,6 @@ #include "third_party/blink/renderer/core/scroll/scroll_animator_base.h" #include "third_party/blink/renderer/core/scroll/scrollbar_layer_delegate.h" #include "third_party/blink/renderer/core/scroll/scrollbar_theme.h" -#include "third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h" -#include "third_party/blink/renderer/platform/wtf/text/string_builder.h" namespace { @@ -119,34 +111,12 @@ frame_view->GetScrollingContext()->SetShouldScrollOnMainThreadIsDirty(true); } -void ScrollingCoordinator::NotifyTransformChanged(LocalFrame* frame, - const LayoutBox& box) { +void ScrollingCoordinator::NotifyTransformChanged(LocalFrame* frame) { DCHECK(frame); if (!frame->View()) return; - if (frame->View()->NeedsLayout()) - return; - - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) { - // PaintTouchActionRects does not keep a list of layers with touch rects so - // just do an update if transforms change. - frame->View()->GetScrollingContext()->SetTouchEventTargetRectsAreDirty( - true); - return; - } - - for (PaintLayer* layer = box.EnclosingLayer(); layer; - layer = layer->Parent()) { - if (frame->View() - ->GetScrollingContext() - ->GetLayersWithTouchRects() - ->Contains(layer)) { - frame->View()->GetScrollingContext()->SetTouchEventTargetRectsAreDirty( - true); - return; - } - } + frame->View()->GetScrollingContext()->SetTouchEventTargetRectsAreDirty(true); } ScrollableArea* @@ -270,7 +240,6 @@ // Set the touch action rects on the cc layer from the touch action data stored // on the GraphicsLayer's paint chunks. static void UpdateLayerTouchActionRects(GraphicsLayer& layer) { - DCHECK(RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()); if (!layer.PaintsContentOrHitTest()) return; @@ -623,180 +592,6 @@ return; } -using GraphicsLayerHitTestRects = - WTF::HashMap<const GraphicsLayer*, Vector<HitTestRect>>; - -// In order to do a DFS cross-frame walk of the Layer tree, we need to know -// which Layers have child frames inside of them. This computes a mapping for -// the current frame which we can consult while walking the layers of that -// frame. Whenever we descend into a new frame, a new map will be created. -using LayerFrameMap = - HeapHashMap<const PaintLayer*, HeapVector<Member<const LocalFrame>>>; -static void MakeLayerChildFrameMap(const LocalFrame* current_frame, - LayerFrameMap* map) { - map->clear(); - const FrameTree& tree = current_frame->Tree(); - for (const Frame* child = tree.FirstChild(); child; - child = child->Tree().NextSibling()) { - if (!child->IsLocalFrame()) - continue; - auto* owner_layout_object = ToLocalFrame(child)->OwnerLayoutObject(); - if (!owner_layout_object) - continue; - const PaintLayer* containing_layer = owner_layout_object->EnclosingLayer(); - LayerFrameMap::iterator iter = map->find(containing_layer); - if (iter == map->end()) - map->insert(containing_layer, HeapVector<Member<const LocalFrame>>()) - .stored_value->value.push_back(ToLocalFrame(child)); - else - iter->value.push_back(ToLocalFrame(child)); - } -} - -static void ProjectRectsToGraphicsLayerSpaceRecursive( - const PaintLayer* cur_layer, - const LayerHitTestRects& layer_rects, - GraphicsLayerHitTestRects& graphics_rects, - LayoutGeometryMap& geometry_map, - HashSet<const PaintLayer*>& layers_with_rects, - LayerFrameMap& layer_child_frame_map) { - // Project any rects for the current layer - LayerHitTestRects::const_iterator layer_iter = layer_rects.find(cur_layer); - if (layer_iter != layer_rects.end()) { - // Find the enclosing composited layer when it's in another document (for - // non-composited iframes). - const PaintLayer* composited_layer = - layer_iter->key - ->EnclosingLayerForPaintInvalidationCrossingFrameBoundaries(); - // https://crbug.com/751768. |composited_layer| can be null, don't just - // DCHECK it. - if (!composited_layer) - return; - - // Find the appropriate GraphicsLayer for the composited Layer. - GraphicsLayer* graphics_layer = - composited_layer->GraphicsLayerBacking(&cur_layer->GetLayoutObject()); - - GraphicsLayerHitTestRects::iterator gl_iter = - graphics_rects.find(graphics_layer); - Vector<HitTestRect>* gl_rects; - if (gl_iter == graphics_rects.end()) { - gl_rects = &graphics_rects.insert(graphics_layer, Vector<HitTestRect>()) - .stored_value->value; - } else { - gl_rects = &gl_iter->value; - } - - // Transform each rect to the co-ordinate space of the graphicsLayer. - for (wtf_size_t i = 0; i < layer_iter->value.size(); ++i) { - HitTestRect rect = layer_iter->value[i]; - if (composited_layer != cur_layer) { - FloatQuad compositor_quad = geometry_map.MapToAncestor( - FloatRect(rect.rect), &composited_layer->GetLayoutObject()); - rect.rect = LayoutRect(compositor_quad.BoundingBox()); - // If the enclosing composited layer itself is scrolled, we have to undo - // the subtraction of its scroll offset since we want the offset - // relative to the scrolling content, not the element itself. - if (composited_layer->GetLayoutObject().HasOverflowClip()) { - rect.rect.Move( - composited_layer->GetLayoutBox()->ScrolledContentOffset()); - } - } - PaintLayer::MapRectInPaintInvalidationContainerToBacking( - composited_layer->GetLayoutObject(), rect.rect); - rect.rect.Move(-graphics_layer->OffsetFromLayoutObject()); - - gl_rects->push_back(rect); - } - } - - // Walk child layers of interest - for (const PaintLayer* child_layer = cur_layer->FirstChild(); child_layer; - child_layer = child_layer->NextSibling()) { - if (layers_with_rects.Contains(child_layer)) { - geometry_map.PushMappingsToAncestor(child_layer, cur_layer); - ProjectRectsToGraphicsLayerSpaceRecursive( - child_layer, layer_rects, graphics_rects, geometry_map, - layers_with_rects, layer_child_frame_map); - geometry_map.PopMappingsToAncestor(cur_layer); - } - } - - // If this layer has any frames of interest as a child of it, walk those (with - // an updated frame map). - LayerFrameMap::iterator map_iter = layer_child_frame_map.find(cur_layer); - if (map_iter != layer_child_frame_map.end()) { - for (wtf_size_t i = 0; i < map_iter->value.size(); i++) { - const LocalFrame* child_frame = map_iter->value[i]; - if (child_frame->ShouldThrottleRendering()) - continue; - - const PaintLayer* child_layer = - child_frame->View()->GetLayoutView()->Layer(); - if (layers_with_rects.Contains(child_layer)) { - LayerFrameMap new_layer_child_frame_map; - MakeLayerChildFrameMap(child_frame, &new_layer_child_frame_map); - geometry_map.PushMappingsToAncestor(child_layer, cur_layer); - ProjectRectsToGraphicsLayerSpaceRecursive( - child_layer, layer_rects, graphics_rects, geometry_map, - layers_with_rects, new_layer_child_frame_map); - geometry_map.PopMappingsToAncestor(cur_layer); - } - } - } -} - -static void ProjectRectsToGraphicsLayerSpace( - LocalFrame* main_frame, - const LayerHitTestRects& layer_rects, - GraphicsLayerHitTestRects& graphics_rects) { - TRACE_EVENT0("input", - "ScrollingCoordinator::projectRectsToGraphicsLayerSpace"); - - if (main_frame->ShouldThrottleRendering()) - return; - - bool touch_handler_in_child_frame = false; - - // We have a set of rects per Layer, we need to map them to their bounding - // boxes in their enclosing composited layer. To do this most efficiently - // we'll walk the Layer tree using LayoutGeometryMap. First record all the - // branches we should traverse in the tree (including all documents on the - // page). - HashSet<const PaintLayer*> layers_with_rects; - for (const auto& layer_rect : layer_rects) { - const PaintLayer* layer = layer_rect.key; - do { - if (!layers_with_rects.insert(layer).is_new_entry) - break; - - if (layer->Parent()) { - layer = layer->Parent(); - } else { - auto* parent_doc_layout_object = - layer->GetLayoutObject().GetFrame()->OwnerLayoutObject(); - if (parent_doc_layout_object) { - layer = parent_doc_layout_object->EnclosingLayer(); - touch_handler_in_child_frame = true; - } - } - } while (layer); - } - - // Now walk the layer projecting rects while maintaining a LayoutGeometryMap - MapCoordinatesFlags flags = kUseTransforms; - if (touch_handler_in_child_frame) - flags |= kTraverseDocumentBoundaries; - PaintLayer* root_layer = main_frame->ContentLayoutObject()->Layer(); - LayoutGeometryMap geometry_map(flags); - geometry_map.PushMappingsToAncestor(root_layer, nullptr); - LayerFrameMap layer_child_frame_map; - MakeLayerChildFrameMap(main_frame, &layer_child_frame_map); - ProjectRectsToGraphicsLayerSpaceRecursive( - root_layer, layer_rects, graphics_rects, geometry_map, layers_with_rects, - layer_child_frame_map); -} - void ScrollingCoordinator::UpdateTouchEventTargetRectsIfNeeded( LocalFrame* frame) { TRACE_EVENT0("input", @@ -806,15 +601,9 @@ if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) return; - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) { - auto* view_layer = frame->View()->GetLayoutView()->Layer(); - if (auto* root = view_layer->Compositor()->PaintRootGraphicsLayer()) - ForAllGraphicsLayers(*root, UpdateLayerTouchActionRects); - } else { - LayerHitTestRects touch_event_target_rects; - ComputeTouchEventTargetRects(frame, touch_event_target_rects); - SetTouchEventTargetRects(frame, touch_event_target_rects); - } + auto* view_layer = frame->View()->GetLayoutView()->Layer(); + if (auto* root = view_layer->Compositor()->PaintRootGraphicsLayer()) + ForAllGraphicsLayers(*root, UpdateLayerTouchActionRects); } void ScrollingCoordinator::UpdateUserInputScrollable( @@ -841,69 +630,9 @@ horizontal_scrollbars_.clear(); vertical_scrollbars_.clear(); - frame->View()->GetScrollingContext()->GetLayersWithTouchRects()->clear(); frame->View()->ClearFrameIsScrollableDidChange(); } -// Note that in principle this could be called more often than -// computeTouchEventTargetRects, for example during a non-composited scroll -// (although that's not yet implemented - crbug.com/261307). -void ScrollingCoordinator::SetTouchEventTargetRects( - LocalFrame* frame, - const LayerHitTestRects& layer_rects) { - TRACE_EVENT0("input", "ScrollingCoordinator::setTouchEventTargetRects"); - - DCHECK(!RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()); - - // Ensure we have an entry for each composited layer that previously had rects - // (so that old ones will get cleared out). Note that ideally we'd track this - // on GraphicsLayer instead of Layer, but we have no good hook into the - // lifetime of a GraphicsLayer. - GraphicsLayerHitTestRects graphics_layer_rects; - for (const PaintLayer* layer : - *frame->View()->GetScrollingContext()->GetLayersWithTouchRects()) { - if (layer->GetLayoutObject().GetFrameView() && - layer->GetLayoutObject().GetFrameView()->ShouldThrottleRendering()) { - continue; - } - GraphicsLayer* main_graphics_layer = - layer->GraphicsLayerBacking(&layer->GetLayoutObject()); - if (main_graphics_layer) { - graphics_layer_rects.insert(main_graphics_layer, Vector<HitTestRect>()); - } - GraphicsLayer* scrolling_contents_layer = layer->GraphicsLayerBacking(); - if (scrolling_contents_layer && - scrolling_contents_layer != main_graphics_layer) { - graphics_layer_rects.insert(scrolling_contents_layer, - Vector<HitTestRect>()); - } - } - - frame->View()->GetScrollingContext()->GetLayersWithTouchRects()->clear(); - for (const auto& layer_rect : layer_rects) { - if (!layer_rect.value.IsEmpty()) { - DCHECK(layer_rect.key->IsRootLayer() || layer_rect.key->Parent()); - const PaintLayer* composited_layer = - layer_rect.key - ->EnclosingLayerForPaintInvalidationCrossingFrameBoundaries(); - // https://crbug.com/751768. |composited_layer| can be null, don't just - // DCHECK it. - if (!composited_layer) - continue; - frame->View()->GetScrollingContext()->GetLayersWithTouchRects()->insert( - composited_layer); - } - } - - ProjectRectsToGraphicsLayerSpace(frame, layer_rects, graphics_layer_rects); - - for (const auto& layer_rect : graphics_layer_rects) { - const GraphicsLayer* graphics_layer = layer_rect.key; - graphics_layer->CcLayer()->SetTouchActionRegion( - HitTestRect::BuildRegion(layer_rect.value)); - } -} - void ScrollingCoordinator::TouchEventTargetRectsDidChange(LocalFrame* frame) { if (!frame) return; @@ -916,6 +645,8 @@ return; // Wait until after layout to update. + // TODO(pdr): This check is wrong as we need to mark the rects as dirty + // regardless of whether the frame view needs layout. Remove this check. if (frame_view->NeedsLayout()) return; @@ -954,15 +685,6 @@ child->SetClipParent(clip_parent_cc_layer); } -void ScrollingCoordinator::WillDestroyLayer(PaintLayer* layer) { - layer->GetLayoutObject() - .GetFrame() - ->View() - ->GetScrollingContext() - ->GetLayersWithTouchRects() - ->erase(layer); -} - void ScrollingCoordinator::SetShouldUpdateScrollLayerPositionOnMainThread( LocalFrame* frame, MainThreadScrollingReasons main_thread_scrolling_reasons) { @@ -1132,130 +854,6 @@ return should_handle_scroll_gesture_on_main_thread_region; } -static void AccumulateDocumentTouchEventTargetRects( - LayerHitTestRects& rects, - EventHandlerRegistry::EventHandlerClass event_class, - Document* document, - TouchAction supported_fast_actions) { - DCHECK(document); - const EventTargetSet* targets = - document->GetFrame()->GetEventHandlerRegistry().EventHandlerTargets( - event_class); - if (!targets) - return; - - // If there's a handler on the window, document, html or body element (fairly - // common in practice), then we can quickly mark the entire document and skip - // looking at any other handlers. Note that technically a handler on the body - // doesn't cover the whole document, but it's reasonable to be conservative - // and report the whole document anyway. - // - // Fullscreen HTML5 video when OverlayFullscreenVideo is enabled is - // implemented by replacing the root cc::layer with the video layer so doing - // this optimization causes the compositor to think that there are no - // handlers, therefore skip it. - if (!document->GetLayoutView()->Compositor()->InOverlayFullscreenVideo() && - (!document->View() || !document->View()->ShouldThrottleRendering())) { - if (targets->Contains(document) || - (document->documentElement() && - targets->Contains(document->documentElement())) || - (document->body() && targets->Contains(document->body())) || - targets->Contains(document->GetFrame()->DomWindow())) { - document->GetLayoutView()->ComputeLayerHitTestRects( - rects, supported_fast_actions); - return; - } - } - - for (const auto& event_target : *targets) { - EventTarget* target = event_target.key; - Node* node = target->ToNode(); - LocalDOMWindow* window = target->ToLocalDOMWindow(); - if (!window && (!node || !node->isConnected())) - continue; - - Document& document_node = - window ? *window->document() : node->GetDocument(); - - // If the document belongs to an invisible subframe it does not have a - // composited layer and should be skipped. - if (document_node.IsInInvisibleSubframe()) - continue; - - // If the node belongs to a throttled frame, skip it. - if (document_node.View() && document_node.View()->ShouldThrottleRendering()) - continue; - - // Only event targets belonging to the same local root as |document| should - // be processed here. - DCHECK_EQ(&document->GetFrame()->LocalFrameRoot(), - &document_node.GetFrame()->LocalFrameRoot()); - - if ((window || node->IsDocumentNode()) && &document_node != document) { - AccumulateDocumentTouchEventTargetRects( - rects, event_class, &document_node, supported_fast_actions); - } else if (node) { - LayoutObject* layout_object = node->GetLayoutObject(); - if (!layout_object) - continue; - // If the set also contains one of our ancestor nodes then processing - // this node would be redundant. - bool has_touch_event_target_ancestor = false; - for (Node& ancestor : NodeTraversal::AncestorsOf(*node)) { - if (has_touch_event_target_ancestor) - break; - if (targets->Contains(&ancestor)) - has_touch_event_target_ancestor = true; - } - if (!has_touch_event_target_ancestor) { - // Walk up the tree to the outermost non-composited scrollable layer. - PaintLayer* enclosing_non_composited_scroll_layer = nullptr; - for (PaintLayer* parent = layout_object->EnclosingLayer(); - parent && parent->GetCompositingState() == kNotComposited; - parent = parent->Parent()) { - if (parent->ScrollsOverflow()) - enclosing_non_composited_scroll_layer = parent; - } - - // Report the whole non-composited scroll layer as a touch hit rect - // because any rects inside of it may move around relative to their - // enclosing composited layer without causing the rects to be - // recomputed. Non-composited scrolling occurs on the main thread, so - // we're not getting much benefit from compositor touch hit testing in - // this case anyway. - if (enclosing_non_composited_scroll_layer) { - enclosing_non_composited_scroll_layer->ComputeSelfHitTestRects( - rects, supported_fast_actions); - } - - layout_object->ComputeLayerHitTestRects(rects, supported_fast_actions); - } - } - } -} - -void ScrollingCoordinator::ComputeTouchEventTargetRects( - LocalFrame* frame, - LayerHitTestRects& rects) { - TRACE_EVENT0("input", "ScrollingCoordinator::computeTouchEventTargetRects"); - - DCHECK(!RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()); - - Document* document = frame->GetDocument(); - if (!document || !document->View() || !document->GetFrame()) - return; - - AccumulateDocumentTouchEventTargetRects( - rects, EventHandlerRegistry::kTouchAction, document, - TouchAction::kTouchActionAuto); - AccumulateDocumentTouchEventTargetRects( - rects, EventHandlerRegistry::kTouchStartOrMoveEventBlocking, document, - TouchAction::kTouchActionNone); - AccumulateDocumentTouchEventTargetRects( - rects, EventHandlerRegistry::kTouchStartOrMoveEventBlockingLowLatency, - document, TouchAction::kTouchActionNone); -} - void ScrollingCoordinator:: FrameViewHasBackgroundAttachmentFixedObjectsDidChange( LocalFrameView* frame_view) {
diff --git a/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h b/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h index 2aa9a1d..d177e09 100644 --- a/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h +++ b/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h
@@ -32,7 +32,6 @@ #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/platform/geometry/int_rect.h" #include "third_party/blink/renderer/platform/graphics/compositor_element_id.h" -#include "third_party/blink/renderer/platform/graphics/hit_test_rect.h" #include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/scroll/scroll_types.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" @@ -45,7 +44,6 @@ namespace blink { class CompositorAnimationTimeline; -class LayoutBox; class LocalFrame; class LocalFrameView; class GraphicsLayer; @@ -102,8 +100,8 @@ // Called when any frame has done its layout or compositing has changed. void NotifyGeometryChanged(LocalFrameView*); - // Called when any layoutBox has transform changed - void NotifyTransformChanged(LocalFrame*, const LayoutBox&); + // Called when any transform has changed. + void NotifyTransformChanged(LocalFrame*); // Update non-fast scrollable regions, touch event target rects, main thread // scrolling reasons, and whether the visual viewport is user scrollable. @@ -146,7 +144,6 @@ void UpdateLayerPositionConstraint(PaintLayer*); // LocalFrame* must be a local root if non-null. void TouchEventTargetRectsDidChange(LocalFrame*); - void WillDestroyLayer(PaintLayer*); void UpdateScrollParentForGraphicsLayer(GraphicsLayer* child, const PaintLayer* parent); @@ -195,8 +192,6 @@ void SetShouldHandleScrollGestureOnMainThreadRegion(const Region&, LocalFrameView*); - void SetTouchEventTargetRects(LocalFrame*, const LayerHitTestRects&); - void ComputeTouchEventTargetRects(LocalFrame*, LayerHitTestRects&); void AddScrollbarLayerGroup(ScrollableArea*, ScrollbarOrientation,
diff --git a/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_context.cc b/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_context.cc index 033df09..98f48f78 100644 --- a/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_context.cc +++ b/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_context.cc
@@ -4,8 +4,6 @@ #include "third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_context.h" -#include "third_party/blink/renderer/core/paint/paint_layer.h" - namespace blink { void ScrollingCoordinatorContext::SetAnimationTimeline( @@ -26,11 +24,6 @@ return animation_host_; } -HashSet<const PaintLayer*>* -ScrollingCoordinatorContext::GetLayersWithTouchRects() { - return &layers_with_touch_rects_; -} - bool ScrollingCoordinatorContext::ScrollGestureRegionIsDirty() const { return scroll_gesture_region_is_dirty_; }
diff --git a/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_context.h b/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_context.h index ca37e5c2..36c5074 100644 --- a/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_context.h +++ b/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_context.h
@@ -8,14 +8,12 @@ #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/platform/animation/compositor_animation_timeline.h" #include "third_party/blink/renderer/platform/wtf/allocator.h" -#include "third_party/blink/renderer/platform/wtf/hash_set.h" namespace cc { class AnimationHost; } namespace blink { -class PaintLayer; // This enscapsulates ScrollingCoordinator state for each local frame root. // TODO(kenrb): This class could be temporary depending on how @@ -33,8 +31,6 @@ CompositorAnimationTimeline* GetCompositorAnimationTimeline(); cc::AnimationHost* GetCompositorAnimationHost(); - HashSet<const PaintLayer*>* GetLayersWithTouchRects(); - // Non-fast scrollable regions need updating by ScrollingCoordinator. bool ScrollGestureRegionIsDirty() const; // Touch event target rects need updating by ScrollingCoordinator. @@ -52,8 +48,6 @@ void SetWasScrollable(bool was_scrollable); private: - HashSet<const PaintLayer*> layers_with_touch_rects_; - std::unique_ptr<CompositorAnimationTimeline> animation_timeline_; cc::AnimationHost* animation_host_ = nullptr;
diff --git a/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_test.cc b/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_test.cc index 0d13906..3f22d75 100644 --- a/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_test.cc +++ b/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_test.cc
@@ -66,26 +66,12 @@ namespace blink { -// kScrollingCoordinatorTestNoFlags runs with BlinkGenPropertyTrees and -// PaintTouchActionRects disabled. Using -// (kScrollingCoordinatorTestBlinkGenPropertyTrees | -// kScrollingCoordinatorTestPaintTouchActionRects) enables both features. -enum { - kScrollingCoordinatorTestNoFlags = 1 << 0, - kScrollingCoordinatorTestBlinkGenPropertyTrees = 1 << 1, - kScrollingCoordinatorTestPaintTouchActionRects = 1 << 2, -}; - class ScrollingCoordinatorTest : public testing::Test, - public testing::WithParamInterface<unsigned>, - private ScopedBlinkGenPropertyTreesForTest, - private ScopedPaintTouchActionRectsForTest { + public testing::WithParamInterface<bool>, + private ScopedBlinkGenPropertyTreesForTest { public: ScrollingCoordinatorTest() - : ScopedBlinkGenPropertyTreesForTest( - GetParam() & kScrollingCoordinatorTestBlinkGenPropertyTrees), - ScopedPaintTouchActionRectsForTest( - GetParam() & kScrollingCoordinatorTestPaintTouchActionRects), + : ScopedBlinkGenPropertyTreesForTest(GetParam()), base_url_("http://www.test.com/") { helper_.Initialize(nullptr, nullptr, nullptr, &ConfigureSettings); GetWebView()->MainFrameWidget()->Resize(IntSize(320, 240)); @@ -157,14 +143,7 @@ frame_test_helpers::WebViewHelper helper_; }; -INSTANTIATE_TEST_SUITE_P( - All, - ScrollingCoordinatorTest, - ::testing::Values(kScrollingCoordinatorTestNoFlags, - kScrollingCoordinatorTestBlinkGenPropertyTrees, - kScrollingCoordinatorTestPaintTouchActionRects, - (kScrollingCoordinatorTestBlinkGenPropertyTrees | - kScrollingCoordinatorTestPaintTouchActionRects))); +INSTANTIATE_TEST_SUITE_P(All, ScrollingCoordinatorTest, testing::Bool()); TEST_P(ScrollingCoordinatorTest, fastScrollingByDefault) { GetWebView()->MainFrameWidget()->Resize(WebSize(800, 600)); @@ -616,15 +595,8 @@ ASSERT_TRUE(box->UsesCompositedScrolling()); ASSERT_EQ(kPaintsIntoOwnBacking, box->Layer()->GetCompositingState()); - CompositedLayerMapping* composited_layer_mapping = - box->Layer()->GetCompositedLayerMapping(); - - // Without PaintTouchActionRects, rects are on the wrong graphics layer. See: - // https://crbug.com/826746. - auto* graphics_layer = - RuntimeEnabledFeatures::PaintTouchActionRectsEnabled() - ? composited_layer_mapping->ScrollingContentsLayer() - : composited_layer_mapping->MainGraphicsLayer(); + auto* composited_layer_mapping = box->Layer()->GetCompositedLayerMapping(); + auto* graphics_layer = composited_layer_mapping->ScrollingContentsLayer(); cc::Layer* cc_layer = graphics_layer->CcLayer(); cc::Region region = cc_layer->touch_action_region().GetRegionForTouchAction( TouchAction::kTouchActionPanX | TouchAction::kTouchActionPanDown); @@ -643,15 +615,8 @@ ASSERT_TRUE(box->UsesCompositedScrolling()); ASSERT_EQ(kPaintsIntoOwnBacking, box->Layer()->GetCompositingState()); - CompositedLayerMapping* composited_layer_mapping = - box->Layer()->GetCompositedLayerMapping(); - - // Without PaintTouchActionRects, rects are on the wrong graphics layer. See: - // https://crbug.com/826746. - auto* graphics_layer = - RuntimeEnabledFeatures::PaintTouchActionRectsEnabled() - ? composited_layer_mapping->ScrollingContentsLayer() - : composited_layer_mapping->MainGraphicsLayer(); + auto* composited_layer_mapping = box->Layer()->GetCompositedLayerMapping(); + auto* graphics_layer = composited_layer_mapping->ScrollingContentsLayer(); cc::Layer* cc_layer = graphics_layer->CcLayer(); cc::Region region = cc_layer->touch_action_region().GetRegionForTouchAction( @@ -701,13 +666,7 @@ auto* scrollable = GetFrame()->GetDocument()->getElementById("scrollable"); auto* box = ToLayoutBox(scrollable->GetLayoutObject()); auto* composited_layer_mapping = box->Layer()->GetCompositedLayerMapping(); - - // Without PaintTouchActionRects, rects are on the wrong graphics layer. See: - // https://crbug.com/826746. - auto* graphics_layer = - RuntimeEnabledFeatures::PaintTouchActionRectsEnabled() - ? composited_layer_mapping->ScrollingContentsLayer() - : composited_layer_mapping->MainGraphicsLayer(); + auto* graphics_layer = composited_layer_mapping->ScrollingContentsLayer(); cc::Layer* cc_layer = graphics_layer->CcLayer(); cc::Region region = cc_layer->touch_action_region().GetRegionForTouchAction( @@ -747,13 +706,7 @@ auto* scrollable = GetFrame()->GetDocument()->getElementById("scrollable"); auto* box = ToLayoutBox(scrollable->GetLayoutObject()); auto* composited_layer_mapping = box->Layer()->GetCompositedLayerMapping(); - - // Without PaintTouchActionRects, rects are on the wrong graphics layer. See: - // https://crbug.com/826746. - GraphicsLayer* graphics_layer = - RuntimeEnabledFeatures::PaintTouchActionRectsEnabled() - ? composited_layer_mapping->ScrollingContentsLayer() - : composited_layer_mapping->MainGraphicsLayer(); + auto* graphics_layer = composited_layer_mapping->ScrollingContentsLayer(); cc::Layer* cc_layer = graphics_layer->CcLayer(); cc::Region region = cc_layer->touch_action_region().GetRegionForTouchAction( @@ -859,11 +812,6 @@ } TEST_P(ScrollingCoordinatorTest, touchActionWithVerticalRLWritingMode) { - // Touch action rects are incorrect with vertical-rl. See: crbug.com/852013. - // This is fixed with PaintTouchActionRects. - if (!RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) - return; - RegisterMockedHttpURLLoad("touch-action-with-vertical-rl-writing-mode.html"); NavigateTo(base_url_ + "touch-action-with-vertical-rl-writing-mode.html"); LoadAhem(); @@ -890,15 +838,8 @@ ASSERT_TRUE(box->UsesCompositedScrolling()); ASSERT_EQ(kPaintsIntoOwnBacking, box->Layer()->GetCompositingState()); - CompositedLayerMapping* composited_layer_mapping = - box->Layer()->GetCompositedLayerMapping(); - - // Without PaintTouchActionRects, rects are on the wrong graphics layer. See: - // https://crbug.com/826746. - auto* graphics_layer = - RuntimeEnabledFeatures::PaintTouchActionRectsEnabled() - ? composited_layer_mapping->ScrollingContentsLayer() - : composited_layer_mapping->MainGraphicsLayer(); + auto* composited_layer_mapping = box->Layer()->GetCompositedLayerMapping(); + auto* graphics_layer = composited_layer_mapping->ScrollingContentsLayer(); cc::Layer* cc_layer = graphics_layer->CcLayer(); cc::Region region = cc_layer->touch_action_region().GetRegionForTouchAction( @@ -937,32 +878,21 @@ LayoutBox* box = ToLayoutBox(scrollable_element->GetLayoutObject()); auto* composited_layer_mapping = box->Layer()->GetCompositedLayerMapping(); - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) { - // With PaintTouchActionRects the outer layer (not scrollable) will be fully - // marked as pan-y (100x100) and the scrollable layer will only have the - // contents marked as pan-y (50x150). - auto* scrolling_contents_layer = - composited_layer_mapping->ScrollingContentsLayer()->CcLayer(); - cc::Region region = - scrolling_contents_layer->touch_action_region().GetRegionForTouchAction( - TouchAction::kTouchActionPanY); - EXPECT_EQ(region.bounds(), gfx::Rect(0, 0, 50, 150)); + // The outer layer (not scrollable) will be fully marked as pan-y (100x100) + // and the scrollable layer will only have the contents marked as pan-y + // (50x150). + auto* scrolling_contents_layer = + composited_layer_mapping->ScrollingContentsLayer()->CcLayer(); + cc::Region region = + scrolling_contents_layer->touch_action_region().GetRegionForTouchAction( + TouchAction::kTouchActionPanY); + EXPECT_EQ(region.bounds(), gfx::Rect(0, 0, 50, 150)); - auto* non_scrolling_layer = - composited_layer_mapping->MainGraphicsLayer()->CcLayer(); - region = non_scrolling_layer->touch_action_region().GetRegionForTouchAction( - TouchAction::kTouchActionPanY); - EXPECT_EQ(region.bounds(), gfx::Rect(0, 0, 100, 100)); - } else { - // Without PaintTouchActionRects, the main graphics layer gets all touch - // action rects. - auto* main_graphics_layer = - composited_layer_mapping->MainGraphicsLayer()->CcLayer(); - cc::Region region = - main_graphics_layer->touch_action_region().GetRegionForTouchAction( - TouchAction::kTouchActionPanY); - EXPECT_EQ(region.bounds(), gfx::Rect(0, 0, 100, 150)); - } + auto* non_scrolling_layer = + composited_layer_mapping->MainGraphicsLayer()->CcLayer(); + region = non_scrolling_layer->touch_action_region().GetRegionForTouchAction( + TouchAction::kTouchActionPanY); + EXPECT_EQ(region.bounds(), gfx::Rect(0, 0, 100, 100)); } TEST_P(ScrollingCoordinatorTest, IframeWindowTouchHandler) { @@ -984,13 +914,8 @@ PaintLayer* paint_layer_child_frame = child_frame->GetFrame()->GetDocument()->GetLayoutView()->Layer(); auto* child_mapping = paint_layer_child_frame->GetCompositedLayerMapping(); - // With PaintTouchActionRects, touch action regions are stored on the layer - // that draws the background whereas without PaintTouchActionRects the main - // graphics layer is used. - auto* child_graphics_layer = - RuntimeEnabledFeatures::PaintTouchActionRectsEnabled() - ? child_mapping->ScrollingContentsLayer() - : child_mapping->MainGraphicsLayer(); + // Touch action regions are stored on the layer that draws the background. + auto* child_graphics_layer = child_mapping->ScrollingContentsLayer(); cc::Region region_child_frame = child_graphics_layer->CcLayer() @@ -1013,16 +938,11 @@ EXPECT_FALSE(region_child_frame.bounds().IsEmpty()); // We only check for the content size for verification as the offset is 0x0 // due to child frame having its own composited layer. - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) { - // Because PaintTouchActionRects is painting the touch action rects on the - // scrolling contents layer, the size of the rect should be equal to the - // entire scrolling contents area. - EXPECT_EQ(child_graphics_layer->Size(), - gfx::Size(region_child_frame.bounds().size())); - } else { - EXPECT_EQ(child_frame->GetFrameView()->Size(), - IntSize(region_child_frame.bounds().size())); - } + + // Because touch action rects are painted on the scrolling contents layer, + // the size of the rect should be equal to the entire scrolling contents area. + EXPECT_EQ(child_graphics_layer->Size(), + gfx::Size(region_child_frame.bounds().size())); } TEST_P(ScrollingCoordinatorTest, WindowTouchEventHandler) { @@ -1041,12 +961,8 @@ auto* layout_view = GetFrame()->View()->GetLayoutView(); auto* mapping = layout_view->Layer()->GetCompositedLayerMapping(); - // With PaintTouchActionRects, touch action regions are stored on the layer - // that draws the background whereas without PaintTouchActionRects the main - // graphics layer is used. - auto* graphics_layer = RuntimeEnabledFeatures::PaintTouchActionRectsEnabled() - ? mapping->ScrollingContentsLayer() - : mapping->MainGraphicsLayer(); + // Touch action regions are stored on the layer that draws the background. + auto* graphics_layer = mapping->ScrollingContentsLayer(); // The touch action region should include the entire frame, even though the // document is smaller than the frame. @@ -1069,13 +985,8 @@ auto* layout_view = GetFrame()->View()->GetLayoutView(); auto* mapping = layout_view->Layer()->GetCompositedLayerMapping(); - // With PaintTouchActionRects, touch action regions are stored on the layer - // that draws the background whereas without PaintTouchActionRects the main - // graphics layer is used. Both approaches can implement correct behavior for - // window event handlers. - auto* graphics_layer = RuntimeEnabledFeatures::PaintTouchActionRectsEnabled() - ? mapping->ScrollingContentsLayer() - : mapping->MainGraphicsLayer(); + // Touch action regions are stored on the layer that draws the background. + auto* graphics_layer = mapping->ScrollingContentsLayer(); auto* cc_layer = graphics_layer->CcLayer(); // Initially there are no touch action regions. @@ -1426,14 +1337,9 @@ FakeGLES2Interface gl_; }; -INSTANTIATE_TEST_SUITE_P( - All, - ScrollingCoordinatorTestWithAcceleratedContext, - ::testing::Values(kScrollingCoordinatorTestNoFlags, - kScrollingCoordinatorTestBlinkGenPropertyTrees, - kScrollingCoordinatorTestPaintTouchActionRects, - (kScrollingCoordinatorTestBlinkGenPropertyTrees | - kScrollingCoordinatorTestPaintTouchActionRects))); +INSTANTIATE_TEST_SUITE_P(All, + ScrollingCoordinatorTestWithAcceleratedContext, + testing::Bool()); TEST_P(ScrollingCoordinatorTestWithAcceleratedContext, CanvasTouchActionRects) { LoadHTML(R"HTML(
diff --git a/third_party/blink/renderer/core/paint/README.md b/third_party/blink/renderer/core/paint/README.md index f435fbf..24d44b67 100644 --- a/third_party/blink/renderer/core/paint/README.md +++ b/third_party/blink/renderer/core/paint/README.md
@@ -642,10 +642,9 @@ ### Hit test painting -Hit testing is done in paint-order. The |PaintTouchActionRects| flag enables a -mode where hit test display items are emitted in the background phase of -painting. Hit test display items are produced even if there is no painted -content. +Hit testing is done in paint-order. Hit test display items are emitted in the +background phase of painting. Hit test display items are produced even if there +is no painted content. ### PaintNG
diff --git a/third_party/blink/renderer/core/paint/background_image_geometry.cc b/third_party/blink/renderer/core/paint/background_image_geometry.cc index 581c54cf..26b5005 100644 --- a/third_party/blink/renderer/core/paint/background_image_geometry.cc +++ b/third_party/blink/renderer/core/paint/background_image_geometry.cc
@@ -810,19 +810,6 @@ tile_size_.ClampNegativeToZero(); return; } - case EFillSizeType::kSizeNone: { - // If both values are 'auto' then the intrinsic width and/or height of the - // image should be used, if any. - if (!image_intrinsic_size.IsEmpty()) { - tile_size_ = image_intrinsic_size; - return; - } - - // If the image has neither an intrinsic width nor an intrinsic height, - // its size is determined as for 'contain'. - type = EFillSizeType::kContain; - FALLTHROUGH; - } case EFillSizeType::kContain: case EFillSizeType::kCover: { // Always use the snapped positioning area size for this computation, @@ -871,6 +858,9 @@ } return; } + case EFillSizeType::kSizeNone: + // This value should only be used while resolving style. + NOTREACHED(); } NOTREACHED();
diff --git a/third_party/blink/renderer/core/paint/block_painter_test.cc b/third_party/blink/renderer/core/paint/block_painter_test.cc index bcdfdf27..fbf1c691 100644 --- a/third_party/blink/renderer/core/paint/block_painter_test.cc +++ b/third_party/blink/renderer/core/paint/block_painter_test.cc
@@ -213,16 +213,12 @@ BlockPainter(*scroller).OverflowRectForCullRectTesting(false)); } -class BlockPainterTestWithPaintTouchAction - : public PaintControllerPaintTestBase, - private ScopedPaintTouchActionRectsForTest { - public: - BlockPainterTestWithPaintTouchAction() - : PaintControllerPaintTestBase(), - ScopedPaintTouchActionRectsForTest(true) {} -}; +// TODO(pdr): These touch action tests should be run for all paint test +// parameters (using INSTANTIATE_PAINT_TEST_SUITE_P) but they are currently +// run without flags (i.e., stable configuration). +class BlockPainterTouchActionTest : public PaintControllerPaintTestBase {}; -TEST_F(BlockPainterTestWithPaintTouchAction, TouchActionRectsWithoutPaint) { +TEST_F(BlockPainterTouchActionTest, TouchActionRectsWithoutPaint) { SetBodyInnerHTML(R"HTML( <style> ::-webkit-scrollbar { display: none; } @@ -267,8 +263,7 @@ ElementsAre(IsSameId(&scrolling_client, kDocumentBackgroundType))); } -TEST_F(BlockPainterTestWithPaintTouchAction, - TouchActionRectSubsequenceCaching) { +TEST_F(BlockPainterTouchActionTest, TouchActionRectSubsequenceCaching) { SetBodyInnerHTML(R"HTML( <style> body { margin: 0; } @@ -329,7 +324,7 @@ hit_test_chunk_properties, hit_test_data))); } -TEST_F(BlockPainterTestWithPaintTouchAction, TouchActionRectPaintCaching) { +TEST_F(BlockPainterTouchActionTest, TouchActionRectPaintCaching) { SetBodyInnerHTML(R"HTML( <style> body { margin: 0; } @@ -390,7 +385,7 @@ hit_test_chunk_properties, hit_test_data))); } -TEST_F(BlockPainterTestWithPaintTouchAction, TouchActionRectScrollingContents) { +TEST_F(BlockPainterTouchActionTest, TouchActionRectScrollingContents) { SetBodyInnerHTML(R"HTML( <style> ::-webkit-scrollbar { display: none; } @@ -448,7 +443,7 @@ GetLayoutView().FirstFragment().ContentsProperties()))); } -TEST_F(BlockPainterTestWithPaintTouchAction, TouchActionRectPaintChunkChanges) { +TEST_F(BlockPainterTouchActionTest, TouchActionRectPaintChunkChanges) { SetBodyInnerHTML(R"HTML( <style> body { margin: 0; } @@ -514,7 +509,7 @@ }; } // namespace -TEST_F(BlockPainterTestWithPaintTouchAction, TouchHandlerRectsWithoutPaint) { +TEST_F(BlockPainterTouchActionTest, TouchHandlerRectsWithoutPaint) { SetBodyInnerHTML(R"HTML( <style> ::-webkit-scrollbar { display: none; } @@ -558,8 +553,7 @@ ElementsAre(IsSameId(&scrolling_client, kDocumentBackgroundType))); } -TEST_F(BlockPainterTestWithPaintTouchAction, - TouchActionRectsAcrossPaintChanges) { +TEST_F(BlockPainterTouchActionTest, TouchActionRectsAcrossPaintChanges) { SetBodyInnerHTML(R"HTML( <style> ::-webkit-scrollbar { display: none; } @@ -590,7 +584,7 @@ IsSameId(child, DisplayItem::kHitTest))); } -TEST_F(BlockPainterTestWithPaintTouchAction, ScrolledHitTestChunkProperties) { +TEST_F(BlockPainterTouchActionTest, ScrolledHitTestChunkProperties) { SetBodyInnerHTML(R"HTML( <style> ::-webkit-scrollbar { display: none; }
diff --git a/third_party/blink/renderer/core/paint/box_paint_invalidator.cc b/third_party/blink/renderer/core/paint/box_paint_invalidator.cc index af885a2f..a6c791c 100644 --- a/third_party/blink/renderer/core/paint/box_paint_invalidator.cc +++ b/third_party/blink/renderer/core/paint/box_paint_invalidator.cc
@@ -51,16 +51,15 @@ size_type == EFillSizeType::kCover) return true; - if (size_type == EFillSizeType::kSizeLength) { - // TODO(alancutter): Make this work correctly for calc lengths. - if (layer.SizeLength().Width().IsPercentOrCalc() && - !layer.SizeLength().Width().IsZero()) - return true; - if (img->IsGeneratedImage() && layer.SizeLength().Width().IsAuto()) - return true; - } else if (img->UsesImageContainerSize()) { + DCHECK_EQ(size_type, EFillSizeType::kSizeLength); + + // TODO(alancutter): Make this work correctly for calc lengths. + const Length& width = layer.SizeLength().Width(); + if (width.IsPercentOrCalc() && !width.IsZero()) return true; - } + + if (width.IsAuto() && img->IsGeneratedImage()) + return true; return false; } @@ -94,16 +93,15 @@ size_type == EFillSizeType::kCover) return true; - if (size_type == EFillSizeType::kSizeLength) { - // TODO(alancutter): Make this work correctly for calc lengths. - if (layer.SizeLength().Height().IsPercentOrCalc() && - !layer.SizeLength().Height().IsZero()) - return true; - if (img->IsGeneratedImage() && layer.SizeLength().Height().IsAuto()) - return true; - } else if (img->UsesImageContainerSize()) { + DCHECK_EQ(size_type, EFillSizeType::kSizeLength); + + // TODO(alancutter): Make this work correctly for calc lengths. + const Length& height = layer.SizeLength().Height(); + if (height.IsPercentOrCalc() && !height.IsZero()) return true; - } + + if (height.IsAuto() && img->IsGeneratedImage()) + return true; return false; }
diff --git a/third_party/blink/renderer/core/paint/box_painter.cc b/third_party/blink/renderer/core/paint/box_painter.cc index 251668fc..97e7dbc 100644 --- a/third_party/blink/renderer/core/paint/box_painter.cc +++ b/third_party/blink/renderer/core/paint/box_painter.cc
@@ -90,8 +90,7 @@ paint_rect, *background_client); } - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) - RecordHitTestData(paint_info, paint_rect, *background_client); + RecordHitTestData(paint_info, paint_rect, *background_client); } bool BoxPainter::BackgroundIsKnownToBeOpaque(const PaintInfo& paint_info) {
diff --git a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc index 92a62d7..81a2530 100644 --- a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc +++ b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
@@ -1920,10 +1920,8 @@ // paints content, regardless of whether the descendant content is a hit test) // but an exhaustive check of descendants that paint hit tests would be too // expensive. - bool paints_hit_test = - has_painted_content || - (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled() && - GetLayoutObject().HasEffectiveWhitelistedTouchAction()); + bool paints_hit_test = has_painted_content || + GetLayoutObject().HasEffectiveWhitelistedTouchAction(); graphics_layer_->SetPaintsHitTest(paints_hit_test); if (scrolling_layer_) {
diff --git a/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc b/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc index 85774d7..b053fc8 100644 --- a/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc +++ b/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc
@@ -72,7 +72,6 @@ has_accelerated_compositing_(true), compositing_(false), root_should_always_composite_dirty_(true), - in_overlay_fullscreen_video_(false), root_layer_attachment_(kRootLayerUnattached) { UpdateAcceleratedCompositingSettings(); } @@ -341,7 +340,6 @@ } void PaintLayerCompositor::ApplyOverlayFullscreenVideoAdjustmentIfNeeded() { - in_overlay_fullscreen_video_ = false; GraphicsLayer* content_parent = ParentForContentLayers(); if (!content_parent) return; @@ -357,7 +355,6 @@ content_parent->RemoveAllChildren(); content_parent->AddChild(video_layer); - in_overlay_fullscreen_video_ = true; } void PaintLayerCompositor::AdjustOverlayFullscreenVideoPosition(
diff --git a/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.h b/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.h index 9a6efefd..348f71a4 100644 --- a/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.h +++ b/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.h
@@ -152,8 +152,6 @@ PaintLayer*, CompositingStateTransitionType composited_layer_update); - bool InOverlayFullscreenVideo() const { return in_overlay_fullscreen_video_; } - bool IsRootScrollerAncestor() const; void AttachRootLayerViaChromeClient(); @@ -215,7 +213,6 @@ // except the one in updateIfNeeded, then rename this to // m_compositingDirty. bool root_should_always_composite_dirty_; - bool in_overlay_fullscreen_video_; enum RootLayerAttachment { kRootLayerUnattached,
diff --git a/third_party/blink/renderer/core/paint/fieldset_painter.cc b/third_party/blink/renderer/core/paint/fieldset_painter.cc index 744ebe0..439c4b2f 100644 --- a/third_party/blink/renderer/core/paint/fieldset_painter.cc +++ b/third_party/blink/renderer/core/paint/fieldset_painter.cc
@@ -79,10 +79,8 @@ } } - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) { - BoxPainter(layout_fieldset_) - .RecordHitTestData(paint_info, paint_rect, layout_fieldset_); - } + BoxPainter(layout_fieldset_) + .RecordHitTestData(paint_info, paint_rect, layout_fieldset_); } void FieldsetPainter::PaintMask(const PaintInfo& paint_info,
diff --git a/third_party/blink/renderer/core/paint/inline_flow_box_painter.cc b/third_party/blink/renderer/core/paint/inline_flow_box_painter.cc index 4867221..e0bdb9f 100644 --- a/third_party/blink/renderer/core/paint/inline_flow_box_painter.cc +++ b/third_party/blink/renderer/core/paint/inline_flow_box_painter.cc
@@ -187,8 +187,7 @@ const LayoutPoint& paint_offset) { DCHECK(paint_info.phase == PaintPhase::kForeground); - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) - RecordHitTestData(paint_info, paint_offset); + RecordHitTestData(paint_info, paint_offset); if (inline_flow_box_.GetLineLayoutItem().StyleRef().Visibility() != EVisibility::kVisible)
diff --git a/third_party/blink/renderer/core/paint/ng/ng_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_fragment_painter.cc index 068751b..42338dfe 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_fragment_painter.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_fragment_painter.cc
@@ -81,9 +81,6 @@ bool NGFragmentPainter::ShouldRecordHitTestData( const PaintInfo& paint_info, const NGPhysicalFragment& fragment) { - if (!RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) - return false; - // Hit test display items are only needed for compositing. This flag is used // for for printing and drag images which do not need hit testing. if (paint_info.GetGlobalPaintFlags() & kGlobalPaintFlattenCompositingLayers)
diff --git a/third_party/blink/renderer/core/paint/paint_invalidator.cc b/third_party/blink/renderer/core/paint/paint_invalidator.cc index db85483..a57801c 100644 --- a/third_party/blink/renderer/core/paint/paint_invalidator.cc +++ b/third_party/blink/renderer/core/paint/paint_invalidator.cc
@@ -205,7 +205,7 @@ || (object.HasOverflowClip() && ToLayoutBox(object).GetScrollableArea()->HasOverflowControls())) { context.painting_layer->SetNeedsPaintPhaseDescendantBlockBackgrounds(); - } else if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) { + } else { // Hit testing rects for touch action paint in the background phase. if (object.HasEffectiveWhitelistedTouchAction()) context.painting_layer->SetNeedsPaintPhaseDescendantBlockBackgrounds();
diff --git a/third_party/blink/renderer/core/paint/paint_layer.cc b/third_party/blink/renderer/core/paint/paint_layer.cc index 1ad2d3d..3e43e99d 100644 --- a/third_party/blink/renderer/core/paint/paint_layer.cc +++ b/third_party/blink/renderer/core/paint/paint_layer.cc
@@ -68,7 +68,6 @@ #include "third_party/blink/renderer/core/layout/svg/layout_svg_resource_clipper.h" #include "third_party/blink/renderer/core/layout/svg/layout_svg_root.h" #include "third_party/blink/renderer/core/page/page.h" -#include "third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h" #include "third_party/blink/renderer/core/page/scrolling/sticky_position_scrolling_constraints.h" #include "third_party/blink/renderer/core/paint/box_reflection_utils.h" #include "third_party/blink/renderer/core/paint/clip_path_clipper.h" @@ -206,10 +205,6 @@ reference_clip->RemoveClient(*rare_data_->resource_info); rare_data_->resource_info->ClearLayer(); } - if (GetLayoutObject().GetFrame()) { - if (ScrollingCoordinator* scrolling_coordinator = GetScrollingCoordinator()) - scrolling_coordinator->WillDestroyLayer(this); - } if (GroupedMapping()) { DisableCompositingQueryAsserts disabler; @@ -3350,55 +3345,6 @@ return false; } -void PaintLayer::AddLayerHitTestRects( - LayerHitTestRects& rects, - TouchAction supported_fast_actions) const { - ComputeSelfHitTestRects(rects, supported_fast_actions); - for (PaintLayer* child = FirstChild(); child; child = child->NextSibling()) - child->AddLayerHitTestRects(rects, supported_fast_actions); -} - -void PaintLayer::ComputeSelfHitTestRects( - LayerHitTestRects& rects, - TouchAction supported_fast_actions) const { - if (!Size().IsEmpty()) { - Vector<HitTestRect> rect; - TouchAction whitelisted_touch_action = - GetLayoutObject().StyleRef().GetEffectiveTouchAction() & - supported_fast_actions; - - if (GetLayoutBox() && GetLayoutBox()->ScrollsOverflow()) { - // For scrolling layers, rects are taken to be in the space of the - // contents. We need to include the bounding box of the layer in the - // space of its parent (eg. for border / scroll bars) and if it's - // composited then the entire contents as well as they may be on another - // composited layer. Skip reporting contents for non-composited layers as - // they'll get projected to the same layer as the bounding box. - if (GetCompositingState() != kNotComposited && scrollable_area_) { - rect.push_back(HitTestRect(scrollable_area_->OverflowRect(), - whitelisted_touch_action)); - } - - rects.Set(this, rect); - if (const PaintLayer* parent_layer = Parent()) { - LayerHitTestRects::iterator iter = rects.find(parent_layer); - if (iter == rects.end()) { - rects.insert(parent_layer, Vector<HitTestRect>()) - .stored_value->value.push_back(HitTestRect( - PhysicalBoundingBox(parent_layer), whitelisted_touch_action)); - } else { - iter->value.push_back(HitTestRect(PhysicalBoundingBox(parent_layer), - whitelisted_touch_action)); - } - } - } else { - rect.push_back( - HitTestRect(LogicalBoundingBox(), whitelisted_touch_action)); - rects.Set(this, rect); - } - } -} - void PaintLayer::SetNeedsRepaint() { SetNeedsRepaintInternal();
diff --git a/third_party/blink/renderer/core/paint/paint_layer.h b/third_party/blink/renderer/core/paint/paint_layer.h index 2b90f50..7934510b 100644 --- a/third_party/blink/renderer/core/paint/paint_layer.h +++ b/third_party/blink/renderer/core/paint/paint_layer.h
@@ -673,11 +673,6 @@ bool IsAffectedByScrollOf(const PaintLayer* ancestor) const; - void AddLayerHitTestRects(LayerHitTestRects&, TouchAction) const; - - // Compute rects only for this layer - void ComputeSelfHitTestRects(LayerHitTestRects&, TouchAction) const; - // FIXME: This should probably return a ScrollableArea but a lot of internal // methods are mistakenly exposed. PaintLayerScrollableArea* GetScrollableArea() const {
diff --git a/third_party/blink/renderer/core/paint/paint_phase.h b/third_party/blink/renderer/core/paint/paint_phase.h index c004c6b..bf07703 100644 --- a/third_party/blink/renderer/core/paint/paint_phase.h +++ b/third_party/blink/renderer/core/paint/paint_phase.h
@@ -32,9 +32,8 @@ // The painting of a layer occurs in 4 phases, Each involves a recursive // descent into the layer's layout objects in painting order: // 1. Background phase: backgrounds and borders of all blocks are painted. -// Inlines are not painted at all. -// With |PaintTouchActionRects|, hit testing is "painted" during the -// background phase (see: paint/README.md#hit-test-painting). +// Inlines are not painted at all. Touch-action hit test rects are also +// painted during this phase (see: paint/README.md#hit-test-painting). // 2. Float phase: floating objects are painted above block backgrounds but // entirely below inline content that can overlap them. // 3. Foreground phase: all inlines are fully painted. Atomic inline elements
diff --git a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc index 5b1f7623..fcbf60c4 100644 --- a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc +++ b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc
@@ -144,8 +144,6 @@ bool PrePaintTreeWalk::NeedsEffectiveWhitelistedTouchActionUpdate( const LayoutObject& object, PrePaintTreeWalk::PrePaintTreeWalkContext& context) const { - if (!RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) - return false; return context.effective_whitelisted_touch_action_changed || object.EffectiveWhitelistedTouchActionChanged() || object.DescendantEffectiveWhitelistedTouchActionChanged(); @@ -187,9 +185,6 @@ void PrePaintTreeWalk::UpdateEffectiveWhitelistedTouchAction( const LayoutObject& object, PrePaintTreeWalk::PrePaintTreeWalkContext& context) { - if (!RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) - return; - if (object.EffectiveWhitelistedTouchActionChanged()) context.effective_whitelisted_touch_action_changed = true; @@ -206,17 +201,12 @@ bool PrePaintTreeWalk::NeedsHitTestingPaintInvalidation( const LayoutObject& object, const PrePaintTreeWalk::PrePaintTreeWalkContext& context) const { - if (!RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) - return false; return context.effective_whitelisted_touch_action_changed; } void PrePaintTreeWalk::InvalidatePaintForHitTesting( const LayoutObject& object, PrePaintTreeWalk::PrePaintTreeWalkContext& context) { - if (!RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) - return; - if (context.effective_whitelisted_touch_action_changed) { if (auto* paint_layer = context.paint_invalidator_context.painting_layer) paint_layer->SetNeedsRepaint();
diff --git a/third_party/blink/renderer/core/paint/pre_paint_tree_walk_test.cc b/third_party/blink/renderer/core/paint/pre_paint_tree_walk_test.cc index 5f49dbf..5d140b5 100644 --- a/third_party/blink/renderer/core/paint/pre_paint_tree_walk_test.cc +++ b/third_party/blink/renderer/core/paint/pre_paint_tree_walk_test.cc
@@ -310,7 +310,6 @@ } // namespace TEST_P(PrePaintTreeWalkTest, InsideBlockingTouchEventHandlerUpdate) { - ScopedPaintTouchActionRectsForTest enable_paint_touch_action_rects(true); SetBodyInnerHTML(R"HTML( <div id='ancestor' style='width: 100px; height: 100px;'> <div id='handler' style='width: 100px; height: 100px;'> @@ -365,7 +364,6 @@ } TEST_P(PrePaintTreeWalkTest, EffectiveTouchActionStyleUpdate) { - ScopedPaintTouchActionRectsForTest enable_paint_touch_action_rects(true); SetBodyInnerHTML(R"HTML( <style> .touchaction { touch-action: none; } </style> <div id='ancestor' style='width: 100px; height: 100px;'> @@ -409,7 +407,6 @@ } TEST_P(PrePaintTreeWalkTest, ClipChangesDoNotCauseVisualRectUpdates) { - ScopedPaintTouchActionRectsForTest enable_paint_touch_action_rects(true); SetBodyInnerHTML(R"HTML( <style> #parent { width: 100px; height: 100px; overflow: hidden; } </style> <div id='parent'>
diff --git a/third_party/blink/renderer/core/paint/replaced_painter.cc b/third_party/blink/renderer/core/paint/replaced_painter.cc index ed5fc85..ffa3507b 100644 --- a/third_party/blink/renderer/core/paint/replaced_painter.cc +++ b/third_party/blink/renderer/core/paint/replaced_painter.cc
@@ -104,10 +104,8 @@ if (layout_replaced_.StyleRef().Visibility() == EVisibility::kVisible) { if (layout_replaced_.HasBoxDecorationBackground()) should_paint_background = true; - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled() && - layout_replaced_.HasEffectiveWhitelistedTouchAction()) { + if (layout_replaced_.HasEffectiveWhitelistedTouchAction()) should_paint_background = true; - } } if (should_paint_background) { if (layout_replaced_.HasLayer() && @@ -117,12 +115,9 @@ ->GetCompositedLayerMapping() ->DrawsBackgroundOntoContentLayer()) { // If the background paints into the content layer, we can skip painting - // the background but still need to paint the touch action rects. - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) { - BoxPainter(layout_replaced_) - .RecordHitTestData(local_paint_info, border_rect, - layout_replaced_); - } + // the background but still need to paint the hit test rects. + BoxPainter(layout_replaced_) + .RecordHitTestData(local_paint_info, border_rect, layout_replaced_); return; }
diff --git a/third_party/blink/renderer/core/paint/svg_image_painter.cc b/third_party/blink/renderer/core/paint/svg_image_painter.cc index 65131fa..ecfad77 100644 --- a/third_party/blink/renderer/core/paint/svg_image_painter.cc +++ b/third_party/blink/renderer/core/paint/svg_image_painter.cc
@@ -44,8 +44,7 @@ !DrawingRecorder::UseCachedDrawingIfPossible( paint_state.GetPaintInfo().context, layout_svg_image_, paint_state.GetPaintInfo().phase)) { - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) - SVGModelObjectPainter::RecordHitTestData(layout_svg_image_, paint_info); + SVGModelObjectPainter::RecordHitTestData(layout_svg_image_, paint_info); DrawingRecorder recorder(paint_state.GetPaintInfo().context, layout_svg_image_, paint_state.GetPaintInfo().phase);
diff --git a/third_party/blink/renderer/core/paint/svg_shape_painter.cc b/third_party/blink/renderer/core/paint/svg_shape_painter.cc index edd2bf77..ac21dc35 100644 --- a/third_party/blink/renderer/core/paint/svg_shape_painter.cc +++ b/third_party/blink/renderer/core/paint/svg_shape_painter.cc
@@ -65,8 +65,7 @@ !DrawingRecorder::UseCachedDrawingIfPossible( paint_state.GetPaintInfo().context, layout_svg_shape_, paint_state.GetPaintInfo().phase)) { - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) - SVGModelObjectPainter::RecordHitTestData(layout_svg_shape_, paint_info); + SVGModelObjectPainter::RecordHitTestData(layout_svg_shape_, paint_info); DrawingRecorder recorder(paint_state.GetPaintInfo().context, layout_svg_shape_, paint_state.GetPaintInfo().phase);
diff --git a/third_party/blink/renderer/core/paint/svg_text_painter.cc b/third_party/blink/renderer/core/paint/svg_text_painter.cc index 2e17d48..7edccfd 100644 --- a/third_party/blink/renderer/core/paint/svg_text_painter.cc +++ b/third_party/blink/renderer/core/paint/svg_text_painter.cc
@@ -27,8 +27,7 @@ block_info, layout_svg_text_, layout_svg_text_.LocalToSVGParentTransform()); - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) - RecordHitTestData(paint_info); + RecordHitTestData(paint_info); BlockPainter(layout_svg_text_).Paint(block_info); // Paint the outlines, if any
diff --git a/third_party/blink/renderer/core/paint/table_cell_painter.cc b/third_party/blink/renderer/core/paint/table_cell_painter.cc index 31e0fc3..0af0c09d 100644 --- a/third_party/blink/renderer/core/paint/table_cell_painter.cc +++ b/third_party/blink/renderer/core/paint/table_cell_painter.cc
@@ -138,10 +138,8 @@ } } - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) { - BoxPainter(layout_table_cell_) - .RecordHitTestData(paint_info, paint_rect, *client); - } + BoxPainter(layout_table_cell_) + .RecordHitTestData(paint_info, paint_rect, *client); } void TableCellPainter::PaintMask(const PaintInfo& paint_info,
diff --git a/third_party/blink/renderer/core/paint/table_painter.cc b/third_party/blink/renderer/core/paint/table_painter.cc index bde9eb40..23a820c 100644 --- a/third_party/blink/renderer/core/paint/table_painter.cc +++ b/third_party/blink/renderer/core/paint/table_painter.cc
@@ -64,10 +64,7 @@ .PaintBoxDecorationBackgroundWithRect(paint_info, rect, layout_table_); } - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) { - BoxPainter(layout_table_) - .RecordHitTestData(paint_info, rect, layout_table_); - } + BoxPainter(layout_table_).RecordHitTestData(paint_info, rect, layout_table_); } void TablePainter::PaintMask(const PaintInfo& paint_info,
diff --git a/third_party/blink/renderer/core/paint/table_row_painter.cc b/third_party/blink/renderer/core/paint/table_row_painter.cc index 9ba2b74..7ccf2f3 100644 --- a/third_party/blink/renderer/core/paint/table_row_painter.cc +++ b/third_party/blink/renderer/core/paint/table_row_painter.cc
@@ -95,8 +95,7 @@ ScopedPaintState paint_state(layout_table_row_, paint_info); const auto& local_paint_info = paint_state.GetPaintInfo(); auto paint_offset = paint_state.PaintOffset(); - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) - RecordHitTestData(local_paint_info, paint_offset); + RecordHitTestData(local_paint_info, paint_offset); bool has_background = layout_table_row_.StyleRef().HasBackground(); bool has_box_shadow = layout_table_row_.StyleRef().BoxShadow();
diff --git a/third_party/blink/renderer/core/paint/view_painter.cc b/third_party/blink/renderer/core/paint/view_painter.cc index dc42d8d..7df3dac 100644 --- a/third_party/blink/renderer/core/paint/view_painter.cc +++ b/third_party/blink/renderer/core/paint/view_painter.cc
@@ -36,8 +36,7 @@ return; bool has_touch_action_rect = - RuntimeEnabledFeatures::PaintTouchActionRectsEnabled() && - (layout_view_.HasEffectiveWhitelistedTouchAction()); + layout_view_.HasEffectiveWhitelistedTouchAction(); if (!layout_view_.HasBoxDecorationBackground() && !has_touch_action_rect) return;
diff --git a/third_party/blink/renderer/core/paint/view_painter_test.cc b/third_party/blink/renderer/core/paint/view_painter_test.cc index c5776d7e..bdfdb87 100644 --- a/third_party/blink/renderer/core/paint/view_painter_test.cc +++ b/third_party/blink/renderer/core/paint/view_painter_test.cc
@@ -163,13 +163,8 @@ } } -class ViewPainterTestWithPaintTouchAction - : public ViewPainterTest, - private ScopedPaintTouchActionRectsForTest { +class ViewPainterTouchActionRectTest : public ViewPainterTest { public: - ViewPainterTestWithPaintTouchAction() - : ViewPainterTest(), ScopedPaintTouchActionRectsForTest(true) {} - void SetUp() override { ViewPainterTest::SetUp(); Settings* settings = GetDocument().GetFrame()->GetSettings(); @@ -177,9 +172,9 @@ } }; -INSTANTIATE_PAINT_TEST_SUITE_P(ViewPainterTestWithPaintTouchAction); +INSTANTIATE_PAINT_TEST_SUITE_P(ViewPainterTouchActionRectTest); -TEST_P(ViewPainterTestWithPaintTouchAction, TouchActionRectScrollingContents) { +TEST_P(ViewPainterTouchActionRectTest, TouchActionRectScrollingContents) { SetBodyInnerHTML(R"HTML( <style> ::-webkit-scrollbar { display: none; } @@ -250,8 +245,7 @@ } } -TEST_P(ViewPainterTestWithPaintTouchAction, - TouchActionRectNonScrollingContents) { +TEST_P(ViewPainterTouchActionRectTest, TouchActionRectNonScrollingContents) { SetBodyInnerHTML(R"HTML( <style> ::-webkit-scrollbar { display: none; }
diff --git a/third_party/blink/renderer/core/scheduler/frame_throttling_test.cc b/third_party/blink/renderer/core/scheduler/frame_throttling_test.cc index a1ff9cf..9340a2cf 100644 --- a/third_party/blink/renderer/core/scheduler/frame_throttling_test.cc +++ b/third_party/blink/renderer/core/scheduler/frame_throttling_test.cc
@@ -817,14 +817,7 @@ // throttled or not. Since the layers are associated with the main document // which is not throttled, we expect the main document to have one touch // handler region. - // In the Non-PaintTouchActionRects world, the - // AccumulateDocumentTouchEventTargetRects goes through every document and - // check whether the document is throttled or not. So we expect no touch - // handler region. - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) - EXPECT_EQ(1u, TouchHandlerRegionSize()); - else - EXPECT_EQ(0u, TouchHandlerRegionSize()); + EXPECT_EQ(1u, TouchHandlerRegionSize()); // Unthrottling the frame makes the touch handlers active again. Note that // both handlers get combined into the same rectangle in the region, so @@ -878,14 +871,7 @@ // throttled or not. Since the layers are associated with the main document // which is not throttled, we expect the main document to have one touch // handler region. - // In the Non-PaintTouchActionRects world, the - // AccumulateDocumentTouchEventTargetRects goes through every document and - // check whether the document is throttled or not. So we expect no touch - // handler region. - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) - EXPECT_EQ(1u, TouchHandlerRegionSize()); - else - EXPECT_EQ(0u, TouchHandlerRegionSize()); + EXPECT_EQ(1u, TouchHandlerRegionSize()); // Unthrottling the frame makes the touch handler active again. frame_element->setAttribute(kStyleAttr, "transform: translateY(0px)");
diff --git a/third_party/blink/renderer/core/script/modulator_impl_base.cc b/third_party/blink/renderer/core/script/modulator_impl_base.cc index db96099f..7f5f017 100644 --- a/third_party/blink/renderer/core/script/modulator_impl_base.cc +++ b/third_party/blink/renderer/core/script/modulator_impl_base.cc
@@ -263,6 +263,10 @@ void ModulatorImplBase::ProduceCacheModuleTreeTopLevel( ModuleScript* module_script) { DCHECK(module_script); + // Since we run this asynchronously, context might be gone already, + // for example because the frame was detached. + if (!script_state_->ContextIsValid()) + return; HeapHashSet<Member<const ModuleScript>> discovered_set; ProduceCacheModuleTree(module_script, &discovered_set); }
diff --git a/third_party/blink/renderer/core/style/style_fetched_image.cc b/third_party/blink/renderer/core/style/style_fetched_image.cc index 1c450e9..b9b97c3e 100644 --- a/third_party/blink/renderer/core/style/style_fetched_image.cc +++ b/third_party/blink/renderer/core/style/style_fetched_image.cc
@@ -115,10 +115,6 @@ return image_->GetImage()->HasRelativeSize(); } -bool StyleFetchedImage::UsesImageContainerSize() const { - return image_->GetImage()->UsesContainerSize(); -} - void StyleFetchedImage::AddClient(ImageResourceObserver* observer) { image_->AddObserver(observer); }
diff --git a/third_party/blink/renderer/core/style/style_fetched_image.h b/third_party/blink/renderer/core/style/style_fetched_image.h index ccdf41f..2e62c822 100644 --- a/third_party/blink/renderer/core/style/style_fetched_image.h +++ b/third_party/blink/renderer/core/style/style_fetched_image.h
@@ -64,7 +64,6 @@ float multiplier, const LayoutSize& default_object_size) const override; bool ImageHasRelativeSize() const override; - bool UsesImageContainerSize() const override; void AddClient(ImageResourceObserver*) override; void RemoveClient(ImageResourceObserver*) override; void ImageNotifyFinished(ImageResourceContent*) override;
diff --git a/third_party/blink/renderer/core/style/style_fetched_image_set.cc b/third_party/blink/renderer/core/style/style_fetched_image_set.cc index 933cc71..b66408e 100644 --- a/third_party/blink/renderer/core/style/style_fetched_image_set.cc +++ b/third_party/blink/renderer/core/style/style_fetched_image_set.cc
@@ -114,10 +114,6 @@ return best_fit_image_->GetImage()->HasRelativeSize(); } -bool StyleFetchedImageSet::UsesImageContainerSize() const { - return best_fit_image_->GetImage()->UsesContainerSize(); -} - void StyleFetchedImageSet::AddClient(ImageResourceObserver* observer) { best_fit_image_->AddObserver(observer); }
diff --git a/third_party/blink/renderer/core/style/style_fetched_image_set.h b/third_party/blink/renderer/core/style/style_fetched_image_set.h index d032039..5c179e6 100644 --- a/third_party/blink/renderer/core/style/style_fetched_image_set.h +++ b/third_party/blink/renderer/core/style/style_fetched_image_set.h
@@ -75,7 +75,6 @@ float multiplier, const LayoutSize& default_object_size) const override; bool ImageHasRelativeSize() const override; - bool UsesImageContainerSize() const override; void AddClient(ImageResourceObserver*) override; void RemoveClient(ImageResourceObserver*) override; scoped_refptr<Image> GetImage(const ImageResourceObserver&,
diff --git a/third_party/blink/renderer/core/style/style_generated_image.h b/third_party/blink/renderer/core/style/style_generated_image.h index f1046f2..0126e08 100644 --- a/third_party/blink/renderer/core/style/style_generated_image.h +++ b/third_party/blink/renderer/core/style/style_generated_image.h
@@ -53,7 +53,6 @@ float multiplier, const LayoutSize& default_object_size) const override; bool ImageHasRelativeSize() const override { return !fixed_size_; } - bool UsesImageContainerSize() const override { return !fixed_size_; } void AddClient(ImageResourceObserver*) override; void RemoveClient(ImageResourceObserver*) override; // The |target_size| is the desired image size
diff --git a/third_party/blink/renderer/core/style/style_image.h b/third_party/blink/renderer/core/style/style_image.h index 33bd386..cb6c0b6 100644 --- a/third_party/blink/renderer/core/style/style_image.h +++ b/third_party/blink/renderer/core/style/style_image.h
@@ -92,10 +92,6 @@ // The <image> does not have any intrinsic dimensions. virtual bool ImageHasRelativeSize() const = 0; - // The <image> may depend on dimensions from the context the image is used in - // (the "container".) - virtual bool UsesImageContainerSize() const = 0; - virtual void AddClient(ImageResourceObserver*) = 0; virtual void RemoveClient(ImageResourceObserver*) = 0;
diff --git a/third_party/blink/renderer/core/style/style_pending_image.h b/third_party/blink/renderer/core/style/style_pending_image.h index c779060..733a56b0 100644 --- a/third_party/blink/renderer/core/style/style_pending_image.h +++ b/third_party/blink/renderer/core/style/style_pending_image.h
@@ -83,7 +83,6 @@ return FloatSize(); } bool ImageHasRelativeSize() const override { return false; } - bool UsesImageContainerSize() const override { return false; } void AddClient(ImageResourceObserver*) override {} void RemoveClient(ImageResourceObserver*) override {} scoped_refptr<Image> GetImage(const ImageResourceObserver&,
diff --git a/third_party/blink/renderer/core/svg/graphics/svg_image.h b/third_party/blink/renderer/core/svg/graphics/svg_image.h index f9caf52..67bf415 100644 --- a/third_party/blink/renderer/core/svg/graphics/svg_image.h +++ b/third_party/blink/renderer/core/svg/graphics/svg_image.h
@@ -141,7 +141,6 @@ String FilenameExtension() const override; IntSize ContainerSize() const; - bool UsesContainerSize() const override { return true; } SizeAvailability DataChanged(bool all_data_received) override;
diff --git a/third_party/blink/renderer/core/svg/graphics/svg_image_for_container.h b/third_party/blink/renderer/core/svg/graphics/svg_image_for_container.h index bf81d1c3..220c3974 100644 --- a/third_party/blink/renderer/core/svg/graphics/svg_image_for_container.h +++ b/third_party/blink/renderer/core/svg/graphics/svg_image_for_container.h
@@ -71,9 +71,6 @@ IntSize Size() const override; - bool UsesContainerSize() const override { - return image_->UsesContainerSize(); - } bool HasRelativeSize() const override { return image_->HasRelativeSize(); } bool ApplyShader(cc::PaintFlags&, const SkMatrix& local_matrix) override;
diff --git a/third_party/blink/renderer/core/svg/svg_angle_tear_off.cc b/third_party/blink/renderer/core/svg/svg_angle_tear_off.cc index 7683bd3e..739a1f0 100644 --- a/third_party/blink/renderer/core/svg/svg_angle_tear_off.cc +++ b/third_party/blink/renderer/core/svg/svg_angle_tear_off.cc
@@ -63,7 +63,7 @@ CommitChange(); } -void SVGAngleTearOff::newValueSpecifiedUnits(unsigned short unit_type, +void SVGAngleTearOff::newValueSpecifiedUnits(uint16_t unit_type, float value_in_specified_units, ExceptionState& exception_state) { if (IsImmutable()) { @@ -83,7 +83,7 @@ CommitChange(); } -void SVGAngleTearOff::convertToSpecifiedUnits(unsigned short unit_type, +void SVGAngleTearOff::convertToSpecifiedUnits(uint16_t unit_type, ExceptionState& exception_state) { if (IsImmutable()) { ThrowReadOnly(exception_state);
diff --git a/third_party/blink/renderer/core/svg/svg_angle_tear_off.h b/third_party/blink/renderer/core/svg/svg_angle_tear_off.h index 991960b..da1d1331 100644 --- a/third_party/blink/renderer/core/svg/svg_angle_tear_off.h +++ b/third_party/blink/renderer/core/svg/svg_angle_tear_off.h
@@ -61,7 +61,7 @@ PropertyIsAnimValType); ~SVGAngleTearOff() override; - unsigned short unitType() { + uint16_t unitType() { return HasExposedAngleUnit() ? Target()->UnitType() : SVGAngle::kSvgAngletypeUnknown; } @@ -72,10 +72,10 @@ void setValueInSpecifiedUnits(float, ExceptionState&); float valueInSpecifiedUnits() { return Target()->ValueInSpecifiedUnits(); } - void newValueSpecifiedUnits(unsigned short unit_type, + void newValueSpecifiedUnits(uint16_t unit_type, float value_in_specified_units, ExceptionState&); - void convertToSpecifiedUnits(unsigned short unit_type, ExceptionState&); + void convertToSpecifiedUnits(uint16_t unit_type, ExceptionState&); String valueAsString() { return HasExposedAngleUnit() ? Target()->ValueAsString()
diff --git a/third_party/blink/renderer/core/svg/svg_animated_enumeration_base.cc b/third_party/blink/renderer/core/svg/svg_animated_enumeration_base.cc index 2f3be22d..c6eae1a 100644 --- a/third_party/blink/renderer/core/svg/svg_animated_enumeration_base.cc +++ b/third_party/blink/renderer/core/svg/svg_animated_enumeration_base.cc
@@ -36,7 +36,7 @@ SVGAnimatedEnumerationBase::~SVGAnimatedEnumerationBase() = default; -void SVGAnimatedEnumerationBase::setBaseVal(unsigned short value, +void SVGAnimatedEnumerationBase::setBaseVal(uint16_t value, ExceptionState& exception_state) { if (!value) { exception_state.ThrowTypeError(
diff --git a/third_party/blink/renderer/core/svg/svg_animated_enumeration_base.h b/third_party/blink/renderer/core/svg/svg_animated_enumeration_base.h index d101766a..52a1220 100644 --- a/third_party/blink/renderer/core/svg/svg_animated_enumeration_base.h +++ b/third_party/blink/renderer/core/svg/svg_animated_enumeration_base.h
@@ -46,7 +46,7 @@ public: ~SVGAnimatedEnumerationBase() override; - void setBaseVal(unsigned short, ExceptionState&); + void setBaseVal(uint16_t, ExceptionState&); void Trace(blink::Visitor* visitor) override { SVGAnimatedProperty<SVGEnumerationBase>::Trace(visitor);
diff --git a/third_party/blink/renderer/core/svg/svg_enumeration.cc b/third_party/blink/renderer/core/svg/svg_enumeration.cc index 64e58a8db..2f5954a 100644 --- a/third_party/blink/renderer/core/svg/svg_enumeration.cc +++ b/third_party/blink/renderer/core/svg/svg_enumeration.cc
@@ -54,13 +54,13 @@ return g_empty_string; } -void SVGEnumerationBase::SetValue(unsigned short value) { +void SVGEnumerationBase::SetValue(uint16_t value) { value_ = value; NotifyChange(); } SVGParsingError SVGEnumerationBase::SetValueAsString(const String& string) { - unsigned short value = map_.ValueFromName(string); + uint16_t value = map_.ValueFromName(string); if (value) { value_ = value; NotifyChange(); @@ -83,14 +83,14 @@ SVGPropertyBase*, SVGElement*) { DCHECK(animation_element); - unsigned short from_enumeration = + uint16_t from_enumeration = animation_element->GetAnimationMode() == kToAnimation ? value_ : ToSVGEnumerationBase(from)->Value(); - unsigned short to_enumeration = ToSVGEnumerationBase(to)->Value(); + uint16_t to_enumeration = ToSVGEnumerationBase(to)->Value(); - animation_element->AnimateDiscreteType<unsigned short>( - percentage, from_enumeration, to_enumeration, value_); + animation_element->AnimateDiscreteType<uint16_t>(percentage, from_enumeration, + to_enumeration, value_); } float SVGEnumerationBase::CalculateDistance(SVGPropertyBase*, SVGElement*) { @@ -98,11 +98,11 @@ return -1; } -unsigned short SVGEnumerationBase::MaxExposedEnumValue() const { +uint16_t SVGEnumerationBase::MaxExposedEnumValue() const { return map_.MaxExposedValue(); } -unsigned short SVGEnumerationBase::MaxInternalEnumValue() const { +uint16_t SVGEnumerationBase::MaxInternalEnumValue() const { return map_.ValueOfLast(); }
diff --git a/third_party/blink/renderer/core/svg/svg_enumeration.h b/third_party/blink/renderer/core/svg/svg_enumeration.h index 069c8b7..247b54c4 100644 --- a/third_party/blink/renderer/core/svg/svg_enumeration.h +++ b/third_party/blink/renderer/core/svg/svg_enumeration.h
@@ -42,14 +42,14 @@ public: // SVGEnumeration does not have a tear-off type. typedef void TearOffType; - typedef unsigned short PrimitiveType; + typedef uint16_t PrimitiveType; ~SVGEnumerationBase() override; - unsigned short Value() const { + uint16_t Value() const { return value_ <= MaxExposedEnumValue() ? value_ : 0; } - void SetValue(unsigned short); + void SetValue(uint16_t); // SVGPropertyBase: virtual SVGEnumerationBase* Clone() const = 0; @@ -73,25 +73,23 @@ // This is the maximum value that is exposed as an IDL constant on the // relevant interface. - unsigned short MaxExposedEnumValue() const; + uint16_t MaxExposedEnumValue() const; - void SetInitial(unsigned value) { - SetValue(static_cast<unsigned short>(value)); - } + void SetInitial(unsigned value) { SetValue(static_cast<uint16_t>(value)); } static constexpr int kInitialValueBits = 3; protected: - SVGEnumerationBase(unsigned short value, const SVGEnumerationMap& map) + SVGEnumerationBase(uint16_t value, const SVGEnumerationMap& map) : value_(value), map_(map) {} // This is the maximum value of all the internal enumeration values. // This assumes that the map is sorted on the enumeration value. - unsigned short MaxInternalEnumValue() const; + uint16_t MaxInternalEnumValue() const; // Used by SVGMarkerOrientEnumeration. virtual void NotifyChange() {} - unsigned short value_; + uint16_t value_; const SVGEnumerationMap& map_; };
diff --git a/third_party/blink/renderer/core/svg/svg_enumeration_map.cc b/third_party/blink/renderer/core/svg/svg_enumeration_map.cc index 446efe95..ae17c32 100644 --- a/third_party/blink/renderer/core/svg/svg_enumeration_map.cc +++ b/third_party/blink/renderer/core/svg/svg_enumeration_map.cc
@@ -8,7 +8,7 @@ namespace blink { -unsigned short SVGEnumerationMap::ValueFromName(const String& name) const { +uint16_t SVGEnumerationMap::ValueFromName(const String& name) const { for (const Entry& entry : *this) { if (name == entry.name) return entry.value;
diff --git a/third_party/blink/renderer/core/svg/svg_enumeration_map.h b/third_party/blink/renderer/core/svg/svg_enumeration_map.h index 6cecee9..06586b5 100644 --- a/third_party/blink/renderer/core/svg/svg_enumeration_map.h +++ b/third_party/blink/renderer/core/svg/svg_enumeration_map.h
@@ -22,40 +22,38 @@ class SVGEnumerationMap { public: struct Entry { - const unsigned short value; + const uint16_t value; const char* const name; }; - template <unsigned entries_length> + template <uint16_t entries_length> constexpr SVGEnumerationMap(const Entry (&entries)[entries_length]) : SVGEnumerationMap(entries, entries[entries_length - 1].value) {} - template <unsigned entries_length> + template <uint16_t entries_length> constexpr SVGEnumerationMap(const Entry (&entries)[entries_length], - unsigned short max_exposed_value) + uint16_t max_exposed_value) : entries_(entries), num_entries_(entries_length), max_exposed_value_(max_exposed_value) {} - const char* NameFromValue(unsigned short value) const { + const char* NameFromValue(uint16_t value) const { DCHECK(value); // We should never store 0 (*_UNKNOWN) in the map. DCHECK_LT(value - 1, num_entries_); DCHECK_EQ(entries_[value - 1].value, value); return entries_[value - 1].name; } - unsigned short ValueFromName(const String&) const; + uint16_t ValueFromName(const String&) const; - unsigned short ValueOfLast() const { - return entries_[num_entries_ - 1].value; - } - unsigned short MaxExposedValue() const { return max_exposed_value_; } + uint16_t ValueOfLast() const { return entries_[num_entries_ - 1].value; } + uint16_t MaxExposedValue() const { return max_exposed_value_; } private: const Entry* begin() const { return entries_; } const Entry* end() const { return entries_ + num_entries_; } const Entry* const entries_; - const unsigned short num_entries_; - const unsigned short max_exposed_value_; + const uint16_t num_entries_; + const uint16_t max_exposed_value_; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/svg/svg_length_tear_off.cc b/third_party/blink/renderer/core/svg/svg_length_tear_off.cc index 7990ebb..ff4094a 100644 --- a/third_party/blink/renderer/core/svg/svg_length_tear_off.cc +++ b/third_party/blink/renderer/core/svg/svg_length_tear_off.cc
@@ -50,7 +50,7 @@ unit == CSSPrimitiveValue::UnitType::kPicas; } -inline bool IsValidLengthUnit(unsigned short type) { +inline bool IsValidLengthUnit(uint16_t type) { return IsValidLengthUnit(static_cast<CSSPrimitiveValue::UnitType>(type)); } @@ -58,14 +58,14 @@ return context_element && context_element->isConnected(); } -inline CSSPrimitiveValue::UnitType ToCSSUnitType(unsigned short type) { +inline CSSPrimitiveValue::UnitType ToCSSUnitType(uint16_t type) { DCHECK(IsValidLengthUnit(type)); if (type == SVGLengthTearOff::kSvgLengthtypeNumber) return CSSPrimitiveValue::UnitType::kUserUnits; return static_cast<CSSPrimitiveValue::UnitType>(type); } -inline unsigned short ToInterfaceConstant(CSSPrimitiveValue::UnitType type) { +inline uint16_t ToInterfaceConstant(CSSPrimitiveValue::UnitType type) { switch (type) { case CSSPrimitiveValue::UnitType::kUnknown: return SVGLengthTearOff::kSvgLengthtypeUnknown; @@ -106,7 +106,7 @@ unit == CSSPrimitiveValue::UnitType::kUserUnits; } -unsigned short SVGLengthTearOff::unitType() { +uint16_t SVGLengthTearOff::unitType() { return HasExposedLengthUnit() ? ToInterfaceConstant(Target()->TypeWithCalcResolved()) : kSvgLengthtypeUnknown; @@ -192,7 +192,7 @@ CommitChange(); } -void SVGLengthTearOff::newValueSpecifiedUnits(unsigned short unit_type, +void SVGLengthTearOff::newValueSpecifiedUnits(uint16_t unit_type, float value_in_specified_units, ExceptionState& exception_state) { if (IsImmutable()) { @@ -212,7 +212,7 @@ } void SVGLengthTearOff::convertToSpecifiedUnits( - unsigned short unit_type, + uint16_t unit_type, ExceptionState& exception_state) { if (IsImmutable()) { ThrowReadOnly(exception_state);
diff --git a/third_party/blink/renderer/core/svg/svg_length_tear_off.h b/third_party/blink/renderer/core/svg/svg_length_tear_off.h index 95f39325..244acc3 100644 --- a/third_party/blink/renderer/core/svg/svg_length_tear_off.h +++ b/third_party/blink/renderer/core/svg/svg_length_tear_off.h
@@ -67,7 +67,7 @@ SVGAnimatedPropertyBase* binding, PropertyIsAnimValType); - unsigned short unitType(); + uint16_t unitType(); SVGLengthMode UnitMode(); float value(ExceptionState&); void setValue(float value, ExceptionState&); @@ -75,10 +75,10 @@ void setValueInSpecifiedUnits(float value, ExceptionState&); String valueAsString(); void setValueAsString(const String&, ExceptionState&); - void newValueSpecifiedUnits(unsigned short unit_type, + void newValueSpecifiedUnits(uint16_t unit_type, float value_in_specified_units, ExceptionState&); - void convertToSpecifiedUnits(unsigned short unit_type, ExceptionState&); + void convertToSpecifiedUnits(uint16_t unit_type, ExceptionState&); bool HasExposedLengthUnit(); };
diff --git a/third_party/blink/renderer/core/svg/svg_path_byte_stream_builder.cc b/third_party/blink/renderer/core/svg/svg_path_byte_stream_builder.cc index 4b38d9d6..820cfe29 100644 --- a/third_party/blink/renderer/core/svg/svg_path_byte_stream_builder.cc +++ b/third_party/blink/renderer/core/svg/svg_path_byte_stream_builder.cc
@@ -48,15 +48,13 @@ WriteType<float>(point.X()); WriteType<float>(point.Y()); } - void WriteSegmentType(unsigned short value) { - WriteType<unsigned short>(value); - } + void WriteSegmentType(uint16_t value) { WriteType<uint16_t>(value); } private: // Adjust size to fit the largest command (in serialized/byte-stream format). // Currently a cubic segment. wtf_size_t current_offset_; - unsigned char bytes_[sizeof(unsigned short) + sizeof(FloatPoint) * 3]; + unsigned char bytes_[sizeof(uint16_t) + sizeof(FloatPoint) * 3]; SVGPathByteStream& byte_stream_; };
diff --git a/third_party/blink/renderer/core/svg/svg_path_byte_stream_source.h b/third_party/blink/renderer/core/svg/svg_path_byte_stream_source.h index 48c1ae5f..3f79ca5a 100644 --- a/third_party/blink/renderer/core/svg/svg_path_byte_stream_source.h +++ b/third_party/blink/renderer/core/svg/svg_path_byte_stream_source.h
@@ -54,7 +54,7 @@ bool ReadFlag() { return ReadType<bool>(); } float ReadFloat() { return ReadType<float>(); } - unsigned short ReadSVGSegmentType() { return ReadType<unsigned short>(); } + uint16_t ReadSVGSegmentType() { return ReadType<uint16_t>(); } FloatPoint ReadFloatPoint() { float x = ReadType<float>(); float y = ReadType<float>();
diff --git a/third_party/blink/renderer/core/svg/svg_preserve_aspect_ratio_tear_off.cc b/third_party/blink/renderer/core/svg/svg_preserve_aspect_ratio_tear_off.cc index b7abe804..5f7328f 100644 --- a/third_party/blink/renderer/core/svg/svg_preserve_aspect_ratio_tear_off.cc +++ b/third_party/blink/renderer/core/svg/svg_preserve_aspect_ratio_tear_off.cc
@@ -34,7 +34,7 @@ namespace blink { -void SVGPreserveAspectRatioTearOff::setAlign(unsigned short align, +void SVGPreserveAspectRatioTearOff::setAlign(uint16_t align, ExceptionState& exception_state) { if (IsImmutable()) { ThrowReadOnly(exception_state); @@ -52,7 +52,7 @@ } void SVGPreserveAspectRatioTearOff::setMeetOrSlice( - unsigned short meet_or_slice, + uint16_t meet_or_slice, ExceptionState& exception_state) { if (IsImmutable()) { ThrowReadOnly(exception_state);
diff --git a/third_party/blink/renderer/core/svg/svg_preserve_aspect_ratio_tear_off.h b/third_party/blink/renderer/core/svg/svg_preserve_aspect_ratio_tear_off.h index 240844fc..c774215 100644 --- a/third_party/blink/renderer/core/svg/svg_preserve_aspect_ratio_tear_off.h +++ b/third_party/blink/renderer/core/svg/svg_preserve_aspect_ratio_tear_off.h
@@ -85,10 +85,10 @@ SVGAnimatedPropertyBase* binding, PropertyIsAnimValType); - void setAlign(unsigned short, ExceptionState&); - unsigned short align() { return Target()->Align(); } - void setMeetOrSlice(unsigned short, ExceptionState&); - unsigned short meetOrSlice() { return Target()->MeetOrSlice(); } + void setAlign(uint16_t, ExceptionState&); + uint16_t align() { return Target()->Align(); } + void setMeetOrSlice(uint16_t, ExceptionState&); + uint16_t meetOrSlice() { return Target()->MeetOrSlice(); } }; } // namespace blink
diff --git a/third_party/blink/renderer/core/svg/svg_transform_tear_off.h b/third_party/blink/renderer/core/svg/svg_transform_tear_off.h index 312d3d7..481b308a 100644 --- a/third_party/blink/renderer/core/svg/svg_transform_tear_off.h +++ b/third_party/blink/renderer/core/svg/svg_transform_tear_off.h
@@ -68,8 +68,8 @@ PropertyIsAnimValType); ~SVGTransformTearOff() override; - unsigned short transformType() { - return static_cast<unsigned short>(Target()->TransformType()); + uint16_t transformType() { + return static_cast<uint16_t>(Target()->TransformType()); } SVGMatrixTearOff* matrix(); float angle() { return Target()->Angle(); }
diff --git a/third_party/blink/renderer/core/svg/svg_zoom_and_pan.h b/third_party/blink/renderer/core/svg/svg_zoom_and_pan.h index c31fe7ed..4b08479 100644 --- a/third_party/blink/renderer/core/svg/svg_zoom_and_pan.h +++ b/third_party/blink/renderer/core/svg/svg_zoom_and_pan.h
@@ -48,7 +48,7 @@ static bool IsKnownAttribute(const QualifiedName&); - static SVGZoomAndPanType ParseFromNumber(unsigned short number) { + static SVGZoomAndPanType ParseFromNumber(uint16_t number) { if (!number || number > kSVGZoomAndPanMagnify) return kSVGZoomAndPanUnknown; return static_cast<SVGZoomAndPanType>(number); @@ -61,10 +61,10 @@ // JS API SVGZoomAndPanType zoomAndPan() const { return zoom_and_pan_; } - virtual void setZoomAndPan(unsigned short value) { + virtual void setZoomAndPan(uint16_t value) { zoom_and_pan_ = ParseFromNumber(value); } - virtual void setZoomAndPan(unsigned short value, ExceptionState&) { + virtual void setZoomAndPan(uint16_t value, ExceptionState&) { setZoomAndPan(value); }
diff --git a/third_party/blink/renderer/core/testing/internals.cc b/third_party/blink/renderer/core/testing/internals.cc index 00573b0..d6039ba 100644 --- a/third_party/blink/renderer/core/testing/internals.cc +++ b/third_party/blink/renderer/core/testing/internals.cc
@@ -533,7 +533,7 @@ return parent_tree_scope ? &parent_tree_scope->RootNode() : nullptr; } -unsigned short Internals::compareTreeScopePosition( +uint16_t Internals::compareTreeScopePosition( const Node* node1, const Node* node2, ExceptionState& exception_state) const {
diff --git a/third_party/blink/renderer/core/testing/internals.h b/third_party/blink/renderer/core/testing/internals.h index 5d291c9e..d546f81b 100644 --- a/third_party/blink/renderer/core/testing/internals.h +++ b/third_party/blink/renderer/core/testing/internals.h
@@ -142,9 +142,9 @@ bool isValidContentSelect(Element* insertion_point, ExceptionState&); Node* treeScopeRootNode(Node*); Node* parentTreeScope(Node*); - unsigned short compareTreeScopePosition(const Node*, - const Node*, - ExceptionState&) const; + uint16_t compareTreeScopePosition(const Node*, + const Node*, + ExceptionState&) const; Node* nextSiblingInFlatTree(Node*, ExceptionState&); Node* firstChildInFlatTree(Node*, ExceptionState&);
diff --git a/third_party/blink/renderer/core/testing/origin_trials_test.h b/third_party/blink/renderer/core/testing/origin_trials_test.h index 2fbac76..923b31a 100644 --- a/third_party/blink/renderer/core/testing/origin_trials_test.h +++ b/third_party/blink/renderer/core/testing/origin_trials_test.h
@@ -33,7 +33,7 @@ static bool staticAttribute() { return true; } bool normalMethod() { return true; } static bool staticMethod() { return true; } - static const unsigned short kConstant = 1; + static const uint16_t kConstant = 1; bool throwingAttribute(ScriptState*, ExceptionState&); OriginTrialsTestDictionary* getDictionaryMethod() { @@ -46,7 +46,7 @@ bool unconditionalMethod() { return true; } void unconditionalDictionaryMethod(const OriginTrialsTestDictionary* dict) {} static bool staticUnconditionalMethod() { return true; } - static const unsigned short kUnconditionalConstant = 99; + static const uint16_t kUnconditionalConstant = 99; bool secureUnconditionalAttribute() { return true; } static bool secureStaticUnconditionalAttribute() { return true; }
diff --git a/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc b/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc index c5877784..895d5e2 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc
@@ -19,8 +19,13 @@ } AXObject* AXRelationCache::GetAriaOwnedParent(const AXObject* child) const { - return ObjectFromAXID( - aria_owned_child_to_owner_mapping_.at(child->AXObjectID())); + // Child IDs may still be present in owning parents whose list of children + // have been marked as requiring an update, but have not been updated yet. + HashMap<AXID, AXID>::const_iterator iter = + aria_owned_child_to_owner_mapping_.find(child->AXObjectID()); + if (iter == aria_owned_child_to_owner_mapping_.end()) + return nullptr; + return ObjectFromAXID(iter->value); } // Update reverse relation map, where relation_source is related to target_ids. @@ -42,7 +47,6 @@ for (AXObject* parent = owner; parent; parent = parent->ParentObject()) { if (parent == child) return true; - ; } return false; } @@ -228,8 +232,7 @@ void AXRelationCache::RemoveAXID(AXID obj_id) { if (aria_owner_to_children_mapping_.Contains(obj_id)) { Vector<AXID> child_axids = aria_owner_to_children_mapping_.at(obj_id); - for (AXID child_axid : child_axids) - aria_owned_child_to_owner_mapping_.erase(child_axid); + aria_owned_child_to_owner_mapping_.RemoveAll(child_axids); aria_owner_to_children_mapping_.erase(obj_id); } aria_owned_child_to_owner_mapping_.erase(obj_id);
diff --git a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_rendering_context.cc b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_rendering_context.cc index f4ce8d8..48c3962 100644 --- a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_rendering_context.cc +++ b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_rendering_context.cc
@@ -32,6 +32,10 @@ return; } + if (image_bitmap && image_bitmap->WouldTaintOrigin()) { + Host()->SetOriginTainted(); + } + SetImage(image_bitmap); }
diff --git a/third_party/blink/renderer/modules/filesystem/file_system_client.h b/third_party/blink/renderer/modules/filesystem/file_system_client.h index c5dfd76..3a806e4 100644 --- a/third_party/blink/renderer/modules/filesystem/file_system_client.h +++ b/third_party/blink/renderer/modules/filesystem/file_system_client.h
@@ -33,6 +33,7 @@ #include <memory> +#include "base/callback.h" #include "base/macros.h" #include "third_party/blink/public/mojom/filesystem/file_system.mojom-blink.h" #include "third_party/blink/renderer/modules/modules_export.h" @@ -43,7 +44,6 @@ class ExecutionContext; class LocalFrame; -class ContentSettingCallbacks; class WorkerClients; class FileSystemClient { @@ -54,9 +54,8 @@ virtual ~FileSystemClient() = default; virtual bool RequestFileSystemAccessSync(ExecutionContext*) = 0; - virtual void RequestFileSystemAccessAsync( - ExecutionContext*, - std::unique_ptr<ContentSettingCallbacks>) = 0; + virtual void RequestFileSystemAccessAsync(ExecutionContext*, + base::OnceCallback<void(bool)>) = 0; private: DISALLOW_COPY_AND_ASSIGN(FileSystemClient);
diff --git a/third_party/blink/renderer/modules/filesystem/local_file_system.cc b/third_party/blink/renderer/modules/filesystem/local_file_system.cc index 041d72f1..120dee9 100644 --- a/third_party/blink/renderer/modules/filesystem/local_file_system.cc +++ b/third_party/blink/renderer/modules/filesystem/local_file_system.cc
@@ -49,7 +49,6 @@ #include "third_party/blink/renderer/modules/filesystem/file_system_client.h" #include "third_party/blink/renderer/modules/filesystem/file_system_dispatcher.h" #include "third_party/blink/renderer/platform/async_file_system_callbacks.h" -#include "third_party/blink/renderer/platform/content_setting_callbacks.h" #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h" @@ -64,22 +63,6 @@ } // namespace -class CallbackWrapper final - : public GarbageCollectedFinalized<CallbackWrapper> { - public: - explicit CallbackWrapper(std::unique_ptr<AsyncFileSystemCallbacks> c) - : callbacks_(std::move(c)) {} - virtual ~CallbackWrapper() = default; - std::unique_ptr<AsyncFileSystemCallbacks> Release() { - return std::move(callbacks_); - } - - void Trace(blink::Visitor* visitor) {} - - private: - std::unique_ptr<AsyncFileSystemCallbacks> callbacks_; -}; - LocalFileSystem::~LocalFileSystem() = default; void LocalFileSystem::ResolveURL( @@ -87,16 +70,25 @@ const KURL& file_system_url, std::unique_ptr<AsyncFileSystemCallbacks> callbacks, SynchronousType type) { - CallbackWrapper* wrapper = - MakeGarbageCollected<CallbackWrapper>(std::move(callbacks)); RequestFileSystemAccessInternal( context, - WTF::Bind(&LocalFileSystem::ResolveURLInternal, + WTF::Bind(&LocalFileSystem::ResolveURLCallback, WrapCrossThreadPersistent(this), WrapPersistent(context), - file_system_url, WrapPersistent(wrapper), type), - WTF::Bind(&LocalFileSystem::FileSystemNotAllowedInternal, - WrapCrossThreadPersistent(this), WrapPersistent(context), - WrapPersistent(wrapper))); + file_system_url, std::move(callbacks), type)); +} + +void LocalFileSystem::ResolveURLCallback( + ExecutionContext* context, + const KURL& file_system_url, + std::unique_ptr<AsyncFileSystemCallbacks> callbacks, + SynchronousType sync_type, + bool allowed) { + if (allowed) { + ResolveURLInternal(context, file_system_url, std::move(callbacks), + sync_type); + return; + } + FileSystemNotAllowedInternal(context, std::move(callbacks)); } void LocalFileSystem::RequestFileSystem( @@ -105,79 +97,74 @@ long long size, std::unique_ptr<AsyncFileSystemCallbacks> callbacks, SynchronousType sync_type) { - CallbackWrapper* wrapper = - MakeGarbageCollected<CallbackWrapper>(std::move(callbacks)); RequestFileSystemAccessInternal( context, - WTF::Bind(&LocalFileSystem::FileSystemAllowedInternal, + WTF::Bind(&LocalFileSystem::RequestFileSystemCallback, WrapCrossThreadPersistent(this), WrapPersistent(context), type, - WrapPersistent(wrapper), sync_type), - WTF::Bind(&LocalFileSystem::FileSystemNotAllowedInternal, - WrapCrossThreadPersistent(this), WrapPersistent(context), - WrapPersistent(wrapper))); + std::move(callbacks), sync_type)); +} + +void LocalFileSystem::RequestFileSystemCallback( + ExecutionContext* context, + mojom::blink::FileSystemType type, + std::unique_ptr<AsyncFileSystemCallbacks> callbacks, + SynchronousType sync_type, + bool allowed) { + if (allowed) { + FileSystemAllowedInternal(context, type, std::move(callbacks), sync_type); + return; + } + FileSystemNotAllowedInternal(context, std::move(callbacks)); } void LocalFileSystem::RequestFileSystemAccessInternal( ExecutionContext* context, - base::OnceClosure allowed, - base::OnceClosure denied) { + base::OnceCallback<void(bool)> callback) { if (!context->IsDocument()) { if (!Client().RequestFileSystemAccessSync(context)) { - std::move(denied).Run(); + std::move(callback).Run(false); return; } - std::move(allowed).Run(); + std::move(callback).Run(true); return; } - Client().RequestFileSystemAccessAsync( - context, - ContentSettingCallbacks::Create(std::move(allowed), std::move(denied))); + Client().RequestFileSystemAccessAsync(context, std::move(callback)); } -void LocalFileSystem::FileSystemNotAvailable(ExecutionContext* context, - CallbackWrapper* callbacks) { +void LocalFileSystem::FileSystemNotAllowedInternal( + ExecutionContext* context, + std::unique_ptr<AsyncFileSystemCallbacks> callbacks) { context->GetTaskRunner(TaskType::kFileReading) ->PostTask(FROM_HERE, - WTF::Bind(&ReportFailure, WTF::Passed(callbacks->Release()), - base::File::FILE_ERROR_ABORT)); -} - -void LocalFileSystem::FileSystemNotAllowedInternal(ExecutionContext* context, - CallbackWrapper* callbacks) { - context->GetTaskRunner(TaskType::kFileReading) - ->PostTask(FROM_HERE, - WTF::Bind(&ReportFailure, WTF::Passed(callbacks->Release()), + WTF::Bind(&ReportFailure, WTF::Passed(std::move(callbacks)), base::File::FILE_ERROR_ABORT)); } void LocalFileSystem::FileSystemAllowedInternal( ExecutionContext* context, mojom::blink::FileSystemType type, - CallbackWrapper* callbacks, + std::unique_ptr<AsyncFileSystemCallbacks> callbacks, SynchronousType sync_type) { - std::unique_ptr<AsyncFileSystemCallbacks> async_callbacks = - callbacks->Release(); FileSystemDispatcher& dispatcher = FileSystemDispatcher::From(context); if (sync_type == kSynchronous) { dispatcher.OpenFileSystemSync(context->GetSecurityOrigin(), type, - std::move(async_callbacks)); + std::move(callbacks)); } else { dispatcher.OpenFileSystem(context->GetSecurityOrigin(), type, - std::move(async_callbacks)); + std::move(callbacks)); } } -void LocalFileSystem::ResolveURLInternal(ExecutionContext* context, - const KURL& file_system_url, - CallbackWrapper* callbacks, - SynchronousType sync_type) { +void LocalFileSystem::ResolveURLInternal( + ExecutionContext* context, + const KURL& file_system_url, + std::unique_ptr<AsyncFileSystemCallbacks> callbacks, + SynchronousType sync_type) { FileSystemDispatcher& dispatcher = FileSystemDispatcher::From(context); - std::unique_ptr<AsyncFileSystemCallbacks> async_callbacks = - callbacks->Release(); if (sync_type == kSynchronous) { - dispatcher.ResolveURLSync(file_system_url, std::move(async_callbacks)); + dispatcher.ResolveURLSync(file_system_url, std::move(callbacks)); } else { - dispatcher.ResolveURL(file_system_url, std::move(async_callbacks)); + dispatcher.ResolveURL(file_system_url, std::move(callbacks)); } }
diff --git a/third_party/blink/renderer/modules/filesystem/local_file_system.h b/third_party/blink/renderer/modules/filesystem/local_file_system.h index 342babe..1a3b755 100644 --- a/third_party/blink/renderer/modules/filesystem/local_file_system.h +++ b/third_party/blink/renderer/modules/filesystem/local_file_system.h
@@ -33,6 +33,7 @@ #include <memory> +#include "base/callback.h" #include "base/macros.h" #include "third_party/blink/public/mojom/filesystem/file_system.mojom-blink.h" #include "third_party/blink/renderer/core/frame/local_frame.h" @@ -46,7 +47,6 @@ namespace blink { class AsyncFileSystemCallbacks; -class CallbackWrapper; class FileSystemClient; class ExecutionContext; class KURL; @@ -84,19 +84,29 @@ const char* NameInHeapSnapshot() const override { return "LocalFileSystem"; } private: - void FileSystemNotAvailable(ExecutionContext*, CallbackWrapper*); - + void ResolveURLCallback(ExecutionContext* context, + const KURL& file_system_url, + std::unique_ptr<AsyncFileSystemCallbacks> callbacks, + SynchronousType sync_type, + bool allowed); + void RequestFileSystemCallback( + ExecutionContext* context, + mojom::blink::FileSystemType type, + std::unique_ptr<AsyncFileSystemCallbacks> callbacks, + SynchronousType sync_type, + bool allowed); void RequestFileSystemAccessInternal(ExecutionContext*, - base::OnceClosure allowed, - base::OnceClosure denied); - void FileSystemNotAllowedInternal(ExecutionContext*, CallbackWrapper*); - void FileSystemAllowedInternal(ExecutionContext*, - mojom::blink::FileSystemType, - CallbackWrapper*, - SynchronousType sync_type); + base::OnceCallback<void(bool)> callback); + void FileSystemNotAllowedInternal(ExecutionContext*, + std::unique_ptr<AsyncFileSystemCallbacks>); + void FileSystemAllowedInternal( + ExecutionContext*, + mojom::blink::FileSystemType, + std::unique_ptr<AsyncFileSystemCallbacks> callbacks, + SynchronousType sync_type); void ResolveURLInternal(ExecutionContext*, const KURL&, - CallbackWrapper*, + std::unique_ptr<AsyncFileSystemCallbacks>, SynchronousType sync_type); const std::unique_ptr<FileSystemClient> client_;
diff --git a/third_party/blink/renderer/modules/filesystem/local_file_system_client.cc b/third_party/blink/renderer/modules/filesystem/local_file_system_client.cc index 98d9354..48260da 100644 --- a/third_party/blink/renderer/modules/filesystem/local_file_system_client.cc +++ b/third_party/blink/renderer/modules/filesystem/local_file_system_client.cc
@@ -31,6 +31,7 @@ #include "third_party/blink/renderer/modules/filesystem/local_file_system_client.h" #include <memory> +#include <utility> #include "base/memory/ptr_util.h" #include "third_party/blink/public/platform/web_content_settings_client.h" @@ -38,7 +39,6 @@ #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/workers/worker_content_settings_client.h" #include "third_party/blink/renderer/core/workers/worker_global_scope.h" -#include "third_party/blink/renderer/platform/content_setting_callbacks.h" #include "third_party/blink/renderer/platform/weborigin/security_origin.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" @@ -66,7 +66,7 @@ void LocalFileSystemClient::RequestFileSystemAccessAsync( ExecutionContext* context, - std::unique_ptr<ContentSettingCallbacks> callbacks) { + base::OnceCallback<void(bool)> callback) { DCHECK(context); auto* document = DynamicTo<Document>(context); if (!document) { @@ -76,9 +76,9 @@ } if (auto* client = document->GetFrame()->GetContentSettingsClient()) { - client->RequestFileSystemAccessAsync(std::move(callbacks)); + client->RequestFileSystemAccessAsync(std::move(callback)); } else { - callbacks->OnAllowed(); + std::move(callback).Run(true); } }
diff --git a/third_party/blink/renderer/modules/filesystem/local_file_system_client.h b/third_party/blink/renderer/modules/filesystem/local_file_system_client.h index cc6d622..030faf9 100644 --- a/third_party/blink/renderer/modules/filesystem/local_file_system_client.h +++ b/third_party/blink/renderer/modules/filesystem/local_file_system_client.h
@@ -32,6 +32,7 @@ #define THIRD_PARTY_BLINK_RENDERER_MODULES_FILESYSTEM_LOCAL_FILE_SYSTEM_CLIENT_H_ #include <memory> +#include "base/callback.h" #include "third_party/blink/renderer/modules/filesystem/file_system_client.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/platform/wtf/forward.h" @@ -45,9 +46,8 @@ ~LocalFileSystemClient() override; bool RequestFileSystemAccessSync(ExecutionContext*) override; - void RequestFileSystemAccessAsync( - ExecutionContext*, - std::unique_ptr<ContentSettingCallbacks>) override; + void RequestFileSystemAccessAsync(ExecutionContext*, + base::OnceCallback<void(bool)>) override; private: LocalFileSystemClient();
diff --git a/third_party/blink/renderer/modules/gamepad/gamepad_comparisons.h b/third_party/blink/renderer/modules/gamepad/gamepad_comparisons.h index 44f16b6d..511f73e 100644 --- a/third_party/blink/renderer/modules/gamepad/gamepad_comparisons.h +++ b/third_party/blink/renderer/modules/gamepad/gamepad_comparisons.h
@@ -10,11 +10,14 @@ #include "device/gamepad/public/cpp/gamepads.h" #include "third_party/blink/renderer/modules/gamepad/gamepad_list.h" #include "third_party/blink/renderer/modules/modules_export.h" +#include "third_party/blink/renderer/platform/wtf/allocator.h" namespace blink { // Stores the result of a comparison between two GamepadLists. class MODULES_EXPORT GamepadStateCompareResult { + STACK_ALLOCATED(); + public: GamepadStateCompareResult(GamepadList* old_gamepads, GamepadList* new_gamepads, @@ -64,6 +67,8 @@ }; class MODULES_EXPORT GamepadComparisons { + STATIC_ONLY(GamepadComparisons); + public: // Inspect the gamepad state in |gamepads| and return true if any gamepads // have a user activation gesture.
diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_cast_button_element.cc b/third_party/blink/renderer/modules/media_controls/elements/media_control_cast_button_element.cc index f64519e..6554ab1 100644 --- a/third_party/blink/renderer/modules/media_controls/elements/media_control_cast_button_element.cc +++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_cast_button_element.cc
@@ -113,7 +113,7 @@ bool MediaControlCastButtonElement::IsPlayingRemotely() const { return RemotePlayback::From(MediaElement()).GetState() != - WebRemotePlaybackState::kDisconnected; + mojom::blink::PresentationConnectionState::CLOSED; } } // namespace blink
diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_metrics.h b/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_metrics.h index 097a5b5..ae1c1af5 100644 --- a/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_metrics.h +++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_metrics.h
@@ -7,12 +7,15 @@ #include "third_party/blink/public/common/screen_orientation/web_screen_orientation_type.h" #include "third_party/blink/renderer/platform/histogram.h" +#include "third_party/blink/renderer/platform/wtf/allocator.h" #include "third_party/blink/renderer/platform/wtf/time.h" namespace blink { // Helpers for tracking and reporting media control timeline metrics to UMA. class MediaControlTimelineMetrics { + DISALLOW_NEW(); + public: // Start tracking a pointer gesture. |fromThumb| indicates whether the user // started dragging from the thumb, as opposed to pressing down their pointer
diff --git a/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc b/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc index e026d14..45bf4c0 100644 --- a/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc +++ b/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc
@@ -1087,7 +1087,7 @@ } if (RemotePlayback::From(MediaElement()).GetState() != - WebRemotePlaybackState::kDisconnected) { + mojom::blink::PresentationConnectionState::CLOSED) { return false; }
diff --git a/third_party/blink/renderer/modules/mediasession/media_metadata_sanitizer.h b/third_party/blink/renderer/modules/mediasession/media_metadata_sanitizer.h index e37f00a5..16b53eb 100644 --- a/third_party/blink/renderer/modules/mediasession/media_metadata_sanitizer.h +++ b/third_party/blink/renderer/modules/mediasession/media_metadata_sanitizer.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASESSION_MEDIA_METADATA_SANITIZER_H_ #include "third_party/blink/public/platform/modules/mediasession/media_session.mojom-blink.h" +#include "third_party/blink/renderer/platform/wtf/allocator.h" namespace blink { @@ -13,6 +14,8 @@ class MediaMetadata; class MediaMetadataSanitizer { + STATIC_ONLY(MediaMetadataSanitizer); + public: // Produce the sanitized metadata, which will later be sent to the // MediaSession mojo service.
diff --git a/third_party/blink/renderer/modules/mediastream/media_error_state.h b/third_party/blink/renderer/modules/mediastream/media_error_state.h index d5282d04..66e882c 100644 --- a/third_party/blink/renderer/modules/mediastream/media_error_state.h +++ b/third_party/blink/renderer/modules/mediastream/media_error_state.h
@@ -33,6 +33,7 @@ #include "third_party/blink/renderer/bindings/modules/v8/dom_exception_or_overconstrained_error.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" +#include "third_party/blink/renderer/platform/wtf/allocator.h" namespace blink { @@ -42,6 +43,8 @@ // information about an error up the stack, but it is up to the higher // level code whether it produces a DOMException or a OverconstrainedError. class MediaErrorState { + STACK_ALLOCATED(); + public: MediaErrorState(); void ThrowTypeError(const String& message);
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_track_content_hint.h b/third_party/blink/renderer/modules/mediastream/media_stream_track_content_hint.h index 61672bc..688eb6f9 100644 --- a/third_party/blink/renderer/modules/mediastream/media_stream_track_content_hint.h +++ b/third_party/blink/renderer/modules/mediastream/media_stream_track_content_hint.h
@@ -6,10 +6,13 @@ #define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASTREAM_MEDIA_STREAM_TRACK_CONTENT_HINT_H_ #include "third_party/blink/renderer/modules/mediastream/media_stream_track.h" +#include "third_party/blink/renderer/platform/wtf/allocator.h" namespace blink { class MediaStreamTrackContentHint final { + STATIC_ONLY(MediaStreamTrackContentHint); + public: static String contentHint(const MediaStreamTrack& track) { return track.ContentHint();
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_client.h b/third_party/blink/renderer/modules/mediastream/user_media_client.h index 9e9e943..c828ebb 100644 --- a/third_party/blink/renderer/modules/mediastream/user_media_client.h +++ b/third_party/blink/renderer/modules/mediastream/user_media_client.h
@@ -37,6 +37,7 @@ #include "base/memory/scoped_refptr.h" #include "third_party/blink/renderer/modules/mediastream/user_media_client.h" #include "third_party/blink/renderer/modules/modules_export.h" +#include "third_party/blink/renderer/platform/wtf/allocator.h" namespace blink { @@ -47,6 +48,8 @@ class WebUserMediaClient; class MODULES_EXPORT UserMediaClient { + USING_FAST_MALLOC(UserMediaClient); + public: static std::unique_ptr<UserMediaClient> Create(WebUserMediaClient* client) { return base::WrapUnique(new UserMediaClient(client));
diff --git a/third_party/blink/renderer/modules/remoteplayback/remote_playback.cc b/third_party/blink/renderer/modules/remoteplayback/remote_playback.cc index 5c8f34a..605ca74e 100644 --- a/third_party/blink/renderer/modules/remoteplayback/remote_playback.cc +++ b/third_party/blink/renderer/modules/remoteplayback/remote_playback.cc
@@ -27,19 +27,18 @@ namespace { -const AtomicString& RemotePlaybackStateToString(WebRemotePlaybackState state) { +const AtomicString& RemotePlaybackStateToString( + mojom::blink::PresentationConnectionState state) { DEFINE_STATIC_LOCAL(const AtomicString, connecting_value, ("connecting")); DEFINE_STATIC_LOCAL(const AtomicString, connected_value, ("connected")); DEFINE_STATIC_LOCAL(const AtomicString, disconnected_value, ("disconnected")); - switch (state) { - case WebRemotePlaybackState::kConnecting: - return connecting_value; - case WebRemotePlaybackState::kConnected: - return connected_value; - case WebRemotePlaybackState::kDisconnected: - return disconnected_value; - } + if (state == mojom::blink::PresentationConnectionState::CONNECTING) + return connecting_value; + if (state == mojom::blink::PresentationConnectionState::CONNECTED) + return connected_value; + if (state == mojom::blink::PresentationConnectionState::CLOSED) + return disconnected_value; NOTREACHED(); return disconnected_value; @@ -86,7 +85,7 @@ RemotePlayback::RemotePlayback(HTMLMediaElement& element) : ContextLifecycleObserver(element.GetExecutionContext()), RemotePlaybackController(element), - state_(WebRemotePlaybackState::kDisconnected), + state_(mojom::blink::PresentationConnectionState::CLOSED), availability_(mojom::ScreenAvailability::UNKNOWN), media_element_(&element), is_listening_(false), @@ -323,22 +322,23 @@ iter->value->Run(this, RemotePlaybackAvailable()); } -void RemotePlayback::StateChanged(WebRemotePlaybackState state) { +void RemotePlayback::StateChanged( + mojom::blink::PresentationConnectionState state) { if (prompt_promise_resolver_) { // Changing state to "disconnected" from "disconnected" or "connecting" // means that establishing connection with remote playback device failed. // Changing state to anything else means the state change intended by // prompt() succeeded. - if (state_ != WebRemotePlaybackState::kConnected && - state == WebRemotePlaybackState::kDisconnected) { + if (state_ != mojom::blink::PresentationConnectionState::CONNECTED && + state == mojom::blink::PresentationConnectionState::CLOSED) { prompt_promise_resolver_->Reject( DOMException::Create(DOMExceptionCode::kAbortError, "Failed to connect to the remote device.")); } else { - DCHECK((state_ == WebRemotePlaybackState::kDisconnected && - state == WebRemotePlaybackState::kConnecting) || - (state_ == WebRemotePlaybackState::kConnected && - state == WebRemotePlaybackState::kDisconnected)); + DCHECK((state_ == mojom::blink::PresentationConnectionState::CLOSED && + state == mojom::blink::PresentationConnectionState::CONNECTING) || + (state_ == mojom::blink::PresentationConnectionState::CONNECTED && + state == mojom::blink::PresentationConnectionState::CLOSED)); prompt_promise_resolver_->Resolve(); } prompt_promise_resolver_ = nullptr; @@ -348,30 +348,25 @@ return; state_ = state; - switch (state_) { - case WebRemotePlaybackState::kConnecting: - DispatchEvent(*Event::Create(event_type_names::kConnecting)); - if (media_element_->IsHTMLVideoElement()) { - // TODO(xjz): Pass the remote device name. - ToHTMLVideoElement(media_element_)->MediaRemotingStarted(WebString()); - } - media_element_->FlingingStarted(); - break; - case WebRemotePlaybackState::kConnected: - DispatchEvent(*Event::Create(event_type_names::kConnect)); - break; - case WebRemotePlaybackState::kDisconnected: - DispatchEvent(*Event::Create(event_type_names::kDisconnect)); - if (media_element_->IsHTMLVideoElement()) { - ToHTMLVideoElement(media_element_) - ->MediaRemotingStopped( - WebLocalizedString::kMediaRemotingStopNoText); - } - CleanupConnections(); - presentation_id_ = ""; - presentation_url_ = KURL(); - media_element_->FlingingStopped(); - break; + if (state_ == mojom::blink::PresentationConnectionState::CONNECTING) { + DispatchEvent(*Event::Create(event_type_names::kConnecting)); + if (media_element_->IsHTMLVideoElement()) { + // TODO(xjz): Pass the remote device name. + ToHTMLVideoElement(media_element_)->MediaRemotingStarted(WebString()); + } + media_element_->FlingingStarted(); + } else if (state_ == mojom::blink::PresentationConnectionState::CONNECTED) { + DispatchEvent(*Event::Create(event_type_names::kConnect)); + } else if (state_ == mojom::blink::PresentationConnectionState::CLOSED) { + DispatchEvent(*Event::Create(event_type_names::kDisconnect)); + if (media_element_->IsHTMLVideoElement()) { + ToHTMLVideoElement(media_element_) + ->MediaRemotingStopped(WebLocalizedString::kMediaRemotingStopNoText); + } + CleanupConnections(); + presentation_id_ = ""; + presentation_url_ = KURL(); + media_element_->FlingingStopped(); } for (auto observer : observers_) @@ -431,8 +426,9 @@ } void RemotePlayback::StateChangedForTesting(bool is_connected) { - StateChanged(is_connected ? WebRemotePlaybackState::kConnected - : WebRemotePlaybackState::kDisconnected); + StateChanged(is_connected + ? mojom::blink::PresentationConnectionState::CONNECTED + : mojom::blink::PresentationConnectionState::CLOSED); } bool RemotePlayback::RemotePlaybackAvailable() const { @@ -456,7 +452,7 @@ availability_callbacks_.clear(); StopListeningForAvailability(); - if (state_ == WebRemotePlaybackState::kDisconnected) + if (state_ == mojom::blink::PresentationConnectionState::CLOSED) return; auto* controller = PresentationController::FromContext(GetExecutionContext()); @@ -501,7 +497,7 @@ presentation_id_ = std::move(result->presentation_info->id); presentation_url_ = std::move(result->presentation_info->url); - StateChanged(WebRemotePlaybackState::kConnecting); + StateChanged(mojom::blink::PresentationConnectionState::CONNECTING); DCHECK(!presentation_connection_binding_.is_bound()); auto* presentation_controller = @@ -524,7 +520,7 @@ return; } - StateChanged(WebRemotePlaybackState::kDisconnected); + StateChanged(mojom::blink::PresentationConnectionState::CLOSED); } void RemotePlayback::HandlePresentationResponse( @@ -544,19 +540,12 @@ void RemotePlayback::DidChangeState( mojom::blink::PresentationConnectionState state) { - WebRemotePlaybackState remote_playback_state = - WebRemotePlaybackState::kDisconnected; - if (state == mojom::blink::PresentationConnectionState::CONNECTING) - remote_playback_state = WebRemotePlaybackState::kConnecting; - else if (state == mojom::blink::PresentationConnectionState::CONNECTED) - remote_playback_state = WebRemotePlaybackState::kConnected; - - StateChanged(remote_playback_state); + StateChanged(state); } void RemotePlayback::DidClose( mojom::blink::PresentationConnectionCloseReason reason) { - StateChanged(WebRemotePlaybackState::kDisconnected); + StateChanged(mojom::blink::PresentationConnectionState::CLOSED); } void RemotePlayback::StopListeningForAvailability() {
diff --git a/third_party/blink/renderer/modules/remoteplayback/remote_playback.h b/third_party/blink/renderer/modules/remoteplayback/remote_playback.h index 340807ae..4022509 100644 --- a/third_party/blink/renderer/modules/remoteplayback/remote_playback.h +++ b/third_party/blink/renderer/modules/remoteplayback/remote_playback.h
@@ -9,7 +9,6 @@ #include "mojo/public/cpp/bindings/binding.h" #include "third_party/blink/public/mojom/presentation/presentation.mojom-blink.h" #include "third_party/blink/public/platform/modules/remoteplayback/web_remote_playback_client.h" -#include "third_party/blink/public/platform/modules/remoteplayback/web_remote_playback_state.h" #include "third_party/blink/public/platform/web_callbacks.h" #include "third_party/blink/public/platform/web_url.h" #include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h" @@ -97,7 +96,7 @@ int WatchAvailabilityInternal(AvailabilityCallbackWrapper*); bool CancelWatchAvailabilityInternal(int id); - WebRemotePlaybackState GetState() const { return state_; } + mojom::blink::PresentationConnectionState GetState() const { return state_; } // PresentationAvailabilityObserver implementation. void AvailabilityChanged(mojom::blink::ScreenAvailability) override; @@ -132,7 +131,7 @@ void ContextDestroyed(ExecutionContext*) override; // Adjusts the internal state of |this| after a playback state change. - void StateChanged(WebRemotePlaybackState); + void StateChanged(mojom::blink::PresentationConnectionState); DEFINE_ATTRIBUTE_EVENT_LISTENER(connecting, kConnecting) DEFINE_ATTRIBUTE_EVENT_LISTENER(connect, kConnect) @@ -163,7 +162,7 @@ // Clears bindings after remote playback stops. void CleanupConnections(); - WebRemotePlaybackState state_; + mojom::blink::PresentationConnectionState state_; mojom::blink::ScreenAvailability availability_; HeapHashMap<int, TraceWrapperMember<AvailabilityCallbackWrapper>> availability_callbacks_;
diff --git a/third_party/blink/renderer/modules/remoteplayback/remote_playback_test.cc b/third_party/blink/renderer/modules/remoteplayback/remote_playback_test.cc index 13153e5..eff2992 100644 --- a/third_party/blink/renderer/modules/remoteplayback/remote_playback_test.cc +++ b/third_party/blink/renderer/modules/remoteplayback/remote_playback_test.cc
@@ -6,7 +6,6 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -#include "third_party/blink/public/platform/modules/remoteplayback/web_remote_playback_state.h" #include "third_party/blink/renderer/bindings/core/v8/script_function.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_remote_playback_availability_callback.h" @@ -67,7 +66,8 @@ remote_playback.PromptCancelled(); } - void SetState(RemotePlayback& remote_playback, WebRemotePlaybackState state) { + void SetState(RemotePlayback& remote_playback, + mojom::blink::PresentationConnectionState state) { remote_playback.StateChanged(state); } @@ -122,7 +122,8 @@ EXPECT_CALL(*resolve, Call(testing::_)).Times(0); EXPECT_CALL(*reject, Call(testing::_)).Times(1); - SetState(remote_playback, WebRemotePlaybackState::kConnected); + SetState(remote_playback, + mojom::blink::PresentationConnectionState::CONNECTED); std::unique_ptr<UserGestureIndicator> indicator = LocalFrame::NotifyUserActivation(&page_holder->GetFrame(), @@ -155,7 +156,8 @@ EXPECT_CALL(*resolve, Call(testing::_)).Times(1); EXPECT_CALL(*reject, Call(testing::_)).Times(0); - SetState(remote_playback, WebRemotePlaybackState::kConnected); + SetState(remote_playback, + mojom::blink::PresentationConnectionState::CONNECTED); std::unique_ptr<UserGestureIndicator> indicator = LocalFrame::NotifyUserActivation(&page_holder->GetFrame(), @@ -163,7 +165,7 @@ remote_playback.prompt(scope.GetScriptState()) .Then(resolve->Bind(), reject->Bind()); - SetState(remote_playback, WebRemotePlaybackState::kDisconnected); + SetState(remote_playback, mojom::blink::PresentationConnectionState::CLOSED); // Runs pending promises. v8::MicrotasksScope::PerformCheckpoint(scope.GetIsolate()); @@ -200,12 +202,16 @@ EXPECT_CALL(*connect_handler, Invoke(testing::_, testing::_)).Times(1); EXPECT_CALL(*disconnect_handler, Invoke(testing::_, testing::_)).Times(1); - SetState(remote_playback, WebRemotePlaybackState::kConnecting); - SetState(remote_playback, WebRemotePlaybackState::kConnecting); - SetState(remote_playback, WebRemotePlaybackState::kConnected); - SetState(remote_playback, WebRemotePlaybackState::kConnected); - SetState(remote_playback, WebRemotePlaybackState::kDisconnected); - SetState(remote_playback, WebRemotePlaybackState::kDisconnected); + SetState(remote_playback, + mojom::blink::PresentationConnectionState::CONNECTING); + SetState(remote_playback, + mojom::blink::PresentationConnectionState::CONNECTING); + SetState(remote_playback, + mojom::blink::PresentationConnectionState::CONNECTED); + SetState(remote_playback, + mojom::blink::PresentationConnectionState::CONNECTED); + SetState(remote_playback, mojom::blink::PresentationConnectionState::CLOSED); + SetState(remote_playback, mojom::blink::PresentationConnectionState::CLOSED); // Verify mock expectations explicitly as the mock objects are garbage // collected.
diff --git a/third_party/blink/renderer/modules/webaudio/audio_buffer_source_node.cc b/third_party/blink/renderer/modules/webaudio/audio_buffer_source_node.cc index 656d0c6..4b18cf8 100644 --- a/third_party/blink/renderer/modules/webaudio/audio_buffer_source_node.cc +++ b/third_party/blink/renderer/modules/webaudio/audio_buffer_source_node.cc
@@ -45,14 +45,6 @@ // buffers to minimize linear interpolation aliasing. const double kMaxRate = 1024; -// Number of extra frames to use when determining if a source node can be -// stopped. This should be at least one rendering quantum, but we add one more -// quantum for good measure. This doesn't need to be extra precise, just more -// than one rendering quantum. See |handleStoppableSourceNode()|. -// FIXME: Expose the rendering quantum somehow instead of hardwiring a value -// here. -const int kExtraStopFrames = 256; - AudioBufferSourceHandler::AudioBufferSourceHandler( AudioNode& node, float sample_rate, @@ -661,9 +653,9 @@ stop_time += extra_stop_time; if (Context()->currentTime() > stop_time) { // The context time has passed the time when the source nodes should have - // stopped playing. Stop the node now and deref it. (But don't run the - // onEnded event because the source never actually played.) - FinishWithoutOnEnded(); + // stopped playing. Stop the node now and deref it. Deliver the onended + // event too, to match what Firefox does. + Finish(); } } }
diff --git a/third_party/blink/renderer/modules/webaudio/audio_buffer_source_node.h b/third_party/blink/renderer/modules/webaudio/audio_buffer_source_node.h index 1aef3bb..7702869 100644 --- a/third_party/blink/renderer/modules/webaudio/audio_buffer_source_node.h +++ b/third_party/blink/renderer/modules/webaudio/audio_buffer_source_node.h
@@ -95,7 +95,7 @@ // If we are no longer playing, propogate silence ahead to downstream nodes. bool PropagatesSilence() const override; - void HandleStoppableSourceNode(); + void HandleStoppableSourceNode() override; private: AudioBufferSourceHandler(AudioNode&,
diff --git a/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.h b/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.h index 34b80e2..2fdb9bac 100644 --- a/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.h +++ b/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.h
@@ -86,6 +86,12 @@ // processing needed. bool RequiresTailProcessing() const final { return false; } + // Stops a node if the stop time has passed. Generally used when a source + // node has been scheduled to start but has disconnected some time before the + // stop time has arrived. Nodes that are not reachable from the destination + // don't progress in time so we need to handle this specially. + virtual void HandleStoppableSourceNode() = 0; + protected: // Get frame information for the current time quantum. // We handle the transition into PLAYING_STATE and FINISHED_STATE here, @@ -133,8 +139,17 @@ // will stop when the end of the AudioBuffer has been reached. double end_time_; // in seconds + // Magic value indicating that the time (start or end) has not yet been set. static const double kUnknownTime; + // Number of extra frames to use when determining if a source node can be + // stopped. This should be at least one rendering quantum, but we add one + // more quantum for good measure. This doesn't need to be extra precise, just + // more than one rendering quantum. See |handleStoppableSourceNode()|. + // FIXME: Expose the rendering quantum somehow instead of hardwiring a value + // here. + static const int kExtraStopFrames = 256; + private: // This is accessed by both the main thread and audio thread. Use the setter // and getter to protect the access to this. @@ -163,9 +178,10 @@ void Trace(blink::Visitor* visitor) override { AudioNode::Trace(visitor); } + AudioScheduledSourceHandler& GetAudioScheduledSourceHandler() const; + protected: explicit AudioScheduledSourceNode(BaseAudioContext&); - AudioScheduledSourceHandler& GetAudioScheduledSourceHandler() const; }; } // namespace blink
diff --git a/third_party/blink/renderer/modules/webaudio/base_audio_context.cc b/third_party/blink/renderer/modules/webaudio/base_audio_context.cc index 397693f..05393cf 100644 --- a/third_party/blink/renderer/modules/webaudio/base_audio_context.cc +++ b/third_party/blink/renderer/modules/webaudio/base_audio_context.cc
@@ -674,12 +674,22 @@ GetDeferredTaskHandler().GetActiveSourceHandlers(); if (active_source_handlers->size()) { - // Find AudioBufferSourceNodes to see if we can stop playing them. + // Find source handlers to see if we can stop playing them. Note: this + // check doesn't have to be done every render quantum, if this checking + // becomes to expensive. It's ok to do this on a less frequency basis as + // long as the active nodes eventually get stopped if they're done. for (auto handler : *active_source_handlers) { - if (handler->GetNodeType() == AudioHandler::kNodeTypeAudioBufferSource) { - AudioBufferSourceHandler* source_handler = - static_cast<AudioBufferSourceHandler*>(handler.get()); - source_handler->HandleStoppableSourceNode(); + switch (handler->GetNodeType()) { + case AudioHandler::kNodeTypeAudioBufferSource: + case AudioHandler::kNodeTypeOscillator: + case AudioHandler::kNodeTypeConstantSource: { + AudioScheduledSourceHandler* source_handler = + static_cast<AudioScheduledSourceHandler*>(handler.get()); + source_handler->HandleStoppableSourceNode(); + break; + } + default: + break; } } }
diff --git a/third_party/blink/renderer/modules/webaudio/constant_source_node.cc b/third_party/blink/renderer/modules/webaudio/constant_source_node.cc index 363dbb50..6ac33b85 100644 --- a/third_party/blink/renderer/modules/webaudio/constant_source_node.cc +++ b/third_party/blink/renderer/modules/webaudio/constant_source_node.cc
@@ -104,6 +104,19 @@ return !IsPlayingOrScheduled() || HasFinished(); } +void ConstantSourceHandler::HandleStoppableSourceNode() { + double now = Context()->currentTime(); + + // If we know the end time, and the source was started and the current time is + // definitely past the end time, we can stop this node. (This handles the + // case where the this source is not connected to the destination and we want + // to stop it.) + if (end_time_ != kUnknownTime && IsPlayingOrScheduled() && + now >= end_time_ + kExtraStopFrames / Context()->sampleRate()) { + Finish(); + } +} + // ---------------------------------------------------------------- ConstantSourceNode::ConstantSourceNode(BaseAudioContext& context) : AudioScheduledSourceNode(context),
diff --git a/third_party/blink/renderer/modules/webaudio/constant_source_node.h b/third_party/blink/renderer/modules/webaudio/constant_source_node.h index 436217bb..cb17a29 100644 --- a/third_party/blink/renderer/modules/webaudio/constant_source_node.h +++ b/third_party/blink/renderer/modules/webaudio/constant_source_node.h
@@ -29,6 +29,8 @@ // AudioHandler void Process(uint32_t frames_to_process) override; + void HandleStoppableSourceNode() override; + private: ConstantSourceHandler(AudioNode&, float sample_rate, @@ -55,9 +57,9 @@ AudioParam* offset(); - private: ConstantSourceHandler& GetConstantSourceHandler() const; + private: Member<AudioParam> offset_; };
diff --git a/third_party/blink/renderer/modules/webaudio/media_element_audio_source_node.cc b/third_party/blink/renderer/modules/webaudio/media_element_audio_source_node.cc index 914e1d45..6970b57 100644 --- a/third_party/blink/renderer/modules/webaudio/media_element_audio_source_node.cc +++ b/third_party/blink/renderer/modules/webaudio/media_element_audio_source_node.cc
@@ -79,12 +79,12 @@ } void MediaElementAudioSourceHandler::Dispose() { - media_element_->SetAudioSourceNode(nullptr); AudioHandler::Dispose(); } void MediaElementAudioSourceHandler::SetFormat(uint32_t number_of_channels, float source_sample_rate) { + DCHECK(MediaElement()); bool is_tainted = WouldTaintOrigin(); if (is_tainted) { @@ -136,6 +136,7 @@ } bool MediaElementAudioSourceHandler::WouldTaintOrigin() { + DCHECK(MediaElement()); return MediaElement()->GetWebMediaPlayer()->WouldTaintOrigin(); } @@ -207,7 +208,7 @@ MediaElementAudioSourceNode::MediaElementAudioSourceNode( AudioContext& context, HTMLMediaElement& media_element) - : AudioNode(context) { + : AudioNode(context), media_element_(&media_element) { SetHandler(MediaElementAudioSourceHandler::Create(*this, media_element)); } @@ -251,6 +252,7 @@ } void MediaElementAudioSourceNode::Trace(blink::Visitor* visitor) { + visitor->Trace(media_element_); AudioSourceProviderClient::Trace(visitor); AudioNode::Trace(visitor); } @@ -261,7 +263,7 @@ } HTMLMediaElement* MediaElementAudioSourceNode::mediaElement() const { - return GetMediaElementAudioSourceHandler().MediaElement(); + return media_element_; } void MediaElementAudioSourceNode::SetFormat(uint32_t number_of_channels,
diff --git a/third_party/blink/renderer/modules/webaudio/media_element_audio_source_node.h b/third_party/blink/renderer/modules/webaudio/media_element_audio_source_node.h index 74599d3..48458fea 100644 --- a/third_party/blink/renderer/modules/webaudio/media_element_audio_source_node.h +++ b/third_party/blink/renderer/modules/webaudio/media_element_audio_source_node.h
@@ -86,13 +86,14 @@ // zeroes. void PrintCorsMessage(const String& message); - // This Persistent doesn't make a reference cycle. The reference from - // HTMLMediaElement to AudioSourceProvideClient, which - // MediaElementAudioSourceNode implements, is weak. + // The HTMLMediaElement is held alive by MediaElementAudioSourceNode which is + // an AudioNode. AudioNode uses pre-finalizers to dispose the handler, so + // holding a weak reference is ok here and will not interfer with garbage + // collection. // // It is accessed by both audio and main thread. TODO: we really should // try to minimize or avoid the audio thread touching this element. - CrossThreadPersistent<HTMLMediaElement> media_element_; + CrossThreadWeakPersistent<HTMLMediaElement> media_element_; Mutex process_lock_; unsigned source_number_of_channels_; @@ -134,6 +135,9 @@ GetMediaElementAudioSourceHandler().GetProcessLock()); void unlock() override UNLOCK_FUNCTION(GetMediaElementAudioSourceHandler().GetProcessLock()); + + private: + TraceWrapperMember<HTMLMediaElement> media_element_; }; } // namespace blink
diff --git a/third_party/blink/renderer/modules/webaudio/oscillator_node.cc b/third_party/blink/renderer/modules/webaudio/oscillator_node.cc index c2b628f..c9b206a 100644 --- a/third_party/blink/renderer/modules/webaudio/oscillator_node.cc +++ b/third_party/blink/renderer/modules/webaudio/oscillator_node.cc
@@ -489,6 +489,19 @@ return !IsPlayingOrScheduled() || HasFinished() || !periodic_wave_.Get(); } +void OscillatorHandler::HandleStoppableSourceNode() { + double now = Context()->currentTime(); + + // If we know the end time, and the source was started and the current time is + // definitely past the end time, we can stop this node. (This handles the + // case where the this source is not connected to the destination and we want + // to stop it.) + if (end_time_ != kUnknownTime && IsPlayingOrScheduled() && + now >= end_time_ + kExtraStopFrames / Context()->sampleRate()) { + Finish(); + } +} + // ---------------------------------------------------------------- OscillatorNode::OscillatorNode(BaseAudioContext& context,
diff --git a/third_party/blink/renderer/modules/webaudio/oscillator_node.h b/third_party/blink/renderer/modules/webaudio/oscillator_node.h index 40563bbe..a04cfa8 100644 --- a/third_party/blink/renderer/modules/webaudio/oscillator_node.h +++ b/third_party/blink/renderer/modules/webaudio/oscillator_node.h
@@ -70,6 +70,8 @@ void SetPeriodicWave(PeriodicWave*); + void HandleStoppableSourceNode() override; + private: OscillatorHandler(AudioNode&, float sample_rate, @@ -133,9 +135,9 @@ AudioParam* detune(); void setPeriodicWave(PeriodicWave*); - private: OscillatorHandler& GetOscillatorHandler() const; + private: Member<AudioParam> frequency_; Member<AudioParam> detune_; };
diff --git a/third_party/blink/renderer/modules/webaudio/panner_node.cc b/third_party/blink/renderer/modules/webaudio/panner_node.cc index 42ffc59..35a085c 100644 --- a/third_party/blink/renderer/modules/webaudio/panner_node.cc +++ b/third_party/blink/renderer/modules/webaudio/panner_node.cc
@@ -705,12 +705,13 @@ 0.0, AudioParamHandler::AutomationRate::kAudio, AudioParamHandler::AutomationRateMode::kVariable)), - orientation_z_(AudioParam::Create( - context, - kParamTypePannerOrientationZ, - 0.0, - AudioParamHandler::AutomationRate::kAudio, - AudioParamHandler::AutomationRateMode::kVariable)) { + orientation_z_( + AudioParam::Create(context, + kParamTypePannerOrientationZ, + 0.0, + AudioParamHandler::AutomationRate::kAudio, + AudioParamHandler::AutomationRateMode::kVariable)), + listener_(context.listener()) { SetHandler(PannerHandler::Create( *this, context.sampleRate(), position_x_->Handler(), position_y_->Handler(), position_z_->Handler(), orientation_x_->Handler(), @@ -875,11 +876,10 @@ visitor->Trace(position_x_); visitor->Trace(position_y_); visitor->Trace(position_z_); - visitor->Trace(orientation_x_); visitor->Trace(orientation_y_); visitor->Trace(orientation_z_); - + visitor->Trace(listener_); AudioNode::Trace(visitor); }
diff --git a/third_party/blink/renderer/modules/webaudio/panner_node.h b/third_party/blink/renderer/modules/webaudio/panner_node.h index 1e4c623..d497da92 100644 --- a/third_party/blink/renderer/modules/webaudio/panner_node.h +++ b/third_party/blink/renderer/modules/webaudio/panner_node.h
@@ -156,9 +156,8 @@ bool IsDistanceConeGainDirty() const { return is_distance_cone_gain_dirty_; } void UpdateDirtyState(); - // This Persistent doesn't make a reference cycle including the owner - // PannerNode. It is accessed by both audio and main thread. - CrossThreadPersistent<AudioListener> listener_; + // AudioListener is held alive by PannerNode. + CrossThreadWeakPersistent<AudioListener> listener_; std::unique_ptr<Panner> panner_; unsigned panning_model_; unsigned distance_model_; @@ -254,6 +253,10 @@ Member<AudioParam> orientation_x_; Member<AudioParam> orientation_y_; Member<AudioParam> orientation_z_; + + // This listener is held alive here to allow referencing it from PannerHandler + // via weak reference. + Member<AudioListener> listener_; }; } // namespace blink
diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn index 4d63eba0..b2a0046 100644 --- a/third_party/blink/renderer/platform/BUILD.gn +++ b/third_party/blink/renderer/platform/BUILD.gn
@@ -482,8 +482,6 @@ "bindings/wrapper_type_info.cc", "bindings/wrapper_type_info.h", "content_decryption_module_result.h", - "content_setting_callbacks.cc", - "content_setting_callbacks.h", "cpu/mips/common_macros_msa.h", "cross_thread_copier.cc", "cross_thread_copier.h", @@ -518,7 +516,6 @@ "exported/web_content_decryption_module_access.cc", "exported/web_content_decryption_module_result.cc", "exported/web_content_decryption_module_session.cc", - "exported/web_content_setting_callbacks.cc", "exported/web_crypto_algorithm.cc", "exported/web_crypto_key.cc", "exported/web_crypto_key_algorithm.cc",
diff --git a/third_party/blink/renderer/platform/content_setting_callbacks.cc b/third_party/blink/renderer/platform/content_setting_callbacks.cc deleted file mode 100644 index 5430d89..0000000 --- a/third_party/blink/renderer/platform/content_setting_callbacks.cc +++ /dev/null
@@ -1,51 +0,0 @@ -/* - * Copyright (C) 2014 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "third_party/blink/renderer/platform/content_setting_callbacks.h" - -#include <memory> -#include <utility> - -#include "base/memory/ptr_util.h" - -namespace blink { - -std::unique_ptr<ContentSettingCallbacks> ContentSettingCallbacks::Create( - base::OnceClosure allowed, - base::OnceClosure denied) { - return base::WrapUnique( - new ContentSettingCallbacks(std::move(allowed), std::move(denied))); -} - -ContentSettingCallbacks::ContentSettingCallbacks(base::OnceClosure allowed, - base::OnceClosure denied) - : allowed_(std::move(allowed)), denied_(std::move(denied)) {} - -} // namespace blink
diff --git a/third_party/blink/renderer/platform/content_setting_callbacks.h b/third_party/blink/renderer/platform/content_setting_callbacks.h deleted file mode 100644 index fa347e0..0000000 --- a/third_party/blink/renderer/platform/content_setting_callbacks.h +++ /dev/null
@@ -1,41 +0,0 @@ -// Copyright 2014 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_PLATFORM_CONTENT_SETTING_CALLBACKS_H_ -#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_CONTENT_SETTING_CALLBACKS_H_ - -#include <memory> - -#include "base/callback.h" -#include "base/macros.h" -#include "third_party/blink/renderer/platform/platform_export.h" -#include "third_party/blink/renderer/platform/wtf/allocator.h" -#include "third_party/blink/renderer/platform/wtf/functional.h" - -namespace blink { - -class PLATFORM_EXPORT ContentSettingCallbacks { - USING_FAST_MALLOC(ContentSettingCallbacks); - - public: - static std::unique_ptr<ContentSettingCallbacks> Create( - base::OnceClosure allowed, - base::OnceClosure denied); - virtual ~ContentSettingCallbacks() = default; - - void OnAllowed() { std::move(allowed_).Run(); } - void OnDenied() { std::move(denied_).Run(); } - - private: - ContentSettingCallbacks(base::OnceClosure allowed, base::OnceClosure denied); - - base::OnceClosure allowed_; - base::OnceClosure denied_; - - DISALLOW_COPY_AND_ASSIGN(ContentSettingCallbacks); -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_CONTENT_SETTING_CALLBACKS_H_
diff --git a/third_party/blink/renderer/platform/exported/web_content_setting_callbacks.cc b/third_party/blink/renderer/platform/exported/web_content_setting_callbacks.cc deleted file mode 100644 index 8a547c7e..0000000 --- a/third_party/blink/renderer/platform/exported/web_content_setting_callbacks.cc +++ /dev/null
@@ -1,57 +0,0 @@ -// Copyright 2015 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/public/platform/web_content_setting_callbacks.h" - -#include <memory> -#include "third_party/blink/renderer/platform/content_setting_callbacks.h" -#include "third_party/blink/renderer/platform/wtf/ref_counted.h" - -namespace blink { - -class WebContentSettingCallbacksPrivate - : public RefCounted<WebContentSettingCallbacksPrivate> { - public: - static scoped_refptr<WebContentSettingCallbacksPrivate> Create( - std::unique_ptr<ContentSettingCallbacks> callbacks) { - return base::AdoptRef( - new WebContentSettingCallbacksPrivate(std::move(callbacks))); - } - - ContentSettingCallbacks* Callbacks() { return callbacks_.get(); } - - private: - WebContentSettingCallbacksPrivate( - std::unique_ptr<ContentSettingCallbacks> callbacks) - : callbacks_(std::move(callbacks)) {} - std::unique_ptr<ContentSettingCallbacks> callbacks_; -}; - -WebContentSettingCallbacks::WebContentSettingCallbacks( - std::unique_ptr<ContentSettingCallbacks>&& callbacks) { - private_ = WebContentSettingCallbacksPrivate::Create(std::move(callbacks)); -} - -void WebContentSettingCallbacks::Reset() { - private_.Reset(); -} - -void WebContentSettingCallbacks::Assign( - const WebContentSettingCallbacks& other) { - private_ = other.private_; -} - -void WebContentSettingCallbacks::DoAllow() { - DCHECK(!private_.IsNull()); - private_->Callbacks()->OnAllowed(); - private_.Reset(); -} - -void WebContentSettingCallbacks::DoDeny() { - DCHECK(!private_.IsNull()); - private_->Callbacks()->OnDenied(); - private_.Reset(); -} - -} // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/crossfade_generated_image.h b/third_party/blink/renderer/platform/graphics/crossfade_generated_image.h index 53bad76..878a1b3 100644 --- a/third_party/blink/renderer/platform/graphics/crossfade_generated_image.h +++ b/third_party/blink/renderer/platform/graphics/crossfade_generated_image.h
@@ -47,7 +47,6 @@ percentage, crossfade_size, size)); } - bool UsesContainerSize() const override { return false; } bool HasRelativeSize() const override { return false; } IntSize Size() const override { return FlooredIntSize(crossfade_size_); }
diff --git a/third_party/blink/renderer/platform/graphics/generated_image.h b/third_party/blink/renderer/platform/graphics/generated_image.h index 905b930..7650e462 100644 --- a/third_party/blink/renderer/platform/graphics/generated_image.h +++ b/third_party/blink/renderer/platform/graphics/generated_image.h
@@ -36,7 +36,6 @@ public: bool CurrentFrameHasSingleSecurityOrigin() const override { return true; } - bool UsesContainerSize() const override { return true; } bool HasRelativeSize() const override { return true; } IntSize Size() const override { return RoundedIntSize(size_); }
diff --git a/third_party/blink/renderer/platform/graphics/hit_test_rect.h b/third_party/blink/renderer/platform/graphics/hit_test_rect.h index 90d2fd7e..e16da69 100644 --- a/third_party/blink/renderer/platform/graphics/hit_test_rect.h +++ b/third_party/blink/renderer/platform/graphics/hit_test_rect.h
@@ -8,8 +8,6 @@ #include "third_party/blink/renderer/platform/geometry/layout_rect.h" #include "third_party/blink/renderer/platform/graphics/touch_action.h" #include "third_party/blink/renderer/platform/platform_export.h" -#include "third_party/blink/renderer/platform/wtf/hash_map.h" -#include "third_party/blink/renderer/platform/wtf/vector.h" namespace cc { class TouchActionRegion; @@ -17,8 +15,6 @@ namespace blink { -class PaintLayer; - struct PLATFORM_EXPORT HitTestRect { // HitTestRect is a class shared by touch action region, wheel event handler // region and non fast scrollable region. Wheel event handler region and @@ -44,8 +40,6 @@ String ToString() const; }; -using LayerHitTestRects = WTF::HashMap<const PaintLayer*, Vector<HitTestRect>>; - PLATFORM_EXPORT std::ostream& operator<<(std::ostream&, const HitTestRect&); } // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/image.h b/third_party/blink/renderer/platform/graphics/image.h index eb96eac..e9c635b9 100644 --- a/third_party/blink/renderer/platform/graphics/image.h +++ b/third_party/blink/renderer/platform/graphics/image.h
@@ -106,7 +106,6 @@ static Image* NullImage(); bool IsNull() const { return Size().IsEmpty(); } - virtual bool UsesContainerSize() const { return false; } virtual bool HasRelativeSize() const { return false; } virtual IntSize Size() const = 0;
diff --git a/third_party/blink/renderer/platform/graphics/paint/hit_test_display_item.cc b/third_party/blink/renderer/platform/graphics/paint/hit_test_display_item.cc index bd1f443..679754ff 100644 --- a/third_party/blink/renderer/platform/graphics/paint/hit_test_display_item.cc +++ b/third_party/blink/renderer/platform/graphics/paint/hit_test_display_item.cc
@@ -12,8 +12,6 @@ void HitTestDisplayItem::Record(GraphicsContext& context, const DisplayItemClient& client, const HitTestRect& hit_test_rect) { - DCHECK(RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()); - auto& paint_controller = context.GetPaintController(); if (paint_controller.DisplayItemConstructionIsDisabled()) return;
diff --git a/third_party/blink/renderer/platform/graphics/paint/hit_test_display_item.h b/third_party/blink/renderer/platform/graphics/paint/hit_test_display_item.h index 9fbce5ff..cd9a9676 100644 --- a/third_party/blink/renderer/platform/graphics/paint/hit_test_display_item.h +++ b/third_party/blink/renderer/platform/graphics/paint/hit_test_display_item.h
@@ -20,7 +20,6 @@ const HitTestRect& hit_test_rect) : DisplayItem(client, kHitTest, sizeof(*this)), hit_test_rect_(hit_test_rect) { - DCHECK(RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()); } const HitTestRect& GetHitTestRect() const { return hit_test_rect_; }
diff --git a/third_party/blink/renderer/platform/graphics/paint/paint_artifact.cc b/third_party/blink/renderer/platform/graphics/paint/paint_artifact.cc index 4506761..e00fa0a 100644 --- a/third_party/blink/renderer/platform/graphics/paint/paint_artifact.cc +++ b/third_party/blink/renderer/platform/graphics/paint/paint_artifact.cc
@@ -40,8 +40,7 @@ } } - if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled() && - item.IsHitTest()) { + if (item.IsHitTest()) { const auto& hit_test = static_cast<const HitTestDisplayItem&>(item); if (!chunk.hit_test_data) chunk.hit_test_data = std::make_unique<HitTestData>();
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index eb359bc..ac5edeb 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1003,11 +1003,6 @@ // Android does not have support for PagePopup status: {"Android": "", "default": "stable"}, }, - // Compute touch action rects in paint instead of ScrollingCoordinator. - { - name: "PaintTouchActionRects", - status: "stable", - }, { name: "PaintUnderInvalidationChecking", settable_from_internals: true,
diff --git a/third_party/blink/renderer/platform/scheduler/BUILD.gn b/third_party/blink/renderer/platform/scheduler/BUILD.gn index c831f8a..9dc0d1d 100644 --- a/third_party/blink/renderer/platform/scheduler/BUILD.gn +++ b/third_party/blink/renderer/platform/scheduler/BUILD.gn
@@ -172,6 +172,7 @@ "//base", "//base/test:test_support", "//mojo/public/cpp/bindings", + "//testing/gmock", "//third_party/blink/public/mojom:mojom_platform_blink_headers", ]
diff --git a/third_party/blink/renderer/platform/scheduler/test/renderer_scheduler_test_support.cc b/third_party/blink/renderer/platform/scheduler/test/renderer_scheduler_test_support.cc index e7ffead..4af2a79 100644 --- a/third_party/blink/renderer/platform/scheduler/test/renderer_scheduler_test_support.cc +++ b/third_party/blink/renderer/platform/scheduler/test/renderer_scheduler_test_support.cc
@@ -10,6 +10,7 @@ #include "base/task/sequence_manager/test/sequence_manager_for_test.h" #include "base/threading/sequenced_task_runner_handle.h" #include "base/threading/thread_task_runner_handle.h" +#include "third_party/blink/public/platform/scheduler/test/web_mock_thread_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h" #include "third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/public/page_scheduler.h" @@ -130,8 +131,58 @@ DISALLOW_COPY_AND_ASSIGN(SimplePageScheduler); }; +class SimpleThreadScheduler : public ThreadScheduler { + public: + SimpleThreadScheduler() {} + ~SimpleThreadScheduler() override {} + + void Shutdown() override {} + + scoped_refptr<base::SingleThreadTaskRunner> V8TaskRunner() override { + return base::ThreadTaskRunnerHandle::Get(); + } + + scoped_refptr<base::SingleThreadTaskRunner> DeprecatedDefaultTaskRunner() + override { + return base::ThreadTaskRunnerHandle::Get(); + } + + scoped_refptr<base::SingleThreadTaskRunner> CompositorTaskRunner() override { + return base::ThreadTaskRunnerHandle::Get(); + } + + scoped_refptr<base::SingleThreadTaskRunner> IPCTaskRunner() override { + return base::ThreadTaskRunnerHandle::Get(); + } + + std::unique_ptr<PageScheduler> CreatePageScheduler( + PageScheduler::Delegate*) override { + return std::make_unique<SimplePageScheduler>(); + } + + // ThreadScheduler implementation: + bool ShouldYieldForHighPriorityWork() override { return false; } + bool CanExceedIdleDeadlineIfRequired() const override { return false; } + void PostIdleTask(const base::Location&, Thread::IdleTask) override {} + void PostNonNestableIdleTask(const base::Location&, + Thread::IdleTask) override {} + void AddRAILModeObserver(WebRAILModeObserver*) override {} + std::unique_ptr<WebThreadScheduler::RendererPauseHandle> PauseScheduler() + override { + return nullptr; + } + base::TimeTicks MonotonicallyIncreasingVirtualTime() override { + return base::TimeTicks::Now(); + } + void AddTaskObserver(base::MessageLoop::TaskObserver*) override {} + void RemoveTaskObserver(base::MessageLoop::TaskObserver*) override {} + NonMainThreadSchedulerImpl* AsNonMainThreadScheduler() override { + return nullptr; + } +}; + class SimpleMainThreadScheduler : public WebThreadScheduler, - public ThreadScheduler { + public SimpleThreadScheduler { public: SimpleMainThreadScheduler() {} ~SimpleMainThreadScheduler() override {} @@ -183,30 +234,31 @@ PageScheduler::Delegate*) override { return std::make_unique<SimplePageScheduler>(); } +}; - // ThreadScheduler implementation: - bool ShouldYieldForHighPriorityWork() override { return false; } - bool CanExceedIdleDeadlineIfRequired() const override { return false; } - void PostIdleTask(const base::Location&, Thread::IdleTask) override { - // NOTREACHED(); +class SimpleMockMainThreadScheduler : public WebMockThreadScheduler { + public: + SimpleMockMainThreadScheduler() {} + ~SimpleMockMainThreadScheduler() override {} + + scoped_refptr<base::SingleThreadTaskRunner> DefaultTaskRunner() override { + return base::ThreadTaskRunnerHandle::Get(); } - void PostNonNestableIdleTask(const base::Location&, - Thread::IdleTask) override { - // NOTREACHED(); + + scoped_refptr<base::SingleThreadTaskRunner> InputTaskRunner() override { + return base::ThreadTaskRunnerHandle::Get(); } - void AddRAILModeObserver(WebRAILModeObserver*) override {} - std::unique_ptr<WebThreadScheduler::RendererPauseHandle> PauseScheduler() - override { - return nullptr; + + scoped_refptr<base::SingleThreadTaskRunner> CleanupTaskRunner() override { + return base::ThreadTaskRunnerHandle::Get(); } - base::TimeTicks MonotonicallyIncreasingVirtualTime() override { - return base::TimeTicks::Now(); + + std::unique_ptr<Thread> CreateMainThread() override { + return std::make_unique<SimpleThread>(&simple_thread_scheduler_); } - void AddTaskObserver(base::MessageLoop::TaskObserver*) override {} - void RemoveTaskObserver(base::MessageLoop::TaskObserver*) override {} - NonMainThreadSchedulerImpl* AsNonMainThreadScheduler() override { - return nullptr; - } + + private: + SimpleThreadScheduler simple_thread_scheduler_; }; } // namespace @@ -215,6 +267,11 @@ return std::make_unique<SimpleMainThreadScheduler>(); } +std::unique_ptr<WebMockThreadScheduler> +CreateMockWebMainThreadSchedulerForTests() { + return std::make_unique<SimpleMockMainThreadScheduler>(); +} + void RunIdleTasksForTesting(WebThreadScheduler* scheduler, base::OnceClosure callback) { MainThreadSchedulerImpl* scheduler_impl =
diff --git a/third_party/blink/renderer/platform/scheduler/worker/worker_thread_unittest.cc b/third_party/blink/renderer/platform/scheduler/worker/worker_thread_unittest.cc index 72ab7d8..76af09c 100644 --- a/third_party/blink/renderer/platform/scheduler/worker/worker_thread_unittest.cc +++ b/third_party/blink/renderer/platform/scheduler/worker/worker_thread_unittest.cc
@@ -119,7 +119,12 @@ completion.Wait(); } -TEST_F(WorkerThreadTest, TestTaskExecutedBeforeThreadDeletion) { +#if defined(OS_LINUX) +#define MAYBE_TestTaskExecutedBeforeThreadDeletion DISABLED_TestTaskExecutedBeforeThreadDeletion +#else +#define MAYBE_TestTaskExecutedBeforeThreadDeletion TestTaskExecutedBeforeThreadDeletion +#endif +TEST_F(WorkerThreadTest, MAYBE_TestTaskExecutedBeforeThreadDeletion) { MockTask task; base::WaitableEvent completion( base::WaitableEvent::ResetPolicy::AUTOMATIC,
diff --git a/third_party/blink/tools/blinkpy/w3c/gerrit.py b/third_party/blink/tools/blinkpy/w3c/gerrit.py index 9f4a023..5a8604a 100644 --- a/third_party/blink/tools/blinkpy/w3c/gerrit.py +++ b/third_party/blink/tools/blinkpy/w3c/gerrit.py
@@ -58,7 +58,7 @@ return cl def query_exportable_open_cls(self, limit=200): - path = ('/changes/?q=project:\"chromium/src\"+status:open' + path = ('/changes/?q=project:\"chromium/src\"+branch:master+status:open' '&o=CURRENT_FILES&o=CURRENT_REVISION&o=COMMIT_FOOTERS' '&o=DETAILED_ACCOUNTS&o=DETAILED_LABELS&n={}').format(limit) # The underlying host.web.get_binary() automatically retries until it
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-features=NetworkService b/third_party/blink/web_tests/FlagExpectations/disable-features=NetworkService new file mode 100644 index 0000000..c1c1bee --- /dev/null +++ b/third_party/blink/web_tests/FlagExpectations/disable-features=NetworkService
@@ -0,0 +1,33 @@ +# These tests currently fail when run with --disable-features=NetworkService +# See https://crbug.com/933880 + +# Fail with Network Servce disabled. +crbug.com/800898 external/wpt/FileAPI/url/url-in-tags-revoke.window.html [ Timeout ] +crbug.com/800898 external/wpt/workers/shared-worker-from-blob-url.window.html [ Skip ] +crbug.com/800898 virtual/omt-worker-fetch/external/wpt/workers/shared-worker-from-blob-url.window.html [ Skip ] +crbug.com/595993 external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ] + +# The below is only supported with network service. +crbug.com/896924 http/tests/inspector-protocol/network/interception-multiclient.js [ Timeout Failure ] +crbug.com/899303 http/tests/inspector-protocol/fetch/fetch-basic.js [ Timeout ] +crbug.com/899303 http/tests/inspector-protocol/fetch/fetch-renderer.js [ Timeout ] + +# Failing when NetworkService is not enabled. +crbug.com/917284 external/wpt/service-workers/service-worker/claim-fetch-with-appcache.https.html [ Failure ] +crbug.com/917284 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/claim-fetch-with-appcache.https.html [ Failure ] +crbug.com/917284 virtual/outofblink-cors/external/wpt/service-workers/service-worker/claim-fetch-with-appcache.https.html [ Failure ] + +# This passes in content_shell but not in chrome with network service disabled, +# because content_shell does not add the about: handler. With network service +# enabled this fails in both content_shell and chrome. +Bug(none) http/tests/misc/redirect-to-about-blank.html [ Pass ] + +crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html [ Failure ] +crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html [ Failure ] +crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html [ Failure ] +crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html [ Failure ] +crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-http/shared-worker/no-redirect/generic.http.html [ Failure ] +crbug.com/906959 virtual/outofblink-cors/http/tests/security/isolatedWorld/cross-origin-xhr.html [ Crash ] + +# The below is only supported with network service. +Bug(none) virtual/omt-worker-fetch [ Skip ]
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials b/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials index f60e960..f896f9d 100644 --- a/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials +++ b/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials
@@ -6,3 +6,15 @@ # Resultant images are different because LocalFrameRoot is not the main frame. crbug.com/910979 http/tests/html/validation-bubble-oopif-clip.html [ Failure ] + +# These started failing when network service was enabled by default. +crbug.com/933880 external/wpt/FileAPI/url/cross-global-revoke.sub.html [ Failure ] +crbug.com/933880 external/wpt/FileAPI/url/url-with-fetch.any.html [ Failure ] +crbug.com/933880 external/wpt/FileAPI/url/url-with-xhr.any.html [ Failure ] +crbug.com/933880 external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ] +crbug.com/933880 http/tests/inspector-protocol/network/interception-take-stream.js [ Failure ] +crbug.com/933880 http/tests/inspector-protocol/network/raw-headers-for-protected-document.js [ Failure ] +crbug.com/933880 http/tests/inspector-protocol/network/raw-headers-for-websocket.js [ Failure ] +crbug.com/933880 http/tests/inspector-protocol/network/security-info-on-response.js [ Failure ] +crbug.com/933880 http/tests/inspector-protocol/network/xhr-interception-auth-fail.js [ Failure ] +crbug.com/933880 http/tests/misc/redirect-to-about-blank.html [ Timeout ]
diff --git a/third_party/blink/web_tests/FlagExpectations/enable-blink-features=HeapIncrementalMarkingStress b/third_party/blink/web_tests/FlagExpectations/enable-blink-features=HeapIncrementalMarkingStress index 32387e9c..63559f7 100644 --- a/third_party/blink/web_tests/FlagExpectations/enable-blink-features=HeapIncrementalMarkingStress +++ b/third_party/blink/web_tests/FlagExpectations/enable-blink-features=HeapIncrementalMarkingStress
@@ -1,4 +1,3 @@ crbug.com/831541 inspector-protocol/css/css-collect-class-names.js [ Pass Failure ] crbug.com/865348 http/tests/navigation/navigation-interrupted-by-fragment.html [ Pass Timeout ] crbug.com/865348 virtual/outofblink-cors/http/tests/navigation/navigation-interrupted-by-fragment.html [ Pass Timeout ] -crbug.com/865348 virtual/outofblink-cors-ns/http/tests/navigation/navigation-interrupted-by-fragment.html [ Pass Timeout ]
diff --git a/third_party/blink/web_tests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/blink/web_tests/FlagExpectations/enable-blink-features=LayoutNG index ea7e20a..3d2f349d 100644 --- a/third_party/blink/web_tests/FlagExpectations/enable-blink-features=LayoutNG +++ b/third_party/blink/web_tests/FlagExpectations/enable-blink-features=LayoutNG
@@ -194,7 +194,6 @@ crbug.com/591099 external/wpt/css/css-ui/text-overflow-010.html [ Pass ] crbug.com/591099 external/wpt/css/css-ui/text-overflow-026.html [ Failure ] crbug.com/591099 external/wpt/css/css-values/attr-invalid-type-008.html [ Failure ] -crbug.com/591099 external/wpt/css/css-values/calc-positive-fraction-001.html [ Failure ] crbug.com/591099 external/wpt/css/css-values/ic-unit-009.html [ Failure ] crbug.com/591099 external/wpt/css/css-values/ic-unit-012.html [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-icb-vlr-003.xht [ Pass ] @@ -344,11 +343,10 @@ crbug.com/591099 external/wpt/fetch/http-cache/cc-request.html [ Pass ] crbug.com/591099 external/wpt/fullscreen/api/element-ready-check-containing-iframe-manual.html [ Pass ] crbug.com/591099 external/wpt/fullscreen/api/element-request-fullscreen-and-remove-manual.html [ Failure Pass ] -crbug.com/591099 external/wpt/geolocation-API/PositionOptions.https.html [ Failure Pass ] -crbug.com/591099 external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects.html [ Pass ] +crbug.com/591099 external/wpt/geolocation-API/PositionOptions.https.html [ Failure ] +crbug.com/591099 external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects.html [ Crash Pass ] crbug.com/591099 external/wpt/html/browsers/the-window-object/window-open-noopener.html?_parent [ Pass ] crbug.com/591099 external/wpt/html/browsers/the-window-object/window-open-noopener.html?_top [ Pass ] -crbug.com/591099 external/wpt/html/dom/interfaces.worker.html [ Pass ] crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/the-hr-element-0/width.html [ Failure ] crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/the-page/body-margin-1i.html [ Failure ] crbug.com/591099 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange.html [ Pass ] @@ -358,7 +356,6 @@ crbug.com/591099 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/no-active-script-manual-module.html [ Timeout ] crbug.com/591099 external/wpt/html/semantics/tabular-data/processing-model-1/span-limits.html [ Pass ] crbug.com/591099 external/wpt/infrastructure/reftest/size.html [ Pass ] -crbug.com/591099 external/wpt/longtask-timing/longtask-in-sibling-iframe.html [ Pass ] crbug.com/591099 external/wpt/mediacapture-fromelement/ended.html [ Pass ] crbug.com/591099 external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.9arg.destsize.worker.html [ Pass ] crbug.com/591099 external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.self.1.worker.html [ Pass ] @@ -374,7 +371,7 @@ crbug.com/591099 external/wpt/referrer-policy/same-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html [ Failure ] crbug.com/591099 external/wpt/service-workers/service-worker/fetch-frame-resource.https.html [ Pass ] crbug.com/591099 external/wpt/svg/text/reftests/text-inline-size-101.svg [ Failure ] -crbug.com/591099 external/wpt/wasm/jsapi/module/customSections.any.worker.html [ Pass ] +crbug.com/591099 external/wpt/wasm/jsapi/module/customSections.any.worker.html [ Failure ] crbug.com/591099 external/wpt/wasm/webapi/rejected-arg.any.serviceworker.html [ Timeout ] crbug.com/591099 external/wpt/webauthn/createcredential-extensions.https.html [ Pass ] crbug.com/591099 external/wpt/webmessaging/with-ports/018.html [ Pass ] @@ -412,9 +409,9 @@ crbug.com/591099 fast/borders/inline-mask-overlay-image-outset-vertical-rl.html [ Failure ] crbug.com/591099 fast/canvas/OffscreenCanvas-copyImage.html [ Pass ] crbug.com/591099 fast/css-grid-layout/grid-baseline.html [ Failure ] -crbug.com/591099 fast/css-intrinsic-dimensions/height-css-tables-collapsed.html [ Pass ] +crbug.com/591099 fast/css-intrinsic-dimensions/height-css-tables-collapsed.html [ Failure Pass ] crbug.com/591099 fast/css-intrinsic-dimensions/height-positioned.html [ Pass ] -crbug.com/591099 fast/css-intrinsic-dimensions/height-tables.html [ Failure Pass ] +crbug.com/591099 fast/css-intrinsic-dimensions/height-tables.html [ Pass ] crbug.com/591099 fast/css/absolute-inline-alignment-2.html [ Pass ] crbug.com/835484 fast/css/outline-narrowLine.html [ Failure ] crbug.com/855279 fast/css/text-overflow-ellipsis-vertical-hittest.html [ Pass ] @@ -433,6 +430,7 @@ crbug.com/591099 fast/replaced/replaced-breaking.html [ Failure ] crbug.com/591099 fast/text/descent-clip-in-scaled-page.html [ Failure ] crbug.com/899902 fast/text/ellipsis-with-self-painting-layer.html [ Pass ] +crbug.com/591099 fast/text/emoji-vertical-origin-visual.html [ Failure ] crbug.com/591099 fast/text/font-format-support-color-cff2-vertical.html [ Failure ] crbug.com/796943 fast/text/international/shape-across-elements-simple.html [ Pass ] crbug.com/591099 fast/text/whitespace/018.html [ Failure ] @@ -447,7 +445,7 @@ crbug.com/591099 http/tests/devtools/elements/shadow/shadow-distribution.js [ Failure ] crbug.com/591099 http/tests/devtools/elements/styles-1/edit-value-url-with-color.js [ Pass ] crbug.com/591099 http/tests/devtools/elements/user-properties.js [ Pass ] -crbug.com/591099 http/tests/devtools/service-workers/service-worker-v8-cache.js [ Pass Timeout ] +crbug.com/591099 http/tests/devtools/service-workers/service-worker-v8-cache.js [ Pass ] crbug.com/591099 http/tests/devtools/sources/debugger/debugger-proto-property.js [ Pass ] crbug.com/591099 http/tests/devtools/tracing-session-id.js [ Pass ] crbug.com/591099 http/tests/devtools/tracing/console-timeline.js [ Pass ] @@ -462,7 +460,7 @@ crbug.com/591099 http/tests/fetch/workers/thorough/cookie-nocors-base-https-other-https.html [ Pass ] crbug.com/591099 http/tests/html/validation-bubble-oopif-clip.html [ Pass ] crbug.com/591099 http/tests/images/feature-policy-unoptimized-images-cached-image.html [ Failure Pass ] -crbug.com/591099 http/tests/images/image-decode-in-frame.html [ Pass ] +crbug.com/591099 http/tests/images/image-decode-in-frame.html [ Crash Pass ] crbug.com/591099 http/tests/images/restyle-decode-error.html [ Failure ] crbug.com/591099 http/tests/inspector-protocol/fetch/fetch-renderer.js [ Timeout ] crbug.com/591099 http/tests/inspector-protocol/network/navigation-blocking-xorigin-iframe.js [ Failure Pass ] @@ -471,7 +469,7 @@ crbug.com/591099 http/tests/multipart/multipart-main-resource.html [ Pass ] crbug.com/591099 http/tests/security/isolatedWorld/media-query-wrapper-leaks.html [ Failure ] crbug.com/591099 http/tests/security/mixedContent/insecure-plugin-in-iframe.html [ Failure Pass ] -crbug.com/591099 http/tests/security/upgrade-insecure-requests/iframe-upgrade.https.html [ Crash ] +crbug.com/591099 http/tests/security/upgrade-insecure-requests/iframe-upgrade.https.html [ Crash Pass ] crbug.com/591099 http/tests/security/video-poster-cross-origin-crash2.html [ Pass ] crbug.com/591099 http/tests/webfont/crbug-655076.html [ Pass ] crbug.com/591099 images/feature-policy-oversized-images-resize.html [ Pass ] @@ -512,17 +510,6 @@ crbug.com/591099 virtual/bidi-caret-affinity/editing/selection/modify_move/move_right_word_05_rtl_multi_line.html [ Failure ] crbug.com/916511 virtual/composite-after-paint/paint/background/scrolling-background-with-negative-z-child.html [ Crash ] crbug.com/591099 virtual/composite-after-paint/paint/invalidation/box/margin.html [ Failure Pass ] -crbug.com/591099 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/activate-event-after-install-state-change.https.html [ Pass ] -crbug.com/591099 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/clients-matchall-exact-controller.https.html [ Pass ] -crbug.com/591099 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/clients-matchall.https.html [ Pass ] -crbug.com/591099 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-cors-xhr.https.html [ Pass ] -crbug.com/591099 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-event-after-navigation-within-page.https.html [ Pass ] -crbug.com/591099 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-event-redirect.https.html [ Pass ] -crbug.com/591099 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-request-css-images.https.html [ Pass ] -crbug.com/591099 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-request-xhr-sync.https.html [ Pass ] -crbug.com/591099 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/shared-worker-controlled.https.html [ Pass ] -crbug.com/591099 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/skip-waiting-without-using-registration.https.html [ Pass Timeout ] -crbug.com/591099 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ] crbug.com/591099 virtual/display-lock/display-lock/lock-after-append/measure-forced-layout-after-commit.html [ Failure ] crbug.com/591099 virtual/display-lock/display-lock/lock-after-append/measure-forced-layout.html [ Failure ] crbug.com/591099 virtual/display-lock/display-lock/lock-after-append/measure-updated-layout.html [ Failure ] @@ -535,11 +522,11 @@ crbug.com/591099 virtual/feature-policy-for-sandbox/http/tests/security/contentSecurityPolicy/sandbox-in-http-header-control.html [ Failure ] crbug.com/591099 virtual/feature-policy-for-sandbox/http/tests/security/mixedContent/insecure-plugin-in-iframe.html [ Failure Pass ] crbug.com/591099 virtual/feature-policy-for-sandbox/http/tests/security/sandbox-iframe-blocks-modals.php [ Failure ] -crbug.com/591099 virtual/feature-policy-for-sandbox/http/tests/security/upgrade-insecure-requests/iframe-upgrade.https.html [ Crash Pass ] +crbug.com/591099 virtual/feature-policy-for-sandbox/http/tests/security/upgrade-insecure-requests/iframe-upgrade.https.html [ Crash ] crbug.com/591099 virtual/fractional_scrolling/fast/scrolling/fractional-scroll-offset-fixed-position-non-composited.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-filter-all.html [ Pass ] crbug.com/591099 virtual/gpu-rasterization/images/image-page-injected-script-crash.html [ Pass ] -crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-copyImage.html [ Failure Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-copyImage.html [ Pass ] crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-filter.html [ Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-arc-circumference-fill.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-blend-image.html [ Pass ] @@ -564,30 +551,6 @@ crbug.com/591099 virtual/omt-worker-fetch/external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/generic.http.html [ Failure ] crbug.com/591099 virtual/omt-worker-fetch/external/wpt/referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-insecure.http.html [ Failure ] crbug.com/591099 virtual/omt-worker-fetch/external/wpt/workers/semantics/multiple-workers/003.html [ Timeout ] -crbug.com/591099 virtual/outofblink-cors-ns/external/wpt/fetch/api/redirect/redirect-count.any.html [ Pass ] -crbug.com/591099 virtual/outofblink-cors-ns/external/wpt/fetch/api/redirect/redirect-count.any.worker.html [ Pass ] -crbug.com/591099 virtual/outofblink-cors-ns/external/wpt/fetch/api/request/request-keepalive-quota.html?include=slow-2 [ Pass ] -crbug.com/591099 virtual/outofblink-cors-ns/external/wpt/referrer-policy/generic/sandboxed-iframe-with-opaque-origin.html [ Pass Timeout ] -crbug.com/591099 virtual/outofblink-cors-ns/external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html [ Failure ] -crbug.com/591099 virtual/outofblink-cors-ns/external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html [ Failure ] -crbug.com/591099 virtual/outofblink-cors-ns/external/wpt/referrer-policy/strict-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html [ Failure ] -crbug.com/591099 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/fetch-event-respond-with-body-loaded-in-chunk.https.html [ Pass ] -crbug.com/591099 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/registration-updateviacache.https.html [ Pass ] -crbug.com/591099 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/update-after-navigation-redirect.https.html [ Pass ] -crbug.com/591099 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ] -crbug.com/591099 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/update-not-allowed.https.html [ Timeout ] -crbug.com/591099 virtual/outofblink-cors-ns/external/wpt/xhr/progress-events-response-data-gzip.htm [ Pass ] -crbug.com/591099 virtual/outofblink-cors-ns/external/wpt/xhr/sync-no-progress.any.worker.html [ Pass ] -crbug.com/591099 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/redirect-credentials-base-https-other-https.html [ Pass ] -crbug.com/591099 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/stream-reader-base-https-other-https.html [ Pass ] -crbug.com/591099 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/redirect-credentials-base-https-other-https.html [ Pass ] -crbug.com/591099 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/scheme-data-base-https-other-https.html [ Pass ] -crbug.com/591099 virtual/outofblink-cors-ns/http/tests/fetch/workers/stream-reader-base-https-other-https.html [ Pass ] -crbug.com/591099 virtual/outofblink-cors-ns/http/tests/security/contentSecurityPolicy/require-sri-for/require-sri-for-script-reportonly-blocked.php [ Pass ] -crbug.com/591099 virtual/outofblink-cors-ns/http/tests/security/frameNavigation/xss-DENIED-top-navigation-without-user-gesture.html [ Failure ] -crbug.com/591099 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-simple.html [ Pass ] -crbug.com/591099 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-synconworker.html [ Pass ] -crbug.com/591099 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/web-apps/013.html [ Pass ] crbug.com/591099 virtual/outofblink-cors/ [ Skip ] crbug.com/591099 virtual/paint-timing/external/wpt/paint-timing/idlharness.window.html [ Pass ] crbug.com/591099 virtual/paint-timing/external/wpt/paint-timing/sibling-painting-first-image.html [ Failure ] @@ -600,7 +563,6 @@ crbug.com/591099 virtual/streaming-preload/http/tests/fetch/serviceworker/thorough/cors-base-https-other-https.html [ Pass ] crbug.com/591099 virtual/streaming-preload/http/tests/fetch/workers/thorough/cors-preflight-base-https-other-https.html [ Pass ] crbug.com/591099 virtual/threaded/ [ Skip ] -crbug.com/591099 virtual/user-activation-v2/fast/events/pointerevents/mouse-pointer-haspointercapture.html [ Failure Pass ] crbug.com/591099 virtual/user-activation-v2/fast/events/touch/compositor-touch-hit-rects-continuation.html [ Failure ] crbug.com/591099 virtual/user-activation-v2/fast/events/touch/compositor-touch-hit-rects-list-translate.html [ Failure ] crbug.com/591099 virtual/user-activation-v2/fast/events/touch/compositor-touch-hit-rects.html [ Failure ] @@ -612,5 +574,5 @@ crbug.com/591099 virtual/video-surface-layer/media/video-canvas-draw.html [ Failure ] crbug.com/591099 virtual/video-surface-layer/media/video-controls-hide-on-move-outside-controls.html [ Pass ] crbug.com/591099 virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCIceTransport-extension.https.html [ Failure Pass ] -crbug.com/591099 vr/getFrameData_oneframeupdate.html [ Pass ] +crbug.com/591099 vr/getFrameData_oneframeupdate.html [ Failure Pass ] crbug.com/591099 webexposed/global-interface-listing-shared-worker.html [ Pass ]
diff --git a/third_party/blink/web_tests/FlagExpectations/enable-browser-side-navigation b/third_party/blink/web_tests/FlagExpectations/enable-browser-side-navigation index 7ec6085..c2f545f 100644 --- a/third_party/blink/web_tests/FlagExpectations/enable-browser-side-navigation +++ b/third_party/blink/web_tests/FlagExpectations/enable-browser-side-navigation
@@ -4,7 +4,6 @@ # These tests are flaky. Bug(none) http/tests/security/popup-allowed-by-sandbox-can-navigate.html [ Failure ] Bug(none) virtual/outofblink-cors/http/tests/security/popup-allowed-by-sandbox-can-navigate.html [ Failure ] -Bug(none) virtual/outofblink-cors-ns/http/tests/security/popup-allowed-by-sandbox-can-navigate.html [ Failure ] # Not disclosing |source_location| and/or |blocked url| between cross-origin # renderers when a CSP policy is violated regresses the quality of console @@ -16,9 +15,6 @@ Bug(718942) virtual/outofblink-cors/http/tests/security/contentSecurityPolicy/1.1/form-action-src-get-blocked-with-redirect.html [ Failure ] Bug(718942) virtual/outofblink-cors/http/tests/security/contentSecurityPolicy/1.1/form-action-src-redirect-blocked.html [ Failure ] Bug(718942) virtual/outofblink-cors/http/tests/security/contentSecurityPolicy/frame-src-cross-origin-load.html [ Failure ] -Bug(718942) virtual/outofblink-cors-ns/http/tests/security/contentSecurityPolicy/1.1/form-action-src-get-blocked-with-redirect.html [ Failure ] -Bug(718942) virtual/outofblink-cors-ns/http/tests/security/contentSecurityPolicy/1.1/form-action-src-redirect-blocked.html [ Failure ] -Bug(718942) virtual/outofblink-cors-ns/http/tests/security/contentSecurityPolicy/frame-src-cross-origin-load.html [ Failure ] # Console error message source location is present with PlzNavigate. It means # that URLs are potentially disclosed across cross-origin renderers. @@ -42,14 +38,6 @@ Bug(726178) virtual/outofblink-cors/http/tests/security/mixedContent/nonwebby-scheme-in-iframe-allowed.https.html [ Failure ] Bug(726178) virtual/outofblink-cors/http/tests/security/mixedContent/redirect-http-to-https-iframe-in-main-frame.html [ Failure ] Bug(726178) virtual/outofblink-cors/http/tests/security/mixedContent/redirect-https-to-http-iframe-in-main-frame.html [ Failure ] -Bug(726178) virtual/outofblink-cors-ns/http/tests/security/mixedContent/insecure-frame-in-data-iframe-in-main-frame-blocked.html [ Failure ] -Bug(726178) virtual/outofblink-cors-ns/http/tests/security/mixedContent/insecure-iframe-in-iframe.html [ Failure ] -Bug(726178) virtual/outofblink-cors-ns/http/tests/security/mixedContent/insecure-iframe-in-main-frame-allowed.html [ Failure ] -Bug(726178) virtual/outofblink-cors-ns/http/tests/security/mixedContent/insecure-iframe-in-main-frame-blocked.html [ Failure ] -Bug(726178) virtual/outofblink-cors-ns/http/tests/security/mixedContent/insecure-iframe-in-main-frame.html [ Failure ] -Bug(726178) virtual/outofblink-cors-ns/http/tests/security/mixedContent/nonwebby-scheme-in-iframe-allowed.https.html [ Failure ] -Bug(726178) virtual/outofblink-cors-ns/http/tests/security/mixedContent/redirect-http-to-https-iframe-in-main-frame.html [ Failure ] -Bug(726178) virtual/outofblink-cors-ns/http/tests/security/mixedContent/redirect-https-to-http-iframe-in-main-frame.html [ Failure ] # ------------------------------------------------------------ # These tests are correct with PlzNavigate but not without it
diff --git a/third_party/blink/web_tests/FlagExpectations/enable-features=NetworkService b/third_party/blink/web_tests/FlagExpectations/enable-features=NetworkService deleted file mode 100644 index bd14aa5..0000000 --- a/third_party/blink/web_tests/FlagExpectations/enable-features=NetworkService +++ /dev/null
@@ -1,33 +0,0 @@ -# These tests currently fail when run with --enable-features=NetworkService -# See https://crbug.com/729849 - -# Only passes with Network Servce enabled (unfortunately these expectations still -# allow Failure or Timeout from the top-level expectations though). -crbug.com/800898 external/wpt/FileAPI/url/url-in-tags-revoke.window.html [ Pass ] -crbug.com/800898 external/wpt/workers/shared-worker-from-blob-url.window.html [ Pass ] -crbug.com/595993 external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Pass ] -crbug.com/862886 external/wpt/service-workers/service-worker/navigation-preload/broken-chunked-encoding.https.html [ Pass ] -crbug.com/896924 http/tests/inspector-protocol/network/interception-multiclient.js [ Pass ] -crbug.com/899303 http/tests/inspector-protocol/fetch/fetch-basic.js [ Pass ] -crbug.com/899303 http/tests/inspector-protocol/fetch/fetch-renderer.js [ Pass ] -crbug.com/917284 external/wpt/service-workers/service-worker/claim-fetch-with-appcache.https.html [ Pass ] - -# This passes in content_shell but not in chrome with network service disabled, -# because content_shell does not add the about: handler. With network service -# enabled this fails in both content_shell and chrome. -Bug(none) http/tests/misc/redirect-to-about-blank.html [ Timeout ] - -# Skip virtual/outofblink-cors when NetworkService is on, since it's only -# intended to be run with NetworkService off. -Bug(none) virtual/outofblink-cors [ Skip ] - -# Skip virtual/outofblink-cors-ns on this bot, since when run normally it -# already forces NetworkService on, so there is no need to run it again here. -Bug(none) virtual/outofblink-cors-ns [ Skip ] - -# NetworkService needs S13nServiceWorker. Running these test with -# NetworkService doesn't make sense. -Bug(none) virtual/disabled-service-worker-servicification [ Skip ] - -# DO NOT ADD ANY ENTRIES! Network service is about to ship to stable. -# Please reach out to network-service-dev@ if you have any questions.
diff --git a/third_party/blink/web_tests/LeakExpectations b/third_party/blink/web_tests/LeakExpectations index 5314bd4..f3cd6d4 100644 --- a/third_party/blink/web_tests/LeakExpectations +++ b/third_party/blink/web_tests/LeakExpectations
@@ -44,7 +44,6 @@ # ----------------------------------------------------------------- crbug.com/765721 [ Linux ] http/tests/navigation/navigation-interrupted-by-fragment.html [ Pass Leak ] crbug.com/765721 [ Linux ] virtual/outofblink-cors/http/tests/navigation/navigation-interrupted-by-fragment.html [ Pass Leak ] -crbug.com/765721 [ Linux ] virtual/outofblink-cors-ns/http/tests/navigation/navigation-interrupted-by-fragment.html [ Pass Leak ] crbug.com/765721 [ Linux ] virtual/stable/http/tests/navigation/navigation-interrupted-by-fragment.html [ Pass Leak ] crbug.com/809609 [ Linux ] editing/pasteboard/drop-file-svg.html [ Pass Leak ]
diff --git a/third_party/blink/web_tests/MSANExpectations b/third_party/blink/web_tests/MSANExpectations index 060e78a..4b5199a 100644 --- a/third_party/blink/web_tests/MSANExpectations +++ b/third_party/blink/web_tests/MSANExpectations
@@ -157,8 +157,6 @@ crbug.com/856601 [ Linux ] external/wpt/webstorage/idlharness.window.html [ Pass Timeout ] crbug.com/856601 [ Linux ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaDevices-IDL-enumerateDevices.html [ Pass Timeout ] crbug.com/856601 [ Linux ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/idlharness.https.window.html [ Pass Timeout ] -crbug.com/856601 [ Linux ] virtual/outofblink-cors-ns/external/wpt/fetch/cors-rfc1918/idlharness.tentative.any.sharedworker.html [ Pass Timeout ] -crbug.com/856601 [ Linux ] virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/interfaces-sw.https.html [ Timeout Pass ] crbug.com/856601 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/cors-rfc1918/idlharness.tentative.https.any.serviceworker.html [ Pass Timeout ] crbug.com/856601 [ Linux ] virtual/outofblink-cors/external/wpt/service-workers/service-worker/interfaces-sw.https.html [ Timeout Pass ] crbug.com/856601 [ Linux ] virtual/service-worker-servicification/external/wpt/service-workers/service-worker/interfaces-sw.https.html [ Timeout Pass ] @@ -168,7 +166,6 @@ crbug.com/856601 [ Linux ] external/wpt/media-capabilities/idlharness.any.html [ Pass Timeout ] crbug.com/856601 [ Linux ] external/wpt/orientation-event/idlharness.window.html [ Pass Timeout ] crbug.com/856601 [ Linux ] external/wpt/pointerlock/interfaces.window.html [ Pass Timeout ] -crbug.com/856601 [ Linux ] virtual/outofblink-cors-ns/external/wpt/xhr/idlharness.any.worker.html [ Pass Failure Timeout ] crbug.com/856601 [ Linux ] virtual/outofblink-cors/external/wpt/xhr/idlharness.any.sharedworker.html [ Pass Timeout ] crbug.com/856601 [ Linux ] external/wpt/bluetooth/idl/idlharness.tentative.https.window.html [ Timeout Pass ] crbug.com/856601 [ Linux ] external/wpt/css/css-pseudo/idlharness.html [ Timeout Pass ] @@ -176,7 +173,6 @@ crbug.com/856601 [ Linux ] external/wpt/media-source/idlharness.any.html [ Timeout Pass ] crbug.com/856601 [ Linux ] external/wpt/page-visibility/idlharness.window.html [ Timeout Pass ] crbug.com/856601 [ Linux ] virtual/new-remote-playback-pipeline/external/wpt/remote-playback/idlharness.window.html [ Timeout Pass ] -crbug.com/856601 [ Linux ] virtual/outofblink-cors-ns/external/wpt/xhr/idlharness.any.sharedworker.html [ Timeout Pass ] crbug.com/856601 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/idl.any.html [ Timeout Pass ] crbug.com/856601 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/cors-rfc1918/idlharness.tentative.any.html [ Timeout Pass ] crbug.com/856601 [ Linux ] virtual/outofblink-cors/external/wpt/xhr/idlharness.any.html [ Timeout Pass ] @@ -213,7 +209,6 @@ crbug.com/914900 [ Linux ] external/wpt/fetch/api/idl.any.worker.html [ Pass Timeout ] crbug.com/914900 [ Linux ] external/wpt/secure-contexts/idlharness.any.worker.html [ Pass Timeout ] crbug.com/914900 [ Linux ] http/tests/devtools/network/preview-searchable.js [ Pass Timeout ] -crbug.com/914900 [ Linux ] virtual/outofblink-cors-ns/external/wpt/fetch/api/idl.any.sharedworker.html [ Pass Timeout ] crbug.com/914900 [ Linux ] virtual/outofblink-cors/external/wpt/xhr/idlharness.any.worker.html [ Pass Timeout ] # Sheriff 2019-01-28 @@ -235,7 +230,6 @@ crbug.com/856601 [ Linux ] external/wpt/payment-handler/idlharness.https.any.html [ Pass Timeout ] crbug.com/856601 [ Linux ] external/wpt/payment-handler/idlharness.https.any.serviceworker.html [ Pass Timeout ] crbug.com/856601 [ Linux ] external/wpt/payment-request/idlharness.https.window.html [ Pass Timeout ] -crbug.com/856601 [ Linux ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/interfaces-window.https.html [ Pass Timeout ] crbug.com/856601 [ Linux ] virtual/omt-worker-fetch/external/wpt/resource-timing/idlharness.any.html [ Pass Timeout ] crbug.com/856601 [ Linux ] virtual/speech-with-unified-autoplay/external/wpt/speech-api/idlharness.window.html [ Pass Timeout ] crbug.com/856601 [ Linux ] virtual/unified-autoplay/external/wpt/feature-policy/idlharness.window.html [ Pass Timeout ]
diff --git a/third_party/blink/web_tests/NeverFixTests b/third_party/blink/web_tests/NeverFixTests index 4f17a39a..69ef5b5 100644 --- a/third_party/blink/web_tests/NeverFixTests +++ b/third_party/blink/web_tests/NeverFixTests
@@ -1710,10 +1710,6 @@ crbug.com/870172 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-whitelisting-exact-match.html [ WontFix ] crbug.com/870172 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-whitelisting-subdomains.html [ WontFix ] crbug.com/870172 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-whitelisting-ip-addresses.html [ WontFix ] -crbug.com/870172 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/origin-whitelisting-all.html [ WontFix ] -crbug.com/870172 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/origin-whitelisting-exact-match.html [ WontFix ] -crbug.com/870172 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/origin-whitelisting-subdomains.html [ WontFix ] -crbug.com/870172 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/origin-whitelisting-ip-addresses.html [ WontFix ] # Tests that only work when the mixed content autoupgrade experiment is enabled http/tests/mixed-autoupgrade [ WontFix ] @@ -2126,28 +2122,17 @@ virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaStream-MediaElement-preload-none-manual.https.html [ WontFix ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaStreamTrack-end-manual.https.html [ WontFix ] virtual/mojo-blob-urls/external/wpt/FileAPI/url/url_createobjecturl_file_img-manual.html [ WontFix ] -virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/fetch-event-is-history-backward-navigation-manual.https.html [ WontFix ] -virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/fetch-event-is-history-forward-navigation-manual.https.html [ WontFix ] -virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/fetch-event-is-reload-navigation-manual.https.html [ WontFix ] -virtual/outofblink-cors-ns/external/wpt/xhr/send-authentication-existing-session-manual.htm [ WontFix ] -virtual/outofblink-cors-ns/external/wpt/xhr/send-authentication-prompt-2-manual.htm [ WontFix ] virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-event-is-history-backward-navigation-manual.https.html [ WontFix ] virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-event-is-history-forward-navigation-manual.https.html [ WontFix ] virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-event-is-reload-navigation-manual.https.html [ WontFix ] virtual/outofblink-cors/external/wpt/xhr/send-authentication-existing-session-manual.htm [ WontFix ] virtual/outofblink-cors/external/wpt/xhr/send-authentication-prompt-2-manual.htm [ WontFix ] -virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-event-is-history-backward-navigation-manual.https.html [ WontFix ] -virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-event-is-history-forward-navigation-manual.https.html [ WontFix ] -virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-event-is-reload-navigation-manual.https.html [ WontFix ] virtual/speech-with-unified-autoplay/external/wpt/speech-api/SpeechRecognition-abort-manual.https.html [ WontFix ] virtual/speech-with-unified-autoplay/external/wpt/speech-api/SpeechRecognition-onerror-manual.https.html [ WontFix ] virtual/speech-with-unified-autoplay/external/wpt/speech-api/SpeechRecognition-onresult-manual.https.html [ WontFix ] virtual/speech-with-unified-autoplay/external/wpt/speech-api/SpeechRecognition-stop-manual.https.html [ WontFix ] [ Retina ] external/wpt/pointerevents/pointerevent_touch-action-table-test_touch-manual.html [ WontFix ] -# See crbug.com/865839. -virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/update-after-navigation-redirect.https.html [ WontFix ] - # MathML is not implemented. crbug.com/6606 external/wpt/mathml [ WontFix ]
diff --git a/third_party/blink/web_tests/SlowTests b/third_party/blink/web_tests/SlowTests index 3f1358b4..aa819c3 100644 --- a/third_party/blink/web_tests/SlowTests +++ b/third_party/blink/web_tests/SlowTests
@@ -178,7 +178,6 @@ crbug.com/522646 http/tests/media/encrypted-media/encrypted-media-encrypted-event-different-origin.html [ Slow ] crbug.com/411164 [ Win ] http/tests/security/powerfulFeatureRestrictions/serviceworker-on-insecure-origin.html [ Slow ] crbug.com/411164 [ Win ] virtual/outofblink-cors/http/tests/security/powerfulFeatureRestrictions/serviceworker-on-insecure-origin.html [ Slow ] -crbug.com/411164 [ Win ] virtual/outofblink-cors-ns/http/tests/security/powerfulFeatureRestrictions/serviceworker-on-insecure-origin.html [ Slow ] crbug.com/510337 http/tests/devtools/console/console-format.js [ Slow ] crbug.com/357427 http/tests/workers/terminate-during-sync-operation-file.html [ Slow ] crbug.com/357427 http/tests/workers/terminate-during-sync-operation-filesystem.html [ Slow ] @@ -367,8 +366,6 @@ crbug.com/853977 [ Linux ] http/tests/fetch/chromium/release-handle-crash.html [ Slow ] crbug.com/853977 [ Linux ] virtual/outofblink-cors/http/tests/fetch/chromium/call-extra-crash-tee.html [ Slow ] crbug.com/853977 [ Linux ] virtual/outofblink-cors/http/tests/fetch/chromium/release-handle-crash.html [ Slow ] -crbug.com/853977 [ Linux ] virtual/outofblink-cors-ns/http/tests/fetch/chromium/call-extra-crash-tee.html [ Slow ] -crbug.com/853977 [ Linux ] virtual/outofblink-cors-ns/http/tests/fetch/chromium/release-handle-crash.html [ Slow ] crbug.com/853977 [ Linux ] virtual/streaming-preload/http/tests/fetch/chromium/call-extra-crash-tee.html [ Slow ] crbug.com/853977 [ Linux ] virtual/streaming-preload/http/tests/fetch/chromium/release-handle-crash.html [ Slow ] @@ -425,9 +422,6 @@ crbug.com/869800 http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-aborted.html [ Slow ] crbug.com/869800 http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-simple.html [ Slow ] crbug.com/869800 http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-synconworker.html [ Slow ] -crbug.com/869800 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-aborted.html [ Slow ] -crbug.com/869800 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-simple.html [ Slow ] -crbug.com/869800 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-synconworker.html [ Slow ] crbug.com/869800 virtual/outofblink-cors/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-aborted.html [ Slow ] crbug.com/869800 virtual/outofblink-cors/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-simple.html [ Slow ] crbug.com/869800 virtual/outofblink-cors/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-synconworker.html [ Slow ] @@ -488,25 +482,6 @@ crbug.com/874695 virtual/outofblink-cors/external/wpt/xhr/xmlhttprequest-timeout-worker-simple.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/xhr/xmlhttprequest-timeout-worker-synconworker.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/xhr/xmlhttprequest-timeout-worker-twice.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/http-cache/cc-request.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/fetch-frame-resource.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/sync-no-timeout.any.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/sync-no-timeout.any.sharedworker.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/sync-no-timeout.any.worker.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/xmlhttprequest-timeout-aborted.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/xmlhttprequest-timeout-abortedonmain.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/xmlhttprequest-timeout-overridesexpires.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/xmlhttprequest-timeout-overrides.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/xmlhttprequest-timeout-simple.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/xmlhttprequest-timeout-synconmain.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/xmlhttprequest-timeout-twice.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/xmlhttprequest-timeout-worker-aborted.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/xmlhttprequest-timeout-worker-overridesexpires.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/xmlhttprequest-timeout-worker-overrides.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/xmlhttprequest-timeout-worker-simple.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/xmlhttprequest-timeout-worker-synconworker.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/xmlhttprequest-timeout-worker-twice.html [ Slow ] -crbug.com/874695 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-frame-resource.https.html [ Slow ] crbug.com/874695 virtual/webrtc-wpt-unified-plan/external/wpt/webrtc/RTCDTMFSender-ontonechange-long.https.html [ Slow ] # Tests where |3s <= slowest_run < 10s| on flakiness dashboard for site_per_process_webkit_layout_tests @@ -1013,10 +988,6 @@ crbug.com/874695 virtual/outofblink-cors/http/tests/security/cross-frame-mouse-source-capabilities.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/security/frameNavigation/xss-ALLOWED-same-origin-top-navigation-without-user-gesture.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/security/video-poster-cross-origin-crash2.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/security/contentSecurityPolicy/redirect-with-delay.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/security/cross-frame-mouse-source-capabilities.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/security/frameNavigation/xss-ALLOWED-same-origin-top-navigation-without-user-gesture.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/security/video-poster-cross-origin-crash2.html [ Slow ] crbug.com/874695 http/tests/webfont/crbug-655076.html [ Slow ] crbug.com/874695 http/tests/webfont/slow-loading.html [ Slow ] crbug.com/874695 http/tests/webmidi/midi-default-feature-policy.https.sub.html [ Slow ] @@ -1112,18 +1083,22 @@ crbug.com/874695 virtual/mouseevent_fractional/fast/events/touch/gesture/gesture-click.html [ Slow ] crbug.com/874695 virtual/mouseevent_fractional/fast/events/touch/touch-slider-no-js-touch-listener.html [ Slow ] crbug.com/874695 virtual/origin-policy/external/wpt/origin-policy/origin-policy.https.tentative.html [ Slow ] +crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/abort/general.any.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/abort/general.any.sharedworker.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/abort/general.any.worker.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/abort/general.https.any.serviceworker.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/abort/serviceworker-intercepted.https.html [ Slow ] +crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/abort/keepalive.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/basic/error-after-response.html [ Slow ] +crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-preflight-status.any.worker.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-redirect-credentials.any.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-redirect-credentials.any.worker.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-redirect-preflight.any.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-redirect-preflight.any.worker.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/redirect/redirect-count.any.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/redirect/redirect-count.any.worker.html [ Slow ] +crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/redirect/redirect-referrer.any.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/request/destination/fetch-destination-no-load-event.https.html [ Slow ] +crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/request/destination/fetch-destination-worker.https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/request/request-cache-default-conditional.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/request/request-keepalive-quota.html?include=slow-1 [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/api/request/request-keepalive-quota.html?include=slow-2 [ Slow ] @@ -1133,25 +1108,24 @@ crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/http-cache/304-update.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/http-cache/basic-auth-cache-test.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/http-cache/freshness.html [ Slow ] +crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/http-cache/heuristic.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/http-cache/status.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/range/sw.https.window.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/fetch/security/redirect-to-url-with-credentials.https.html [ Slow ] +crbug.com/874695 virtual/outofblink-cors/external/wpt/referrer-policy/no-referrer-when-downgrade/attr-referrer/same-origin/http-https/script-tag/swap-origin-redirect/upgrade-protocol.http.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-event-redirect.https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-event-respond-with-body-loaded-in-chunk.https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-response-taint.https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/service-workers/service-worker/navigation-redirect.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors/external/wpt/service-workers/service-worker/performance-timeline.https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/service-workers/service-worker/registration-mime-types.https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/service-workers/service-worker/registration-updateviacache.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors/external/wpt/service-workers/service-worker/sandboxed-iframe-fetch-event.https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/service-workers/service-worker/skip-waiting-using-registration.https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/service-workers/service-worker/skip-waiting-without-using-registration.https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/service-workers/service-worker/update-after-navigation-fetch-event.https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/service-workers/service-worker/update-after-navigation-redirect.https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors/external/wpt/service-workers/service-worker/worker-in-sandboxed-iframe-by-csp-fetch-event.https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/xhr/access-control-basic-allow-preflight-cache-timeout.htm [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/xhr/event-progress.htm [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/xhr/event-readystatechange-loaded.htm [ Slow ] @@ -1161,8 +1135,8 @@ crbug.com/874695 virtual/outofblink-cors/external/wpt/xhr/sync-no-progress.any.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/xhr/sync-no-progress.any.worker.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/external/wpt/xhr/xmlhttprequest-timeout-reused.html [ Slow ] +crbug.com/874695 virtual/outofblink-cors/http/tests/fetch/chromium/error-messages.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/fetch/serviceworker/body-mixin-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors/http/tests/fetch/serviceworker/body-mixin.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/fetch/serviceworker-proxied/thorough/access-control-base-https-other-https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/fetch/serviceworker-proxied/thorough/auth-base-https-other-https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/fetch/serviceworker-proxied/thorough/auth-nocors-base-https-other-https.html [ Slow ] @@ -1217,6 +1191,7 @@ crbug.com/874695 virtual/outofblink-cors/http/tests/fetch/window/thorough/scheme-blob-base-https-other-https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/fetch/window/thorough/scheme-data-base-https-other-https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/fetch/workers/body-mixin-base-https-other-https.html [ Slow ] +crbug.com/874695 virtual/outofblink-cors/http/tests/fetch/workers/body-mixin.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/fetch/workers/stream-reader-base-https-other-https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/fetch/workers/thorough/access-control-base-https-other-https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/fetch/workers/thorough/auth-base-https-other-https.html [ Slow ] @@ -1236,164 +1211,17 @@ crbug.com/874695 virtual/outofblink-cors/http/tests/fetch/workers/thorough/scheme-data-base-https-other-https.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/xmlhttprequest/navigation-abort-detaches-frame.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-aborted.html [ Slow ] +crbug.com/874695 virtual/outofblink-cors/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-abortedonmain.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-overridesexpires.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-simple.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-twice.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-overridesexpires.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-twice.html [ Slow ] crbug.com/874695 virtual/outofblink-cors/http/tests/xmlhttprequest/web-apps/013.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/abort/general.any.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/abort/general.any.sharedworker.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/abort/general.any.worker.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/abort/general.https.any.serviceworker.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/abort/keepalive.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/basic/error-after-response.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/cors/cors-preflight-status.any.worker.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/cors/cors-redirect-credentials.any.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/cors/cors-redirect-credentials.any.worker.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/cors/cors-redirect-preflight.any.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/cors/cors-redirect-preflight.any.worker.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/redirect/redirect-count.any.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/redirect/redirect-count.any.worker.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/redirect/redirect-referrer.any.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/request/destination/fetch-destination-no-load-event.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/request/destination/fetch-destination-worker.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/request/request-cache-default-conditional.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/request/request-keepalive-quota.html?include=slow-1 [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/request/request-keepalive-quota.html?include=slow-2 [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/request/request-keepalive-quota.html?include=slow-3 [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/api/response/response-clone.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/cross-origin-resource-policy/fetch.any.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/http-cache/304-update.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/http-cache/basic-auth-cache-test.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/http-cache/freshness.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/http-cache/heuristic.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/http-cache/status.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/range/sw.https.window.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/fetch/security/redirect-to-url-with-credentials.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/referrer-policy/no-referrer-when-downgrade/attr-referrer/same-origin/http-https/script-tag/swap-origin-redirect/upgrade-protocol.http.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/fetch-event-redirect.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/fetch-event-respond-with-body-loaded-in-chunk.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/fetch-response-taint.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/navigation-redirect.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/registration-mime-types.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/registration-updateviacache.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/skip-waiting-using-registration.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/skip-waiting-without-using-registration.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/update-after-navigation-fetch-event.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/update-after-navigation-redirect.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/access-control-basic-allow-preflight-cache-timeout.htm [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/event-progress.htm [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/event-readystatechange-loaded.htm [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/overridemimetype-blob.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/progress-events-response-data-gzip.htm [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/response-data-progress.htm [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/sync-no-progress.any.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/sync-no-progress.any.worker.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/external/wpt/xhr/xmlhttprequest-timeout-reused.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/chromium/error-messages.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/body-mixin-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/access-control-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/auth-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/auth-nocors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/cookie-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/cookie-nocors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/cors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/cors-preflight2-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/cors-preflight-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/nocors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/redirect-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/redirect-credentials-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/redirect-loop-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/redirect-nocors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/redirect-password-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/scheme-blob-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker-proxied/thorough/scheme-data-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/stream-reader-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/stream-reader.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/access-control-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/auth-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/auth-nocors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/cookie-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/cookie-nocors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/cors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/cors-preflight2-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/cors-preflight-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/nocors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/redirect-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/redirect-credentials-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/redirect-loop-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/redirect-nocors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/redirect-password-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/scheme-blob-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/serviceworker/thorough/scheme-data-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/body-mixin-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/stream-reader-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/stream-reader.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/thorough/access-control-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/thorough/auth-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/thorough/auth-nocors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/thorough/cookie-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/thorough/cookie-nocors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/thorough/cors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/thorough/cors-preflight2-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/thorough/cors-preflight-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/thorough/nocors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/thorough/redirect-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/thorough/redirect-credentials-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/thorough/redirect-loop-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/thorough/redirect-nocors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/thorough/redirect-password-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/thorough/scheme-blob-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/window/thorough/scheme-data-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/body-mixin-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/body-mixin.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/stream-reader-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/thorough/access-control-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/thorough/auth-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/thorough/auth-nocors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/thorough/cookie-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/thorough/cookie-nocors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/thorough/cors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/thorough/cors-preflight2-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/thorough/cors-preflight-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/thorough/nocors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/thorough/redirect-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/thorough/redirect-credentials-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/thorough/redirect-loop-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/thorough/redirect-nocors-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/thorough/redirect-password-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/thorough/scheme-blob-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/fetch/workers/thorough/scheme-data-base-https-other-https.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/navigation-abort-detaches-frame.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-aborted.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-abortedonmain.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-overridesexpires.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-simple.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-twice.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-overridesexpires.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-twice.html [ Slow ] -crbug.com/874695 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/web-apps/013.html [ Slow ] crbug.com/874695 virtual/paint-timing/external/wpt/paint-timing/idlharness.window.html [ Slow ] crbug.com/874695 virtual/reporting-api/external/wpt/content-security-policy/reporting-api/reporting-api-doesnt-send-reports-without-violation.https.sub.html [ Slow ] crbug.com/874695 virtual/sampling-heap-profiler/inspector-protocol/memory/sampling-native-snapshot.js [ Slow ] crbug.com/874695 virtual/scroll_customization/fast/scroll-behavior/overscroll-behavior.html [ Slow ] -crbug.com/874695 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Slow ] -crbug.com/874695 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Slow ] -crbug.com/874695 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-event-redirect.https.html [ Slow ] -crbug.com/874695 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-event-respond-with-body-loaded-in-chunk.https.html [ Slow ] -crbug.com/874695 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-response-taint.https.html [ Slow ] -crbug.com/874695 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/navigation-redirect.https.html [ Slow ] -crbug.com/874695 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/registration-mime-types.https.html [ Slow ] -crbug.com/874695 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/registration-updateviacache.https.html [ Slow ] -crbug.com/874695 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/skip-waiting-using-registration.https.html [ Slow ] -crbug.com/874695 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/skip-waiting-without-using-registration.https.html [ Slow ] -crbug.com/874695 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/update-after-navigation-fetch-event.https.html [ Slow ] -crbug.com/874695 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/update-after-navigation-redirect.https.html [ Slow ] -crbug.com/874695 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Slow ] crbug.com/874695 virtual/sharedarraybuffer/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success-and-failure.html [ Slow ] crbug.com/874695 virtual/sharedarraybuffer/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success.html [ Slow ] crbug.com/874695 virtual/sharedarraybuffer/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-sharedworker-failure.html [ Slow ] @@ -1554,11 +1382,6 @@ crbug.com/893015 [ Linux ] virtual/outofblink-cors/http/tests/fetch/chromium/response-form-data-gc-crash.html [ Slow ] crbug.com/893015 [ Linux ] virtual/outofblink-cors/http/tests/fetch/chromium/response-json-gc-crash.html [ Slow ] crbug.com/893015 [ Linux ] virtual/outofblink-cors/http/tests/fetch/chromium/response-text-gc-crash.html [ Slow ] -crbug.com/893015 [ Linux ] virtual/outofblink-cors-ns/http/tests/fetch/chromium/response-array-buffer-gc-crash.html [ Slow ] -crbug.com/893015 [ Linux ] virtual/outofblink-cors-ns/http/tests/fetch/chromium/response-blob-gc-crash.html [ Slow ] -crbug.com/893015 [ Linux ] virtual/outofblink-cors-ns/http/tests/fetch/chromium/response-form-data-gc-crash.html [ Slow ] -crbug.com/893015 [ Linux ] virtual/outofblink-cors-ns/http/tests/fetch/chromium/response-json-gc-crash.html [ Slow ] -crbug.com/893015 [ Linux ] virtual/outofblink-cors-ns/http/tests/fetch/chromium/response-text-gc-crash.html [ Slow ] crbug.com/893015 [ Linux ] virtual/streaming-preload/http/tests/fetch/chromium/response-array-buffer-gc-crash.html [ Slow ] crbug.com/893015 [ Linux ] virtual/streaming-preload/http/tests/fetch/chromium/response-blob-gc-crash.html [ Slow ] crbug.com/893015 [ Linux ] virtual/streaming-preload/http/tests/fetch/chromium/response-form-data-gc-crash.html [ Slow ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index dce5691a..17f1ad7 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -143,7 +143,6 @@ crbug.com/645641 external/wpt/html/syntax/parsing/html5lib_tests19.html [ Crash Failure ] crbug.com/665058 http/tests/local/drag-over-remote-content.html [ Crash ] crbug.com/771003 http/tests/security/mixedContent/insecure-iframe-in-main-frame.html [ Failure ] -crbug.com/771003 virtual/outofblink-cors-ns/http/tests/security/mixedContent/insecure-iframe-in-main-frame.html [ Failure ] crbug.com/771003 virtual/outofblink-cors/http/tests/security/mixedContent/insecure-iframe-in-main-frame.html [ Failure ] crbug.com/771003 virtual/feature-policy-for-sandbox/http/tests/security/mixedContent/insecure-iframe-in-main-frame.html [ Failure ] @@ -155,7 +154,6 @@ crbug.com/393285 http/tests/text-autosizing/wide-iframe.html [ Failure Crash ] # Console message differences (e.g. full URI vs origin-only): crbug.com/669083 http/tests/security/frameNavigation/xss-DENIED-top-navigation-without-user-gesture.html [ Failure ] -crbug.com/669083 virtual/outofblink-cors-ns/http/tests/security/frameNavigation/xss-DENIED-top-navigation-without-user-gesture.html [ Failure ] crbug.com/669083 virtual/outofblink-cors/http/tests/security/frameNavigation/xss-DENIED-top-navigation-without-user-gesture.html [ Failure ] crbug.com/669083 virtual/feature-policy-for-sandbox/http/tests/security/frameNavigation/xss-DENIED-top-navigation-without-user-gesture.html [ Failure ] crbug.com/886588 external/wpt/dom/events/EventListener-addEventListener.sub.window.html [ Failure ] @@ -171,7 +169,6 @@ crbug.com/765779 http/tests/loading/bad-server-subframe.html [ Failure ] crbug.com/793127 external/wpt/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html [ Crash ] crbug.com/793127 http/tests/security/upgrade-insecure-requests/iframe-upgrade.https.html [ Crash ] -crbug.com/793127 virtual/outofblink-cors-ns/http/tests/security/upgrade-insecure-requests/iframe-upgrade.https.html [ Crash ] crbug.com/793127 virtual/outofblink-cors/http/tests/security/upgrade-insecure-requests/iframe-upgrade.https.html [ Crash ] crbug.com/793127 virtual/feature-policy-for-sandbox/http/tests/security/upgrade-insecure-requests/iframe-upgrade.https.html [ Crash ] crbug.com/801992 http/tests/misc/iframe-script-modify-attr.html [ Pass Crash ] @@ -345,7 +342,6 @@ # Sheriff 2018/05/25 crbug.com/846747 http/tests/navigation/navigation-interrupted-by-fragment.html [ Pass Timeout ] crbug.com/846747 virtual/outofblink-cors/http/tests/navigation/navigation-interrupted-by-fragment.html [ Pass Timeout ] -crbug.com/846747 virtual/outofblink-cors-ns/http/tests/navigation/navigation-interrupted-by-fragment.html [ Pass Timeout ] crbug.com/846747 virtual/feature-policy-for-sandbox/http/tests/navigation/navigation-interrupted-by-fragment.html [ Pass Timeout ] crbug.com/846747 virtual/stable/http/tests/navigation/navigation-interrupted-by-fragment.html [ Pass Timeout ] @@ -1846,29 +1842,23 @@ # TODO(toyoshim, tyoshino, kinuko): Make following tests pass. # See crbug.com/736308 for more details. Since outofblink-cors is still under # development, just marking failed tests here is fine enough for tests under -# virtual/outofblink-cors and virtual/outofblink-cors-ns. +# virtual/outofblink-cors. # These are entries specific to outofblink-cors. Entries having the same # expectations with the base tests (without virtual/outofblink-cors, for # example) are not listed here. crbug.com/870173 is used to track failing tests # that fail only for our virtual tests, and do not have a specific bug entry. # -# ./third_party/blink/tools/run_web_tests.py virtual/outofblink-cors \ -# virtual/outofblink-cors-ns +# ./third_party/blink/tools/run_web_tests.py virtual/outofblink-cors # Passed 8297 # Total 8418 # Counts skip: 34 crash: 3 text: 67 pass: 8297 timeout: 17 -# Crashing tests in dictionary order. -crbug.com/867834 virtual/outofblink-cors/http/tests/security/isolatedWorld/cross-origin-xhr.html [ Crash ] - # Timeout tests in dictionary order. # Failing tests in dictionary order. crbug.com/870173 virtual/outofblink-cors/http/tests/security/img-redirect-to-crossorigin-credentials.html [ Failure ] crbug.com/870173 virtual/outofblink-cors/http/tests/security/script-crossorigin-redirect-credentials.html [ Failure ] -crbug.com/870173 virtual/outofblink-cors-ns/http/tests/security/img-redirect-to-crossorigin-credentials.html [ Failure ] -crbug.com/870173 virtual/outofblink-cors-ns/http/tests/security/isolatedWorld/cross-origin-xhr.html [ Failure ] -crbug.com/870173 virtual/outofblink-cors-ns/http/tests/security/script-crossorigin-redirect-credentials.html [ Failure ] +crbug.com/870173 virtual/outofblink-cors/http/tests/security/isolatedWorld/cross-origin-xhr.html [ Failure ] # ====== Out of Blink CORS related tests END ====== @@ -1985,11 +1975,9 @@ crbug.com/518883 crbug.com/390452 http/tests/security/isolatedWorld/media-query-wrapper-leaks.html [ Failure Pass Timeout ] crbug.com/518883 crbug.com/390452 virtual/outofblink-cors/http/tests/security/isolatedWorld/media-query-wrapper-leaks.html [ Failure Pass Timeout ] -crbug.com/518883 crbug.com/390452 virtual/outofblink-cors-ns/http/tests/security/isolatedWorld/media-query-wrapper-leaks.html [ Failure Pass Timeout ] crbug.com/518883 crbug.com/390452 virtual/feature-policy-for-sandbox/http/tests/security/isolatedWorld/media-query-wrapper-leaks.html [ Failure Pass Timeout ] crbug.com/518987 http/tests/xmlhttprequest/navigation-abort-detaches-frame.html [ Pass Timeout ] crbug.com/518987 virtual/outofblink-cors/http/tests/xmlhttprequest/navigation-abort-detaches-frame.html [ Pass Timeout ] -crbug.com/518987 virtual/outofblink-cors-ns/http/tests/xmlhttprequest/navigation-abort-detaches-frame.html [ Pass Timeout ] # These performance-sensitive user-timing tests are flaky in debug on all platforms, and flaky on all configurations of windows. # See: crbug.com/567965, crbug.com/518992, and crbug.com/518993 @@ -2022,7 +2010,7 @@ # though this is a non-flaky assert failure, we need to mark it [ Pass Crash ]. crbug.com/389648 crbug.com/517123 crbug.com/410145 fast/text-autosizing/table-inflation-crash.html [ Pass Crash Timeout ] -crbug.com/876732 [ Win Debug ] fast/dom/HTMLImageElement/image-srcset-w-onerror.html [ Failure Pass ] +crbug.com/876732 [ Win ] fast/dom/HTMLImageElement/image-srcset-w-onerror.html [ Failure Pass ] # The test will pass once PassiveDocumentWheelEventListeners is enabled by default. crbug.com/626196 external/wpt/dom/events/document-level-wheel-event-listener-passive-by-default-manual.html [ Failure ] @@ -2054,11 +2042,9 @@ crbug.com/410145 [ Win ] fast/table/column-in-inline.html [ Failure ] crbug.com/411164 [ Win ] http/tests/security/powerfulFeatureRestrictions/serviceworker-on-insecure-origin.html [ Pass ] crbug.com/411164 [ Win ] virtual/outofblink-cors/http/tests/security/powerfulFeatureRestrictions/serviceworker-on-insecure-origin.html [ Pass ] -crbug.com/411164 [ Win ] virtual/outofblink-cors-ns/http/tests/security/powerfulFeatureRestrictions/serviceworker-on-insecure-origin.html [ Pass ] crbug.com/686118 http/tests/security/setDomainRelaxationForbiddenForURLScheme.html [ Crash Pass ] crbug.com/686118 virtual/outofblink-cors/http/tests/security/setDomainRelaxationForbiddenForURLScheme.html [ Crash Pass ] -crbug.com/686118 virtual/outofblink-cors-ns/http/tests/security/setDomainRelaxationForbiddenForURLScheme.html [ Crash Pass ] crbug.com/686118 virtual/feature-policy-for-sandbox/http/tests/security/setDomainRelaxationForbiddenForURLScheme.html [ Crash Pass ] # In external/wpt/html/, we prefer checking in failure @@ -2375,10 +2361,6 @@ crbug.com/528062 [ Win ] virtual/outofblink-cors/http/tests/security/contentSecurityPolicy/cached-frame-csp.html [ Failure ] crbug.com/528062 [ Win ] virtual/outofblink-cors/http/tests/security/xssAuditor/cached-frame.html [ Failure ] crbug.com/528062 [ Win ] virtual/outofblink-cors/http/tests/security/xssAuditor/chunked-big-script.html [ Failure ] -crbug.com/528062 [ Win ] virtual/outofblink-cors-ns/http/tests/security/XFrameOptions/x-frame-options-cached.html [ Failure ] -crbug.com/528062 [ Win ] virtual/outofblink-cors-ns/http/tests/security/contentSecurityPolicy/cached-frame-csp.html [ Failure ] -crbug.com/528062 [ Win ] virtual/outofblink-cors-ns/http/tests/security/xssAuditor/cached-frame.html [ Failure ] -crbug.com/528062 [ Win ] virtual/outofblink-cors-ns/http/tests/security/xssAuditor/chunked-big-script.html [ Failure ] crbug.com/528062 [ Win ] virtual/feature-policy-for-sandbox/http/tests/security/XFrameOptions/x-frame-options-cached.html [ Failure ] crbug.com/528062 [ Win ] virtual/feature-policy-for-sandbox/http/tests/security/contentSecurityPolicy/cached-frame-csp.html [ Failure ] crbug.com/528062 [ Win ] virtual/feature-policy-for-sandbox/http/tests/security/xssAuditor/cached-frame.html [ Failure ] @@ -2663,7 +2645,6 @@ crbug.com/501659 http/tests/security/xss-DENIED-xml-external-entity.xhtml [ Failure ] crbug.com/501659 virtual/outofblink-cors/http/tests/security/xss-DENIED-xml-external-entity.xhtml [ Failure ] -crbug.com/501659 virtual/outofblink-cors-ns/http/tests/security/xss-DENIED-xml-external-entity.xhtml [ Failure ] crbug.com/501659 virtual/feature-policy-for-sandbox/http/tests/security/xss-DENIED-xml-external-entity.xhtml [ Failure ] crbug.com/501659 fast/css/stylesheet-candidate-nodes-crash.xhtml [ Failure ] @@ -2788,7 +2769,6 @@ # Skip the non-virtualized CORS-RFC1918 tests: crbug.com/763830 http/tests/security/cors-rfc1918/ [ Skip ] crbug.com/763830 virtual/outofblink-cors/http/tests/security/cors-rfc1918/ [ Skip ] -crbug.com/763830 virtual/outofblink-cors-ns/http/tests/security/cors-rfc1918/ [ Skip ] crbug.com/763830 virtual/feature-policy-for-sandbox/http/tests/security/cors-rfc1918/ [ Skip ] crbug.com/831729 external/wpt/event-timing/event-timing-crossiframe.html [ Timeout ] @@ -2891,11 +2871,6 @@ crbug.com/800898 external/wpt/FileAPI/url/url-with-fetch.any.worker.html [ Pass Failure ] crbug.com/800898 external/wpt/FileAPI/url/url-with-xhr.any.worker.html [ Pass Failure ] -crbug.com/800898 external/wpt/FileAPI/url/url-in-tags-revoke.window.html [ Timeout ] - -# These will be fixed when NetworkService gets enabled. -crbug.com/800898 external/wpt/workers/shared-worker-from-blob-url.window.html [ Skip ] -crbug.com/800898 virtual/omt-worker-fetch/external/wpt/workers/shared-worker-from-blob-url.window.html [ Skip ] crbug.com/849737 virtual/mojo-blob-urls/external/wpt/FileAPI/url/url-format.any.html [ Pass Timeout ] crbug.com/849737 virtual/mojo-blob-urls/external/wpt/FileAPI/url/url-format.any.worker.html [ Pass Timeout ] @@ -2917,10 +2892,8 @@ # Failure messages are unstable so we cannot create baselines. crbug.com/832071 external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ] -crbug.com/832071 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ] crbug.com/832071 virtual/navigation-mojo-response/external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ] crbug.com/832071 virtual/outofblink-cors/external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ] -crbug.com/832071 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ] # failures in external/wpt/css/css-animations/ and web-animations/ from Mozilla tests crbug.com/849859 external/wpt/css/css-animations/CSSAnimation-pausing.tentative.html [ Failure ] @@ -3016,6 +2989,9 @@ crbug.com/918664 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/sizing/block-size-with-min-or-max-content-table-1a.html [ Failure Pass ] # ====== New tests from wpt-importer added here ====== +crbug.com/626703 virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html [ Timeout ] +crbug.com/626703 external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html [ Timeout ] +crbug.com/626703 external/wpt/webrtc/RTCPeerConnection-remote-track-mute.https.html [ Timeout ] crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html [ Timeout ] crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/clients-matchall-exact-controller.https.html [ Timeout ] crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/claim-with-redirect.https.html [ Timeout ] @@ -3030,20 +3006,9 @@ crbug.com/626703 external/wpt/reporting/bufferSize.html [ Timeout ] crbug.com/626703 external/wpt/reporting/order.html [ Timeout ] crbug.com/626703 external/wpt/reporting/nestedReport.html [ Timeout ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/navigation-preload/empty-preload-response-body.https.html [ Timeout ] crbug.com/626703 [ Retina ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/idlharness.https.window.html [ Timeout ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/oninstall-script-error.https.html [ Timeout ] crbug.com/626703 [ Retina ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaDevices-enumerateDevices.https.html [ Timeout ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/isSecureContext.https.html [ Timeout ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/service-worker-csp-default.https.html [ Timeout ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/register-wait-forever-in-install-worker.https.html [ Timeout ] crbug.com/626703 [ Retina ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaDevices-getUserMedia.https.html [ Timeout ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/sandboxed-iframe-fetch-event.https.html [ Timeout ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-response-taint.https.html [ Timeout ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/websocket-in-service-worker.https.html [ Timeout ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/resource-timing-cross-origin.https.html [ Timeout ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/skip-waiting-without-client.https.html [ Timeout ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/registration-iframe.https.html [ Timeout ] crbug.com/626703 virtual/not-site-per-process/external/wpt/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html [ Skip ] crbug.com/626703 [ Retina ] external/wpt/websockets/interfaces/WebSocket/events/015.html?wss [ Timeout ] crbug.com/626703 [ Retina ] external/wpt/websockets/Secure-Close-3000-reason.any.worker.html [ Timeout ] @@ -3053,25 +3018,9 @@ crbug.com/626703 external/wpt/html/semantics/forms/form-submission-target/rel-input-target.html [ Timeout ] crbug.com/626703 external/wpt/html/semantics/forms/form-submission-target/rel-form-target.html [ Timeout ] crbug.com/626703 external/wpt/html/semantics/forms/form-submission-target/rel-button-target.html [ Timeout ] -crbug.com/626703 [ Linux ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-request-xhr-sync.https.html [ Crash ] -crbug.com/626703 [ Linux ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/shared-worker-controlled.https.html [ Crash ] crbug.com/626703 [ Retina ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaStream-default-feature-policy.https.html [ Timeout ] crbug.com/626703 [ Retina ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/GUM-non-applicable-constraint.https.html [ Timeout ] -crbug.com/626703 [ Linux ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/clients-matchall.https.html [ Crash ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/skip-waiting.https.html [ Timeout ] -crbug.com/626703 [ Linux ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/activate-event-after-install-state-change.https.html [ Crash ] -crbug.com/626703 [ Linux ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/clients-matchall-exact-controller.https.html [ Crash ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/import-scripts-resource-map.https.html [ Timeout ] -crbug.com/626703 [ Linux ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-event-after-navigation-within-page.https.html [ Crash ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/claim-not-using-registration.https.html [ Timeout ] crbug.com/626703 [ Retina ] virtual/freeze-frames/external/wpt/lifecycle/freeze.html [ Timeout ] -crbug.com/626703 [ Linux ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-cors-xhr.https.html [ Crash ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/navigation-preload/request-headers.https.html [ Timeout ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/register-same-scope-different-script-url.https.html [ Timeout ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/navigation-preload/get-state.https.html [ Timeout ] -crbug.com/626703 [ Linux ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-request-css-images.https.html [ Crash ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-event-referrer-policy.https.html [ Timeout ] -crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/clients-get-cross-origin.https.html [ Timeout ] crbug.com/626703 [ Retina ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaStream-audio-only.https.html [ Timeout ] crbug.com/626703 crbug.com/930297 [ Linux ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html [ Timeout Pass Failure Crash ] crbug.com/626703 [ Win7 ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html [ Failure Timeout ] @@ -3082,8 +3031,8 @@ crbug.com/626703 external/wpt/css/css-writing-modes/baseline-with-orthogonal-flow-001.html [ Failure ] crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-intrinsic-ratio-007.html [ Failure ] crbug.com/626703 crbug.com/930297 [ Linux ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html [ Timeout Pass Failure Crash ] -crbug.com/626703 [ Win10 ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html [ Failure Timeout ] -crbug.com/626703 [ Win7 ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html [ Failure Timeout ] +crbug.com/626703 [ Win10 ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html [ Failure Timeout Pass ] +crbug.com/626703 [ Win7 ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html [ Failure Timeout Pass ] crbug.com/626703 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=windows-1252 [ Timeout ] crbug.com/626703 external/wpt/css/css-values/ch-unit-011.html [ Failure ] crbug.com/626703 external/wpt/css/css-values/attr-invalid-type-008.html [ Failure ] @@ -3098,7 +3047,7 @@ crbug.com/626703 [ Mac10.10 ] virtual/not-site-per-process/external/wpt/html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-same-origin-domain.sub.html [ Timeout ] crbug.com/626703 [ Mac10.10 ] external/wpt/html/dom/self-origin.sub.html [ Timeout ] crbug.com/626703 [ Mac10.10 ] external/wpt/fetch/api/cors/cors-redirect-preflight.any.html [ Timeout ] -crbug.com/626703 [ Mac10.10 ] virtual/outofblink-cors-ns/external/wpt/fetch/api/cors/cors-cookies-redirect.any.worker.html [ Timeout ] +crbug.com/626703 [ Mac10.10 ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-cookies-redirect.any.worker.html [ Timeout ] crbug.com/626703 [ Mac10.10 ] external/wpt/content-security-policy/frame-ancestors/frame-ancestors-url-block.html [ Timeout ] crbug.com/626703 [ Retina ] external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-width-height.html [ Crash Timeout ] crbug.com/626703 external/wpt/css/css-values/ic-unit-010.html [ Failure ] @@ -3167,7 +3116,6 @@ crbug.com/626703 [ Mac10.13 ] external/wpt/preload/dynamic-adding-preload-imagesrcset.tentative.html [ Timeout ] crbug.com/906369 external/wpt/css/css-text/text-transform/text-transform-capitalize-033.html [ Failure ] crbug.com/626703 virtual/outofblink-cors/external/wpt/fetch/content-type/response.window.html [ Timeout ] -crbug.com/626703 virtual/outofblink-cors-ns/external/wpt/fetch/content-type/response.window.html [ Timeout ] crbug.com/626703 [ Mac10.10 ] external/wpt/mimesniff/mime-types/parsing.any.worker.html [ Failure Timeout ] crbug.com/626703 [ Mac10.11 ] external/wpt/mimesniff/mime-types/parsing.any.worker.html [ Failure Timeout ] crbug.com/626703 [ Mac10.10 ] external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Failure Timeout ] @@ -3251,11 +3199,9 @@ crbug.com/626703 external/wpt/css/css-conditional/at-supports-040.html [ Failure ] ### See crbug.com/891427 comment near the top of this file: ###crbug.com/626703 [ Win7 ] external/wpt/resource-timing/resource_timing_buffer_full_eventually.html [ Timeout ] -crbug.com/626703 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/update-not-allowed.https.html [ Timeout ] crbug.com/626703 virtual/outofblink-cors/external/wpt/service-workers/service-worker/update-not-allowed.https.html [ Timeout ] crbug.com/626703 external/wpt/service-workers/service-worker/update-not-allowed.https.html [ Timeout ] crbug.com/626703 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-margins-2.html [ Failure ] -crbug.com/626703 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/update-not-allowed.https.html [ Timeout ] crbug.com/626703 external/wpt/css/css-text/white-space/line-edge-white-space-collapse-002.html [ Failure ] crbug.com/626703 external/wpt/css/css-text/white-space/line-edge-white-space-collapse-001.html [ Failure ] crbug.com/626703 external/wpt/webvtt/rendering/cues-with-video/processing-model/align_center.html [ Failure ] @@ -3287,11 +3233,6 @@ crbug.com/626703 virtual/outofblink-cors/external/wpt/referrer-policy/css-integration/svg/internal-stylesheet.html [ Timeout Failure ] crbug.com/626703 virtual/outofblink-cors/external/wpt/referrer-policy/css-integration/svg/presentation-attribute.html [ Timeout Failure ] crbug.com/626703 virtual/outofblink-cors/external/wpt/referrer-policy/css-integration/svg/processing-instruction.html [ Timeout Failure ] -crbug.com/626703 virtual/outofblink-cors-ns/external/wpt/referrer-policy/css-integration/svg/external-stylesheet.html [ Timeout Failure ] -crbug.com/626703 virtual/outofblink-cors-ns/external/wpt/referrer-policy/css-integration/svg/inline-style.html [ Timeout Failure ] -crbug.com/626703 virtual/outofblink-cors-ns/external/wpt/referrer-policy/css-integration/svg/internal-stylesheet.html [ Timeout Failure ] -crbug.com/626703 virtual/outofblink-cors-ns/external/wpt/referrer-policy/css-integration/svg/presentation-attribute.html [ Timeout Failure ] -crbug.com/626703 virtual/outofblink-cors-ns/external/wpt/referrer-policy/css-integration/svg/processing-instruction.html [ Timeout Failure ] crbug.com/626703 virtual/omt-worker-fetch/external/wpt/referrer-policy/css-integration/svg/external-stylesheet.html [ Timeout Failure ] crbug.com/626703 virtual/omt-worker-fetch/external/wpt/referrer-policy/css-integration/svg/inline-style.html [ Timeout Failure ] crbug.com/626703 virtual/omt-worker-fetch/external/wpt/referrer-policy/css-integration/svg/internal-stylesheet.html [ Timeout Failure ] @@ -3370,11 +3311,6 @@ crbug.com/906959 virtual/omt-worker-fetch/external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html [ Failure ] crbug.com/906959 virtual/omt-worker-fetch/external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html [ Failure ] crbug.com/906959 virtual/omt-worker-fetch/external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-http/shared-worker/no-redirect/generic.http.html [ Failure ] crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html [ Failure ] crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html [ Failure ] crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html [ Failure ] @@ -3406,38 +3342,7 @@ crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html [ Failure ] crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html [ Failure ] crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/origin/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/generic.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/same-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/same-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/same-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/same-origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/strict-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/strict-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/strict-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/strict-origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-insecure.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-insecure.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/strict-origin-when-cross-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/same-insecure.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/strict-origin-when-cross-origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/same-insecure.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-http/shared-worker/no-redirect/generic.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html [ Failure ] -crbug.com/906959 virtual/outofblink-cors-ns/external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html [ Failure ] +crbug.com/906959 virtual/outofblink-cors/external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html [ Failure ] crbug.com/367760 external/wpt/svg/pservers/reftests/meshgradient-complex-001.svg [ Failure ] crbug.com/367760 external/wpt/svg/pservers/reftests/meshgradient-bicubic-001.svg [ Failure ] @@ -3559,7 +3464,6 @@ crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-column-row-gap-001.html [ Failure ] crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-column-row-gap-002.html [ Failure ] crbug.com/626703 virtual/outofblink-cors/external/wpt/fetch/api/request/request-keepalive-quota.html?include=slow-2 [ Timeout ] -crbug.com/626703 virtual/outofblink-cors-ns/external/wpt/fetch/api/request/request-keepalive-quota.html?include=slow-2 [ Timeout ] crbug.com/626703 external/wpt/fetch/api/request/request-keepalive-quota.html?include=slow-2 [ Timeout ] crbug.com/626703 [ Win7 ] external/wpt/preload/link-header-preload.html [ Timeout ] crbug.com/626703 [ Win7 ] external/wpt/preload/onerror-event.html [ Timeout ] @@ -3581,7 +3485,6 @@ crbug.com/626703 external/wpt/css/css-transforms/transform-box/view-box-mutation.html [ Failure ] crbug.com/626703 external/wpt/fetch/security/redirect-to-url-with-credentials.https.html [ Timeout ] crbug.com/626703 virtual/outofblink-cors/external/wpt/fetch/security/redirect-to-url-with-credentials.https.html [ Timeout ] -crbug.com/626703 virtual/outofblink-cors-ns/external/wpt/fetch/security/redirect-to-url-with-credentials.https.html [ Timeout ] crbug.com/626703 [ Mac10.12 ] external/wpt/domxpath/xml_xpath_runner.html [ Timeout ] crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-polygon-024.html [ Failure ] crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-ellipse-048.html [ Failure ] @@ -3669,7 +3572,6 @@ crbug.com/626703 external/wpt/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-010.html [ Failure ] crbug.com/626703 external/wpt/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-009.html [ Failure ] crbug.com/626703 virtual/outofblink-cors/external/wpt/fetch/http-cache/basic-auth-cache-test.html [ Timeout ] -crbug.com/626703 virtual/outofblink-cors-ns/external/wpt/fetch/http-cache/basic-auth-cache-test.html [ Timeout ] crbug.com/626703 external/wpt/fetch/http-cache/basic-auth-cache-test.html [ Timeout ] crbug.com/626703 external/wpt/css/css-fonts/font-feature-settings-descriptor-01.html [ Failure ] crbug.com/626703 [ Linux ] external/wpt/fetch/api/redirect/redirect-count.any.worker.html [ Timeout ] @@ -3678,10 +3580,6 @@ crbug.com/626703 [ Win10 ] virtual/outofblink-cors/external/wpt/fetch/api/redirect/redirect-count.any.html [ Timeout ] crbug.com/626703 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/redirect/redirect-count.any.worker.html [ Timeout ] crbug.com/626703 [ Win10 ] virtual/outofblink-cors/external/wpt/fetch/api/redirect/redirect-count.any.worker.html [ Timeout ] -crbug.com/626703 [ Linux ] virtual/outofblink-cors-ns/external/wpt/fetch/api/redirect/redirect-count.any.html [ Timeout ] -crbug.com/626703 [ Win10 ] virtual/outofblink-cors-ns/external/wpt/fetch/api/redirect/redirect-count.any.html [ Timeout ] -crbug.com/626703 [ Linux ] virtual/outofblink-cors-ns/external/wpt/fetch/api/redirect/redirect-count.any.worker.html [ Timeout ] -crbug.com/626703 [ Win10 ] virtual/outofblink-cors-ns/external/wpt/fetch/api/redirect/redirect-count.any.worker.html [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/fetch/api/redirect/redirect-count.any.html [ Timeout ] crbug.com/626703 [ Win10 ] external/wpt/fetch/api/redirect/redirect-count.any.html [ Timeout ] @@ -3943,8 +3841,6 @@ crbug.com/626703 external/wpt/screen-orientation/onchange-event-subframe.html [ Timeout ] crbug.com/648295 external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ] crbug.com/626703 virtual/outofblink-cors/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ] -crbug.com/626703 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ] -crbug.com/648295 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ] crbug.com/626703 external/wpt/svg/linking/reftests/href-filter-element.html [ Failure ] crbug.com/626703 external/wpt/webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_completely_move_up.html [ Failure ] crbug.com/626703 external/wpt/webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_partially_move_down.html [ Failure ] @@ -4160,13 +4056,10 @@ crbug.com/626703 external/wpt/webvtt/rendering/cues-with-video/processing-model/too_many_cues_wrapped.html [ Failure ] crbug.com/626703 external/wpt/xhr/event-readystatechange-loaded.htm [ Failure Timeout ] crbug.com/626703 virtual/outofblink-cors/external/wpt/xhr/event-readystatechange-loaded.htm [ Failure Timeout ] -crbug.com/626703 virtual/outofblink-cors-ns/external/wpt/xhr/event-readystatechange-loaded.htm [ Failure Timeout ] crbug.com/626703 external/wpt/xhr/preserve-ua-header-on-redirect.htm [ Failure ] crbug.com/626703 virtual/outofblink-cors/external/wpt/xhr/preserve-ua-header-on-redirect.htm [ Failure ] -crbug.com/626703 virtual/outofblink-cors-ns/external/wpt/xhr/preserve-ua-header-on-redirect.htm [ Failure ] crbug.com/626703 external/wpt/xhr/setrequestheader-header-allowed.htm [ Failure ] crbug.com/626703 virtual/outofblink-cors/external/wpt/xhr/setrequestheader-header-allowed.htm [ Failure ] -crbug.com/626703 virtual/outofblink-cors-ns/external/wpt/xhr/setrequestheader-header-allowed.htm [ Failure ] crbug.com/626703 [ Win10 ] external/wpt/preload/delaying-onload-link-preload-after-discovery.html [ Timeout ] crbug.com/626703 [ Win ] external/wpt/css/css-writing-modes/box-offsets-rel-pos-vlr-005.xht [ Failure ] crbug.com/626703 [ Win ] external/wpt/css/css-writing-modes/box-offsets-rel-pos-vrl-004.xht [ Failure ] @@ -4203,8 +4096,6 @@ crbug.com/888470 external/wpt/referrer-policy/css-integration/child-css/processing-instruction.html [ Failure ] crbug.com/888470 virtual/outofblink-cors/external/wpt/referrer-policy/css-integration/child-css/internal-import-stylesheet.html [ Failure ] crbug.com/888470 virtual/outofblink-cors/external/wpt/referrer-policy/css-integration/child-css/processing-instruction.html [ Failure ] -crbug.com/888470 virtual/outofblink-cors-ns/external/wpt/referrer-policy/css-integration/child-css/internal-import-stylesheet.html [ Failure ] -crbug.com/888470 virtual/outofblink-cors-ns/external/wpt/referrer-policy/css-integration/child-css/processing-instruction.html [ Failure ] crbug.com/888470 virtual/omt-worker-fetch/external/wpt/referrer-policy/css-integration/child-css/internal-import-stylesheet.html [ Failure ] crbug.com/888470 virtual/omt-worker-fetch/external/wpt/referrer-policy/css-integration/child-css/processing-instruction.html [ Failure ] @@ -4236,7 +4127,6 @@ # Unclear if XHR events should still be fired after its frame is discarded. crbug.com/881180 external/wpt/xhr/open-url-multi-window-4.htm [ Timeout ] crbug.com/881180 virtual/outofblink-cors/external/wpt/xhr/open-url-multi-window-4.htm [ Timeout ] -crbug.com/881180 virtual/outofblink-cors-ns/external/wpt/xhr/open-url-multi-window-4.htm [ Timeout ] crbug.com/655458 external/wpt/workers/Worker_terminate_event_queue.htm [ Pass Timeout ] crbug.com/655458 external/wpt/workers/semantics/multiple-workers/007.html [ Timeout ] @@ -4325,19 +4215,12 @@ # This test requires a special browser flag and seems not suitable for a wpt test, see bug. crbug.com/691944 external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ] -crbug.com/691944 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ] crbug.com/691944 virtual/outofblink-cors/external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ] -crbug.com/691944 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ] # These tests (erroneously) see a platform-specific User-Agent header crbug.com/595993 external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ] -crbug.com/595993 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ] crbug.com/595993 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ] -crbug.com/595993 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ] -crbug.com/595993 external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ] -crbug.com/595993 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ] crbug.com/595993 virtual/outofblink-cors/external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ] -crbug.com/595993 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ] crbug.com/619427 [ Mac ] fast/overflow/overflow-height-float-not-removed-crash3.html [ Pass Failure ] crbug.com/619427 [ Linux ] fast/overflow/overflow-height-float-not-removed-crash3.html [ Pass Failure ] @@ -4371,7 +4254,6 @@ # Added 2016-12-12 crbug.com/610835 http/tests/security/XFrameOptions/x-frame-options-deny-multiple-clients.html [ Failure Pass ] crbug.com/610835 virtual/outofblink-cors/http/tests/security/XFrameOptions/x-frame-options-deny-multiple-clients.html [ Failure Pass ] -crbug.com/610835 virtual/outofblink-cors-ns/http/tests/security/XFrameOptions/x-frame-options-deny-multiple-clients.html [ Failure Pass ] crbug.com/610835 virtual/feature-policy-for-sandbox/http/tests/security/XFrameOptions/x-frame-options-deny-multiple-clients.html [ Failure Pass ] # Added 2016-12-12 @@ -4392,7 +4274,6 @@ crbug.com/663858 fast/text/emphasis-vertical.html [ Pass Failure ] crbug.com/664816 http/tests/security/contentSecurityPolicy/require-sri-for/require-sri-for-script-reportonly-blocked.php [ Pass Failure ] crbug.com/664816 virtual/outofblink-cors/http/tests/security/contentSecurityPolicy/require-sri-for/require-sri-for-script-reportonly-blocked.php [ Pass Failure ] -crbug.com/664816 virtual/outofblink-cors-ns/http/tests/security/contentSecurityPolicy/require-sri-for/require-sri-for-script-reportonly-blocked.php [ Pass Failure ] crbug.com/664816 virtual/feature-policy-for-sandbox/http/tests/security/contentSecurityPolicy/require-sri-for/require-sri-for-script-reportonly-blocked.php [ Pass Failure ] crbug.com/702837 fast/text/aat-morx.html [ Skip ] @@ -4464,7 +4345,6 @@ crbug.com/678493 http/tests/permissions/chromium/test-request-window.html [ Timeout Pass ] crbug.com/678499 http/tests/security/contentSecurityPolicy/require-sri-for/require-sri-for-script-preload-allowed.php [ Failure Pass ] crbug.com/678499 virtual/outofblink-cors/http/tests/security/contentSecurityPolicy/require-sri-for/require-sri-for-script-preload-allowed.php [ Failure Pass ] -crbug.com/678499 virtual/outofblink-cors-ns/http/tests/security/contentSecurityPolicy/require-sri-for/require-sri-for-script-preload-allowed.php [ Failure Pass ] crbug.com/678499 virtual/feature-policy-for-sandbox/http/tests/security/contentSecurityPolicy/require-sri-for/require-sri-for-script-preload-allowed.php [ Failure Pass ] crbug.com/747751 [ Win ] http/tests/devtools/application-panel/resources-panel-resource-preview.js [ Failure Pass ] @@ -4491,10 +4371,8 @@ # Importing 'fetch' tests from WPT. crbug.com/705490 external/wpt/fetch/api/basic/error-after-response.html [ Timeout Pass ] crbug.com/705490 virtual/outofblink-cors/external/wpt/fetch/api/basic/error-after-response.html [ Timeout Pass ] -crbug.com/705490 virtual/outofblink-cors-ns/external/wpt/fetch/api/basic/error-after-response.html [ Timeout Pass ] crbug.com/820334 external/wpt/fetch/api/request/request-cache-default-conditional.html [ Timeout Pass ] crbug.com/820334 virtual/outofblink-cors/external/wpt/fetch/api/request/request-cache-default-conditional.html [ Timeout Pass ] -crbug.com/820334 virtual/outofblink-cors-ns/external/wpt/fetch/api/request/request-cache-default-conditional.html [ Timeout Pass ] crbug.com/716320 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success-and-failure.html [ Failure Timeout ] crbug.com/716320 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success.html [ Failure Timeout ] @@ -4527,9 +4405,7 @@ crbug.com/831509 external/wpt/service-workers/service-worker/skip-waiting-installed.https.html [ Failure Pass ] crbug.com/831509 virtual/navigation-mojo-response/external/wpt/service-workers/service-worker/skip-waiting-installed.https.html [ Failure Pass ] -crbug.com/831509 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/skip-waiting-installed.https.html [ Failure Pass ] crbug.com/831509 virtual/outofblink-cors/external/wpt/service-workers/service-worker/skip-waiting-installed.https.html [ Failure Pass ] -crbug.com/831509 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/skip-waiting-installed.https.html [ Failure Pass ] # Sheriff failures 2017-02-21 crbug.com/73609 http/tests/media/video-play-stall.html [ Pass Timeout ] @@ -4550,8 +4426,6 @@ crbug.com/724027 http/tests/security/contentSecurityPolicy/source-list-parsing-04.html [ Skip ] crbug.com/724027 virtual/outofblink-cors/http/tests/security/contentSecurityPolicy/directive-parsing-03.html [ Skip ] crbug.com/724027 virtual/outofblink-cors/http/tests/security/contentSecurityPolicy/source-list-parsing-04.html [ Skip ] -crbug.com/724027 virtual/outofblink-cors-ns/http/tests/security/contentSecurityPolicy/directive-parsing-03.html [ Skip ] -crbug.com/724027 virtual/outofblink-cors-ns/http/tests/security/contentSecurityPolicy/source-list-parsing-04.html [ Skip ] crbug.com/724027 virtual/feature-policy-for-sandbox/http/tests/security/contentSecurityPolicy/directive-parsing-03.html [ Skip ] crbug.com/724027 virtual/feature-policy-for-sandbox/http/tests/security/contentSecurityPolicy/source-list-parsing-04.html [ Skip ] @@ -4574,7 +4448,6 @@ crbug.com/715718 external/wpt/media-source/mediasource-remove.html [ Failure Pass ] crbug.com/715718 [ Win ] virtual/outofblink-cors/external/wpt/xhr/FormData-append.html [ Failure Pass ] -crbug.com/715718 [ Win ] virtual/outofblink-cors-ns/external/wpt/xhr/FormData-append.html [ Failure Pass ] crbug.com/715718 [ Win ] external/wpt/css/css-flexbox/align-items-004.htm [ Failure Pass ] crbug.com/715718 [ Win ] external/wpt/css/css-flexbox/flex-minimum-width-flex-items-001.xht [ Failure Pass ] crbug.com/715718 [ Win ] external/wpt/css/css-flexbox/flex-minimum-width-flex-items-003.xht [ Failure Pass ] @@ -4650,7 +4523,6 @@ # Sheriff failures 2017-07-03 crbug.com/708994 http/tests/security/cross-frame-mouse-source-capabilities.html [ Timeout Pass ] crbug.com/708994 virtual/outofblink-cors/http/tests/security/cross-frame-mouse-source-capabilities.html [ Timeout Pass ] -crbug.com/708994 virtual/outofblink-cors-ns/http/tests/security/cross-frame-mouse-source-capabilities.html [ Timeout Pass ] crbug.com/708994 virtual/feature-policy-for-sandbox/http/tests/security/cross-frame-mouse-source-capabilities.html [ Timeout Pass ] crbug.com/745887 [ Mac ] fast/frames/sandboxed-iframe-plugins.html [ Failure Pass ] @@ -4689,9 +4561,6 @@ crbug.com/686118 virtual/outofblink-cors/http/tests/security/contentSecurityPolicy/register-bypassing-scheme.html [ Pass Crash ] crbug.com/686118 virtual/outofblink-cors/http/tests/security/contentSecurityPolicy/register-bypassing-scheme-partial.html [ Pass Crash ] crbug.com/686118 virtual/outofblink-cors/http/tests/security/contentSecurityPolicy/register-bypassing-scheme-script.https.html [ Pass Crash ] -crbug.com/686118 virtual/outofblink-cors-ns/http/tests/security/contentSecurityPolicy/register-bypassing-scheme.html [ Pass Crash ] -crbug.com/686118 virtual/outofblink-cors-ns/http/tests/security/contentSecurityPolicy/register-bypassing-scheme-partial.html [ Pass Crash ] -crbug.com/686118 virtual/outofblink-cors-ns/http/tests/security/contentSecurityPolicy/register-bypassing-scheme-script.https.html [ Pass Crash ] crbug.com/686118 virtual/feature-policy-for-sandbox/http/tests/security/contentSecurityPolicy/register-bypassing-scheme.html [ Pass Crash ] crbug.com/686118 virtual/feature-policy-for-sandbox/http/tests/security/contentSecurityPolicy/register-bypassing-scheme-partial.html [ Pass Crash ] crbug.com/686118 virtual/feature-policy-for-sandbox/http/tests/security/contentSecurityPolicy/register-bypassing-scheme-script.https.html [ Pass Crash ] @@ -4843,13 +4712,11 @@ # Fails reliably on last 3 builds of this bot. crbug.com/767091 [ Mac10.12 ] http/tests/security/link-crossorigin-preload-use-credentials.html [ Failure ] crbug.com/767091 [ Mac10.12 ] virtual/outofblink-cors/http/tests/security/link-crossorigin-preload-use-credentials.html [ Failure ] -crbug.com/767091 [ Mac10.12 ] virtual/outofblink-cors-ns/http/tests/security/link-crossorigin-preload-use-credentials.html [ Failure ] crbug.com/767091 [ Mac10.12 ] virtual/feature-policy-for-sandbox/http/tests/security/link-crossorigin-preload-use-credentials.html [ Failure ] # Sheriff failures 2017-09-21 crbug.com/767469 http/tests/navigation/start-load-during-provisional-loader-detach.html [ Pass Failure ] crbug.com/767469 virtual/outofblink-cors/http/tests/navigation/start-load-during-provisional-loader-detach.html [ Pass Failure ] -crbug.com/767469 virtual/outofblink-cors-ns/http/tests/navigation/start-load-during-provisional-loader-detach.html [ Pass Failure ] crbug.com/767469 virtual/feature-policy-for-sandbox/http/tests/navigation/start-load-during-provisional-loader-detach.html [ Pass Failure ] crbug.com/767469 virtual/stable/http/tests/navigation/start-load-during-provisional-loader-detach.html [ Pass Failure ] @@ -5268,7 +5135,6 @@ crbug.com/854538 [ Win7 ] http/tests/security/contentSecurityPolicy/1.1/form-action-src-default-ignored-with-redirect.html [ Skip ] crbug.com/854538 [ Win7 ] virtual/outofblink-cors/http/tests/security/contentSecurityPolicy/1.1/form-action-src-default-ignored-with-redirect.html [ Skip ] -crbug.com/854538 [ Win7 ] virtual/outofblink-cors-ns/http/tests/security/contentSecurityPolicy/1.1/form-action-src-default-ignored-with-redirect.html [ Skip ] crbug.com/854538 [ Win7 ] virtual/feature-policy-for-sandbox/http/tests/security/contentSecurityPolicy/1.1/form-action-src-default-ignored-with-redirect.html [ Skip ] # Sheriff 2018-06-21 @@ -5277,7 +5143,6 @@ # Sheriff 2018-06-25 crbug.com/855816 [ Win ] virtual/outofblink-cors/http/tests/navigation/rename-subframe-goback.html [ Pass Timeout ] -crbug.com/855816 [ Win ] virtual/outofblink-cors-ns/http/tests/navigation/rename-subframe-goback.html [ Pass Timeout ] crbug.com/855816 [ Win ] virtual/stable/http/tests/navigation/rename-subframe-goback.html [ Pass Timeout ] crbug.com/855816 [ Win ] virtual/feature-policy-for-sandbox/http/tests/navigation/rename-subframe-goback.html [ Pass Timeout ] @@ -5428,7 +5293,6 @@ crbug.com/824539 [ Android ] http/tests/plugins/navigator-plugins-in-cross-origin-frame.html [ Failure ] crbug.com/824539 [ Android ] http/tests/security/local-JavaScript-from-remote.html [ Crash Failure ] crbug.com/824539 [ Android ] virtual/outofblink-cors/http/tests/security/local-JavaScript-from-remote.html [ Crash Failure ] -crbug.com/824539 [ Android ] virtual/outofblink-cors-ns/http/tests/security/local-JavaScript-from-remote.html [ Crash Failure ] crbug.com/824539 [ Android ] images/imagemap-focus-ring-outline-color-not-inherited-from-map.html [ Failure ] crbug.com/824539 [ Android ] images/size-failure.html [ Failure ] crbug.com/824539 [ Android ] paint/invalidation/shadow-multiple.html [ Failure ] @@ -5480,12 +5344,8 @@ crbug.com/873873 external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Timeout Pass ] crbug.com/873873 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Timeout Pass ] -crbug.com/873873 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Timeout Pass ] -crbug.com/873873 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Timeout Pass ] crbug.com/873873 external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Timeout Pass ] crbug.com/873873 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Timeout Pass ] -crbug.com/873873 virtual/outofblink-cors-ns/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Timeout Pass ] -crbug.com/873873 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Timeout Pass ] crbug.com/875884 [ Linux ] lifecycle/background-change-lifecycle-count.html [ Pass Failure ] crbug.com/875884 [ Win ] lifecycle/background-change-lifecycle-count.html [ Pass Failure ] @@ -5560,7 +5420,6 @@ crbug.com/894077 virtual/android/fullscreen/video-fixed-background.html [ Pass Failure ] # Failures on 32-bit Android when using GPU instead of software rendering -crbug.com/875172 [ Android ] external/wpt/web-animations/interfaces/Animatable/animate.html [ Pass Failure ] crbug.com/875172 [ Android ] http/tests/worklet/webexposed/global-interface-listing-paint-worklet.html [ Pass Failure ] # Does not set correct realm as scope in current implementation @@ -5576,7 +5435,6 @@ crbug.com/882689 http/tests/security/cookies/third-party-cookie-blocking-worker.html [ Pass Failure ] crbug.com/882689 virtual/outofblink-cors/http/tests/security/cookies/third-party-cookie-blocking-worker.html [ Pass Failure ] -crbug.com/882689 virtual/outofblink-cors-ns/http/tests/security/cookies/third-party-cookie-blocking-worker.html [ Pass Failure ] crbug.com/882689 virtual/feature-policy-for-sandbox/http/tests/security/cookies/third-party-cookie-blocking-worker.html [ Pass Failure ] # The following tests need LazyFrameLoading. @@ -5591,11 +5449,6 @@ crbug.com/914441 external/wpt/user-timing/mark-measure-feature-detection.html [ Failure ] -# The below is only supported with network service. -crbug.com/896924 http/tests/inspector-protocol/network/interception-multiclient.js [ Timeout Failure ] -crbug.com/899303 http/tests/inspector-protocol/fetch/fetch-basic.js [ Timeout ] -crbug.com/899303 http/tests/inspector-protocol/fetch/fetch-renderer.js [ Timeout ] - # New rebaselines because LayoutNG is more correct crbug.com/902591 [ Linux ] svg/zoom/page/zoom-svg-float-border-padding.xml [ Failure ] @@ -5642,7 +5495,7 @@ crbug.com/895777 external/wpt/infrastructure/assumptions/blank.html [ Failure Crash ] #Sheriff 2018-10-23 -crbug.com/898214 [ Mac10.11 ] virtual/outofblink-cors-ns/external/wpt/fetch/api/credentials/authentication-basic.any.html [ Failure ] +crbug.com/898214 [ Mac10.11 ] virtual/outofblink-cors/external/wpt/fetch/api/credentials/authentication-basic.any.html [ Failure ] crbug.com/898050 [ Mac ] fast/workers/taskqueue/basic.html [ Pass Timeout ] crbug.com/898050 [ Win ] fast/workers/taskqueue/basic.html [ Pass Timeout ] crbug.com/898378 [ Mac10.13 ] fast/scroll-behavior/smooth-scroll/keyboard-scroll.html [ Timeout ] @@ -5688,7 +5541,6 @@ #Sheriff 2018-11-02 crbug.com/901314 inspector-protocol/css/css-coverage-new-stylesheet.js [ Failure Pass ] crbug.com/901489 [ Mac10.13 ] http/tests/security/document-domain-canonicalizes.html [ Crash Pass ] -crbug.com/901489 [ Mac10.13 ] virtual/outofblink-cors-ns/http/tests/security/document-domain-canonicalizes.html [ Crash Pass ] crbug.com/901489 [ Mac10.13 ] virtual/outofblink-cors/http/tests/security/document-domain-canonicalizes.html [ Crash Pass ] crbug.com/901489 [ Mac10.13 ] virtual/feature-policy-for-sandbox/http/tests/security/document-domain-canonicalizes.html [ Crash Pass ] @@ -5763,11 +5615,6 @@ crbug.com/919272 external/wpt/resource-timing/resource-timing.html [ Skip ] -# Failing when NetworkService is not enabled. -crbug.com/917284 external/wpt/service-workers/service-worker/claim-fetch-with-appcache.https.html [ Failure ] -crbug.com/917284 virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/claim-fetch-with-appcache.https.html [ Failure ] -crbug.com/917284 virtual/outofblink-cors/external/wpt/service-workers/service-worker/claim-fetch-with-appcache.https.html [ Failure ] - ### virtual/streams-native/external/wpt/streams/piping/ crbug.com/902633 virtual/streams-native/external/wpt/streams/piping/abort.any.html [ Timeout ] crbug.com/902633 virtual/streams-native/external/wpt/streams/piping/abort.any.serviceworker.html [ Timeout ] @@ -5832,7 +5679,6 @@ crbug.com/921583 http/tests/preload/meta-viewport-link-headers.html [ Failure Pass ] crbug.com/921151 [ Linux ] http/tests/security/mixedContent/insecure-iframe-with-hsts.https.html [ Failure Pass ] crbug.com/921151 [ Linux ] virtual/outofblink-cors/http/tests/security/mixedContent/insecure-iframe-with-hsts.https.html [ Failure Pass ] -crbug.com/921151 [ Linux ] virtual/outofblink-cors-ns/http/tests/security/mixedContent/insecure-iframe-with-hsts.https.html [ Failure Pass ] crbug.com/921151 [ Linux ] virtual/feature-policy-for-sandbox/http/tests/security/mixedContent/insecure-iframe-with-hsts.https.html [ Failure Pass ] # Writable Files tests depend on mojo interfaces that are only exposed behind a flag. @@ -5905,7 +5751,6 @@ crbug.com/922951 virtual/gpu/fast/canvas/OffscreenCanvas-placeholder-createImageBitmap.html [ Skip ] crbug.com/922951 virtual/gpu/fast/canvas/color-space/canvas-drawImage-offscreenCanvas.html [ Skip ] crbug.com/922951 virtual/mouseevent_fractional/fast/events/synthetic-events/tap-on-scaled-screen.html [ Skip ] -crbug.com/922951 virtual/outofblink-cors-ns/http/tests/security/offscreencanvas-placeholder-read-blocked-no-crossorigin.html [ Skip ] crbug.com/922951 virtual/outofblink-cors/http/tests/security/offscreencanvas-placeholder-read-blocked-no-crossorigin.html [ Skip ] crbug.com/922951 virtual/feature-policy-for-sandbox/http/tests/security/offscreencanvas-placeholder-read-blocked-no-crossorigin.html [ Skip ] crbug.com/922951 virtual/prefer_compositing_to_lcd_text/scrollbars/resize-scales-with-dpi-150.html [ Skip ] @@ -6009,6 +5854,21 @@ # Sheriff 2019-02-19 crbug.com/933346 [ Debug ] external/wpt/orientation-sensor/RelativeOrientationSensor.https.html [ Failure Timeout Pass ] +# These started failing when network service was enabled by default. +crbug.com/933880 external/wpt/FileAPI/url/cross-global-revoke.sub.html [ Failure ] +crbug.com/933880 external/wpt/FileAPI/url/url-with-fetch.any.html [ Failure ] +crbug.com/933880 external/wpt/FileAPI/url/url-with-xhr.any.html [ Failure ] +crbug.com/933880 external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ] +crbug.com/933880 http/tests/inspector-protocol/network/interception-take-stream.js [ Failure ] +crbug.com/933880 http/tests/inspector-protocol/network/xhr-interception-auth-fail.js [ Failure ] +# This passes in content_shell but not in chrome with network service disabled, +# because content_shell does not add the about: handler. With network service +# enabled this fails in both content_shell and chrome. +crbug.com/933880 http/tests/misc/redirect-to-about-blank.html [ Failure Timeout ] +crbug.com/933880 [ Win ] external/wpt/kv-storage/key-types.https.html [ Timeout ] +crbug.com/849284 [ Win ] http/tests/devtools/editor/text-editor-ctrl-d-2.js [ Failure ] +crbug.com/849284 [ Win ] virtual/outofblink-cors/http/tests/fetch/serviceworker-proxied/thorough/redirect.html [ Timeout ] + # Sheriff 2019-02-21 crbug.com/934278 [ Mac ] virtual/video-surface-layer/media/video-object-fit.html [ Failure Pass ] @@ -6016,16 +5876,18 @@ crbug.com/934636 http/tests/security/cross-origin-indexeddb-allowed.html [ Crash Pass ] crbug.com/934636 virtual/feature-policy-for-sandbox/http/tests/security/cross-origin-indexeddb-allowed.html [ Crash Pass ] crbug.com/934636 virtual/outofblink-cors/http/tests/security/cross-origin-indexeddb-allowed.html [ Crash Pass ] -crbug.com/934636 virtual/outofblink-cors-ns/http/tests/security/cross-origin-indexeddb-allowed.html [ Crash Pass ] crbug.com/934768 [ Mac ] http/tests/devtools/tracing/worker-events.js [ Failure Pass ] crbug.com/934768 [ Mac ] virtual/threaded/http/tests/devtools/tracing/worker-events.js [ Failure Pass ] crbug.com/934818 [ Mac Debug ] virtual/threaded/http/tests/devtools/tracing/decode-resize.js [ Failure Pass ] -crbug.com/934866 [ Mac ] virtual/outofblink-cors-ns/http/tests/security/cross-origin-worker-indexeddb-allowed.html [ Crash Pass ] crbug.com/935027 http/tests/devtools/animation/animation-transition-setTiming-crash.js [ Crash Pass ] +# Sheriff 2019-02-25 +crbug.com/935587 [ Mac ] virtual/video-surface-layer/media/stable/video-object-fit-stable.html [ Failure Pass ] +crbug.com/935595 virtual/video-surface-layer/media/autoplay-muted.html [ Timeout Pass ] +crbug.com/935638 fast/dom/rtl-scroll-to-leftmost-and-resize.html [ Timeout Pass ] + # Device Sensor Events are being restricted to secure browsing contexts, but the change is still gated on a runtime flag. crbug.com/932078 http/tests/security/powerfulFeatureRestrictions/device-orientation-future-behavior-on-insecure-origin.html [ Skip ] crbug.com/932078 virtual/secure-device-sensor-events/http/tests/security/powerfulFeatureRestrictions/device-orientation-on-insecure-origin.html [ Skip ] crbug.com/932078 virtual/feature-policy-for-sandbox/http/tests/security/powerfulFeatureRestrictions/device-orientation-future-behavior-on-insecure-origin.html [ Skip ] crbug.com/932078 virtual/outofblink-cors/http/tests/security/powerfulFeatureRestrictions/device-orientation-future-behavior-on-insecure-origin.html [ Skip ] -crbug.com/932078 virtual/outofblink-cors-ns/http/tests/security/powerfulFeatureRestrictions/device-orientation-future-behavior-on-insecure-origin.html [ Skip ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites index 48429b1..114e7264 100644 --- a/third_party/blink/web_tests/VirtualTestSuites +++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -487,51 +487,6 @@ "args": ["--enable-features=OutOfBlinkCors,ServiceWorkerServicification"] }, { - "prefix": "outofblink-cors-ns", - "base": "external/wpt/fetch", - "args": ["--enable-features=OutOfBlinkCors,NetworkService"] - }, - { - "prefix": "outofblink-cors-ns", - "base": "external/wpt/http", - "args": ["--enable-features=OutOfBlinkCors,NetworkService"] - }, - { - "prefix": "outofblink-cors-ns", - "base": "external/wpt/referrer-policy", - "args": ["--enable-features=OutOfBlinkCors,NetworkService"] - }, - { - "prefix": "outofblink-cors-ns", - "base": "external/wpt/service-workers", - "args": ["--enable-features=OutOfBlinkCors,NetworkService"] - }, - { - "prefix": "outofblink-cors-ns", - "base": "external/wpt/xhr", - "args": ["--enable-features=OutOfBlinkCors,NetworkService"] - }, - { - "prefix": "outofblink-cors-ns", - "base": "http/tests/fetch", - "args": ["--enable-features=OutOfBlinkCors,NetworkService"] - }, - { - "prefix": "outofblink-cors-ns", - "base": "http/tests/navigation", - "args": ["--enable-features=OutOfBlinkCors,NetworkService"] - }, - { - "prefix": "outofblink-cors-ns", - "base": "http/tests/security", - "args": ["--enable-features=OutOfBlinkCors,NetworkService"] - }, - { - "prefix": "outofblink-cors-ns", - "base": "http/tests/xmlhttprequest", - "args": ["--enable-features=OutOfBlinkCors,NetworkService"] - }, - { "prefix": "presentation", "base": "receiver", "args": ["--force-presentation-receiver-for-testing"] @@ -633,64 +588,54 @@ "args": ["--enable-features=NetworkService"] }, { - "prefix": "disabled-service-worker-servicification", - "base": "http/tests/serviceworker", - "args": ["--disable-features=ServiceWorkerServicification,NetworkService"] - }, - { - "prefix": "disabled-service-worker-servicification", - "base": "external/wpt/service-workers/service-worker", - "args": ["--disable-features=ServiceWorkerServicification,NetworkService"] - }, - { "prefix": "omt-worker-fetch", "base": "external/wpt/mixed-content/classic-data-worker-fetch", - "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch,NetworkService"] + "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch"] }, { "prefix": "omt-worker-fetch", "base": "external/wpt/mixed-content/module-data-worker-import", - "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch,NetworkService"] + "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch"] }, { "prefix": "omt-worker-fetch", "base": "external/wpt/mixed-content/module-worker-top-level", - "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch,NetworkService"] + "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch"] }, { "prefix": "omt-worker-fetch", "base": "external/wpt/mixed-content/worker-request", - "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch,NetworkService"] + "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch"] }, { "prefix": "omt-worker-fetch", "base": "external/wpt/referrer-policy", - "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch,NetworkService"] + "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch"] }, { "prefix": "omt-worker-fetch", "base": "external/wpt/resource-timing", - "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch,NetworkService"] + "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch"] }, { "prefix": "omt-worker-fetch", "base": "external/wpt/upgrade-insecure-requests", - "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch,NetworkService"] + "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch"] }, { "prefix": "omt-worker-fetch", "base": "external/wpt/workers", - "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch,NetworkService"] + "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch"] }, { "prefix": "omt-worker-fetch", "base": "fast/workers", - "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch,NetworkService"] + "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch"] }, { "prefix": "omt-worker-fetch", "base": "http/tests/workers", - "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch,NetworkService"] + "args": ["--enable-features=OffMainThreadDedicatedWorkerScriptFetch,OffMainThreadSharedWorkerScriptFetch"] }, { "prefix": "webrtc-wpt-plan-b",
diff --git a/third_party/blink/web_tests/accessibility/aria-owns-dynamic-changes.html b/third_party/blink/web_tests/accessibility/aria-owns-dynamic-changes.html index 2e64b41b..833e9a0 100644 --- a/third_party/blink/web_tests/accessibility/aria-owns-dynamic-changes.html +++ b/third_party/blink/web_tests/accessibility/aria-owns-dynamic-changes.html
@@ -34,6 +34,15 @@ futureParent.setAttribute("aria-owns", "future_child"); assert_equals(axFutureParent.childrenCount, 1); + + child.style.visibility = 'hidden'; + assert_equals(axFutureParent.childrenCount, 0); + + child.style.visibility = 'visible'; + assert_equals(axFutureParent.childrenCount, 1); + + child.remove(); + assert_equals(axFutureParent.childrenCount, 0); }, "Aria-owns is dynamically recomputed."); </script>
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json index 2bd2063..3653e633 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json
@@ -157202,11 +157202,6 @@ {} ] ], - "custom-elements/HTMLElement-attachInternals-expected.txt": [ - [ - {} - ] - ], "custom-elements/HTMLElement-constructor-expected.txt": [ [ {} @@ -189352,6 +189347,11 @@ {} ] ], + "web-animations/interfaces/Animation/style-change-events-expected.txt": [ + [ + {} + ] + ], "web-animations/interfaces/AnimationEffectTiming/getComputedTiming-expected.txt": [ [ {} @@ -189387,6 +189387,11 @@ {} ] ], + "web-animations/interfaces/KeyframeEffect/style-change-events-expected.txt": [ + [ + {} + ] + ], "web-animations/resources/easing-tests.js": [ [ {} @@ -285687,6 +285692,12 @@ {} ] ], + "web-animations/interfaces/Animation/style-change-events.html": [ + [ + "/web-animations/interfaces/Animation/style-change-events.html", + {} + ] + ], "web-animations/interfaces/AnimationEffect/getComputedTiming.html": [ [ "/web-animations/interfaces/AnimationEffect/getComputedTiming.html", @@ -285735,6 +285746,12 @@ {} ] ], + "web-animations/interfaces/DocumentTimeline/style-change-events.html": [ + [ + "/web-animations/interfaces/DocumentTimeline/style-change-events.html", + {} + ] + ], "web-animations/interfaces/KeyframeEffect/composite.html": [ [ "/web-animations/interfaces/KeyframeEffect/composite.html", @@ -285783,6 +285800,12 @@ {} ] ], + "web-animations/interfaces/KeyframeEffect/style-change-events.html": [ + [ + "/web-animations/interfaces/KeyframeEffect/style-change-events.html", + {} + ] + ], "web-animations/interfaces/KeyframeEffect/target.html": [ [ "/web-animations/interfaces/KeyframeEffect/target.html", @@ -288542,7 +288565,9 @@ "webrtc/RTCPeerConnection-transceivers.https.html": [ [ "/webrtc/RTCPeerConnection-transceivers.https.html", - {} + { + "timeout": "long" + } ] ], "webrtc/RTCPeerConnectionIceEvent-constructor.html": [ @@ -393464,10 +393489,6 @@ "32613c47e241078fae04ecdd7ee9e5b0236819fc", "testharness" ], - "custom-elements/HTMLElement-attachInternals-expected.txt": [ - "9101726756df003f5600183501f471ce24157c14", - "support" - ], "custom-elements/HTMLElement-attachInternals.html": [ "e537983059054eb6193434bfbeb700226e3c5fb7", "testharness" @@ -437909,7 +437930,7 @@ "support" ], "referrer-policy/README.md": [ - "c4694dc3728ba40c97612565886215b05d63965e", + "58eff1a0ca385896ae0b6adbf4c607748089c634", "support" ], "referrer-policy/css-integration/README.md": [ @@ -438053,7 +438074,7 @@ "support" ], "referrer-policy/generic/referrer-policy-test-case.js": [ - "2c5c8eb80cc6ea3ed79bd0004365324ce4f1baec", + "1345e71d31f7afb1a5e2109ef3739267e27740b6", "support" ], "referrer-policy/generic/sandboxed-iframe-with-opaque-origin.html": [ @@ -438061,7 +438082,7 @@ "testharness" ], "referrer-policy/generic/sanity-checker.js": [ - "e0714885ffcc9d13bf2acb8e60634a2dd62170dc", + "5c01c36f35821d7df2300670b200eb9e1d701307", "support" ], "referrer-policy/generic/subresource-test/area-navigate.html": [ @@ -438185,7 +438206,7 @@ "support" ], "referrer-policy/generic/template/test.js.template": [ - "4b01d4d113a8d3a2e8313dc822b8f8dcad21c5f5", + "900099436a8120417836a02ee82eb5a3bd698629", "support" ], "referrer-policy/generic/template/test.release.html.template": [ @@ -438213,7 +438234,7 @@ "support" ], "referrer-policy/generic/tools/generate.py": [ - "46314d445c15897147285a1ce9a826505014f9f5", + "592948696aec6ef45699aceec4ea7ea856b28b43", "support" ], "referrer-policy/generic/tools/regenerate": [ @@ -438221,7 +438242,7 @@ "support" ], "referrer-policy/generic/tools/spec_validator.py": [ - "b1749d2c39911eb90b96479042c4dc2a4ba1360e", + "70656db25d2ce4f09c3fbb8a90294cb7fa20ba97", "support" ], "referrer-policy/generic/unsupported-csp-referrer-directive.html": [ @@ -443069,7 +443090,7 @@ "testharness" ], "referrer-policy/spec.src.json": [ - "97fbad62043c081e4696b13ee6a48fb31efc9eef", + "5f0247b935b78c645f8afc6287d58722b50e3d80", "support" ], "referrer-policy/spec_json.js": [ @@ -457209,7 +457230,7 @@ "testharness" ], "web-animations/interfaces/Animatable/animate-expected.txt": [ - "6bf47632215067f751cf93b2c875a3ce0104c515", + "985f5c2e16713a4f0507f6c9e8389b9f7665afe1", "support" ], "web-animations/interfaces/Animatable/animate-no-browsing-context-expected.txt": [ @@ -457221,15 +457242,15 @@ "testharness" ], "web-animations/interfaces/Animatable/animate.html": [ - "cbec1b0c57a2e4ff7ca38f38e3c7253f5ba8f53d", + "b7c590e67a03d6ae81cbfeb1a80db0e0613f710d", "testharness" ], "web-animations/interfaces/Animatable/getAnimations-expected.txt": [ - "d5d1c3d709be1efb5de33e8acea6c1ec7f691fa5", + "55e1e2b4d63927fb837e9baf5e543d40e6ab1bc2", "support" ], "web-animations/interfaces/Animatable/getAnimations.html": [ - "430aa4c15ccadb26f1f90032fd5042b625807dd4", + "d834d04efe67be5be7916ca0afcf103f342f6dbc", "testharness" ], "web-animations/interfaces/Animation/cancel.html": [ @@ -457308,6 +457329,14 @@ "61f76955a398d6286ce08891145efd1f345f63d5", "testharness" ], + "web-animations/interfaces/Animation/style-change-events-expected.txt": [ + "3826b238056707431c6bafbe02c211dbebc09c04", + "support" + ], + "web-animations/interfaces/Animation/style-change-events.html": [ + "080458660ebaa8b343d5aa93528ebc23efa54e7c", + "testharness" + ], "web-animations/interfaces/AnimationEffect/getComputedTiming.html": [ "10bd193361e03210c6ac3a976919f0b189db0136", "testharness" @@ -457329,11 +457358,11 @@ "testharness" ], "web-animations/interfaces/Document/getAnimations-expected.txt": [ - "92d85dcd8bee1ace9c5105b10050a5096dea1abf", + "e91647a46980121b37ff7f587bc4b65f882cccdf", "support" ], "web-animations/interfaces/Document/getAnimations.html": [ - "6b8534bf035ff4d77f7ae3fca8e9c62fe0ede602", + "f5df980cc053e55c05b07992a44a87f7d02826ff", "testharness" ], "web-animations/interfaces/Document/timeline.html": [ @@ -457348,6 +457377,10 @@ "395d133f482a38a33ea5be061450f0f322be9fc9", "testharness" ], + "web-animations/interfaces/DocumentTimeline/style-change-events.html": [ + "c1607e6fb92943c580802025e4a4cc617a747144", + "testharness" + ], "web-animations/interfaces/KeyframeEffect/composite.html": [ "bcca2cad243abb3fe4d43dc2052e08af3e58499d", "testharness" @@ -457400,6 +457433,14 @@ "675a705891fa6c75c233179e59cc73cc516ff48c", "testharness" ], + "web-animations/interfaces/KeyframeEffect/style-change-events-expected.txt": [ + "34698382f90b13e73f48ca2031533c9c99a173d3", + "support" + ], + "web-animations/interfaces/KeyframeEffect/style-change-events.html": [ + "af53d2d5e141bf20a1f5e79aeaa5c87520f11e2d", + "testharness" + ], "web-animations/interfaces/KeyframeEffect/target.html": [ "b8fc05b81d4ad88f528afc1453eef30729ef897f", "testharness" @@ -459861,7 +459902,7 @@ "testharness" ], "webrtc/RTCPeerConnection-helper.js": [ - "1ff5f54015e6a65a47cd4a277818acb9c57318bc", + "0b25df26190c14a1e3c0a5a1e5cd7514b7eb69f8", "support" ], "webrtc/RTCPeerConnection-iceConnectionState-expected.txt": [ @@ -459909,11 +459950,11 @@ "testharness" ], "webrtc/RTCPeerConnection-remote-track-mute.https.html": [ - "095fe50e305f853cb3c76030c0f0cb3cd86e4fff", + "c4c6b4fd0410dd45e99d8ae313ede42ae7593e49", "testharness" ], "webrtc/RTCPeerConnection-removeTrack.https.html": [ - "a955db6895ad1727f1c13a3b8e1ee5f1e8c7c37c", + "ffb3fececc48ddff3869ea728b00b94c76380334", "testharness" ], "webrtc/RTCPeerConnection-setDescription-transceiver-expected.txt": [ @@ -459997,7 +460038,7 @@ "testharness" ], "webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html": [ - "7c565dd1c3baf8a379a5b89cb342e11413c3b032", + "4e9568f0bcdb4813d973197640aa7ea200598b56", "testharness" ], "webrtc/RTCPeerConnection-setRemoteDescription.html": [ @@ -460009,11 +460050,11 @@ "support" ], "webrtc/RTCPeerConnection-track-stats.https.html": [ - "e394e63e50d78b96dd8b6815700a0cc8408ce239", + "2d0ce302a01bcf15d3f49cb3728e2a45847ece2a", "testharness" ], "webrtc/RTCPeerConnection-transceivers.https.html": [ - "1f980ea389a77551a33750d33349110e3b02b72a", + "f56a170616cca25d2619158a2f3894aeee59b95a", "testharness" ], "webrtc/RTCPeerConnectionIceEvent-constructor-expected.txt": [ @@ -460125,7 +460166,7 @@ "testharness" ], "webrtc/RTCRtpSender-transport.https.html": [ - "fb8aaaf8ec3f85879c51ea9bbb0736b1558961b3", + "88984dcf3bd49901bc1197796a4527079db4a508", "testharness" ], "webrtc/RTCRtpTransceiver-direction.html": [ @@ -460149,7 +460190,7 @@ "testharness" ], "webrtc/RTCRtpTransceiver.https.html": [ - "c200271490eaee404101360768276d9563453c24", + "013fe6cf77192f829fbc09a4f1f1564f0e4131aa", "testharness" ], "webrtc/RTCSctpTransport-constructor-expected.txt": [
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-wrap-003.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-wrap-003.html index a76e444..b1a6619 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-wrap-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-wrap-003.html
@@ -10,7 +10,7 @@ <!-- This makes sure that we only see green if the flex items are sized correctly --> <div style="position: absolute; width: 100px; height: 100px; background: green;"></div> -<div style="display: flex; flex-direction: column; flex-wrap: wrap; width: 100px; height: 100px; line-height: 20x;"> +<div style="display: flex; flex-direction: column; flex-wrap: wrap; width: 100px; height: 100px; line-height: 20px;"> <div style="background-color: red; height: 100px;"> <!-- These zero-height divs give the flex item has a min-content width of 50px and a max-content width of 250px -->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-wrap-004.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-wrap-004.html new file mode 100644 index 0000000..679f62ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-wrap-004.html
@@ -0,0 +1,25 @@ +<!DOCTYPE html> +<link rel="author" title="Google LLC" href="http://www.google.com" /> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#cross-sizing" /> +<title>css-flexbox: Tests that we size items in a wrapping column flexbox as fit-content</title> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht" /> +<meta name="assert" content="The flexbox here should have one flex line, 100px by 100px. The flex items overflow but are transparent." /> + +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> + +<!-- This makes sure that we only see green if the flex items are sized correctly --> +<div style="position: absolute; width: 100px; height: 100px; background: green;"></div> + +<div style="display: flex; flex-direction: column; flex-wrap: wrap; width: 125px; height: 100px; line-height: 20px;"> + <!-- The margin-right means that the flex item should be only 100px wide, + because it will use the available width of 125px minus the 25px margin. --> + <div style="background-color: red; height: 100px; margin-right: 25px;"> + <!-- These zero-height divs give the flex item has a min-content width of + 50px and a max-content width of 250px --> + <div style="width: 50px; display: inline-block;"></div> + <div style="width: 50px; display: inline-block;"></div> + <div style="width: 50px; display: inline-block;"></div> + <div style="width: 50px; display: inline-block;"></div> + <div style="width: 50px; display: inline-block;"></div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-wrap-after-nowrap-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-wrap-after-nowrap-001-ref.html new file mode 100644 index 0000000..80b2260c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-wrap-after-nowrap-001-ref.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<style> +div { + width: 10ch; + border: 2px solid blue; + line-height: 1; +} +.ideo > div { + width: 1em; +} +</style> +<body> + <section> + <div>12345<br>67890</div> + <div>12345<br>67890</div> + <div>12345<br>67890</div> + <div>12345<br>67890</div> + + <div>12345<br>67890</div> + <div>12345<br>67890</div> + </section> + + <section class="ideo"> + <div>国<br>国</div> + <div>国<br>国</div> + <div>国<br>国</div> + <div>国<br>国</div> + </section> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-wrap-after-nowrap-001.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-wrap-after-nowrap-001.html new file mode 100644 index 0000000..a484f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-wrap-after-nowrap-001.html
@@ -0,0 +1,41 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Break opportunities after nowrap</title> +<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="match" href="reference/white-space-wrap-after-nowrap-001-ref.html"> +<meta name="assert" content="This test ensures that break opportunities after nowrap can break lines."> +<style> +div { + width: 10ch; + border: 2px solid blue; + line-height: 1; +} +.ideo > div { + width: 1em; +} +.normal { + white-space: normal; +} +.nowrap { + white-space: nowrap; +} +</style> +<body> + <section> + <div><span class="nowrap">12345</span> 67890</div> + <div><span class="nowrap">12345</span><span class="normal"> 67890</span></div> + <div><span class="nowrap">12345<span class="normal"> 67890</span></span></div> + <div class="nowrap">12345<span class="normal"> 67890</span></div> + + <div class="nowrap"><span class="normal"><span class="nowrap">12345</span> </span>67890</div> + <div class="nowrap"><span class="normal"><span class="nowrap">12345 </span> </span>67890</div> + </section> + + <section class="ideo"> + <div><span class="nowrap">国</span>国</div> + <div><span class="nowrap">国</span><span class="normal">国</span></div> + <div><span class="nowrap">国<span class="normal">国</span></span></div> + <div class="nowrap">国<span class="normal">国</span></div> + </section> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt index 6bf47632..985f5c2e 100644 --- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -Found 140 tests; 132 PASS, 8 FAIL, 0 TIMEOUT, 0 NOTRUN. +Found 141 tests; 133 PASS, 8 FAIL, 0 TIMEOUT, 0 NOTRUN. PASS Element.animate() creates an Animation object PASS Element.animate() creates an Animation object in the relevant realm of the target element PASS Element.animate() creates an Animation object with a KeyframeEffect @@ -138,6 +138,7 @@ PASS Element.animate() correctly sets the Animation's timeline PASS Element.animate() correctly sets the Animation's timeline when triggered on an element in a different document FAIL Element.animate() calls play on the Animation assert_equals: expected "running" but got "pending" +PASS Element.animate() does NOT trigger a style change event PASS CSSPseudoElement.animate() creates an Animation object PASS CSSPseudoElement.animate() creates an Animation object targeting to the correct CSSPseudoElement object Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animatable/animate.html b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animatable/animate.html index cbec1b0c5..b7c590e 100644 --- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animatable/animate.html +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animatable/animate.html
@@ -202,6 +202,39 @@ assert_equals(anim.playState, 'running'); }, 'Element.animate() calls play on the Animation'); +promise_test(async t => { + const div = createDiv(t); + + let gotTransition = false; + div.addEventListener('transitionrun', () => { + gotTransition = true; + }); + + // Setup transition start point. + div.style.transition = 'opacity 100s'; + getComputedStyle(div).opacity; + + // Update specified style but don't flush style. + div.style.opacity = '0.5'; + + // Trigger a new animation at the same time. + const anim = div.animate({ opacity: [0, 1] }, 100 * MS_PER_SEC); + + // If Element.animate() produces a style change event it will have triggered + // a transition. + // + // If it does NOT produce a style change event, the animation will override + // the before-change style and after-change style such that a transition is + // never triggered. + + // Wait for the animation to start and then for one more animation + // frame to give the transitionrun event a chance to be dispatched. + await anim.ready; + await waitForAnimationFrames(1); + + assert_false(gotTransition, 'A transition should NOT have been triggered'); +}, 'Element.animate() does NOT trigger a style change event'); + // Tests on CSSPseudoElement test(t => {
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animatable/getAnimations-expected.txt b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animatable/getAnimations-expected.txt index d5d1c3d7..55e1e2b 100644 --- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animatable/getAnimations-expected.txt +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animatable/getAnimations-expected.txt
@@ -15,5 +15,6 @@ PASS Returns animations based on dynamic changes to individual animations' end delay PASS Returns animations based on dynamic changes to individual animations' iteration count PASS Returns animations based on dynamic changes to individual animations' current time +PASS Triggers a style change event Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animatable/getAnimations.html b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animatable/getAnimations.html index 430aa4c1..d834d04e 100644 --- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animatable/getAnimations.html +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animatable/getAnimations.html
@@ -197,5 +197,33 @@ }, 'Returns animations based on dynamic changes to individual' + ' animations\' current time'); +promise_test(async t => { + const div = createDiv(t); + const watcher = EventWatcher(t, div, 'transitionrun'); + + // Create a covering animation to prevent transitions from firing after + // calling getAnimations(). + const coveringAnimation = new Animation( + new KeyframeEffect(div, { opacity: [0, 1] }, 100 * MS_PER_SEC) + ); + + // Setup transition start point. + div.style.transition = 'opacity 100s'; + getComputedStyle(div).opacity; + + // Update specified style but don't flush style. + div.style.opacity = '0.5'; + + // Fetch animations + div.getAnimations(); + + // Play the covering animation to ensure that only the call to + // getAnimations() has a chance to trigger transitions. + coveringAnimation.play(); + + // If getAnimations() flushed style, we should get a transitionrun event. + await watcher.wait_for('transitionrun'); +}, 'Triggers a style change event'); + </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/style-change-events-expected.txt b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/style-change-events-expected.txt new file mode 100644 index 0000000..3826b238 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/style-change-events-expected.txt
@@ -0,0 +1,21 @@ +This is a testharness.js-based test. +FAIL All property keys are recognized assert_in_array: Test property 'pending' should be one of the properties on Animation value "pending" not in array ["startTime", "currentTime", "playbackRate", "playState", "id", "onfinish", "oncancel", "finish", "play", "pause", "reverse", "cancel", "finished", "ready", "timeline", "effect", "Animation constructor"] +PASS Animation.startTime does NOT trigger a style change event +PASS Animation.currentTime does NOT trigger a style change event +PASS Animation.playbackRate does NOT trigger a style change event +PASS Animation.playState does NOT trigger a style change event +PASS Animation.id does NOT trigger a style change event +PASS Animation.onfinish does NOT trigger a style change event +PASS Animation.oncancel does NOT trigger a style change event +PASS Animation.finish does NOT trigger a style change event +PASS Animation.play does NOT trigger a style change event +PASS Animation.pause does NOT trigger a style change event +PASS Animation.reverse does NOT trigger a style change event +PASS Animation.cancel does NOT trigger a style change event +PASS Animation.finished does NOT trigger a style change event +PASS Animation.ready does NOT trigger a style change event +FAIL Animation.timeline does NOT trigger a style change event promise_test: Unhandled rejection with value: object "TypeError: Cannot assign to read only property 'timeline' of object '#<Animation>'" +PASS Animation.effect does NOT trigger a style change event +PASS Animation.Animation constructor does NOT trigger a style change event +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/style-change-events.html b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/style-change-events.html new file mode 100644 index 0000000..08045866 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/style-change-events.html
@@ -0,0 +1,307 @@ +<!doctype html> +<meta charset=utf-8> +<title>Animation interface: style change events</title> +<link rel="help" + href="https://drafts.csswg.org/web-animations-1/#model-liveness"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../testcommon.js"></script> +<body> +<div id="log"></div> +<script> +'use strict'; + +// Test that each property defined in the Animation interface does not produce +// style change events. +// +// There are two types of tests: +// +// PlayAnimationTest +// +// For properties that are able to cause the Animation to start affecting +// the target CSS property. +// +// This function takes either: +// +// (a) A function that simply "plays" that passed-in Animation (i.e. makes +// it start affecting the target CSS property. +// +// (b) An object with the following format: +// +// { +// setup: elem => { /* return Animation */ } +// test: animation => { /* play |animation| */ } +// } +// +// If the latter form is used, the setup function should return an Animation +// that does NOT (yet) have an in-effect AnimationEffect that affects the +// 'opacity' property. Otherwise, the transition we use to detect if a style +// change event has occurred will never have a chance to be triggered (since +// the animated style will clobber both before-change and after-change +// style). +// +// Examples of valid animations: +// +// - An animation that is idle, or finished but without a fill mode. +// - An animation with an effect that that does not affect opacity. +// +// UsePropertyTest +// +// For properties that cannot cause the Animation to start affecting the +// target CSS property. +// +// The shape of the parameter to the UsePropertyTest is identical to the +// PlayAnimationTest. The only difference is that the function (or 'test' +// function of the object format is used) does not need to play the +// animation, but simply needs to get/set the property under test. + +const PlayAnimationTest = testFuncOrObj => { + let test, setup; + + if (typeof testFuncOrObj === 'function') { + test = testFuncOrObj; + } else { + test = testFuncOrObj.test; + if (typeof testFuncOrObj.setup === 'function') { + setup = testFuncOrObj.setup; + } + } + + if (!setup) { + setup = elem => + new Animation( + new KeyframeEffect(elem, { opacity: [0, 1] }, 100 * MS_PER_SEC) + ); + } + + return { test, setup }; +}; + +const UsePropertyTest = testFuncOrObj => { + const { setup, test } = PlayAnimationTest(testFuncOrObj); + + let coveringAnimation; + return { + setup: elem => { + coveringAnimation = new Animation( + new KeyframeEffect(elem, { opacity: [0, 1] }, 100 * MS_PER_SEC) + ); + + return setup(elem); + }, + test: animation => { + test(animation); + coveringAnimation.play(); + }, + }; +}; + +const tests = { + id: UsePropertyTest(animation => (animation.id = 'yer')), + get effect() { + let effect; + return PlayAnimationTest({ + setup: elem => { + // Create a new effect and animation but don't associate them yet + effect = new KeyframeEffect( + elem, + { opacity: [0.5, 1] }, + 100 * MS_PER_SEC + ); + return elem.animate(null, 100 * MS_PER_SEC); + }, + test: animation => { + // Read the effect + animation.effect; + + // Assign the effect + animation.effect = effect; + }, + }); + }, + timeline: PlayAnimationTest({ + setup: elem => { + // Create a new animation with no timeline + const animation = new Animation( + new KeyframeEffect(elem, { opacity: [0.5, 1] }, 100 * MS_PER_SEC), + null + ); + // Set the hold time so that once we assign a timeline it will begin to + // play. + animation.currentTime = 0; + + return animation; + }, + test: animation => { + // Get the timeline + animation.timeline; + + // Play the animation by setting the timeline + animation.timeline = document.timeline; + }, + }), + startTime: PlayAnimationTest(animation => { + // Get the startTime + animation.startTime; + + // Play the animation by setting the startTime + animation.startTime = document.timeline.currentTime; + }), + currentTime: PlayAnimationTest(animation => { + // Get the currentTime + animation.currentTime; + + // Play the animation by setting the currentTime + animation.currentTime = 0; + }), + playbackRate: UsePropertyTest(animation => { + // Get and set the playbackRate + animation.playbackRate = animation.playbackRate * 1.1; + }), + playState: UsePropertyTest(animation => animation.playState), + pending: UsePropertyTest(animation => animation.pending), + ready: UsePropertyTest(animation => animation.ready), + finished: UsePropertyTest(animation => { + // Get the finished Promise + animation.finished; + }), + onfinish: UsePropertyTest(animation => { + // Get the onfinish member + animation.onfinish; + + // Set the onfinish menber + animation.onfinish = () => {}; + }), + oncancel: UsePropertyTest(animation => { + // Get the oncancel member + animation.oncancel; + + // Set the oncancel menber + animation.oncancel = () => {}; + }), + cancel: UsePropertyTest({ + // Animate _something_ just to make the test more interesting + setup: elem => elem.animate({ color: ['green', 'blue'] }, 100 * MS_PER_SEC), + test: animation => { + animation.cancel(); + }, + }), + finish: PlayAnimationTest({ + setup: elem => + new Animation( + new KeyframeEffect( + elem, + { opacity: [0.5, 1] }, + { + duration: 100 * MS_PER_SEC, + fill: 'both', + } + ) + ), + test: animation => { + animation.finish(); + }, + }), + play: PlayAnimationTest(animation => animation.play()), + pause: PlayAnimationTest(animation => { + // Pause animation -- this will cause the animation to transition from the + // 'idle' state to the 'paused' (but pending) state with hold time zero. + animation.pause(); + }), + updatePlaybackRate: UsePropertyTest(animation => { + animation.updatePlaybackRate(1.1); + }), + // We would like to use a PlayAnimationTest here but reverse() is async and + // doesn't start applying its result until the animation is ready. + reverse: UsePropertyTest({ + setup: elem => { + // Create a new animation and seek it to the end so that it no longer + // affects style (since it has no fill mode). + const animation = elem.animate({ opacity: [0.5, 1] }, 100 * MS_PER_SEC); + animation.finish(); + return animation; + }, + test: animation => { + animation.reverse(); + }, + }), + get ['Animation constructor']() { + let originalElem; + return UsePropertyTest({ + setup: elem => { + originalElem = elem; + // Return a dummy animation so the caller has something to wait on + return elem.animate(null); + }, + test: () => + new Animation( + new KeyframeEffect( + originalElem, + { opacity: [0.5, 1] }, + 100 * MS_PER_SEC + ) + ), + }); + }, +}; + +// Check that each enumerable property and the constructor follow the +// expected behavior with regards to triggering style change events. +const properties = [ + ...Object.keys(Animation.prototype), + 'Animation constructor', +]; + +test(() => { + for (const property of Object.keys(tests)) { + assert_in_array( + property, + properties, + `Test property '${property}' should be one of the properties on ` + + ' Animation' + ); + } +}, 'All property keys are recognized'); + +for (const key of properties) { + promise_test(async t => { + assert_own_property(tests, key, `Should have a test for '${key}' property`); + const { setup, test } = tests[key]; + + // Setup target element + const div = createDiv(t); + let gotTransition = false; + div.addEventListener('transitionrun', () => { + gotTransition = true; + }); + + // Setup animation + const animation = setup(div); + + // Setup transition start point + div.style.transition = 'opacity 100s'; + getComputedStyle(div).opacity; + + // Update specified style but don't flush + div.style.opacity = '0.5'; + + // Trigger the property + test(animation); + + // If the test function produced a style change event it will have triggered + // a transition. + + // Wait for the animation to start and then for at least one animation + // frame to give the transitionrun event a chance to be dispatched. + assert_true( + typeof animation.ready !== 'undefined', + 'Should have a valid animation to wait on' + ); + await animation.ready; + await waitForAnimationFrames(1); + + assert_false(gotTransition, 'A transition should NOT have been triggered'); + }, `Animation.${key} does NOT trigger a style change event`); +} +</script> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Document/getAnimations-expected.txt b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Document/getAnimations-expected.txt index 92d85dc..e91647a 100644 --- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Document/getAnimations-expected.txt +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Document/getAnimations-expected.txt
@@ -4,6 +4,7 @@ PASS Test the order of document.getAnimations with script generated animations PASS Test document.getAnimations for a disconnected node PASS Test document.getAnimations with null target -FAIL Test document.getAnimations for elements inside same-origin iframes assert_equals: expected 1 but got 0 +FAIL Test document.getAnimations for elements inside same-origin iframes assert_true: Not expecting event, but got load event expected true got false +PASS Triggers a style change event Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Document/getAnimations.html b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Document/getAnimations.html index 6b8534b..f5df980c 100644 --- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Document/getAnimations.html +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Document/getAnimations.html
@@ -64,26 +64,56 @@ 'elements in this document'); }, 'Test document.getAnimations with null target'); -async_test(t => { +promise_test(async t => { const iframe = document.createElement('iframe'); - iframe.addEventListener("load", t.step_func_done(function() { - const div = createDiv(t, iframe.contentDocument) - const effect = new KeyframeEffect(div, null, 100 * MS_PER_SEC); - const anim = new Animation(effect, document.timeline); - anim.play(); - - // The animation's timeline is from the main document, but the effect's - // target element is part of the iframe document and that is what matters - // for getAnimations. - assert_equals(document.getAnimations().length, 0); - assert_equals(iframe.contentDocument.getAnimations().length, 1); - anim.finish(); - })); + const eventWatcher = new EventWatcher(t, iframe, ['load']); document.body.appendChild(iframe); - t.add_cleanup(function() { document.body.removeChild(iframe); }); + t.add_cleanup(() => { document.body.removeChild(iframe); }); + + await eventWatcher.wait_for('load'); + + const div = createDiv(t, iframe.contentDocument) + const effect = new KeyframeEffect(div, null, 100 * MS_PER_SEC); + const anim = new Animation(effect, document.timeline); + anim.play(); + + // The animation's timeline is from the main document, but the effect's + // target element is part of the iframe document and that is what matters + // for getAnimations. + assert_equals(document.getAnimations().length, 0); + assert_equals(iframe.contentDocument.getAnimations().length, 1); + anim.finish(); }, 'Test document.getAnimations for elements inside same-origin iframes'); +promise_test(async t => { + const div = createDiv(t); + const watcher = EventWatcher(t, div, 'transitionrun'); + + // Create a covering animation to prevent transitions from firing after + // calling getAnimations(). + const coveringAnimation = new Animation( + new KeyframeEffect(div, { opacity: [0, 1] }, 100 * MS_PER_SEC) + ); + + // Setup transition start point. + div.style.transition = 'opacity 100s'; + getComputedStyle(div).opacity; + + // Update specified style but don't flush style. + div.style.opacity = '0.5'; + + // Fetch animations + document.getAnimations(); + + // Play the covering animation to ensure that only the call to + // getAnimations() has a chance to trigger transitions. + coveringAnimation.play(); + + // If getAnimations() flushed style, we should get a transitionrun event. + await watcher.wait_for('transitionrun'); +}, 'Triggers a style change event'); + </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/DocumentTimeline/style-change-events.html b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/DocumentTimeline/style-change-events.html new file mode 100644 index 0000000..c1607e6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/DocumentTimeline/style-change-events.html
@@ -0,0 +1,92 @@ +<!doctype html> +<meta charset=utf-8> +<title>DocumentTimeline interface: style change events</title> +<link rel="help" + href="https://drafts.csswg.org/web-animations-1/#model-liveness"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../testcommon.js"></script> +<body> +<div id="log"></div> +<script> +'use strict'; + +// NOTE: If more members are added to the DocumentTimeline interface it might be +// better to rewrite these test in the same style as: +// +// web-animations/interfaces/Animation/style-change-events.html +// web-animations/interfaces/KeyframeEffect/style-change-events.html + +promise_test(async t => { + const div = createDiv(t); + + let gotTransition = false; + div.addEventListener('transitionrun', () => { + gotTransition = true; + }); + + // Create a covering animation but don't play it yet. + const coveringAnimation = new Animation( + new KeyframeEffect(div, { opacity: [0, 1] }, 100 * MS_PER_SEC) + ); + + // Setup transition start point. + div.style.transition = 'opacity 100s'; + getComputedStyle(div).opacity; + + // Update specified style but don't flush style. + div.style.opacity = '0.5'; + + // Get the currentTime + document.timeline.currentTime; + + // Run the covering animation + coveringAnimation.play(); + + // If getting DocumentTimeline.currentTime produced a style change event it + // will trigger a transition. Otherwise, the covering animation will cause + // the before-change and after-change styles to be the same such that no + // transition is triggered on the next restyle. + + // Wait for a couple of animation frames to give the transitionrun event + // a chance to be dispatched. + await waitForAnimationFrames(2); + + assert_false(gotTransition, 'A transition should NOT have been triggered'); +}, 'DocumentTimeline.currentTime does NOT trigger a style change event'); + +promise_test(async t => { + const div = createDiv(t); + + let gotTransition = false; + div.addEventListener('transitionrun', () => { + gotTransition = true; + }); + + // Create a covering animation but don't play it yet. + const coveringAnimation = new Animation( + new KeyframeEffect(div, { opacity: [0, 1] }, 100 * MS_PER_SEC) + ); + + // Setup transition start point. + div.style.transition = 'opacity 100s'; + getComputedStyle(div).opacity; + + // Update specified style but don't flush style. + div.style.opacity = '0.5'; + + // Create a new DocumentTimeline + new DocumentTimeline(); + + // Run the covering animation + coveringAnimation.play(); + + // Wait for a couple of animation frames to give the transitionrun event + // a chance to be dispatched. + await waitForAnimationFrames(2); + + assert_false(gotTransition, 'A transition should NOT have been triggered'); +}, 'DocumentTimeline constructor does NOT trigger a style change event'); + +</script> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/KeyframeEffect/style-change-events-expected.txt b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/KeyframeEffect/style-change-events-expected.txt new file mode 100644 index 0000000..3469838 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/KeyframeEffect/style-change-events-expected.txt
@@ -0,0 +1,13 @@ +This is a testharness.js-based test. +FAIL All property keys are recognized assert_in_array: Test property 'iterationComposite' should be one of the properties on KeyframeEffect value "iterationComposite" not in array ["getTiming", "getComputedTiming", "updateTiming", "target", "composite", "getKeyframes", "setKeyframes", "KeyframeEffect constructor", "KeyframeEffect copy constructor"] +PASS KeyframeEffect.getTiming does NOT trigger a style change event +PASS KeyframeEffect.getComputedTiming does NOT trigger a style change event +PASS KeyframeEffect.updateTiming does NOT trigger a style change event +PASS KeyframeEffect.target does NOT trigger a style change event +PASS KeyframeEffect.composite does NOT trigger a style change event +PASS KeyframeEffect.getKeyframes does NOT trigger a style change event +PASS KeyframeEffect.setKeyframes does NOT trigger a style change event +PASS KeyframeEffect.KeyframeEffect constructor does NOT trigger a style change event +PASS KeyframeEffect.KeyframeEffect copy constructor does NOT trigger a style change event +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/KeyframeEffect/style-change-events.html b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/KeyframeEffect/style-change-events.html new file mode 100644 index 0000000..af53d2d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/KeyframeEffect/style-change-events.html
@@ -0,0 +1,233 @@ +<!doctype html> +<meta charset=utf-8> +<title>KeyframeEffect interface: style change events</title> +<link rel="help" + href="https://drafts.csswg.org/web-animations-1/#model-liveness"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../testcommon.js"></script> +<body> +<div id="log"></div> +<script> +'use strict'; + +// Test that each property defined in the KeyframeEffect interface does not +// produce style change events. +// +// There are two types of tests: +// +// MakeInEffectTest +// +// For properties that are able to cause the KeyframeEffect to start +// affecting the CSS 'opacity' property. +// +// This function takes either: +// +// (a) A function that makes the passed-in KeyframeEffect affect the +// 'opacity' property. +// +// (b) An object with the following format: +// +// { +// setup: elem => { /* return Animation */ } +// test: effect => { /* make |effect| affect 'opacity' */ } +// } +// +// If the latter form is used, the setup function should return an Animation +// whose KeyframeEffect does NOT (yet) affect the 'opacity' property (or is +// NOT yet in-effect). Otherwise, the transition we use to detect if a style +// change event has occurred will never have a chance to be triggered (since +// the animated style will clobber both before-change and after-change +// style). +// +// UsePropertyTest +// +// For properties that cannot cause the KeyframeEffect to start affecting the +// CSS 'opacity' property. +// +// The shape of the parameter to the UsePropertyTest is identical to the +// MakeInEffectTest. The only difference is that the function (or 'test' +// function of the object format is used) does not need to make the +// KeyframeEffect affect the CSS 'opacity' property, but simply needs to +// get/set the property under test. + +const MakeInEffectTest = testFuncOrObj => { + let test, setup; + + if (typeof testFuncOrObj === 'function') { + test = testFuncOrObj; + } else { + test = testFuncOrObj.test; + if (typeof testFuncOrObj.setup === 'function') { + setup = testFuncOrObj.setup; + } + } + + if (!setup) { + setup = elem => + elem.animate({ color: ['blue', 'green'] }, 100 * MS_PER_SEC); + } + + return { test, setup }; +}; + +const UsePropertyTest = testFuncOrObj => { + const { test, setup } = MakeInEffectTest(testFuncOrObj); + + let coveringAnimation; + return { + setup: elem => { + coveringAnimation = new Animation( + new KeyframeEffect(elem, { opacity: [0, 1] }, 100 * MS_PER_SEC) + ); + + return setup(elem); + }, + test: effect => { + test(effect); + coveringAnimation.play(); + }, + }; +}; + +const tests = { + getTiming: UsePropertyTest(effect => effect.getTiming()), + getComputedTiming: UsePropertyTest(effect => effect.getComputedTiming()), + updateTiming: MakeInEffectTest({ + // Initially put the effect in its before phase (with no fill mode)... + setup: elem => + elem.animate( + { opacity: [0.5, 1] }, + { + duration: 100 * MS_PER_SEC, + delay: 100 * MS_PER_SEC, + } + ), + // ... so that when the delay is removed, it begins to affect the opacity. + test: effect => { + effect.updateTiming({ delay: 0 }); + }, + }), + get target() { + let targetElem; + return MakeInEffectTest({ + setup: (elem, t) => { + targetElem = elem; + const targetB = createDiv(t); + return targetB.animate({ opacity: [0.5, 1] }, 100 * MS_PER_SEC); + }, + test: effect => { + effect.target = targetElem; + }, + }); + }, + iterationComposite: UsePropertyTest(effect => { + // Get iterationComposite + effect.iterationComposite; + + // Set iterationComposite + effect.iterationComposite = 'accumulate'; + }), + composite: UsePropertyTest(effect => { + // Get composite + effect.composite; + + // Set composite + effect.composite = 'add'; + }), + getKeyframes: UsePropertyTest(effect => effect.getKeyframes()), + setKeyframes: MakeInEffectTest(effect => + effect.setKeyframes({ opacity: [0.5, 1] }) + ), + get ['KeyframeEffect constructor']() { + let originalElem; + let animation; + return UsePropertyTest({ + setup: elem => { + originalElem = elem; + // Return a dummy animation so the caller has something to wait on + return elem.animate(null); + }, + test: () => + new KeyframeEffect( + originalElem, + { opacity: [0.5, 1] }, + 100 * MS_PER_SEC + ), + }); + }, + get ['KeyframeEffect copy constructor']() { + let effectToClone; + return UsePropertyTest({ + setup: elem => { + effectToClone = new KeyframeEffect( + elem, + { opacity: [0.5, 1] }, + 100 * MS_PER_SEC + ); + // Return a dummy animation so the caller has something to wait on + return elem.animate(null); + }, + test: () => new KeyframeEffect(effectToClone), + }); + }, +}; + +// Check that each enumerable property and the constructors follow the +// expected behavior with regards to triggering style change events. +const properties = [ + ...Object.keys(AnimationEffect.prototype), + ...Object.keys(KeyframeEffect.prototype), + 'KeyframeEffect constructor', + 'KeyframeEffect copy constructor', +]; + +test(() => { + for (const property of Object.keys(tests)) { + assert_in_array( + property, + properties, + `Test property '${property}' should be one of the properties on ` + + ' KeyframeEffect' + ); + } +}, 'All property keys are recognized'); + +for (const key of properties) { + promise_test(async t => { + assert_own_property(tests, key, `Should have a test for '${key}' property`); + const { setup, test } = tests[key]; + + // Setup target element + const div = createDiv(t); + let gotTransition = false; + div.addEventListener('transitionrun', () => { + gotTransition = true; + }); + + // Setup animation + const animation = setup(div, t); + + // Setup transition start point + div.style.transition = 'opacity 100s'; + getComputedStyle(div).opacity; + + // Update specified style but don't flush + div.style.opacity = '0.5'; + + // Trigger the property + test(animation.effect); + + // If the test function produced a style change event it will have triggered + // a transition. + + // Wait for the animation to start and then for at least one animation + // frame to give the transitionrun event a chance to be dispatched. + await animation.ready; + await waitForAnimationFrames(1); + + assert_false(gotTransition, 'A transition should NOT have been triggered'); + }, `KeyframeEffect.${key} does NOT trigger a style change event`); +} +</script> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-helper.js b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-helper.js index 1ff5f540..0b25df2 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-helper.js +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-helper.js
@@ -601,7 +601,7 @@ async function createTrackAndStreamWithCleanup(t, kind = 'audio') { let constraints = {}; constraints[kind] = true; - const stream = await navigator.mediaDevices.getUserMedia(constraints); + const stream = await getNoiseStream(constraints); const [track] = stream.getTracks(); t.add_cleanup(() => track.stop()); return [track, stream];
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-remote-track-mute.https.html b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-remote-track-mute.https.html index 095fe50..c4c6b4f 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-remote-track-mute.https.html +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-remote-track-mute.https.html
@@ -50,9 +50,13 @@ exchangeIceCandidates(pc1, pc2); const e = await exchangeOfferAndListenToOntrack(t, pc1, pc2); + // Need to wait for the initial unmute event before renegotiating, otherwise + // there will be no transition from unmuted->muted. + const muteWatcher = new EventWatcher(t, e.track, ['mute', 'unmute']); + const unmutePromise = muteWatcher.wait_for('unmute'); await exchangeAnswer(pc1, pc2); + await unmutePromise; - const muteWatcher = new EventWatcher(t, e.track, ['mute']); const mutePromise = muteWatcher.wait_for('mute'); localTransceiver.direction = 'inactive'; await exchangeOfferAnswer(pc1, pc2); @@ -88,8 +92,13 @@ exchangeIceCandidates(pc1, pc2); const e = await exchangeOfferAndListenToOntrack(t, pc1, pc2); + // Need to wait for the initial unmute event before closing, otherwise + // there will be no transition from unmuted->muted. + const muteWatcher = new EventWatcher(t, e.track, ['mute', 'unmute']); + const unmutePromise = muteWatcher.wait_for('unmute'); await exchangeAnswer(pc1, pc2); - const muteWatcher = new EventWatcher(t, e.track, ['mute']); + await unmutePromise; + const mutePromise = muteWatcher.wait_for('mute'); pc2.close(); await mutePromise;
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-removeTrack.https.html b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-removeTrack.https.html index a955db6..ffb3fec 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-removeTrack.https.html +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-removeTrack.https.html
@@ -61,6 +61,7 @@ promise_test(async t => { const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); const stream = await navigator.mediaDevices.getUserMedia({audio: true}); t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); const [track] = stream.getTracks(); @@ -92,6 +93,7 @@ */ promise_test(async t => { const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); const stream = await navigator.mediaDevices.getUserMedia({audio: true}); t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); const [track] = stream.getTracks(); @@ -99,6 +101,7 @@ const { sender } = transceiver; const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc2.close()); assert_throws('InvalidAccessError', () => pc2.removeTrack(sender)); }, 'addTransceiver - Calling removeTrack on different connection should throw InvalidAccessError'); @@ -112,6 +115,7 @@ const sender = pc.addTrack(track, stream); const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc2.close()); assert_throws('InvalidAccessError', () => pc2.removeTrack(sender)); }, 'addTrack - Calling removeTrack on different connection should throw InvalidAccessError') @@ -121,6 +125,7 @@ */ promise_test(async t => { const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); const stream = await navigator.mediaDevices.getUserMedia({audio: true}); t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); const [track] = stream.getTracks();
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html index 7c565dd..4e9568f 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html
@@ -142,6 +142,7 @@ if (!remoteStreams.includes(e.streams[0])) remoteStreams.push(e.streams[0]); }; + exchangeIceCandidates(caller, callee); await exchangeOfferAnswer(caller, callee); assert_equals(remoteStreams.length, 1, 'One remote stream created.'); assert_equals(remoteStreams[0].getTracks()[0].id, @@ -176,6 +177,7 @@ if (!remoteStreams.includes(e.streams[0])) remoteStreams.push(e.streams[0]); }; + exchangeIceCandidates(caller, callee); await exchangeOfferAnswer(caller, callee); assert_equals(remoteStreams.length, 1, 'One remote stream created.'); const onaddtrackPromise = @@ -247,6 +249,7 @@ t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop())); const sender = caller.addTrack(localStream.getTracks()[0], localStream); const ontrackPromise = addEventListenerPromise(t, callee, 'track'); + exchangeIceCandidates(caller, callee); await exchangeOfferAnswer(caller, callee); await ontrackPromise; assert_equals(callee.getReceivers().length, 1, 'One receiver created.'); @@ -269,6 +272,7 @@ assert_equals(e.streams.length, 1); return e.streams[0]; }); + exchangeIceCandidates(caller, callee); await exchangeOfferAnswer(caller, callee); const remoteStream = await ontrackPromise; const remoteTrack = remoteStream.getTracks()[0]; @@ -297,6 +301,7 @@ assert_equals(e.streams.length, 1); return e.streams[0]; }); + exchangeIceCandidates(caller, callee); await exchangeOfferAnswer(caller, callee); const remoteStream = await ontrackPromise; const remoteTrack = remoteStream.getTracks()[0]; @@ -320,13 +325,19 @@ await getNoiseStream({audio: true}); t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop())); const sender = caller.addTrack(localStream.getTracks()[0], localStream); - const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => { - assert_equals(e.streams.length, 1); - return e.streams[0]; + exchangeIceCandidates(caller, callee); + const e = await exchangeOfferAndListenToOntrack(t, caller, callee); + const remoteTrack = e.track; + + // Need to wait for unmute, otherwise there's no event for the transition + // back to muted. + const onunmutePromise = + addEventListenerPromise(t, remoteTrack, 'unmute', () => { + assert_false(remoteTrack.muted); }); - await exchangeOfferAnswer(caller, callee); - const remoteStream = await ontrackPromise; - const remoteTrack = remoteStream.getTracks()[0]; + await exchangeAnswer(caller, callee); + await onunmutePromise; + const onmutePromise = addEventListenerPromise(t, remoteTrack, 'mute', () => { assert_true(remoteTrack.muted); @@ -350,9 +361,19 @@ assert_equals(e.streams.length, 1); return e.streams[0]; }); - await exchangeOfferAnswer(caller, callee); - const remoteStream = await ontrackPromise; - const remoteTrack = remoteStream.getTracks()[0]; + exchangeIceCandidates(caller, callee); + const e = await exchangeOfferAndListenToOntrack(t, caller, callee); + const remoteTrack = e.track; + + // Need to wait for unmute, otherwise there's no event for the transition + // back to muted. + const onunmutePromise = + addEventListenerPromise(t, remoteTrack, 'unmute', () => { + assert_false(remoteTrack.muted); + }); + await exchangeAnswer(caller, callee); + await onunmutePromise; + const onmutePromise = addEventListenerPromise(t, remoteTrack, 'mute', () => { eventSequence += 'track.onmute;';
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-track-stats.https.html b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-track-stats.https.html index e394e63e..2d0ce30 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-track-stats.https.html +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-track-stats.https.html
@@ -25,6 +25,7 @@ let track; return getUserMediaTracksAndStreams(1) .then(t.step_func(([tracks, streams]) => { + t.add_cleanup(() => tracks.forEach(track => track.stop())); track = tracks[0]; pc.addTrack(track, streams[0]); return pc.getStats(); @@ -50,6 +51,7 @@ let stream; return getUserMediaTracksAndStreams(1) .then(t.step_func(([tracks, streams]) => { + t.add_cleanup(() => tracks.forEach(track => track.stop())); let track = tracks[0]; stream = streams[0]; pc.addTrack(track, stream); @@ -72,6 +74,7 @@ let track; return getUserMediaTracksAndStreams(1) .then(t.step_func(([tracks, streams]) => { + t.add_cleanup(() => tracks.forEach(track => track.stop())); track = tracks[0]; pc.addTrack(track, streams[0]); return pc.createOffer(); @@ -99,6 +102,7 @@ let stream; return getUserMediaTracksAndStreams(1) .then(t.step_func(([tracks, streams]) => { + t.add_cleanup(() => tracks.forEach(track => track.stop())); let track = tracks[0]; stream = streams[0]; pc.addTrack(track, stream); @@ -128,6 +132,7 @@ let stream; return getUserMediaTracksAndStreams(1) .then(t.step_func(([tracks, streams]) => { + t.add_cleanup(() => tracks.forEach(track => track.stop())); track = tracks[0]; stream = streams[0]; pc.addTrack(track, stream); @@ -162,6 +167,7 @@ let stream; return getUserMediaTracksAndStreams(1) .then(t.step_func(([tracks, streams]) => { + t.add_cleanup(() => tracks.forEach(track => track.stop())); track = tracks[0]; stream = streams[0]; stream.addTrack(track); @@ -199,6 +205,7 @@ let sendingTrack; return getUserMediaTracksAndStreams(1) .then(t.step_func(([tracks, streams]) => { + t.add_cleanup(() => tracks.forEach(track => track.stop())); sendingTrack = tracks[0]; caller.addTrack(sendingTrack, streams[0]); return doSignalingHandshake(caller, callee); @@ -233,6 +240,7 @@ }; return getUserMediaTracksAndStreams(1) .then(t.step_func(([tracks, streams]) => { + t.add_cleanup(() => tracks.forEach(track => track.stop())); caller.addTrack(tracks[0], streams[0]); return doSignalingHandshake(caller, callee); })) @@ -265,6 +273,7 @@ let sender; return getUserMediaTracksAndStreams(2) .then(t.step_func(([tracks, streams]) => { + t.add_cleanup(() => tracks.forEach(track => track.stop())); sendingTrack1 = tracks[0]; sendingTrack2 = tracks[1]; sender = caller.addTrack(sendingTrack1, streams[0]); @@ -294,6 +303,7 @@ let sender; return getUserMediaTracksAndStreams(2) .then(t.step_func(([tracks, streams]) => { + t.add_cleanup(() => tracks.forEach(track => track.stop())); sendingTrack1 = tracks[0]; sendingTrack2 = tracks[1]; sender = caller.addTrack(sendingTrack1, streams[0]); @@ -331,6 +341,7 @@ let sender; return getUserMediaTracksAndStreams(2) .then(t.step_func(([tracks, streams]) => { + t.add_cleanup(() => tracks.forEach(track => track.stop())); sendingTrack1 = tracks[0]; sendingTrack2 = tracks[1]; sender = caller.addTrack(sendingTrack1, streams[0]); @@ -367,6 +378,7 @@ let sender; return getUserMediaTracksAndStreams(2) .then(t.step_func(([tracks, streams]) => { + t.add_cleanup(() => tracks.forEach(track => track.stop())); sendingTrack1 = tracks[0]; sendingTrack2 = tracks[1]; sender = caller.addTrack(sendingTrack1, streams[0]); @@ -400,6 +412,7 @@ const callee = new RTCPeerConnection(); t.add_cleanup(() => callee.close()); let [tracks, streams] = await getUserMediaTracksAndStreams(2); + t.add_cleanup(() => tracks.forEach(track => track.stop())); let sender = caller.addTrack(tracks[0], streams[0]); callee.addTrack(tracks[1], streams[1]); exchangeIceCandidates(caller, callee); @@ -448,6 +461,7 @@ const callee = new RTCPeerConnection(); t.add_cleanup(() => callee.close()); let [tracks, streams] = await getUserMediaTracksAndStreams(2); + t.add_cleanup(() => tracks.forEach(track => track.stop())); let sender = caller.addTrack(tracks[0], streams[0]); callee.addTrack(tracks[1], streams[1]); exchangeIceCandidates(caller, callee); @@ -496,6 +510,7 @@ const callee = new RTCPeerConnection(); t.add_cleanup(() => callee.close()); let [tracks, streams] = await getUserMediaTracksAndStreams(2); + t.add_cleanup(() => tracks.forEach(track => track.stop())); let sender = caller.addTrack(tracks[0], streams[0]); callee.addTrack(tracks[1], streams[1]); exchangeIceCandidates(caller, callee); @@ -527,6 +542,7 @@ const callee = new RTCPeerConnection(); t.add_cleanup(() => callee.close()); let [tracks, streams] = await getUserMediaTracksAndStreams(2); + t.add_cleanup(() => tracks.forEach(track => track.stop())); let sender = caller.addTrack(tracks[0], streams[0]); callee.addTrack(tracks[1], streams[1]); exchangeIceCandidates(caller, callee); @@ -557,6 +573,7 @@ const pc = new RTCPeerConnection(); t.add_cleanup(() => pc.close()); let [tracks, streams] = await getUserMediaTracksAndStreams(1); + t.add_cleanup(() => tracks.forEach(track => track.stop())); await promise_rejects(t, 'InvalidAccessError', pc.getStats(tracks[0])); }, 'RTCPeerConnection.getStats(track) throws InvalidAccessError when there ' + 'are zero senders or receivers for the track'); @@ -565,6 +582,7 @@ const pc = new RTCPeerConnection(); t.add_cleanup(() => pc.close()); let [tracks, streams] = await getUserMediaTracksAndStreams(2); + t.add_cleanup(() => tracks.forEach(track => track.stop())); let sender1 = pc.addTrack(tracks[0], streams[0]); let sender2 = pc.addTrack(tracks[1], streams[1]); await sender2.replaceTrack(sender1.track);
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-transceivers.https.html b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-transceivers.https.html index 1f980ea..f56a170 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-transceivers.https.html +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-transceivers.https.html
@@ -1,4 +1,5 @@ <!doctype html> +<meta name="timeout" content="long"/> <meta charset=utf-8> <title>RTCPeerConnection-transceivers.https.html</title> <script src="/resources/testharness.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver.https.html b/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver.https.html index c2002714..013fe6c 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver.https.html +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver.https.html
@@ -215,7 +215,7 @@ const pc = new RTCPeerConnection(); t.add_cleanup(() => pc.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true, video: true}); + const stream = await getNoiseStream({audio: true, video: true}); t.add_cleanup(() => stopTracks(stream)); const audio = stream.getAudioTracks()[0]; const video = stream.getVideoTracks()[0]; @@ -248,7 +248,7 @@ const pc = new RTCPeerConnection(); t.add_cleanup(() => pc.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true, video: true}); + const stream = await getNoiseStream({audio: true, video: true}); t.add_cleanup(() => stopTracks(stream)); const audio = stream.getAudioTracks()[0]; const video = stream.getVideoTracks()[0]; @@ -311,7 +311,7 @@ t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc2.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc1.addTransceiver(track, {streams: [stream]}); @@ -346,7 +346,7 @@ t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc2.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc1.addTransceiver(track); @@ -392,7 +392,7 @@ const pc2 = new RTCPeerConnection(); t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc2.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc1.addTrack(track, stream); @@ -413,7 +413,7 @@ t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc2.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc1.addTrack(track, stream); @@ -474,7 +474,7 @@ t.add_cleanup(() => pc2.close()); pc1.addTransceiver("audio"); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc2.addTransceiver(track); @@ -504,7 +504,7 @@ pc1.addTransceiver("audio"); pc2.addTransceiver("audio"); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc2.getTransceivers()[0].sender.replaceTrack(track); @@ -534,7 +534,7 @@ pc1.addTransceiver("audio"); pc2.addTransceiver("audio"); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc2.addTrack(track, stream); @@ -562,7 +562,7 @@ t.add_cleanup(() => pc2.close()); pc1.addTransceiver("audio"); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc2.addTrack(track, stream); @@ -590,7 +590,7 @@ t.add_cleanup(() => pc2.close()); pc1.addTransceiver("audio"); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc2.addTrack(track, stream); @@ -617,7 +617,7 @@ const pc2 = new RTCPeerConnection(); t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc2.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc1.addTrack(track, stream); @@ -685,7 +685,7 @@ const pc = new RTCPeerConnection(); t.add_cleanup(() => pc.close()); pc.addTransceiver("audio"); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); const audio = stream.getAudioTracks()[0]; let sender = pc.addTrack(audio, stream); pc.removeTrack(sender); @@ -705,7 +705,7 @@ const pc2 = new RTCPeerConnection(); t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc2.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true, video: true}); + const stream = await getNoiseStream({audio: true, video: true}); t.add_cleanup(() => stopTracks(stream)); const audio = stream.getAudioTracks()[0]; pc1.addTrack(audio, stream); @@ -860,7 +860,7 @@ t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc2.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc1.addTrack(track, stream); @@ -962,7 +962,7 @@ t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc2.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc1.addTransceiver("audio"); @@ -1026,7 +1026,7 @@ const checkMute = async t => { const pc1 = new RTCPeerConnection(); t.add_cleanup(() => pc1.close()); - const stream1 = await navigator.mediaDevices.getUserMedia({audio: true, video: true}); + const stream1 = await getNoiseStream({audio: true, video: true}); t.add_cleanup(() => stopTracks(stream1)); const audio1 = stream1.getAudioTracks()[0]; pc1.addTrack(audio1, stream1); @@ -1040,7 +1040,7 @@ const pc2 = new RTCPeerConnection(); t.add_cleanup(() => pc2.close()); - const stream2 = await navigator.mediaDevices.getUserMedia({audio: true, video: true}); + const stream2 = await getNoiseStream({audio: true, video: true}); t.add_cleanup(() => stopTracks(stream2)); const audio2 = stream2.getAudioTracks()[0]; pc2.addTrack(audio2, stream2); @@ -1152,7 +1152,7 @@ const checkStop = async t => { const pc1 = new RTCPeerConnection(); t.add_cleanup(() => pc1.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc1.addTrack(track, stream); @@ -1197,7 +1197,7 @@ transceiver.sender.getParameters()), "InvalidStateError", "setParameters on stopped transceiver"); - const stream2 = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream2 = await getNoiseStream({audio: true}); const track2 = stream.getAudioTracks()[0]; checkThrows(() => transceiver.sender.replaceTrack(track2), "InvalidStateError", "replaceTrack on stopped transceiver"); @@ -1251,7 +1251,7 @@ t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc2.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc1.addTrack(track, stream); @@ -1321,7 +1321,7 @@ t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc2.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc1.addTrack(track, stream); @@ -1391,7 +1391,7 @@ t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc2.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc1.addTrack(track, stream); @@ -1426,7 +1426,7 @@ t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc2.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc1.addTrack(track, stream); @@ -1496,7 +1496,7 @@ t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc2.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc1.addTrack(track, stream); @@ -1566,7 +1566,7 @@ t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc2.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc1.addTrack(track, stream); @@ -1589,7 +1589,7 @@ const pc = new RTCPeerConnection(); t.add_cleanup(() => pc.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc.addTrack(track, stream); @@ -1610,7 +1610,7 @@ // Verify that rollback doesn't stomp things it should not pc.getTransceivers()[0].direction = "sendonly"; - const stream2 = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream2 = await getNoiseStream({audio: true}); const track2 = stream2.getAudioTracks()[0]; await pc.getTransceivers()[0].sender.replaceTrack(track2); @@ -1641,7 +1641,7 @@ const pc1 = new RTCPeerConnection(); t.add_cleanup(() => pc1.close()); - const audioStream = await navigator.mediaDevices.getUserMedia({audio: true}); + const audioStream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(audioStream)); const audioTrack = audioStream.getAudioTracks()[0]; pc1.addTrack(audioTrack, audioStream); @@ -1649,7 +1649,7 @@ const pc2 = new RTCPeerConnection(); t.add_cleanup(() => pc2.close()); - const videoStream = await navigator.mediaDevices.getUserMedia({video: true}); + const videoStream = await getNoiseStream({video: true}); t.add_cleanup(() => stopTracks(videoStream)); const videoTrack = videoStream.getVideoTracks()[0]; pc2.addTrack(videoTrack, videoStream); @@ -1720,7 +1720,7 @@ const pc1 = new RTCPeerConnection(); t.add_cleanup(() => pc1.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc1.addTrack(track, stream); @@ -1777,7 +1777,7 @@ const mid0 = pc2.getTransceivers()[0].mid; // Give pc2 a track with replaceTrack - const stream2 = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream2 = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream2)); const track2 = stream2.getAudioTracks()[0]; await pc2.getTransceivers()[0].sender.replaceTrack(track2); @@ -1937,7 +1937,7 @@ t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc2.close()); - const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream)); const track = stream.getAudioTracks()[0]; pc1.addTrack(track, stream); @@ -1973,7 +1973,7 @@ ]); // Check that m-section is reused on both ends - const stream2 = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream2 = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream2)); const track2 = stream2.getAudioTracks()[0]; @@ -2044,7 +2044,7 @@ // new one for the new track) const stoppedMid1 = pc1.getTransceivers()[1].mid; pc1.getTransceivers()[1].stop(); - const stream3 = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream3 = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream3)); const track3 = stream3.getAudioTracks()[0]; pc1.addTrack(track3, stream3); @@ -2114,7 +2114,7 @@ ]); // Add _another_ track; this should reuse the disabled m-section - const stream4 = await navigator.mediaDevices.getUserMedia({audio: true}); + const stream4 = await getNoiseStream({audio: true}); t.add_cleanup(() => stopTracks(stream4)); const track4 = stream4.getAudioTracks()[0]; pc2.addTrack(track4, stream4);
diff --git a/third_party/blink/web_tests/fast/loader/module-no-crash-expected.txt b/third_party/blink/web_tests/fast/loader/module-no-crash-expected.txt new file mode 100644 index 0000000..dde43bd --- /dev/null +++ b/third_party/blink/web_tests/fast/loader/module-no-crash-expected.txt
@@ -0,0 +1 @@ + Tests that storing module cache does not crash with detached frame. Note that crash does only reproduce in ~20% of the runs, depending on timing.
diff --git a/third_party/blink/web_tests/fast/loader/module-no-crash.html b/third_party/blink/web_tests/fast/loader/module-no-crash.html new file mode 100644 index 0000000..b008cf2 --- /dev/null +++ b/third_party/blink/web_tests/fast/loader/module-no-crash.html
@@ -0,0 +1,19 @@ +<script> +if (window.testRunner) + testRunner.dumpAsText(); +</script> +<iframe srcdoc=' +<script type="module"> +if (!localStorage["step"]) { + localStorage["step"] = "reload1"; + window.parent.location.reload(); +} else if (localStorage["step"] === "reload1") { + localStorage["step"] = "reload2"; + window.parent.location.reload(); +} else { + window.parent.document.querySelector("iframe").remove(); +} +</script> +'></iframe> +Tests that storing module cache does not crash with detached frame. +Note that crash does only reproduce in ~20% of the runs, depending on timing.
diff --git a/third_party/blink/web_tests/platform/android/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt b/third_party/blink/web_tests/platform/fuchsia/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt similarity index 100% rename from third_party/blink/web_tests/platform/android/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt rename to third_party/blink/web_tests/platform/fuchsia/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt
diff --git a/third_party/blink/web_tests/platform/fuchsia/external/wpt/web-animations/interfaces/Animatable/getAnimations-expected.txt b/third_party/blink/web_tests/platform/fuchsia/external/wpt/web-animations/interfaces/Animatable/getAnimations-expected.txt new file mode 100644 index 0000000..d5d1c3d7 --- /dev/null +++ b/third_party/blink/web_tests/platform/fuchsia/external/wpt/web-animations/interfaces/Animatable/getAnimations-expected.txt
@@ -0,0 +1,19 @@ +This is a testharness.js-based test. +PASS Returns an empty array for an element with no animations +PASS Returns both animations for an element with two animations +PASS Returns only the animations specific to each sibling element +PASS Returns only the animations specific to each parent/child element +PASS Does not return finished animations that do not fill forwards +PASS Returns finished animations that fill forwards +PASS Returns animations yet to reach their active phase +FAIL Does not return reversed finished animations that do not fill backwards assert_array_equals: lengths differ, expected 0 got 1 +PASS Returns reversed finished animations that fill backwards +FAIL Returns reversed animations yet to reach their active phase assert_array_equals: lengths differ, expected 1 got 0 +FAIL Does not return animations with zero playback rate in before phase assert_array_equals: lengths differ, expected 0 got 1 +PASS Does not return animations with zero playback rate in after phase +PASS Returns animations based on dynamic changes to individual animations' duration +PASS Returns animations based on dynamic changes to individual animations' end delay +PASS Returns animations based on dynamic changes to individual animations' iteration count +PASS Returns animations based on dynamic changes to individual animations' current time +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/platform/fuchsia/external/wpt/web-animations/interfaces/Document/getAnimations-expected.txt b/third_party/blink/web_tests/platform/fuchsia/external/wpt/web-animations/interfaces/Document/getAnimations-expected.txt new file mode 100644 index 0000000..92d85dc --- /dev/null +++ b/third_party/blink/web_tests/platform/fuchsia/external/wpt/web-animations/interfaces/Document/getAnimations-expected.txt
@@ -0,0 +1,9 @@ +This is a testharness.js-based test. +PASS Test document.getAnimations for non-animated content +PASS Test document.getAnimations for script-generated animations +PASS Test the order of document.getAnimations with script generated animations +PASS Test document.getAnimations for a disconnected node +PASS Test document.getAnimations with null target +FAIL Test document.getAnimations for elements inside same-origin iframes assert_equals: expected 1 but got 0 +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/README.txt b/third_party/blink/web_tests/virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/README.txt deleted file mode 100644 index 3fadfb4..0000000 --- a/third_party/blink/web_tests/virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/README.txt +++ /dev/null
@@ -1,2 +0,0 @@ -This directory is for testing the case where ServiceWorkerServicification (aka NetS13nServiceWorker) and NetworkService are off. -The tracking bug is crbug.com/846235.
diff --git a/third_party/blink/web_tests/virtual/disabled-service-worker-servicification/http/tests/serviceworker/README.txt b/third_party/blink/web_tests/virtual/disabled-service-worker-servicification/http/tests/serviceworker/README.txt deleted file mode 100644 index 3fadfb4..0000000 --- a/third_party/blink/web_tests/virtual/disabled-service-worker-servicification/http/tests/serviceworker/README.txt +++ /dev/null
@@ -1,2 +0,0 @@ -This directory is for testing the case where ServiceWorkerServicification (aka NetS13nServiceWorker) and NetworkService are off. -The tracking bug is crbug.com/846235.
diff --git a/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/fetch/README.txt b/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/fetch/README.txt deleted file mode 100644 index 87c6416..0000000 --- a/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/fetch/README.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This directory is for testing out-of-blink CORS implementation. - -We use "external/wpt/fetch" directory for testing basic loading -functionalities through fetching html files.
diff --git a/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/fetch/api/idl.any-expected.txt b/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/fetch/api/idl.any-expected.txt deleted file mode 100644 index 8bf325d7..0000000 --- a/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/fetch/api/idl.any-expected.txt +++ /dev/null
@@ -1,133 +0,0 @@ -This is a testharness.js-based test. -Found 129 tests; 123 PASS, 6 FAIL, 0 TIMEOUT, 0 NOTRUN. -PASS idl_test setup -PASS Partial interface mixin WindowOrWorkerGlobalScope: original interface mixin defined -PASS Headers interface: existence and properties of interface object -PASS Headers interface object length -PASS Headers interface object name -PASS Headers interface: existence and properties of interface prototype object -PASS Headers interface: existence and properties of interface prototype object's "constructor" property -PASS Headers interface: existence and properties of interface prototype object's @@unscopables property -PASS Headers interface: operation append(ByteString, ByteString) -PASS Headers interface: operation delete(ByteString) -PASS Headers interface: operation get(ByteString) -PASS Headers interface: operation has(ByteString) -PASS Headers interface: operation set(ByteString, ByteString) -PASS Headers interface: iterable<ByteString, ByteString> -PASS Headers must be primary interface of new Headers() -PASS Stringification of new Headers() -PASS Headers interface: new Headers() must inherit property "append(ByteString, ByteString)" with the proper type -PASS Headers interface: calling append(ByteString, ByteString) on new Headers() with too few arguments must throw TypeError -PASS Headers interface: new Headers() must inherit property "delete(ByteString)" with the proper type -PASS Headers interface: calling delete(ByteString) on new Headers() with too few arguments must throw TypeError -PASS Headers interface: new Headers() must inherit property "get(ByteString)" with the proper type -PASS Headers interface: calling get(ByteString) on new Headers() with too few arguments must throw TypeError -PASS Headers interface: new Headers() must inherit property "has(ByteString)" with the proper type -PASS Headers interface: calling has(ByteString) on new Headers() with too few arguments must throw TypeError -PASS Headers interface: new Headers() must inherit property "set(ByteString, ByteString)" with the proper type -PASS Headers interface: calling set(ByteString, ByteString) on new Headers() with too few arguments must throw TypeError -PASS Request interface: existence and properties of interface object -PASS Request interface object length -PASS Request interface object name -PASS Request interface: existence and properties of interface prototype object -PASS Request interface: existence and properties of interface prototype object's "constructor" property -PASS Request interface: existence and properties of interface prototype object's @@unscopables property -PASS Request interface: attribute method -PASS Request interface: attribute url -PASS Request interface: attribute headers -PASS Request interface: attribute destination -PASS Request interface: attribute referrer -PASS Request interface: attribute referrerPolicy -PASS Request interface: attribute mode -PASS Request interface: attribute credentials -PASS Request interface: attribute cache -PASS Request interface: attribute redirect -PASS Request interface: attribute integrity -PASS Request interface: attribute keepalive -FAIL Request interface: attribute isReloadNavigation assert_true: The prototype object must have a property "isReloadNavigation" expected true got false -PASS Request interface: attribute isHistoryNavigation -PASS Request interface: attribute signal -PASS Request interface: operation clone() -FAIL Request interface: attribute body assert_true: The prototype object must have a property "body" expected true got false -PASS Request interface: attribute bodyUsed -PASS Request interface: operation arrayBuffer() -PASS Request interface: operation blob() -PASS Request interface: operation formData() -PASS Request interface: operation json() -PASS Request interface: operation text() -PASS Request must be primary interface of new Request('about:blank') -PASS Stringification of new Request('about:blank') -PASS Request interface: new Request('about:blank') must inherit property "method" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "url" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "headers" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "destination" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "referrer" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "referrerPolicy" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "mode" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "credentials" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "cache" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "redirect" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "integrity" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "keepalive" with the proper type -FAIL Request interface: new Request('about:blank') must inherit property "isReloadNavigation" with the proper type assert_inherits: property "isReloadNavigation" not found in prototype chain -PASS Request interface: new Request('about:blank') must inherit property "isHistoryNavigation" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "signal" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "clone()" with the proper type -FAIL Request interface: new Request('about:blank') must inherit property "body" with the proper type assert_inherits: property "body" not found in prototype chain -PASS Request interface: new Request('about:blank') must inherit property "bodyUsed" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "arrayBuffer()" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "blob()" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "formData()" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "json()" with the proper type -PASS Request interface: new Request('about:blank') must inherit property "text()" with the proper type -PASS Response interface: existence and properties of interface object -PASS Response interface object length -PASS Response interface object name -PASS Response interface: existence and properties of interface prototype object -PASS Response interface: existence and properties of interface prototype object's "constructor" property -PASS Response interface: existence and properties of interface prototype object's @@unscopables property -PASS Response interface: operation error() -PASS Response interface: operation redirect(USVString, unsigned short) -PASS Response interface: attribute type -PASS Response interface: attribute url -PASS Response interface: attribute redirected -PASS Response interface: attribute status -PASS Response interface: attribute ok -PASS Response interface: attribute statusText -PASS Response interface: attribute headers -FAIL Response interface: attribute trailer assert_true: The prototype object must have a property "trailer" expected true got false -PASS Response interface: operation clone() -PASS Response interface: attribute body -PASS Response interface: attribute bodyUsed -PASS Response interface: operation arrayBuffer() -PASS Response interface: operation blob() -PASS Response interface: operation formData() -PASS Response interface: operation json() -PASS Response interface: operation text() -PASS Response must be primary interface of new Response() -PASS Stringification of new Response() -PASS Response interface: new Response() must inherit property "error()" with the proper type -PASS Response interface: new Response() must inherit property "redirect(USVString, unsigned short)" with the proper type -PASS Response interface: calling redirect(USVString, unsigned short) on new Response() with too few arguments must throw TypeError -PASS Response interface: new Response() must inherit property "type" with the proper type -PASS Response interface: new Response() must inherit property "url" with the proper type -PASS Response interface: new Response() must inherit property "redirected" with the proper type -PASS Response interface: new Response() must inherit property "status" with the proper type -PASS Response interface: new Response() must inherit property "ok" with the proper type -PASS Response interface: new Response() must inherit property "statusText" with the proper type -PASS Response interface: new Response() must inherit property "headers" with the proper type -FAIL Response interface: new Response() must inherit property "trailer" with the proper type assert_inherits: property "trailer" not found in prototype chain -PASS Response interface: new Response() must inherit property "clone()" with the proper type -PASS Response interface: new Response() must inherit property "body" with the proper type -PASS Response interface: new Response() must inherit property "bodyUsed" with the proper type -PASS Response interface: new Response() must inherit property "arrayBuffer()" with the proper type -PASS Response interface: new Response() must inherit property "blob()" with the proper type -PASS Response interface: new Response() must inherit property "formData()" with the proper type -PASS Response interface: new Response() must inherit property "json()" with the proper type -PASS Response interface: new Response() must inherit property "text()" with the proper type -PASS Window interface: operation fetch(RequestInfo, RequestInit) -PASS Window interface: window must inherit property "fetch(RequestInfo, RequestInit)" with the proper type -PASS Window interface: calling fetch(RequestInfo, RequestInit) on window with too few arguments must throw TypeError -PASS WorkerGlobalScope interface: existence and properties of interface object -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/http/README.txt b/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/http/README.txt deleted file mode 100644 index 6d7938f..0000000 --- a/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/http/README.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This directory is for testing out-of-blink CORS implementation. - -We use "external/wpt/http" directory for testing basic loading -functionalities through http tests.
diff --git a/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/referrer-policy/README.txt b/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/referrer-policy/README.txt deleted file mode 100644 index 03840de3..0000000 --- a/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/referrer-policy/README.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This directory is for testing out-of-blink CORS implementation. - -We use "external/wpt/referrer-policy" directory for testing CORS -referrer handling.
diff --git a/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/service-workers/README.txt b/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/service-workers/README.txt deleted file mode 100644 index d630b09..0000000 --- a/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/service-workers/README.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This directory is for testing out-of-blink CORS implementation. - -We use "external/wpt/service-workers" directory for testing CORS with -service workers.
diff --git a/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/xhr/README.txt b/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/xhr/README.txt deleted file mode 100644 index 25c7135..0000000 --- a/third_party/blink/web_tests/virtual/outofblink-cors-ns/external/wpt/xhr/README.txt +++ /dev/null
@@ -1,3 +0,0 @@ -This directory is for testing out-of-blink CORS implementation. - -We use "http/tests/fetch" directory for testing fetch with CORS.
diff --git a/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/fetch/README.txt b/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/fetch/README.txt deleted file mode 100644 index 25c7135..0000000 --- a/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/fetch/README.txt +++ /dev/null
@@ -1,3 +0,0 @@ -This directory is for testing out-of-blink CORS implementation. - -We use "http/tests/fetch" directory for testing fetch with CORS.
diff --git a/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/navigation/README.txt b/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/navigation/README.txt deleted file mode 100644 index 30d5020..0000000 --- a/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/navigation/README.txt +++ /dev/null
@@ -1,3 +0,0 @@ -This directory is for testing out-of-blink CORS implementation. - -We use "http/tests/navigation" directory for testing navigation with CORS.
diff --git a/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/security/README.txt b/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/security/README.txt deleted file mode 100644 index afc64e2..0000000 --- a/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/security/README.txt +++ /dev/null
@@ -1,3 +0,0 @@ -This directory is for testing out-of-blink CORS implementation. - -We use "http/tests/security directory for testing security feature with CORS.
diff --git a/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/xmlhttprequest/README.txt b/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/xmlhttprequest/README.txt deleted file mode 100644 index ce95561..0000000 --- a/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/xmlhttprequest/README.txt +++ /dev/null
@@ -1,3 +0,0 @@ -This directory is for testing out-of-blink CORS implementation. - -We use "http/tests/xmlhttprequest" directory for testing XHR with CORS.
diff --git a/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/xmlhttprequest/cross-origin-unsupported-url-expected.txt b/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/xmlhttprequest/cross-origin-unsupported-url-expected.txt deleted file mode 100644 index 45a0a6b9..0000000 --- a/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/xmlhttprequest/cross-origin-unsupported-url-expected.txt +++ /dev/null
@@ -1,28 +0,0 @@ -CONSOLE WARNING: line 8: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/. -CONSOLE ERROR: line 13: Access to XMLHttpRequest at 'mailto:foo@bar.com' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: line 13: Access to XMLHttpRequest at 'mailto:foo@bar.com' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: line 13: Access to XMLHttpRequest at 'localhost:8080/' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: line 13: Access to XMLHttpRequest at 'localhost:8080/' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: line 13: Access to XMLHttpRequest at 'tel:1234' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: line 13: Access to XMLHttpRequest at 'tel:1234' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: Access to XMLHttpRequest at 'mailto:foo@bar.com' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: Access to XMLHttpRequest at 'mailto:foo@bar.com' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: Access to XMLHttpRequest at 'localhost:8080/' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: Access to XMLHttpRequest at 'localhost:8080/' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: Access to XMLHttpRequest at 'tel:1234' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: Access to XMLHttpRequest at 'tel:1234' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -This is a testharness.js-based test. -PASS sync test for url=mailto:foo@bar.com, contentType=undefined -PASS sync test for url=mailto:foo@bar.com, contentType=application/json -PASS async test for url=mailto:foo@bar.com, contentType=undefined -PASS async test for url=mailto:foo@bar.com, contentType=application/json -PASS sync test for url=localhost:8080/, contentType=undefined -PASS sync test for url=localhost:8080/, contentType=application/json -PASS async test for url=localhost:8080/, contentType=undefined -PASS async test for url=localhost:8080/, contentType=application/json -PASS sync test for url=tel:1234, contentType=undefined -PASS sync test for url=tel:1234, contentType=application/json -PASS async test for url=tel:1234, contentType=undefined -PASS async test for url=tel:1234, contentType=application/json -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/xmlhttprequest/workers/cross-origin-unsupported-url-expected.txt b/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/xmlhttprequest/workers/cross-origin-unsupported-url-expected.txt deleted file mode 100644 index 785ec72..0000000 --- a/third_party/blink/web_tests/virtual/outofblink-cors-ns/http/tests/xmlhttprequest/workers/cross-origin-unsupported-url-expected.txt +++ /dev/null
@@ -1,27 +0,0 @@ -CONSOLE ERROR: line 13: Access to XMLHttpRequest at 'mailto:foo@bar.com' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: line 13: Access to XMLHttpRequest at 'mailto:foo@bar.com' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: line 13: Access to XMLHttpRequest at 'localhost:8080/' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: line 13: Access to XMLHttpRequest at 'localhost:8080/' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: line 13: Access to XMLHttpRequest at 'tel:1234' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: line 13: Access to XMLHttpRequest at 'tel:1234' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: Access to XMLHttpRequest at 'mailto:foo@bar.com' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: Access to XMLHttpRequest at 'mailto:foo@bar.com' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: Access to XMLHttpRequest at 'localhost:8080/' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: Access to XMLHttpRequest at 'localhost:8080/' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: Access to XMLHttpRequest at 'tel:1234' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -CONSOLE ERROR: Access to XMLHttpRequest at 'tel:1234' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https. -This is a testharness.js-based test. -PASS sync test for url=mailto:foo@bar.com, contentType=undefined -PASS sync test for url=mailto:foo@bar.com, contentType=application/json -PASS async test for url=mailto:foo@bar.com, contentType=undefined -PASS async test for url=mailto:foo@bar.com, contentType=application/json -PASS sync test for url=localhost:8080/, contentType=undefined -PASS sync test for url=localhost:8080/, contentType=application/json -PASS async test for url=localhost:8080/, contentType=undefined -PASS async test for url=localhost:8080/, contentType=application/json -PASS sync test for url=tel:1234, contentType=undefined -PASS sync test for url=tel:1234, contentType=application/json -PASS async test for url=tel:1234, contentType=undefined -PASS async test for url=tel:1234, contentType=application/json -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/webaudio/internals/audiobuffersource-stopped-gc.html b/third_party/blink/web_tests/webaudio/internals/audiobuffersource-stopped-gc.html new file mode 100644 index 0000000..7f2ef219 --- /dev/null +++ b/third_party/blink/web_tests/webaudio/internals/audiobuffersource-stopped-gc.html
@@ -0,0 +1,38 @@ +<!doctype html> +<html> + <head> + <title>Test GC of Stopped AudioBufferSourceNode </title> + <script src="../../resources/testharness.js"></script> + <script src="../../resources/testharnessreport.js"></script> + <script src="../resources/audit-util.js"></script> + <script src="../resources/audit.js"></script> + <script src="stopped-source-test.js"></script> + </head> + <body> + <script> + let audit = Audit.createTaskRunner(); + + const nodesToTest = 100; + + audit.define( + 'Test GC of Stopped AudioBufferSourceNodes', (task, should) => { + let context = new AudioContext(); + const buffer = new AudioBuffer({ + length: 100 * RENDER_QUANTUM_FRAMES, + sampleRate: context.sampleRate + }); + console.log('buffer' + buffer); + testStoppedSourceGC(task, should, { + context: context, + nodeName: 'AudioBufferSourceNode', + constructorMethod: () => { + return new AudioBufferSourceNode(context, {buffer: buffer}); + }, + numberOfNodes: 100, + }); + }); + + audit.run(); + </script> + </body> +</html>
diff --git a/third_party/blink/web_tests/webaudio/internals/constant-source-stopped-gc.html b/third_party/blink/web_tests/webaudio/internals/constant-source-stopped-gc.html new file mode 100644 index 0000000..f0aaa6d --- /dev/null +++ b/third_party/blink/web_tests/webaudio/internals/constant-source-stopped-gc.html
@@ -0,0 +1,32 @@ +<!doctype html> +<html> + <head> + <title>Test GC of Stopped ConstantSourceNode </title> + <script src="../../resources/testharness.js"></script> + <script src="../../resources/testharnessreport.js"></script> + <script src="../resources/audit-util.js"></script> + <script src="../resources/audit.js"></script> + <script src="stopped-source-test.js"></script> + </head> + <body> + <script> + let audit = Audit.createTaskRunner(); + + const nodesToTest = 100; + + audit.define('Test GC of Stopped ConstantSourceNodes', (task, should) => { + let context = new AudioContext(); + testStoppedSourceGC(task, should, { + context: context, + nodeName: 'ConstantSourceNode', + constructorMethod: () => { + return new ConstantSourceNode(context); + }, + numberOfNodes: 100 + }); + }); + + audit.run(); + </script> + </body> +</html>
diff --git a/third_party/blink/web_tests/webaudio/internals/oscillator-stopped-gc.html b/third_party/blink/web_tests/webaudio/internals/oscillator-stopped-gc.html new file mode 100644 index 0000000..bcca2c9b --- /dev/null +++ b/third_party/blink/web_tests/webaudio/internals/oscillator-stopped-gc.html
@@ -0,0 +1,30 @@ +<!doctype html> +<html> + <head> + <title>Test GC of Stopped OscillatorNode </title> + <script src="../../resources/testharness.js"></script> + <script src="../../resources/testharnessreport.js"></script> + <script src="../resources/audit-util.js"></script> + <script src="../resources/audit.js"></script> + <script src="stopped-source-test.js"></script> + </head> + <body> + <script> + let audit = Audit.createTaskRunner(); + + const nodesToTest = 100; + + audit.define('Test GC of Stopped Oscillators', (task, should) => { + let context = new AudioContext(); + testStoppedSourceGC(task, should, { + context: context, + nodeName: 'OscillatorNode', + constructorMethod: () => { return new OscillatorNode(context); }, + numberOfNodes: 100 + }); + }); + + audit.run(); + </script> + </body> +</html>
diff --git a/third_party/blink/web_tests/webaudio/internals/stopped-source-test.js b/third_party/blink/web_tests/webaudio/internals/stopped-source-test.js new file mode 100644 index 0000000..a34f63d --- /dev/null +++ b/third_party/blink/web_tests/webaudio/internals/stopped-source-test.js
@@ -0,0 +1,62 @@ +// Test GC of disconnected and stopped source nodes +function testStoppedSourceGC(task, should, options) { + let {context, nodeName, constructorMethod, numberOfNodes} = options; + let countEndedNodes = 0; + let gain = new GainNode(context, {gain: 1e-10}); + gain.connect(context.destination); + + // When |lastSrc0| stops, it will run gc. + let lastSrc0 = new ConstantSourceNode(context); + lastSrc0.connect(gain); + + // When |lastSrc1| stops, we'll verify that the number of handlers left + // is correct. + let lastSrc1 = new ConstantSourceNode(context); + lastSrc1.connect(gain); + + lastSrc0.onended = () => { + // Have |lastSrc1| stop 10 render quanta from now (pretty arbitrary). + lastSrc1.stop( + context.currentTime + 10 * RENDER_QUANTUM_FRAMES / context.sampleRate); + should(() => gc(), 'GC').notThrow(); + }; + + lastSrc1.onended = () => { + // All the disconnected sources should have been collected by now. + should(internals.audioHandlerCount(), 'Number of handlers after GC') + .beEqualTo(initialCount); + task.done(); + }; + + gc(); + let initialCount = internals.audioHandlerCount(); + + // For information only. This should obviously always pass. + should(initialCount, 'Number of handlers before test') + .beEqualTo(initialCount); + // Create a bunch of sources for testing. Since we call stop(), these + // should all get collected, even though they're no longer connected to + // the destination. + for (let k = 0; k < numberOfNodes; ++k) { + let src = constructorMethod(); + src.start(); + src.connect(gain); + src.onended = () => { + ++countEndedNodes; + if (countEndedNodes == numberOfNodes) { + // For information only + should(countEndedNodes, `Number of ${nodeName}s tested`) + .beEqualTo(numberOfNodes); + lastSrc0.stop(); + } + }; + // Stop it after about 2 renders + src.stop( + context.currentTime + 2 * RENDER_QUANTUM_FRAMES / context.sampleRate); + src.disconnect(); + } + + // Start the sources + lastSrc0.start(); + lastSrc1.start(); +}
diff --git a/tools/binary_size/libsupersize/function_signature.py b/tools/binary_size/libsupersize/function_signature.py index bef911b..825a67a 100644 --- a/tools/binary_size/libsupersize/function_signature.py +++ b/tools/binary_size/libsupersize/function_signature.py
@@ -120,31 +120,47 @@ name[:dollar_idx], number, name[left_paren_idx:]) -def ParseJava(name): - """Breaks java method signature into parts. +def ParseJava(full_name): + """Breaks java full_name into parts. See unit tests for example signatures. Returns: - A tuple of: - * name, including package, return type, and params (symbol.full_name), - * name, including package, no return type or params (symbol.template_name), - * name, no package, return type, or params (symbol.name) + A tuple of (full_name, template_name, name), where: + * full_name = "class_with_package#member(args): type" + * template_name = "class_with_package#member" + * name = "class_without_package#member """ - full_name = name - if '(' in name: - package, method_sig = name.split(' ', 1) - class_name = package.split('.')[-1] - # E.g. <init>() <-- no return type - if method_sig.startswith('<'): - method_name = method_sig + hash_idx = full_name.find('#') + if hash_idx != -1: + # Parse an already parsed full_name. + # Format: Class#symbol: type + full_class_name = full_name[:hash_idx] + colon_idx = full_name.find(':') + if colon_idx == -1: + member = full_name[hash_idx + 1:] + member_type = '' else: - method_name = method_sig.split(' ', 1)[1] - name = '{}#{}'.format(class_name, method_name[:method_name.index('(')]) - template_name = name + member = full_name[hash_idx + 1:colon_idx] + member_type = full_name[colon_idx:] else: - template_name = full_name + parts = full_name.split(' ') + full_class_name = parts[0] + member = parts[-1] if len(parts) > 1 else None + member_type = '' if len(parts) < 3 else ': ' + parts[1] + short_class_name = full_class_name.split('.')[-1] + + if member is None: + return full_name, full_name, short_class_name + + full_name = '{}#{}{}'.format(full_class_name, member, member_type) + paren_idx = member.find('(') + if paren_idx != -1: + member = member[:paren_idx] + + name = '{}#{}'.format(short_class_name, member) + template_name = '{}#{}'.format(full_class_name, member) return full_name, template_name, name
diff --git a/tools/binary_size/libsupersize/function_signature_test.py b/tools/binary_size/libsupersize/function_signature_test.py index 59e1e475..53b0cb18 100755 --- a/tools/binary_size/libsupersize/function_signature_test.py +++ b/tools/binary_size/libsupersize/function_signature_test.py
@@ -14,28 +14,44 @@ def testParseJavaFunctionSignature(self): # Java method with no args - SIG = 'org.package.WebsitePreferenceBridge java.util.List getCameraInfo()' - got_full_name, got_template_name, got_name = ( - function_signature.ParseJava(SIG)) - self.assertEqual('WebsitePreferenceBridge#getCameraInfo', got_name) - self.assertEqual('WebsitePreferenceBridge#getCameraInfo', got_template_name) - self.assertEqual(SIG, got_full_name) + SIG = 'org.ClassName java.util.List getCameraInfo()' + actual = function_signature.ParseJava(SIG) + self.assertEqual('ClassName#getCameraInfo', actual[2]) + self.assertEqual('org.ClassName#getCameraInfo(): java.util.List', actual[0]) + self.assertEqual('org.ClassName#getCameraInfo', actual[1]) + self.assertEqual(actual, function_signature.ParseJava(actual[0])) # Java method with args - SIG = 'jp.package.BaseGifImage int readShort(java.io.InputStream)' - got_full_name, got_template_name, got_name = ( - function_signature.ParseJava(SIG)) - self.assertEqual('BaseGifImage#readShort', got_name) - self.assertEqual('BaseGifImage#readShort', got_template_name) - self.assertEqual(SIG, got_full_name) + SIG = 'org.ClassName int readShort(int,int)' + actual = function_signature.ParseJava(SIG) + self.assertEqual('ClassName#readShort', actual[2]) + self.assertEqual('org.ClassName#readShort', actual[1]) + self.assertEqual('org.ClassName#readShort(int,int): int', actual[0]) + self.assertEqual(actual, function_signature.ParseJava(actual[0])) # Java <init> method - SIG = 'jp.package.BaseGifImage$GifHeaderStream <init>(byte[])' - got_full_name, got_template_name, got_name = ( - function_signature.ParseJava(SIG)) - self.assertEqual('BaseGifImage$GifHeaderStream#<init>', got_name) - self.assertEqual('BaseGifImage$GifHeaderStream#<init>', got_template_name) - self.assertEqual(SIG, got_full_name) + SIG = 'org.ClassName$Inner <init>(byte[])' + actual = function_signature.ParseJava(SIG) + self.assertEqual('ClassName$Inner#<init>', actual[2]) + self.assertEqual('org.ClassName$Inner#<init>', actual[1]) + self.assertEqual('org.ClassName$Inner#<init>(byte[])', actual[0]) + self.assertEqual(actual, function_signature.ParseJava(actual[0])) + + # Java Class + SIG = 'org.ClassName' + actual = function_signature.ParseJava(SIG) + self.assertEqual('ClassName', actual[2]) + self.assertEqual('org.ClassName', actual[1]) + self.assertEqual('org.ClassName', actual[0]) + self.assertEqual(actual, function_signature.ParseJava(actual[0])) + + # Java Field + SIG = 'org.ClassName some.Type mField' + actual = function_signature.ParseJava(SIG) + self.assertEqual('ClassName#mField', actual[2]) + self.assertEqual('org.ClassName#mField', actual[1]) + self.assertEqual('org.ClassName#mField: some.Type', actual[0]) + self.assertEqual(actual, function_signature.ParseJava(actual[0])) def testParseFunctionSignature(self): def check(ret_part, name_part, params_part, after_part='',
diff --git a/tools/binary_size/libsupersize/html_report.py b/tools/binary_size/libsupersize/html_report.py index 09f8a07..9523c55 100644 --- a/tools/binary_size/libsupersize/html_report.py +++ b/tools/binary_size/libsupersize/html_report.py
@@ -135,10 +135,10 @@ file_node = _GetOrAddFileNode( path, symbol.component, file_nodes, components) - is_dex_method = symbol.section_name == models.SECTION_DEX_METHOD + name = symbol.full_name if symbol.IsDex() else symbol.template_name symbol_entry = { _COMPACT_SYMBOL_BYTE_SIZE_KEY: symbol_size, - _COMPACT_SYMBOL_NAME_KEY: symbol.template_name, + _COMPACT_SYMBOL_NAME_KEY: name, _COMPACT_SYMBOL_TYPE_KEY: symbol.section, } if symbol.num_aliases != 1: @@ -149,6 +149,7 @@ # count as -1 rather than the default, 1. # We don't care about accurate counts for other symbol types currently, # so this data is only included for methods. + is_dex_method = symbol.section_name == models.SECTION_DEX_METHOD if is_dex_method and symbol_count != default_symbol_count: symbol_entry[_COMPACT_SYMBOL_COUNT_KEY] = symbol_count if symbol.flags:
diff --git a/tools/binary_size/libsupersize/static/shared.js b/tools/binary_size/libsupersize/static/shared.js index 53ea8d5..e48aea1 100644 --- a/tools/binary_size/libsupersize/static/shared.js +++ b/tools/binary_size/libsupersize/static/shared.js
@@ -115,6 +115,8 @@ const _CODE_SYMBOL_TYPE = 't'; /** Type for a dex method symbol */ const _DEX_METHOD_SYMBOL_TYPE = 'm'; +/** Type for a non-method dex symbol */ +const _DEX_SYMBOL_TYPE = 'x'; /** Type for an 'other' symbol */ const _OTHER_SYMBOL_TYPE = 'o';
diff --git a/tools/binary_size/libsupersize/static/tree-worker.js b/tools/binary_size/libsupersize/static/tree-worker.js index db7af6a6..e384a37 100644 --- a/tools/binary_size/libsupersize/static/tree-worker.js +++ b/tools/binary_size/libsupersize/static/tree-worker.js
@@ -223,59 +223,73 @@ * @param {TreeNode} node */ _joinDexMethodClasses(node) { - const hasDexMethods = node.childStats[_DEX_METHOD_SYMBOL_TYPE] != null; - if (!hasDexMethods || node.children == null) return node; + const hasDex = node.childStats[_DEX_SYMBOL_TYPE] || + node.childStats[_DEX_METHOD_SYMBOL_TYPE]; + if (!hasDex || !node.children) return node; - if (node.type[0] === _CONTAINER_TYPES.FILE) { - /** @type {Map<string, TreeNode>} */ - const javaClassContainers = new Map(); - /** @type {TreeNode[]} */ - const otherSymbols = []; - - // Place all dex methods into buckets - for (const childNode of node.children) { - // Java classes are denoted with a "#", such as "LogoView#onDraw" - const splitIndex = childNode.idPath.lastIndexOf('#'); - - const isDexMethodWithClass = - childNode.type === _DEX_METHOD_SYMBOL_TYPE && - splitIndex > childNode.shortNameIndex; - - if (isDexMethodWithClass) { - // Get the idPath of the class - const classIdPath = childNode.idPath.slice(0, splitIndex); - - let classNode = javaClassContainers.get(classIdPath); - if (classNode == null) { - classNode = createNode({ - idPath: classIdPath, - srcPath: node.srcPath, - component: node.component, - shortNameIndex: childNode.shortNameIndex, - type: _CONTAINER_TYPES.JAVA_CLASS, - }); - javaClassContainers.set(classIdPath, classNode); - } - - // Adjust the dex method's short name so it starts after the "#" - childNode.shortNameIndex = splitIndex + 1; - this._attachToParent(childNode, classNode); - } else { - otherSymbols.push(childNode); - } - } - - node.children = otherSymbols; - for (const containerNode of javaClassContainers.values()) { - // Delay setting the parent until here so that `_attachToParent` - // doesn't add method stats twice - containerNode.parent = node; - node.children.push(containerNode); - } - } else { + if (node.type[0] !== _CONTAINER_TYPES.FILE) { for (const child of node.children) { this._joinDexMethodClasses(child); } + return node; + } + /** @type {Map<string, TreeNode>} */ + const javaClassContainers = new Map(); + /** @type {TreeNode[]} */ + const otherSymbols = []; + + // Place all dex symbols into buckets + for (const childNode of node.children) { + // Java classes are denoted with a "#", such as "LogoView#onDraw" + // Except for some older .ndjson files, which didn't do this for fields. + const splitIndex = childNode.idPath.lastIndexOf('#'); + const isClassNode = childNode.idPath.indexOf(' ') == -1; + const hasClassPrefix = isClassNode || splitIndex != -1; + + if (hasClassPrefix) { + // Get the idPath of the class + let classIdPath = splitIndex == -1 ? childNode.idPath : + childNode.idPath.slice(0, splitIndex); + + // Strip package from the node name for classes in .java files since the + // directory tree already shows it. + let shortNameIndex = childNode.shortNameIndex; + const javaIdx = childNode.idPath.indexOf('.java:'); + if (javaIdx != -1) { + const dotIdx = classIdPath.lastIndexOf('.'); + if (dotIdx > javaIdx) { + shortNameIndex += dotIdx - (javaIdx + 6) + 1; + } + } + + let classNode = javaClassContainers.get(classIdPath); + if (!classNode) { + classNode = createNode({ + idPath: classIdPath, + srcPath: node.srcPath, + component: node.component, + shortNameIndex: shortNameIndex, + type: _CONTAINER_TYPES.JAVA_CLASS, + }); + javaClassContainers.set(classIdPath, classNode); + } + + // Adjust the dex method's short name so it starts after the "#" + if (splitIndex != -1) { + childNode.shortNameIndex = splitIndex + 1; + } + this._attachToParent(childNode, classNode); + } else { + otherSymbols.push(childNode); + } + } + + node.children = otherSymbols; + for (const containerNode of javaClassContainers.values()) { + // Delay setting the parent until here so that `_attachToParent` + // doesn't add method stats twice + containerNode.parent = node; + node.children.push(containerNode); } return node; }
diff --git a/tools/binary_size/libsupersize/testdata/Archive_Apk.golden b/tools/binary_size/libsupersize/testdata/Archive_Apk.golden index 1e892bff..e80d31eb 100644 --- a/tools/binary_size/libsupersize/testdata/Archive_Apk.golden +++ b/tools/binary_size/libsupersize/testdata/Archive_Apk.golden
@@ -75,88 +75,88 @@ .data.rel.ro.local@2c17740(size_without_padding=789904,padding=0,full_name=chrome::mojom::FieldTrialRecorderProxy [vtable],object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser) .data.rel.ro.local@2cd84e0(size_without_padding=16,padding=16,full_name=.Lswitch.table.45,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o,source_path=,flags={},num_aliases=1,component=) .data.rel.ro.local@2cd84f0(size_without_padding=8,padding=0,full_name=kSystemClassPrefixes,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o,source_path=,flags={anon},num_aliases=1,component=) -.dex@0(size_without_padding=12,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean $assertionsDisabled,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float DRAG_ANGLE_THRESHOLD,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation mAnimationFactory,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mBorderLeftPadding,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mBorderTopPadding,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mBorderTransparentSide,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mBorderTransparentTop,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mCurrentMode,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mCurrentScrollDirection,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mDiscardDirection,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab mDiscardingTab,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mDragLock$7be2905e,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mEvenOutProgress,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mEvenOutRate,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean mInSwipe,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean mIsDying,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean mIsStackForCurrentTabList,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mLastPinch0Offset,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mLastPinch1Offset,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack long mLastScrollUpdate,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.StackLayout mLayout,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mLongPressSelected,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mMaxOverScroll,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mMaxOverScrollAngle,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mMaxOverScrollSlide,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mMaxUnderScroll,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mMinScrollMotion,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mMinSpacing,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack android.view.animation.Interpolator mOverScrollAngleInterpolator,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mOverScrollCounter,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mOverScrollDerivative,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mOverScrollOffset,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack android.view.animation.Interpolator mOverscrollSlideInterpolator,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mOverviewAnimationType$5d025a5c,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mPinch0TabIndex,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mPinch1TabIndex,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean mRecomputePosition,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mReferenceOrderIndex,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mScrollOffset,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mScrollOffsetForDyingTabs,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mScrollTarget,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller mScroller,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab mScrollingTab,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mSpacing,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[] mStackTabs,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mSwipeBoundedScrollOffset,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean mSwipeCanScroll,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean mSwipeIsCancelable,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mSwipeUnboundScrollOffset,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.ChromeAnimation mTabAnimations,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.tabmodel.TabList mTabList,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack android.view.animation.Interpolator mUnderScrollAngleInterpolator,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.stack.StackViewAnimation mViewAnimationFactory,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack android.animation.Animator mViewAnimations,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack android.animation.AnimatorListenerAdapter mViewAnimatorListener,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mWarpSize,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=12,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#$assertionsDisabled: boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#DRAG_ANGLE_THRESHOLD: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mAnimationFactory: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mBorderLeftPadding: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mBorderTopPadding: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mBorderTransparentSide: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mBorderTransparentTop: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mCurrentMode: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mCurrentScrollDirection: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mDiscardDirection: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mDiscardingTab: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mDragLock$7be2905e: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mEvenOutProgress: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mEvenOutRate: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mInSwipe: boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mIsDying: boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mIsStackForCurrentTabList: boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLastPinch0Offset: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLastPinch1Offset: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLastScrollUpdate: long,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLayout: org.chromium.chrome.browser.compositor.layouts.phone.StackLayout,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLongPressSelected: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMaxOverScroll: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMaxOverScrollAngle: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMaxOverScrollSlide: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMaxUnderScroll: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMinScrollMotion: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMinSpacing: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverScrollAngleInterpolator: android.view.animation.Interpolator,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverScrollCounter: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverScrollDerivative: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverScrollOffset: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverscrollSlideInterpolator: android.view.animation.Interpolator,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverviewAnimationType$5d025a5c: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mPinch0TabIndex: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mPinch1TabIndex: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mRecomputePosition: boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mReferenceOrderIndex: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScrollOffset: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScrollOffsetForDyingTabs: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScrollTarget: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScroller: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScrollingTab: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSpacing: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mStackTabs: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSwipeBoundedScrollOffset: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSwipeCanScroll: boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSwipeIsCancelable: boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSwipeUnboundScrollOffset: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mTabAnimations: org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mTabList: org.chromium.chrome.browser.tabmodel.TabList,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mUnderScrollAngleInterpolator: android.view.animation.Interpolator,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mViewAnimationFactory: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackViewAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mViewAnimations: android.animation.Animator,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mViewAnimatorListener: android.animation.AnimatorListenerAdapter,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mWarpSize: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) .dex@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float DECELERATION_RATE,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float[] SPLINE_POSITION,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float[] SPLINE_TIME,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float mCurrVelocity,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mCurrentPosition,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float mDeceleration,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mDuration,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mFinal,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller boolean mFinished,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float mFlingFriction,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mOver,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float mPhysicalCoeff,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mSplineDistance,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mSplineDuration,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mStart,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller long mStartTime,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mState,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mVelocity,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#DECELERATION_RATE: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#SPLINE_POSITION: float[],object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#SPLINE_TIME: float[],object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mCurrVelocity: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mCurrentPosition: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mDeceleration: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mDuration: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mFinal: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mFinished: boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mFlingFriction: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mOver: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mPhysicalCoeff: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mSplineDistance: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mSplineDuration: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mStart: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mStartTime: long,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mState: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mVelocity: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) .dex@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float mBorderTopHeight,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float mBorderTopOpaqueHeight,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float mHeight,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float mHeightMinusBrowserControls,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack mStack,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float mWidth,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mBorderTopHeight: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mBorderTopOpaqueHeight: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mHeight: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mHeightMinusBrowserControls: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mStack: org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mWidth: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) .dex@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) .dex@0(size_without_padding=104,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) .dex@0(size_without_padding=8586,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack,source_path=,flags={},num_aliases=1,component=) @@ -168,106 +168,106 @@ .dex@0(size_without_padding=975347,padding=0,full_name=org.chromium,object_path=$APK/org/chromium,source_path=,flags={},num_aliases=1,component=) .dex@0(size_without_padding=1792,padding=0,full_name=org,object_path=$APK/org,source_path=,flags={},num_aliases=1,component=) .dex@0(size_without_padding=4616803,padding=0,full_name=* Unattributed Dex,object_path=,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=113,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack <clinit>(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=225,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack <init>(android.content.Context,org.chromium.chrome.browser.compositor.layouts.phone.StackLayout),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=61,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.StackLayout access$000(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=100,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean allowOverscroll(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=112,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float computeDiscardAlpha(float,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=136,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float computeDiscardScale(float,float,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=88,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float computeOverscrollPercent(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=969,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void computeTabClippingVisibilityHelper(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=1512,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void computeTabOffsetHelper(android.graphics.RectF),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=217,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void computeTabScrollOffsetHelper(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=1008,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void computeTabTiltHelper(long,android.graphics.RectF),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=560,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void computeTabVisibilitySortingHelper(android.graphics.RectF),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=446,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean evenOutTabs(float,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=223,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void finishAnimationsIfDone(long,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=128,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float getStackScale(android.graphics.RectF),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=87,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab getTabAtPositon(float,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void resetInputActionIndices(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=219,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void springBack(long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=217,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void updateOverscrollOffset(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=90,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float approxScreen(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=64,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void cleanupTabs(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=261,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void commitDiscard(long,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=253,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int computeSpacing(int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=318,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void computeTabPosition(long,android.graphics.RectF),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=322,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void contextChanged(android.content.Context),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=563,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void createStackTabs(boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=1521,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void drag(long,float,float,float,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=813,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void finishAnimation(long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=503,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void fling(long,float,float,float,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=68,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int getCount(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=84,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float getDefaultDiscardDirection(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float getMaxScroll(boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=113,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float getMaxTabHeight(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=196,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float getMinScroll(boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=105,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float getRange(float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=94,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float getScrollDimensionSize(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=360,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int getTabIndexAtPositon(float,float,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=121,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int getVisibleCount(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=96,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean isDisplayable(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=400,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void notifySizeChanged$483d2f6e(int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=107,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void onUpOrCancel(long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=341,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean onUpdateCompositorAnimations(long,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=101,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean onUpdateViewAnimation(long,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=68,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void requestUpdate(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=69,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float screenToScroll(float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=69,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float scrollToScreen(float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=134,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void setScrollTarget(float,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=121,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void setStackFocusInfo(float,int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=244,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void setWarpState(boolean,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=919,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void startAnimation$62adfb33(long,int,int,int,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=77,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void startAnimation$6848a047(long,int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=95,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void startAnimation$78b04ab8(long,int,int,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=137,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void stopScrollingMovement(long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=142,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void swipeCancelled(long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=266,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void tabClosingEffect(long,int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=471,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller <clinit>(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=146,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller <init>(android.content.Context),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller boolean access$000(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=65,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller boolean access$002(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int access$100(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int access$200(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller long access$300(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int access$400(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float access$500(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=176,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller void adjustDuration(int,int,int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=71,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float getDeceleration(int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=97,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller double getSplineDeceleration(int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=115,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller double getSplineFlingDistance(int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=220,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller void onEdgeReached(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=167,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller void startSpringback$4868d30e(int,int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=218,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller boolean continueWhenFinished(long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=66,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller void finish(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=660,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller void fling(int,int,int,int,int,long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=138,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller boolean springback(int,int,int,long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=109,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller void startScroll(int,int,long,int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=440,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller boolean update(long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=90,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller void updateScroll(float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=112,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation <init>(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,float,float,float,float,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation void addTiltScrollAnimation(org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,org.chromium.chrome.browser.compositor.layouts.components.LayoutTab,float,int,int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=1055,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createAnimatorSetForType$2fab410e$104f6ddb(int,org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,int,float,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=36,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createEnterStackAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=139,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createNewTabOpenedAnimatorSet$4078c09e(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[]),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=32,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createReachTopAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=36,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createTabFocusedAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=32,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createViewMoreAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=30,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float getScreenPositionInScrollDirection(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=24,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float getScreenSizeInScrollDirection(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=92,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float getStaticTabPosition(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=67,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float getToolbarOffsetToLineUpWithBorder(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=24,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation boolean isDefaultDiscardDirectionPositive(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=82,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape <init>(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,float,float,float,float,float),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=106,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape void addTiltScrollAnimation(org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,org.chromium.chrome.browser.compositor.layouts.components.LayoutTab,float,int,int),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=592,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createEnterStackAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=59,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createNewTabOpenedAnimatorSet$4078c09e(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[]),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=210,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createReachTopAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],float),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=961,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createTabFocusedAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=256,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createViewMoreAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape float getScreenPositionInScrollDirection(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=54,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape float getScreenSizeInScrollDirection(),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=52,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape boolean isDefaultDiscardDirectionPositive(),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=113,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#<clinit>(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=225,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#<init>(android.content.Context,org.chromium.chrome.browser.compositor.layouts.phone.StackLayout),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=61,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#access$000(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack): org.chromium.chrome.browser.compositor.layouts.phone.StackLayout,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=100,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#allowOverscroll(): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=112,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeDiscardAlpha(float,float): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=136,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeDiscardScale(float,float,boolean): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=88,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeOverscrollPercent(): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=969,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabClippingVisibilityHelper(): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=1512,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabOffsetHelper(android.graphics.RectF): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=217,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabScrollOffsetHelper(): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=1008,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabTiltHelper(long,android.graphics.RectF): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=560,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabVisibilitySortingHelper(android.graphics.RectF): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=446,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#evenOutTabs(float,boolean): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=223,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#finishAnimationsIfDone(long,boolean): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=128,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getStackScale(android.graphics.RectF): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=87,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getTabAtPositon(float,float): org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#resetInputActionIndices(): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=219,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#springBack(long): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=217,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#updateOverscrollOffset(): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=90,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#approxScreen(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,float): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=64,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#cleanupTabs(): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=261,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#commitDiscard(long,boolean): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=253,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeSpacing(int): int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=318,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabPosition(long,android.graphics.RectF): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=322,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#contextChanged(android.content.Context): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=563,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#createStackTabs(boolean): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=1521,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#drag(long,float,float,float,float): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=813,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#finishAnimation(long): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=503,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#fling(long,float,float,float,float): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=68,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getCount(): int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=84,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getDefaultDiscardDirection(): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getMaxScroll(boolean): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=113,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getMaxTabHeight(): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=196,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getMinScroll(boolean): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=105,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getRange(float): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=94,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getScrollDimensionSize(): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=360,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getTabIndexAtPositon(float,float,float): int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=121,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getVisibleCount(): int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=96,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#isDisplayable(): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=400,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#notifySizeChanged$483d2f6e(int): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=107,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#onUpOrCancel(long): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=341,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#onUpdateCompositorAnimations(long,boolean): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=101,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#onUpdateViewAnimation(long,boolean): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=68,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#requestUpdate(): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=69,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#screenToScroll(float): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=69,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#scrollToScreen(float): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=134,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#setScrollTarget(float,boolean): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=121,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#setStackFocusInfo(float,int): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=244,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#setWarpState(boolean,boolean): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=919,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#startAnimation$62adfb33(long,int,int,int,boolean): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=77,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#startAnimation$6848a047(long,int): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=95,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#startAnimation$78b04ab8(long,int,int,boolean): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=137,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#stopScrollingMovement(long): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=142,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#swipeCancelled(long): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=266,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#tabClosingEffect(long,int): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=471,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#<clinit>(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=146,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#<init>(android.content.Context),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$000(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=65,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$002(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,boolean): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$100(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$200(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$300(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): long,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$400(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$500(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=176,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#adjustDuration(int,int,int): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=71,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#getDeceleration(int): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=97,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#getSplineDeceleration(int): double,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=115,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#getSplineFlingDistance(int): double,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=220,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#onEdgeReached(): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=167,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#startSpringback$4868d30e(int,int): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=218,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#continueWhenFinished(long): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=66,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#finish(): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=660,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#fling(int,int,int,int,int,long): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=138,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#springback(int,int,int,long): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=109,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#startScroll(int,int,long,int): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=440,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#update(long): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=90,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#updateScroll(float): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=112,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#<init>(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,float,float,float,float,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#addTiltScrollAnimation(org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,org.chromium.chrome.browser.compositor.layouts.components.LayoutTab,float,int,int): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=1055,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createAnimatorSetForType$2fab410e$104f6ddb(int,org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,int,float,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=36,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createEnterStackAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=139,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createNewTabOpenedAnimatorSet$4078c09e(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[]): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=32,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createReachTopAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=36,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createTabFocusedAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=32,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createViewMoreAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=30,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#getScreenPositionInScrollDirection(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=24,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#getScreenSizeInScrollDirection(): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=92,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#getStaticTabPosition(): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=67,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#getToolbarOffsetToLineUpWithBorder(): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=24,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#isDefaultDiscardDirectionPositive(): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=82,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#<init>(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,float,float,float,float,float),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=106,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#addTiltScrollAnimation(org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,org.chromium.chrome.browser.compositor.layouts.components.LayoutTab,float,int,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=592,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createEnterStackAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=59,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createNewTabOpenedAnimatorSet$4078c09e(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[]): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=210,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createReachTopAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=961,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createTabFocusedAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=256,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createViewMoreAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#getScreenPositionInScrollDirection(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=54,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#getScreenSizeInScrollDirection(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=52,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#isDefaultDiscardDirectionPositive(): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) .other@0(size_without_padding=4194304,padding=0,full_name=smalltest.so,object_path=,source_path=$APK/smalltest.so,flags={gen},num_aliases=1,component=) .other@0(size_without_padding=1048576,padding=0,full_name=assets/icudtl.dat,object_path=,source_path=third_party/icu/android/icudtl.dat,flags={},num_aliases=1,component=Internal>Android) .other@0(size_without_padding=1024,padding=0,full_name=res/drawable-v13/test.xml,object_path=,source_path=chrome/android/res/drawable/test.xml,flags={},num_aliases=1,component=)
diff --git a/tools/binary_size/libsupersize/testdata/Archive_MinimalApks.golden b/tools/binary_size/libsupersize/testdata/Archive_MinimalApks.golden index a56a2cc..0850e942 100644 --- a/tools/binary_size/libsupersize/testdata/Archive_MinimalApks.golden +++ b/tools/binary_size/libsupersize/testdata/Archive_MinimalApks.golden
@@ -76,88 +76,88 @@ .data.rel.ro.local@2c17740(size_without_padding=789904,padding=0,full_name=chrome::mojom::FieldTrialRecorderProxy [vtable],object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser) .data.rel.ro.local@2cd84e0(size_without_padding=16,padding=16,full_name=.Lswitch.table.45,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o,source_path=,flags={},num_aliases=1,component=) .data.rel.ro.local@2cd84f0(size_without_padding=8,padding=0,full_name=kSystemClassPrefixes,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o,source_path=,flags={anon},num_aliases=1,component=) -.dex@0(size_without_padding=12,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean $assertionsDisabled,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float DRAG_ANGLE_THRESHOLD,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation mAnimationFactory,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mBorderLeftPadding,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mBorderTopPadding,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mBorderTransparentSide,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mBorderTransparentTop,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mCurrentMode,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mCurrentScrollDirection,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mDiscardDirection,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab mDiscardingTab,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mDragLock$7be2905e,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mEvenOutProgress,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mEvenOutRate,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean mInSwipe,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean mIsDying,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean mIsStackForCurrentTabList,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mLastPinch0Offset,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mLastPinch1Offset,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack long mLastScrollUpdate,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.StackLayout mLayout,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mLongPressSelected,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mMaxOverScroll,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mMaxOverScrollAngle,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mMaxOverScrollSlide,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mMaxUnderScroll,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mMinScrollMotion,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mMinSpacing,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack android.view.animation.Interpolator mOverScrollAngleInterpolator,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mOverScrollCounter,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mOverScrollDerivative,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mOverScrollOffset,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack android.view.animation.Interpolator mOverscrollSlideInterpolator,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mOverviewAnimationType$5d025a5c,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mPinch0TabIndex,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mPinch1TabIndex,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean mRecomputePosition,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mReferenceOrderIndex,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mScrollOffset,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mScrollOffsetForDyingTabs,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mScrollTarget,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller mScroller,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab mScrollingTab,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int mSpacing,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[] mStackTabs,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mSwipeBoundedScrollOffset,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean mSwipeCanScroll,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean mSwipeIsCancelable,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mSwipeUnboundScrollOffset,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.ChromeAnimation mTabAnimations,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.tabmodel.TabList mTabList,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack android.view.animation.Interpolator mUnderScrollAngleInterpolator,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.stack.StackViewAnimation mViewAnimationFactory,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack android.animation.Animator mViewAnimations,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack android.animation.AnimatorListenerAdapter mViewAnimatorListener,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float mWarpSize,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=12,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#$assertionsDisabled: boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#DRAG_ANGLE_THRESHOLD: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mAnimationFactory: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mBorderLeftPadding: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mBorderTopPadding: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mBorderTransparentSide: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mBorderTransparentTop: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mCurrentMode: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mCurrentScrollDirection: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mDiscardDirection: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mDiscardingTab: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mDragLock$7be2905e: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mEvenOutProgress: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mEvenOutRate: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mInSwipe: boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mIsDying: boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mIsStackForCurrentTabList: boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLastPinch0Offset: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLastPinch1Offset: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLastScrollUpdate: long,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLayout: org.chromium.chrome.browser.compositor.layouts.phone.StackLayout,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLongPressSelected: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMaxOverScroll: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMaxOverScrollAngle: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMaxOverScrollSlide: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMaxUnderScroll: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMinScrollMotion: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMinSpacing: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverScrollAngleInterpolator: android.view.animation.Interpolator,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverScrollCounter: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverScrollDerivative: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverScrollOffset: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverscrollSlideInterpolator: android.view.animation.Interpolator,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverviewAnimationType$5d025a5c: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mPinch0TabIndex: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mPinch1TabIndex: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mRecomputePosition: boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mReferenceOrderIndex: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScrollOffset: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScrollOffsetForDyingTabs: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScrollTarget: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScroller: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScrollingTab: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSpacing: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mStackTabs: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSwipeBoundedScrollOffset: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSwipeCanScroll: boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSwipeIsCancelable: boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSwipeUnboundScrollOffset: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mTabAnimations: org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mTabList: org.chromium.chrome.browser.tabmodel.TabList,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mUnderScrollAngleInterpolator: android.view.animation.Interpolator,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mViewAnimationFactory: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackViewAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mViewAnimations: android.animation.Animator,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mViewAnimatorListener: android.animation.AnimatorListenerAdapter,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mWarpSize: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) .dex@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float DECELERATION_RATE,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float[] SPLINE_POSITION,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float[] SPLINE_TIME,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float mCurrVelocity,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mCurrentPosition,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float mDeceleration,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mDuration,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mFinal,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller boolean mFinished,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float mFlingFriction,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mOver,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float mPhysicalCoeff,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mSplineDistance,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mSplineDuration,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mStart,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller long mStartTime,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mState,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int mVelocity,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#DECELERATION_RATE: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#SPLINE_POSITION: float[],object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#SPLINE_TIME: float[],object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mCurrVelocity: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mCurrentPosition: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mDeceleration: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mDuration: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mFinal: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mFinished: boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mFlingFriction: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mOver: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mPhysicalCoeff: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mSplineDistance: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mSplineDuration: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mStart: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mStartTime: long,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mState: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mVelocity: int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) .dex@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float mBorderTopHeight,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float mBorderTopOpaqueHeight,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float mHeight,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float mHeightMinusBrowserControls,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack mStack,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float mWidth,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mBorderTopHeight: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mBorderTopOpaqueHeight: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mHeight: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mHeightMinusBrowserControls: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mStack: org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mWidth: float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) .dex@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) .dex@0(size_without_padding=104,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) .dex@0(size_without_padding=8586,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack,source_path=,flags={},num_aliases=1,component=) @@ -169,106 +169,106 @@ .dex@0(size_without_padding=975347,padding=0,full_name=org.chromium,object_path=$APK/org/chromium,source_path=,flags={},num_aliases=1,component=) .dex@0(size_without_padding=1792,padding=0,full_name=org,object_path=$APK/org,source_path=,flags={},num_aliases=1,component=) .dex@0(size_without_padding=4616803,padding=0,full_name=* Unattributed Dex,object_path=,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=113,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack <clinit>(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=225,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack <init>(android.content.Context,org.chromium.chrome.browser.compositor.layouts.phone.StackLayout),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=61,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.StackLayout access$000(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=100,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean allowOverscroll(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=112,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float computeDiscardAlpha(float,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=136,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float computeDiscardScale(float,float,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=88,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float computeOverscrollPercent(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=969,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void computeTabClippingVisibilityHelper(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=1512,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void computeTabOffsetHelper(android.graphics.RectF),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=217,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void computeTabScrollOffsetHelper(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=1008,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void computeTabTiltHelper(long,android.graphics.RectF),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=560,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void computeTabVisibilitySortingHelper(android.graphics.RectF),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=446,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean evenOutTabs(float,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=223,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void finishAnimationsIfDone(long,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=128,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float getStackScale(android.graphics.RectF),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=87,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab getTabAtPositon(float,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void resetInputActionIndices(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=219,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void springBack(long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=217,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void updateOverscrollOffset(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=90,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float approxScreen(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=64,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void cleanupTabs(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=261,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void commitDiscard(long,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=253,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int computeSpacing(int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=318,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void computeTabPosition(long,android.graphics.RectF),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=322,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void contextChanged(android.content.Context),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=563,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void createStackTabs(boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=1521,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void drag(long,float,float,float,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=813,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void finishAnimation(long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=503,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void fling(long,float,float,float,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=68,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int getCount(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=84,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float getDefaultDiscardDirection(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float getMaxScroll(boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=113,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float getMaxTabHeight(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=196,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float getMinScroll(boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=105,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float getRange(float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=94,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float getScrollDimensionSize(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=360,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int getTabIndexAtPositon(float,float,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=121,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack int getVisibleCount(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=96,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean isDisplayable(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=400,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void notifySizeChanged$483d2f6e(int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=107,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void onUpOrCancel(long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=341,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean onUpdateCompositorAnimations(long,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=101,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack boolean onUpdateViewAnimation(long,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=68,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void requestUpdate(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=69,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float screenToScroll(float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=69,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack float scrollToScreen(float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=134,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void setScrollTarget(float,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=121,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void setStackFocusInfo(float,int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=244,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void setWarpState(boolean,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=919,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void startAnimation$62adfb33(long,int,int,int,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=77,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void startAnimation$6848a047(long,int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=95,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void startAnimation$78b04ab8(long,int,int,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=137,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void stopScrollingMovement(long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=142,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void swipeCancelled(long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=266,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack void tabClosingEffect(long,int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=471,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller <clinit>(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=146,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller <init>(android.content.Context),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller boolean access$000(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=65,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller boolean access$002(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,boolean),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int access$100(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int access$200(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller long access$300(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller int access$400(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float access$500(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=176,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller void adjustDuration(int,int,int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=71,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller float getDeceleration(int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=97,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller double getSplineDeceleration(int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=115,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller double getSplineFlingDistance(int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=220,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller void onEdgeReached(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=167,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller void startSpringback$4868d30e(int,int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=218,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller boolean continueWhenFinished(long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=66,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller void finish(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=660,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller void fling(int,int,int,int,int,long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=138,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller boolean springback(int,int,int,long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=109,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller void startScroll(int,int,long,int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=440,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller boolean update(long),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=90,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller void updateScroll(float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=112,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation <init>(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,float,float,float,float,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation void addTiltScrollAnimation(org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,org.chromium.chrome.browser.compositor.layouts.components.LayoutTab,float,int,int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=1055,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createAnimatorSetForType$2fab410e$104f6ddb(int,org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,int,float,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=36,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createEnterStackAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=139,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createNewTabOpenedAnimatorSet$4078c09e(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[]),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=32,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createReachTopAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=36,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createTabFocusedAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=32,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createViewMoreAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=30,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float getScreenPositionInScrollDirection(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=24,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float getScreenSizeInScrollDirection(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=92,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float getStaticTabPosition(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=67,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation float getToolbarOffsetToLineUpWithBorder(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=24,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation boolean isDefaultDiscardDirectionPositive(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=82,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape <init>(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,float,float,float,float,float),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=106,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape void addTiltScrollAnimation(org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,org.chromium.chrome.browser.compositor.layouts.components.LayoutTab,float,int,int),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=592,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createEnterStackAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=59,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createNewTabOpenedAnimatorSet$4078c09e(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[]),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=210,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createReachTopAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],float),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=961,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createTabFocusedAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=256,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape org.chromium.chrome.browser.compositor.layouts.ChromeAnimation createViewMoreAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape float getScreenPositionInScrollDirection(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=54,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape float getScreenSizeInScrollDirection(),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) -.dex.method@0(size_without_padding=52,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape boolean isDefaultDiscardDirectionPositive(),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=113,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#<clinit>(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=225,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#<init>(android.content.Context,org.chromium.chrome.browser.compositor.layouts.phone.StackLayout),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=61,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#access$000(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack): org.chromium.chrome.browser.compositor.layouts.phone.StackLayout,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=100,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#allowOverscroll(): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=112,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeDiscardAlpha(float,float): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=136,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeDiscardScale(float,float,boolean): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=88,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeOverscrollPercent(): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=969,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabClippingVisibilityHelper(): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=1512,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabOffsetHelper(android.graphics.RectF): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=217,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabScrollOffsetHelper(): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=1008,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabTiltHelper(long,android.graphics.RectF): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=560,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabVisibilitySortingHelper(android.graphics.RectF): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=446,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#evenOutTabs(float,boolean): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=223,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#finishAnimationsIfDone(long,boolean): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=128,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getStackScale(android.graphics.RectF): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=87,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getTabAtPositon(float,float): org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#resetInputActionIndices(): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=219,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#springBack(long): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=217,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#updateOverscrollOffset(): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=90,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#approxScreen(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,float): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=64,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#cleanupTabs(): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=261,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#commitDiscard(long,boolean): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=253,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeSpacing(int): int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=318,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabPosition(long,android.graphics.RectF): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=322,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#contextChanged(android.content.Context): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=563,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#createStackTabs(boolean): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=1521,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#drag(long,float,float,float,float): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=813,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#finishAnimation(long): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=503,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#fling(long,float,float,float,float): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=68,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getCount(): int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=84,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getDefaultDiscardDirection(): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getMaxScroll(boolean): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=113,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getMaxTabHeight(): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=196,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getMinScroll(boolean): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=105,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getRange(float): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=94,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getScrollDimensionSize(): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=360,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getTabIndexAtPositon(float,float,float): int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=121,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getVisibleCount(): int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=96,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#isDisplayable(): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=400,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#notifySizeChanged$483d2f6e(int): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=107,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#onUpOrCancel(long): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=341,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#onUpdateCompositorAnimations(long,boolean): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=101,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#onUpdateViewAnimation(long,boolean): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=68,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#requestUpdate(): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=69,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#screenToScroll(float): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=69,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#scrollToScreen(float): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=134,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#setScrollTarget(float,boolean): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=121,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#setStackFocusInfo(float,int): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=244,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#setWarpState(boolean,boolean): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=919,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#startAnimation$62adfb33(long,int,int,int,boolean): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=77,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#startAnimation$6848a047(long,int): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=95,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#startAnimation$78b04ab8(long,int,int,boolean): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=137,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#stopScrollingMovement(long): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=142,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#swipeCancelled(long): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=266,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#tabClosingEffect(long,int): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=471,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#<clinit>(),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=146,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#<init>(android.content.Context),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$000(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=65,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$002(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,boolean): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$100(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$200(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$300(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): long,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$400(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): int,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$500(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=176,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#adjustDuration(int,int,int): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=71,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#getDeceleration(int): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=97,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#getSplineDeceleration(int): double,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=115,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#getSplineFlingDistance(int): double,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=220,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#onEdgeReached(): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=167,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#startSpringback$4868d30e(int,int): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=218,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#continueWhenFinished(long): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=66,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#finish(): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=660,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#fling(int,int,int,int,int,long): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=138,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#springback(int,int,int,long): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=109,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#startScroll(int,int,long,int): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=440,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#update(long): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=90,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#updateScroll(float): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=112,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#<init>(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,float,float,float,float,float),object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#addTiltScrollAnimation(org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,org.chromium.chrome.browser.compositor.layouts.components.LayoutTab,float,int,int): void,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=1055,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createAnimatorSetForType$2fab410e$104f6ddb(int,org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,int,float,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=36,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createEnterStackAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=139,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createNewTabOpenedAnimatorSet$4078c09e(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[]): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=32,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createReachTopAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=36,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createTabFocusedAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=32,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createViewMoreAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=30,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#getScreenPositionInScrollDirection(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=24,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#getScreenSizeInScrollDirection(): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=92,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#getStaticTabPosition(): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=67,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#getToolbarOffsetToLineUpWithBorder(): float,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=24,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#isDefaultDiscardDirectionPositive(): boolean,object_path=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=82,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#<init>(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,float,float,float,float,float),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=106,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#addTiltScrollAnimation(org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,org.chromium.chrome.browser.compositor.layouts.components.LayoutTab,float,int,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=592,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createEnterStackAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=59,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createNewTabOpenedAnimatorSet$4078c09e(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[]): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=210,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createReachTopAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=961,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createTabFocusedAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=256,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createViewMoreAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#getScreenPositionInScrollDirection(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=54,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#getScreenSizeInScrollDirection(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) +.dex.method@0(size_without_padding=52,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#isDefaultDiscardDirectionPositive(): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=) .other@0(size_without_padding=4194304,padding=0,full_name=smalltest.so,object_path=,source_path=$APK/smalltest.so,flags={gen},num_aliases=1,component=) .other@0(size_without_padding=1048576,padding=0,full_name=assets/icudtl.dat,object_path=,source_path=third_party/icu/android/icudtl.dat,flags={},num_aliases=1,component=Internal>Android) .other@0(size_without_padding=1024,padding=0,full_name=res/drawable-v13/test.xml,object_path=,source_path=chrome/android/res/drawable/test.xml,flags={},num_aliases=1,component=)
diff --git a/tools/chrome_proxy/webdriver/https_previews.py b/tools/chrome_proxy/webdriver/https_previews.py index 5d246b4..3741a17 100644 --- a/tools/chrome_proxy/webdriver/https_previews.py +++ b/tools/chrome_proxy/webdriver/https_previews.py
@@ -103,6 +103,28 @@ t.LoadURL('https://mobilespeed-test.appspot.com/static/litepagetests/simple.html') self._AssertShowingLitePage(t, 'Hello world', 1) + # Verifies that a Lite Page pageload sends a DRP pingback. + # TODO(robertogden): Set this to M73 once merged. + @ChromeVersionEqualOrAfterM(74) + def testPingbackSent(self): + with TestDriver() as t: + enableLitePageServerPreviews(t) + t.AddChromeArg('--enable-data-reduction-proxy-force-pingback') + + # Navigate twice so that the first page sends a pingback. The second page + # can be anything since only the first pageload will send a pingback in + # this test. + t.LoadURL('https://mobilespeed-test.appspot.com/static/litepagetests/simple.html') + self._AssertShowingLitePage(t, 'Hello world', 1) + t.LoadURL('https://www.google.com') + + t.SleepUntilHistogramHasEntry("DataReductionProxy.Pingback.Succeeded") + # Verify one pingback attempt that was successful. + attempted = t.GetHistogram('DataReductionProxy.Pingback.Attempted') + self.assertEqual(1, attempted['count']) + succeeded = t.GetHistogram('DataReductionProxy.Pingback.Succeeded') + self.assertEqual(1, succeeded['count']) + # Verifies that a Lite Page is served when the main frame response is a # redirect to a URL that is not blacklisted. @ChromeVersionEqualOrAfterM(72) @@ -165,7 +187,8 @@ self.assertEqual(1, lite_page_responses) # Wait for intervention report to be attempted. - t.SleepUntilHistogramHasEntry("Net.Reporting.ReportDeliveredAttempts", 120) + t.SleepUntilHistogramHasEntry("Net.Reporting.ReportDeliveredAttempts", + 120) events = t.StopAndGetNetLog()["events"] # Collect IDs of expected reporting requests. @@ -173,8 +196,11 @@ for event in events: if not "params" in event or not "headers" in event["params"]: continue + header = event["params"]["headers"] - if ":path: /webreports?u=%s"%(urllib.quote_plus("https://mobilespeed-test.appspot.com/web-reports")) in header and "content-type: application/reports+json" in header: + quoted_report_url = urllib.quote_plus("https://mobilespeed-test.appspot.com/web-reports") + if ((":path: /webreports?u=%s" % quoted_report_url) in header + and "content-type: application/reports+json" in header): report_request_id.append(event["source"]["id"]) self.assertNotEqual(0, len(report_request_id)) @@ -182,8 +208,11 @@ ok_responses = 0 for id in report_request_id: for event in events: - if event["source"]["id"] != id or not "params" in event or not "headers" in event["params"]: + if (event["source"]["id"] != id + or not "params" in event + or not "headers" in event["params"]): continue + for value in event["params"]["headers"]: if ":status: 200" in value: ok_responses += 1
diff --git a/tools/determinism/deterministic_build_whitelist.pyl b/tools/determinism/deterministic_build_whitelist.pyl index ac4cb83..8c80b7b 100644 --- a/tools/determinism/deterministic_build_whitelist.pyl +++ b/tools/determinism/deterministic_build_whitelist.pyl
@@ -14,13 +14,13 @@ # TODO(sebmarchand): Remove this once all the files are deterministic. { # https://crbug.com/383340 + # TODO(thakis): Move android det bots to use two distinct build dirs, + # https://crbug.com/899438 'android': [ ], # https://crbug.com/330263 'linux': [ - # https://crbug.com/908463 - 'fontconfig_caches/df1acc8c-39d5-4a8b-8507-b1a7396ac3ac-le64.cache-7', ], 'linux_component': [ @@ -29,6 +29,8 @@ ], # https://crbug.com/330262 + # TODO(thakis): Move android det bots to use two distinct build dirs, + # https://crbug.com/899438 'mac': [ # ld64 in current Xcode versions is not deterministic. Most smaller binaries # are fine, but larger binaries often get different outputs.
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 160a8e7..9a8fde3 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -3939,6 +3939,7 @@ <int value="211" label="RFH_DOCUMENT_INTERFACE_BROKER_MISSING"/> <int value="212" label="RFPH_POST_MESSAGE_INVALID_SOURCE_ORIGIN"/> <int value="213" label="INVALID_INITIATOR_ORIGIN"/> + <int value="214" label="RFHI_BEGIN_NAVIGATION_MISSING_INITIATOR_ORIGIN"/> </enum> <enum name="BadMessageReasonExtensions"> @@ -15522,6 +15523,7 @@ <int value="529" label="VoiceInteractionHotwordEnabled"/> <int value="530" label="BrowserSwitcherChromePath"/> <int value="531" label="BrowserSwitcherChromeParameters"/> + <int value="532" label="DeviceWilcoDtcAllowed"/> </enum> <enum name="EnterprisePolicyInvalidations"> @@ -28657,6 +28659,8 @@ <int value="3" label="Shutting Down"/> <int value="4" label="Subscription Failure"/> <int value="5" label="Stopped"/> + <int value="6" label="Not started - No Account"/> + <int value="7" label="Not started - No refresh token"/> </enum> <enum name="IOSExternalURLRequestStatus"> @@ -57568,6 +57572,22 @@ <int value="2" label="People"/> </enum> +<enum name="WMIRefresherInitStatus"> + <int value="0" label="Success"/> + <int value="1" label="Local WMI Connection error"/> + <int value="2" label="Refresher creation error"/> + <int value="3" label="Refresher config error"/> + <int value="4" label="Add Enum error"/> +</enum> + +<enum name="WMIRefresherRefreshStatus"> + <int value="0" label="Success"/> + <int value="1" label="Call to Refresh failed"/> + <int value="2" label="Call to GetObjects failed"/> + <int value="3" label="Call to GetPropertyHandle failed"/> + <int value="4" label="Call to Read failed"/> +</enum> + <enum name="WorkerThreadExitCode"> <int value="0" label="NotTerminated"/> <int value="1" label="GracefullyTerminated"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 22e6036..b3dafa6c 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -52737,6 +52737,32 @@ </summary> </histogram> +<histogram name="Memory.Experimental.WMIRefresher.InitDiskIdleTimeConfigStatus" + enum="WMIRefresherInitStatus" expires_after="2019-09-30"> + <owner>sebmarchand@chromium.org</owner> + <summary> + The result of configuring the WMIRefresher to read the disk idle time + values. + </summary> +</histogram> + +<histogram name="Memory.Experimental.WMIRefresher.RefreshDiskIdleTimeDuration" + units="ms" expires_after="2019-09-30"> + <owner>sebmarchand@chromium.org</owner> + <summary> + The time it takes to do a refresh of the disk idle time value in the WMI + Refresher. + </summary> +</histogram> + +<histogram name="Memory.Experimental.WMIRefresher.RefreshDiskIdleTimeStatus" + enum="WMIRefresherRefreshStatus" expires_after="2019-09-30"> + <owner>sebmarchand@chromium.org</owner> + <summary> + The result of refreshing the disk idle time value in the WMIRefresher. + </summary> +</histogram> + <histogram name="Memory.Extension" units="KB"> <obsolete> Deprecated 11/2017. Replaced by Memory.Extension.PrivateMemoryFootprint. @@ -77885,6 +77911,10 @@ <histogram name="PageLoad.Clients.Ads.Resources.Bytes.TopLevelAds" units="KB" expires_after="2019-09-05"> + <obsolete> + Deprecated 02/2019. Replaced with + PageLoad.Clients.Ads.Bytes.MainFrame.Ads.Network. + </obsolete> <owner>jkarlin@chromium.org</owner> <owner>johnidel@chromium.org</owner> <summary> @@ -133145,6 +133175,15 @@ <affected-histogram name="PageLoad.Clients.Ads.Visible.Bytes"/> </histogram_suffixes> +<histogram_suffixes name="AdsPageLoadMetricsMainFrameBytes" separator="."> + <suffix base="true" name="MainFrame" + label="Only includes resources loaded directly in the main frame."/> + <suffix base="true" name="MainFrame.Ads" + label="Only includes resources loaded directly in the main frame that + were identified to be ad resources."/> + <affected-histogram name="PageLoad.Clients.Ads.Bytes"/> +</histogram_suffixes> + <histogram_suffixes name="AdsPageLoadMetricsNetworkBytes" separator="."> <suffix name="Network" label="The size (in KB) of all of resources that loaded over the @@ -133153,6 +133192,8 @@ <affected-histogram name="PageLoad.Clients.Ads.Bytes.AdFrames.Aggregate"/> <affected-histogram name="PageLoad.Clients.Ads.Bytes.AdFrames.PerFrame"/> <affected-histogram name="PageLoad.Clients.Ads.Bytes.FullPage"/> + <affected-histogram name="PageLoad.Clients.Ads.Bytes.MainFrame"/> + <affected-histogram name="PageLoad.Clients.Ads.Bytes.MainFrame.Ads"/> <affected-histogram name="PageLoad.Clients.Ads.NonVisible.Bytes.AdFrames.Aggregate"/> <affected-histogram
diff --git a/tools/perf/core/results_dashboard.py b/tools/perf/core/results_dashboard.py index f765c567..cb257400 100755 --- a/tools/perf/core/results_dashboard.py +++ b/tools/perf/core/results_dashboard.py
@@ -11,8 +11,8 @@ import calendar import datetime import httplib +import json import os -import shutil import subprocess import sys import traceback @@ -69,7 +69,7 @@ This function tries to send the given data to the dashboard. Args: - data: The JSON string to try to send. + data: The data to try to send. Must be JSON-serializable. data_label: string name of the data to be uploaded. This is only used for logging purpose. url: Performance Dashboard URL (including schema). @@ -93,6 +93,8 @@ data_type = ('histogram' if send_as_histograms else 'chartjson') + dashboard_data_str = json.dumps(data) + # When perf dashboard is overloaded, it takes sometimes to spin up new # instance. So sleep before retrying again. ( # For more details, see crbug.com/867379. @@ -103,11 +105,11 @@ print 'Sending %s result of %s to dashboard (attempt %i out of %i).' % ( data_type, data_label, i, num_retries) if send_as_histograms: - _SendHistogramJson(url, data, + _SendHistogramJson(url, dashboard_data_str, service_account_file, token_generator_callback) else: # TODO(eakuefner): Remove this logic once all bots use histograms. - _SendResultsJson(url, data) + _SendResultsJson(url, dashboard_data_str) all_data_uploaded = True break except SendResultsRetryException as e: @@ -137,18 +139,7 @@ test_name, bot, buildername, buildnumber, project, buildbucket, revisions_dict, is_reference_build, - perf_dashboard_machine_group, max_bytes=0, - output_path=''): - """Generates strings containing HistogramSet JSON. - - Args: - histograms_file: input filename - output_path: output filename. If empty, a temporary directory will be - created. - max_bytes: If non-zero, tries to produce files no larger than max_bytes. - (May generate a file that is larger than max_bytes if max_bytes is smaller - than a single Histogram.) - """ + perf_dashboard_machine_group): add_diagnostics_args = [] add_diagnostics_args.extend([ '--benchmarks', test_name, @@ -158,9 +149,6 @@ '--is_reference_build', 'true' if is_reference_build else '', ]) - if max_bytes: - add_diagnostics_args.extend(['--max_bytes', max_bytes]) - stdio_url = _MakeStdioUrl(test_name, buildername, buildnumber) if stdio_url: add_diagnostics_args.extend(['--log_urls_k', 'Buildbot stdio']) @@ -184,31 +172,21 @@ path_util.GetChromiumSrcDir(), 'third_party', 'catapult', 'tracing', 'bin', 'add_reserved_diagnostics') - output_dir = None - if not output_path: - output_dir = tempfile.mkdtemp() - output_path = os.path.join(output_dir, 'histograms.json') + tf = tempfile.NamedTemporaryFile(delete=False) + tf.close() + temp_histogram_output_file = tf.name cmd = ([sys.executable, add_reserved_diagnostics_path] + - add_diagnostics_args + ['--output_path', output_path]) + add_diagnostics_args + ['--output_path', temp_histogram_output_file]) try: - begin_time = time.time() subprocess.check_call(cmd) - end_time = time.time() - print 'Duration of adding diagnostics for %s: %d seconds' % ( - test_name, end_time - begin_time) - # TODO: Handle reference builds - - if output_dir: - for basename in os.listdir(output_dir): - yield file(os.path.join(output_dir, basename)).read() - else: - yield file(output_path).read() + with open(temp_histogram_output_file) as f: + hs = json.load(f) + return hs finally: - if output_dir: - shutil.rmtree(output_dir) + os.remove(temp_histogram_output_file) def MakeListOfPoints(charts, bot, test_name, buildername,
diff --git a/tools/perf/core/upload_results_to_perf_dashboard.py b/tools/perf/core/upload_results_to_perf_dashboard.py index 69b6d46..3afb2b3a 100755 --- a/tools/perf/core/upload_results_to_perf_dashboard.py +++ b/tools/perf/core/upload_results_to_perf_dashboard.py
@@ -12,6 +12,7 @@ import optparse import re import sys +import time import urllib from core import results_dashboard @@ -29,7 +30,7 @@ return int(re.search(r'{#(\d+)}', commit_pos).group(1)) -def _GenerateDashboardJSONs(options): +def _GetDashboardJson(options): main_revision = _GetMainRevision(options.got_revision_cp) revisions = _GetPerfDashboardRevisionsWithProperties( options.got_webrtc_revision, options.got_v8_revision, @@ -56,13 +57,9 @@ options.buildername, options.buildnumber, {}, reference_build, perf_dashboard_machine_group=options.perf_dashboard_machine_group) - dashboard_json = json.dumps(dashboard_json, indent=2, separators=(',', ': ')) - if options.output_json_file: - with open(options.output_json_file, 'w') as f: - f.write(dashboard_json) - yield dashboard_json + return dashboard_json -def _GenerateDashboardHistogramJSONs(options, max_bytes=0): +def _GetDashboardHistogramData(options): revisions = { '--chromium_commit_positions': _GetMainRevision(options.got_revision_cp), '--chromium_revisions': options.git_revision @@ -76,14 +73,18 @@ is_reference_build = 'reference' in options.name stripped_test_name = options.name.replace('.reference', '') - return results_dashboard.MakeHistogramSetWithDiagnostics( + begin_time = time.time() + hs = results_dashboard.MakeHistogramSetWithDiagnostics( histograms_file=options.results_file, test_name=stripped_test_name, bot=options.configuration_name, buildername=options.buildername, - buildnumber=options.buildnumber, max_bytes=max_bytes, - output_path=options.output_json_file, + buildnumber=options.buildnumber, project=options.project, buildbucket=options.buildbucket, revisions_dict=revisions, is_reference_build=is_reference_build, perf_dashboard_machine_group=options.perf_dashboard_machine_group) + end_time = time.time() + print 'Duration of adding diagnostics for %s: %d seconds' % ( + stripped_test_name, end_time - begin_time) + return hs def _CreateParser(): # Parse options @@ -124,22 +125,16 @@ print 'Error: Invalid perf dashboard machine group' return 1 - if options.send_as_histograms: - if options.output_json_file: - _GenerateDashboardHistogramJSONs(options) - # Clear output_json_file so that the next call will use mkdtemp. - options.output_json_file = '' - dashboard_jsons = _GenerateDashboardHistogramJSONs( - options, max_bytes=1<<20) + if not options.send_as_histograms: + dashboard_json = _GetDashboardJson(options) else: - dashboard_jsons = _GenerateDashboardJSONs(options) + dashboard_json = _GetDashboardHistogramData(options) - any_results = False - for dashboard_json in dashboard_jsons: - if not dashboard_json: - continue + if options.output_json_file: + json.dump(dashboard_json, options.output_json_file, + indent=4, separators=(',', ': ')) - any_results = True + if dashboard_json: if options.output_json_dashboard_url: # Dump dashboard url to file. dashboard_url = GetDashboardUrl(options.name, @@ -156,11 +151,9 @@ send_as_histograms=options.send_as_histograms, service_account_file=service_account_file): return 1 - - if not any_results: + else: # The upload didn't fail since there was no data to upload. print 'Warning: No perf dashboard JSON was produced.' - return 0 if __name__ == '__main__':
diff --git a/ui/accessibility/ax_node_data.h b/ui/accessibility/ax_node_data.h index fbbadb75..7f7d680 100644 --- a/ui/accessibility/ax_node_data.h +++ b/ui/accessibility/ax_node_data.h
@@ -97,8 +97,8 @@ // // Setting accessibility attributes. // - // Replaces an attribute if not present. This is safer than crashing via a - // DCHECK or doing nothing, because most likely that's what the caller would + // Replaces an attribute if present. This is safer than crashing via a DCHECK + // or doing nothing, because most likely replacing is what the caller would // have wanted or what existing code already assumes. //
diff --git a/ui/gfx/font_fallback_linux.cc b/ui/gfx/font_fallback_linux.cc index 9c2e99c..bab1fa2 100644 --- a/ui/gfx/font_fallback_linux.cc +++ b/ui/gfx/font_fallback_linux.cc
@@ -26,6 +26,18 @@ base::LazyInstance<FallbackCache>::Leaky g_fallback_cache = LAZY_INSTANCE_INITIALIZER; +std::string GetFilenameFromFcPattern(FcPattern* pattern) { + const char* c_filename = nullptr; + if (FcPatternGetString(pattern, FC_FILE, 0, + reinterpret_cast<FcChar8**>(const_cast<char**>( + &c_filename))) != FcResultMatch) { + return std::string(); + } + const char* sysroot = + reinterpret_cast<const char*>(FcConfigGetSysRoot(nullptr)); + return std::string(sysroot ? sysroot : "") + c_filename; +} + } // namespace std::vector<Font> GetFallbackFonts(const Font& font) { @@ -79,7 +91,7 @@ DCHECK(pattern); DCHECK(char_set); fallback_font_.name = GetFontName(pattern); - fallback_font_.filename = GetFontFilename(pattern); + fallback_font_.filename = GetFilenameFromFcPattern(pattern); fallback_font_.ttc_index = GetFontTtcIndex(pattern); fallback_font_.is_bold = IsFontBold(pattern); fallback_font_.is_italic = IsFontItalic(pattern); @@ -99,13 +111,6 @@ return std::string(reinterpret_cast<const char*>(familyName)); } - static std::string GetFontFilename(FcPattern* pattern) { - FcChar8* c_filename = nullptr; - if (FcPatternGetString(pattern, FC_FILE, 0, &c_filename) != FcResultMatch) - return std::string(); - return std::string(reinterpret_cast<const char*>(c_filename)); - } - static int GetFontTtcIndex(FcPattern* pattern) { int ttcIndex = -1; if (FcPatternGetInteger(pattern, FC_INDEX, 0, &ttcIndex) != FcResultMatch || @@ -209,10 +214,8 @@ // Ignore any fonts FontConfig knows about, but that we don't have // permission to read. - FcChar8* c_filename; - if (FcPatternGetString(pattern, FC_FILE, 0, &c_filename) != FcResultMatch) - continue; - if (access(reinterpret_cast<char*>(c_filename), R_OK)) + std::string filename = GetFilenameFromFcPattern(pattern); + if (access(filename.c_str(), R_OK)) continue; // Take only supported font formats on board.
diff --git a/ui/gfx/font_render_params_linux_unittest.cc b/ui/gfx/font_render_params_linux_unittest.cc index 28db6bc1..137e3a0 100644 --- a/ui/gfx/font_render_params_linux_unittest.cc +++ b/ui/gfx/font_render_params_linux_unittest.cc
@@ -59,35 +59,11 @@ DISALLOW_COPY_AND_ASSIGN(TestFontDelegate); }; -// Instructs Fontconfig to load |path|, an XML configuration file, into the -// current config, returning true on success. -bool LoadConfigFileIntoFontconfig(const base::FilePath& path) { - // Unlike other FcConfig functions, FcConfigParseAndLoad() doesn't default to - // the current config when passed NULL. So that's cool. - if (!FcConfigParseAndLoad( - FcConfigGetCurrent(), - reinterpret_cast<const FcChar8*>(path.value().c_str()), FcTrue)) { - LOG(ERROR) << "Fontconfig failed to load " << path.value(); - return false; - } - return true; -} - -// Writes |data| to a file in |temp_dir| and passes it to -// LoadConfigFileIntoFontconfig(). -bool LoadConfigDataIntoFontconfig(const base::FilePath& temp_dir, - const std::string& data) { - base::FilePath path; - if (!base::CreateTemporaryFileInDir(temp_dir, &path)) { - PLOG(ERROR) << "Unable to create temporary file in " << temp_dir.value(); - return false; - } - if (base::WriteFile(path, data.data(), data.size()) != - static_cast<int>(data.size())) { - PLOG(ERROR) << "Unable to write config data to " << path.value(); - return false; - } - return LoadConfigFileIntoFontconfig(path); +// Loads XML-formatted |data| into the current font configuration. +bool LoadConfigDataIntoFontconfig(const std::string& data) { + return FcConfigParseAndLoadFromMemory( + FcConfigGetCurrent(), reinterpret_cast<const FcChar8*>(data.c_str()), + FcTrue); } // Returns a Fontconfig <edit> stanza. @@ -129,7 +105,6 @@ class FontRenderParamsTest : public testing::Test { public: FontRenderParamsTest() { - CHECK(temp_dir_.CreateUniqueTempDir()); original_font_delegate_ = SkiaFontDelegate::instance(); SkiaFontDelegate::SetInstance(&test_font_delegate_); ClearFontRenderParamsCacheForTest(); @@ -152,7 +127,6 @@ } protected: - base::ScopedTempDir temp_dir_; const SkiaFontDelegate* original_font_delegate_; TestFontDelegate test_font_delegate_; @@ -162,7 +136,6 @@ TEST_F(FontRenderParamsTest, Default) { ASSERT_TRUE(LoadConfigDataIntoFontconfig( - temp_dir_.GetPath(), std::string(kFontconfigFileHeader) + // Specify the desired defaults via a font match rather than a pattern // match (since this is the style generally used in @@ -211,7 +184,6 @@ TEST_F(FontRenderParamsTest, Size) { ASSERT_TRUE(LoadConfigDataIntoFontconfig( - temp_dir_.GetPath(), std::string(kFontconfigFileHeader) + kFontconfigMatchPatternHeader + CreateFontconfigEditStanza("antialias", "bool", "true") + CreateFontconfigEditStanza("hinting", "bool", "true") + @@ -256,7 +228,6 @@ // Load a config that disables subpixel rendering for bold text and disables // hinting for italic text. ASSERT_TRUE(LoadConfigDataIntoFontconfig( - temp_dir_.GetPath(), std::string(kFontconfigFileHeader) + kFontconfigMatchPatternHeader + CreateFontconfigEditStanza("antialias", "bool", "true") + CreateFontconfigEditStanza("hinting", "bool", "true") + @@ -301,7 +272,6 @@ TEST_F(FontRenderParamsTest, Scalable) { // Load a config that only enables antialiasing for scalable fonts. ASSERT_TRUE(LoadConfigDataIntoFontconfig( - temp_dir_.GetPath(), std::string(kFontconfigFileHeader) + kFontconfigMatchPatternHeader + CreateFontconfigEditStanza("antialias", "bool", "false") + kFontconfigMatchFooter + kFontconfigMatchPatternHeader + @@ -318,7 +288,6 @@ TEST_F(FontRenderParamsTest, UseBitmaps) { // Load a config that enables embedded bitmaps for fonts <= 10 pixels. ASSERT_TRUE(LoadConfigDataIntoFontconfig( - temp_dir_.GetPath(), std::string(kFontconfigFileHeader) + kFontconfigMatchPatternHeader + CreateFontconfigEditStanza("embeddedbitmap", "bool", "false") + kFontconfigMatchFooter + kFontconfigMatchPatternHeader + @@ -339,7 +308,6 @@ // Load a config that disables antialiasing and hinting while requesting // subpixel rendering. ASSERT_TRUE(LoadConfigDataIntoFontconfig( - temp_dir_.GetPath(), std::string(kFontconfigFileHeader) + kFontconfigMatchPatternHeader + CreateFontconfigEditStanza("antialias", "bool", "false") + CreateFontconfigEditStanza("hinting", "bool", "false") + @@ -403,7 +371,6 @@ // Load a Fontconfig config that enables antialiasing but doesn't say anything // about subpixel rendering. ASSERT_TRUE(LoadConfigDataIntoFontconfig( - temp_dir_.GetPath(), std::string(kFontconfigFileHeader) + kFontconfigMatchPatternHeader + CreateFontconfigEditStanza("antialias", "bool", "true") + kFontconfigMatchFooter + kFontconfigFileFooter)); @@ -453,7 +420,6 @@ TEST_F(FontRenderParamsTest, SubstituteFamily) { // Configure Fontconfig to use Tinos for both Helvetica and Arimo. ASSERT_TRUE(LoadConfigDataIntoFontconfig( - temp_dir_.GetPath(), std::string(kFontconfigFileHeader) + CreateFontconfigAliasStanza("Helvetica", "Tinos") + kFontconfigMatchPatternHeader +
diff --git a/ui/message_center/lock_screen/empty_lock_screen_controller.cc b/ui/message_center/lock_screen/empty_lock_screen_controller.cc index e362dbcc..dae819b 100644 --- a/ui/message_center/lock_screen/empty_lock_screen_controller.cc +++ b/ui/message_center/lock_screen/empty_lock_screen_controller.cc
@@ -8,7 +8,8 @@ void EmptyLockScreenController::DismissLockScreenThenExecute( base::OnceClosure pending_callback, - base::OnceClosure cancel_callback) { + base::OnceClosure cancel_callback, + int message_id) { std::move(pending_callback).Run(); }
diff --git a/ui/message_center/lock_screen/empty_lock_screen_controller.h b/ui/message_center/lock_screen/empty_lock_screen_controller.h index ba91261..91adf33 100644 --- a/ui/message_center/lock_screen/empty_lock_screen_controller.h +++ b/ui/message_center/lock_screen/empty_lock_screen_controller.h
@@ -15,7 +15,8 @@ ~EmptyLockScreenController() override = default; void DismissLockScreenThenExecute(base::OnceClosure pending_callback, - base::OnceClosure cancal_callback) override; + base::OnceClosure cancal_callback, + int message_id) override; bool IsScreenLocked() const override; private:
diff --git a/ui/message_center/lock_screen/fake_lock_screen_controller.cc b/ui/message_center/lock_screen/fake_lock_screen_controller.cc index e236fa8..2be3b3b6 100644 --- a/ui/message_center/lock_screen/fake_lock_screen_controller.cc +++ b/ui/message_center/lock_screen/fake_lock_screen_controller.cc
@@ -11,7 +11,8 @@ void FakeLockScreenController::DismissLockScreenThenExecute( base::OnceClosure pending_callback, - base::OnceClosure cancel_callback) { + base::OnceClosure cancel_callback, + int message_id) { DCHECK(pending_callback) << "pending_callback must not be null"; if (!is_screen_locked_) {
diff --git a/ui/message_center/lock_screen/fake_lock_screen_controller.h b/ui/message_center/lock_screen/fake_lock_screen_controller.h index 4bc68b5..734b233 100644 --- a/ui/message_center/lock_screen/fake_lock_screen_controller.h +++ b/ui/message_center/lock_screen/fake_lock_screen_controller.h
@@ -15,7 +15,8 @@ ~FakeLockScreenController() override; void DismissLockScreenThenExecute(base::OnceClosure pending_callback, - base::OnceClosure cancal_callback) override; + base::OnceClosure cancal_callback, + int message_id) override; bool IsScreenLocked() const override; // Methods for tests:
diff --git a/ui/message_center/lock_screen/lock_screen_controller.h b/ui/message_center/lock_screen/lock_screen_controller.h index e8154ed..41d0c70b 100644 --- a/ui/message_center/lock_screen/lock_screen_controller.h +++ b/ui/message_center/lock_screen/lock_screen_controller.h
@@ -24,9 +24,9 @@ // the cancel callback is run. In other words, onlt one of the pending or // cancel callback must be run. The cancel callback may be run even when the // device is locked. - virtual void DismissLockScreenThenExecute( - base::OnceClosure pending_callback, - base::OnceClosure cancel_callback) = 0; + virtual void DismissLockScreenThenExecute(base::OnceClosure pending_callback, + base::OnceClosure cancel_callback, + int message_id = -1) = 0; // Returns the status of the device lock. True if locked, false otherwise. virtual bool IsScreenLocked() const = 0;
diff --git a/ui/ozone/platform/wayland/wayland_screen.cc b/ui/ozone/platform/wayland/wayland_screen.cc index a7a0b8b..19fb4050 100644 --- a/ui/ozone/platform/wayland/wayland_screen.cc +++ b/ui/ozone/platform/wayland/wayland_screen.cc
@@ -100,7 +100,9 @@ display::Display WaylandScreen::GetDisplayForAcceleratedWidget( gfx::AcceleratedWidget widget) const { auto* wayland_window = connection_->GetWindow(widget); - DCHECK(wayland_window); + // A window might be destroyed by this time on shutting down the browser. + if (!wayland_window) + return GetPrimaryDisplay(); const std::set<uint32_t> entered_outputs_ids = wayland_window->GetEnteredOutputsIds();
diff --git a/url/gurl.cc b/url/gurl.cc index 4cecabc5..84e7bf1 100644 --- a/url/gurl.cc +++ b/url/gurl.cc
@@ -372,6 +372,20 @@ return SchemeIs(url::kWsScheme) || SchemeIs(url::kWssScheme); } +bool GURL::SchemeIsCryptographic() const { + if (parsed_.scheme.len <= 0) + return false; + return SchemeIsCryptographic(scheme_piece()); +} + +bool GURL::SchemeIsCryptographic(base::StringPiece lower_ascii_scheme) { + DCHECK(base::IsStringASCII(lower_ascii_scheme)); + DCHECK(base::ToLowerASCII(lower_ascii_scheme) == lower_ascii_scheme); + + return lower_ascii_scheme == url::kHttpsScheme || + lower_ascii_scheme == url::kWssScheme; +} + int GURL::IntPort() const { if (parsed_.port.is_nonempty()) return url::ParsePort(spec_.data(), parsed_.port);
diff --git a/url/gurl.h b/url/gurl.h index 5bfa17f..1b0669e 100644 --- a/url/gurl.h +++ b/url/gurl.h
@@ -249,9 +249,10 @@ // is minimally trustworthy. For that, see Chromium's |IsOriginSecure| for a // higher-level and more complete semantics. See that function's documentation // for more detail. - bool SchemeIsCryptographic() const { - return SchemeIs(url::kHttpsScheme) || SchemeIs(url::kWssScheme); - } + bool SchemeIsCryptographic() const; + + // As above, but static. Parameter should be lower-case ASCII. + static bool SchemeIsCryptographic(base::StringPiece lower_ascii_scheme); // Returns true if the scheme is "blob". bool SchemeIsBlob() const {
diff --git a/url/gurl_unittest.cc b/url/gurl_unittest.cc index caf5dd4..379c04f 100644 --- a/url/gurl_unittest.cc +++ b/url/gurl_unittest.cc
@@ -765,6 +765,14 @@ EXPECT_FALSE(GURL("ws://foo.bar.com/").SchemeIsCryptographic()); } +TEST(GURLTest, SchemeIsCryptographicStatic) { + EXPECT_TRUE(GURL::SchemeIsCryptographic("https")); + EXPECT_TRUE(GURL::SchemeIsCryptographic("wss")); + EXPECT_FALSE(GURL::SchemeIsCryptographic("http")); + EXPECT_FALSE(GURL::SchemeIsCryptographic("ws")); + EXPECT_FALSE(GURL::SchemeIsCryptographic("ftp")); +} + TEST(GURLTest, SchemeIsBlob) { EXPECT_TRUE(GURL("BLOB://BAR/").SchemeIsBlob()); EXPECT_TRUE(GURL("blob://bar/").SchemeIsBlob());