diff --git a/DEPS b/DEPS index 31956234..d2eb95be 100644 --- a/DEPS +++ b/DEPS
@@ -130,7 +130,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': '3ebc2fd9fe647478531367a1a5168631b6f2014d', + 'catapult_revision': '280aff07f5fcea3aae2be27078648b4660da33b2', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -308,7 +308,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '8076c2854d339c96a1b008e72aa3b832e61e0f45', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '009150b7afe1f47dabc5537d0e42649bf7f193a3', # DevTools node modules. Used on Linux buildbots only. 'src/third_party/devtools-node-modules': {
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc index c5cb69b..37a37d1 100644 --- a/ash/accelerators/accelerator_controller.cc +++ b/ash/accelerators/accelerator_controller.cc
@@ -11,6 +11,7 @@ #include "ash/accelerators/accelerator_controller_delegate.h" #include "ash/accelerators/debug_commands.h" #include "ash/accessibility/accessibility_controller.h" +#include "ash/accessibility/accessibility_delegate.h" #include "ash/display/display_configuration_controller.h" #include "ash/display/display_move_window_util.h" #include "ash/focus_cycler.h" @@ -504,7 +505,7 @@ // When spoken feedback is enabled, we should neither toggle the list nor // consume the key since Search+Shift is one of the shortcuts the a11y // feature uses. crbug.com/132296 - if (Shell::Get()->accessibility_controller()->IsSpokenFeedbackEnabled()) + if (Shell::Get()->accessibility_delegate()->IsSpokenFeedbackEnabled()) return false; } return true; @@ -826,10 +827,8 @@ void HandleToggleSpokenFeedback() { base::RecordAction(UserMetricsAction("Accel_Toggle_Spoken_Feedback")); - AccessibilityController* controller = - Shell::Get()->accessibility_controller(); - controller->SetSpokenFeedbackEnabled(!controller->IsSpokenFeedbackEnabled(), - A11Y_NOTIFICATION_SHOW); + Shell::Get()->accessibility_delegate()->ToggleSpokenFeedback( + A11Y_NOTIFICATION_SHOW); } void HandleVolumeDown(mojom::VolumeController* volume_controller,
diff --git a/ash/accelerators/accelerator_controller_unittest.cc b/ash/accelerators/accelerator_controller_unittest.cc index 3c3eac50..0cb5deb5 100644 --- a/ash/accelerators/accelerator_controller_unittest.cc +++ b/ash/accelerators/accelerator_controller_unittest.cc
@@ -6,6 +6,7 @@ #include "ash/accelerators/accelerator_table.h" #include "ash/accessibility/accessibility_controller.h" +#include "ash/accessibility/accessibility_delegate.h" #include "ash/accessibility/test_accessibility_controller_client.h" #include "ash/ime/ime_controller.h" #include "ash/media_controller.h" @@ -822,8 +823,7 @@ app_list::test::TestAppListPresenter test_app_list_presenter; Shell::Get()->app_list()->SetAppListPresenter( test_app_list_presenter.CreateInterfacePtrAndBind()); - AccessibilityController* controller = - Shell::Get()->accessibility_controller(); + AccessibilityDelegate* delegate = Shell::Get()->accessibility_delegate(); // The press event should not toggle the AppList, the release should instead. EXPECT_FALSE( @@ -839,14 +839,12 @@ EXPECT_EQ(ui::VKEY_LWIN, GetPreviousAccelerator().key_code()); // When spoken feedback is on, the AppList should not toggle. - controller->SetSpokenFeedbackEnabled(true, A11Y_NOTIFICATION_NONE); - EXPECT_TRUE(controller->IsSpokenFeedbackEnabled()); + delegate->ToggleSpokenFeedback(A11Y_NOTIFICATION_NONE); EXPECT_FALSE( ProcessInController(ui::Accelerator(ui::VKEY_LWIN, ui::EF_NONE))); EXPECT_FALSE(ProcessInController( CreateReleaseAccelerator(ui::VKEY_LWIN, ui::EF_NONE))); - controller->SetSpokenFeedbackEnabled(false, A11Y_NOTIFICATION_NONE); - EXPECT_FALSE(controller->IsSpokenFeedbackEnabled()); + delegate->ToggleSpokenFeedback(A11Y_NOTIFICATION_NONE); RunAllPendingInMessageLoop(); EXPECT_EQ(1u, test_app_list_presenter.toggle_count());
diff --git a/ash/accelerators/spoken_feedback_toggler.cc b/ash/accelerators/spoken_feedback_toggler.cc index 5a5ac3d..4a3b243 100644 --- a/ash/accelerators/spoken_feedback_toggler.cc +++ b/ash/accelerators/spoken_feedback_toggler.cc
@@ -7,7 +7,7 @@ #include <utility> #include "ash/accelerators/key_hold_detector.h" -#include "ash/accessibility/accessibility_controller.h" +#include "ash/accessibility/accessibility_delegate.h" #include "ash/public/cpp/accessibility_types.h" #include "ash/shell.h" #include "ui/events/event.h" @@ -53,10 +53,8 @@ void SpokenFeedbackToggler::OnKeyHold(const ui::KeyEvent* event) { if (!toggled_) { toggled_ = true; - AccessibilityController* controller = - Shell::Get()->accessibility_controller(); - controller->SetSpokenFeedbackEnabled(!controller->IsSpokenFeedbackEnabled(), - A11Y_NOTIFICATION_SHOW); + Shell::Get()->accessibility_delegate()->ToggleSpokenFeedback( + A11Y_NOTIFICATION_SHOW); } }
diff --git a/ash/accelerators/spoken_feedback_toggler_unittest.cc b/ash/accelerators/spoken_feedback_toggler_unittest.cc index 9efc979..543cd52 100644 --- a/ash/accelerators/spoken_feedback_toggler_unittest.cc +++ b/ash/accelerators/spoken_feedback_toggler_unittest.cc
@@ -3,7 +3,7 @@ // found in the LICENSE file. #include "ash/accelerators/spoken_feedback_toggler.h" -#include "ash/accessibility/accessibility_controller.h" +#include "ash/accessibility/accessibility_delegate.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" #include "ash/wm/window_util.h" @@ -17,35 +17,34 @@ TEST_F(SpokenFeedbackTogglerTest, Basic) { SpokenFeedbackToggler::ScopedEnablerForTest scoped; - AccessibilityController* controller = - Shell::Get()->accessibility_controller(); + AccessibilityDelegate* delegate = Shell::Get()->accessibility_delegate(); ui::test::EventGenerator& generator = GetEventGenerator(); - EXPECT_FALSE(controller->IsSpokenFeedbackEnabled()); + EXPECT_FALSE(delegate->IsSpokenFeedbackEnabled()); generator.PressKey(ui::VKEY_F6, ui::EF_SHIFT_DOWN); - EXPECT_FALSE(controller->IsSpokenFeedbackEnabled()); + EXPECT_FALSE(delegate->IsSpokenFeedbackEnabled()); generator.ReleaseKey(ui::VKEY_F6, 0); - EXPECT_FALSE(controller->IsSpokenFeedbackEnabled()); + EXPECT_FALSE(delegate->IsSpokenFeedbackEnabled()); // Click and hold toggles the spoken feedback. generator.PressKey(ui::VKEY_F6, ui::EF_SHIFT_DOWN); - EXPECT_FALSE(controller->IsSpokenFeedbackEnabled()); + EXPECT_FALSE(delegate->IsSpokenFeedbackEnabled()); generator.PressKey(ui::VKEY_F6, ui::EF_SHIFT_DOWN); - EXPECT_TRUE(controller->IsSpokenFeedbackEnabled()); + EXPECT_TRUE(delegate->IsSpokenFeedbackEnabled()); generator.PressKey(ui::VKEY_F6, ui::EF_SHIFT_DOWN); - EXPECT_TRUE(controller->IsSpokenFeedbackEnabled()); + EXPECT_TRUE(delegate->IsSpokenFeedbackEnabled()); generator.ReleaseKey(ui::VKEY_F6, 0); - EXPECT_TRUE(controller->IsSpokenFeedbackEnabled()); + EXPECT_TRUE(delegate->IsSpokenFeedbackEnabled()); // toggle again generator.PressKey(ui::VKEY_F6, ui::EF_SHIFT_DOWN); - EXPECT_TRUE(controller->IsSpokenFeedbackEnabled()); + EXPECT_TRUE(delegate->IsSpokenFeedbackEnabled()); generator.PressKey(ui::VKEY_F6, ui::EF_SHIFT_DOWN); - EXPECT_FALSE(controller->IsSpokenFeedbackEnabled()); + EXPECT_FALSE(delegate->IsSpokenFeedbackEnabled()); generator.PressKey(ui::VKEY_F6, ui::EF_SHIFT_DOWN); - EXPECT_FALSE(controller->IsSpokenFeedbackEnabled()); + EXPECT_FALSE(delegate->IsSpokenFeedbackEnabled()); generator.ReleaseKey(ui::VKEY_F6, 0); - EXPECT_FALSE(controller->IsSpokenFeedbackEnabled()); + EXPECT_FALSE(delegate->IsSpokenFeedbackEnabled()); } TEST_F(SpokenFeedbackTogglerTest, PassThroughEvents) {
diff --git a/ash/accessibility/accessibility_controller.cc b/ash/accessibility/accessibility_controller.cc index 70010e9c..8da5d7f 100644 --- a/ash/accessibility/accessibility_controller.cc +++ b/ash/accessibility/accessibility_controller.cc
@@ -29,10 +29,13 @@ namespace ash { namespace { -void NotifyAccessibilityStatusChanged( - AccessibilityNotificationVisibility notification_visibility) { +void NotifyAccessibilityStatusChanged() { Shell::Get()->system_tray_notifier()->NotifyAccessibilityStatusChanged( - notification_visibility); + A11Y_NOTIFICATION_NONE); +} + +PrefService* GetActivePrefService() { + return Shell::Get()->session_controller()->GetActivePrefService(); } } // namespace @@ -61,8 +64,6 @@ registry->RegisterBooleanPref(prefs::kAccessibilityMonoAudioEnabled, false); registry->RegisterBooleanPref(prefs::kAccessibilityScreenMagnifierEnabled, false); - registry->RegisterBooleanPref(prefs::kAccessibilitySpokenFeedbackEnabled, - false); return; } @@ -73,7 +74,6 @@ registry->RegisterForeignPref(prefs::kAccessibilityLargeCursorDipSize); registry->RegisterForeignPref(prefs::kAccessibilityMonoAudioEnabled); registry->RegisterForeignPref(prefs::kAccessibilityScreenMagnifierEnabled); - registry->RegisterForeignPref(prefs::kAccessibilitySpokenFeedbackEnabled); } void AccessibilityController::BindRequest( @@ -117,22 +117,6 @@ return mono_audio_enabled_; } -void AccessibilityController::SetSpokenFeedbackEnabled( - bool enabled, - AccessibilityNotificationVisibility notify) { - PrefService* prefs = GetActivePrefService(); - if (!prefs) - return; - spoken_feedback_notification_ = notify; - prefs->SetBoolean(prefs::kAccessibilitySpokenFeedbackEnabled, enabled); - prefs->CommitPendingWrite(); - spoken_feedback_notification_ = A11Y_NOTIFICATION_NONE; -} - -bool AccessibilityController::IsSpokenFeedbackEnabled() const { - return spoken_feedback_enabled_; -} - void AccessibilityController::TriggerAccessibilityAlert( mojom::AccessibilityAlert alert) { if (client_) @@ -154,11 +138,6 @@ ObservePrefs(prefs); } -void AccessibilityController::SetPrefServiceForTest(PrefService* prefs) { - pref_service_for_test_ = prefs; - ObservePrefs(prefs); -} - void AccessibilityController::FlushMojoForTest() { client_.FlushForTesting(); } @@ -183,22 +162,11 @@ prefs::kAccessibilityMonoAudioEnabled, base::Bind(&AccessibilityController::UpdateMonoAudioFromPref, base::Unretained(this))); - pref_change_registrar_->Add( - prefs::kAccessibilitySpokenFeedbackEnabled, - base::Bind(&AccessibilityController::UpdateSpokenFeedbackFromPref, - base::Unretained(this))); // Load current state. UpdateHighContrastFromPref(); UpdateLargeCursorFromPref(); UpdateMonoAudioFromPref(); - UpdateSpokenFeedbackFromPref(); -} - -PrefService* AccessibilityController::GetActivePrefService() const { - if (pref_service_for_test_) - return pref_service_for_test_; - return Shell::Get()->session_controller()->GetActivePrefService(); } void AccessibilityController::UpdateHighContrastFromPref() { @@ -211,7 +179,7 @@ high_contrast_enabled_ = enabled; - NotifyAccessibilityStatusChanged(A11Y_NOTIFICATION_NONE); + NotifyAccessibilityStatusChanged(); // Under mash the UI service (window server) handles high contrast mode. if (Shell::GetAshConfig() == Config::MASH) { @@ -243,7 +211,7 @@ large_cursor_enabled_ = enabled; large_cursor_size_in_dip_ = size; - NotifyAccessibilityStatusChanged(A11Y_NOTIFICATION_NONE); + NotifyAccessibilityStatusChanged(); ShellPort::Get()->SetCursorSize( large_cursor_enabled_ ? ui::CursorSize::kLarge : ui::CursorSize::kNormal); @@ -260,24 +228,8 @@ mono_audio_enabled_ = enabled; - NotifyAccessibilityStatusChanged(A11Y_NOTIFICATION_NONE); + NotifyAccessibilityStatusChanged(); chromeos::CrasAudioHandler::Get()->SetOutputMonoEnabled(enabled); } -void AccessibilityController::UpdateSpokenFeedbackFromPref() { - PrefService* prefs = GetActivePrefService(); - const bool enabled = - prefs->GetBoolean(prefs::kAccessibilitySpokenFeedbackEnabled); - - if (spoken_feedback_enabled_ == enabled) - return; - - spoken_feedback_enabled_ = enabled; - - NotifyAccessibilityStatusChanged(spoken_feedback_notification_); - // TODO(warx): Chrome observes prefs change and turns on/off spoken feedback. - // Define a mojo call to control toggling spoken feedback (ChromeVox) once - // prefs ownership and registration is moved to ash. -} - } // namespace ash
diff --git a/ash/accessibility/accessibility_controller.h b/ash/accessibility/accessibility_controller.h index 9c14335..be6c88b2 100644 --- a/ash/accessibility/accessibility_controller.h +++ b/ash/accessibility/accessibility_controller.h
@@ -9,7 +9,6 @@ #include "ash/ash_constants.h" #include "ash/ash_export.h" -#include "ash/public/cpp/accessibility_types.h" #include "ash/public/interfaces/accessibility_controller.mojom.h" #include "ash/session/session_observer.h" #include "base/macros.h" @@ -50,10 +49,6 @@ void SetMonoAudioEnabled(bool enabled); bool IsMonoAudioEnabled() const; - void SetSpokenFeedbackEnabled(bool enabled, - AccessibilityNotificationVisibility notify); - bool IsSpokenFeedbackEnabled() const; - // Triggers an accessibility alert to give the user feedback. void TriggerAccessibilityAlert(mojom::AccessibilityAlert alert); @@ -64,9 +59,6 @@ void OnSigninScreenPrefServiceInitialized(PrefService* prefs) override; void OnActiveUserPrefServiceChanged(PrefService* prefs) override; - // TODO(warx): remove this method for browser tests (crbug.com/789285). - void SetPrefServiceForTest(PrefService* prefs); - // Test helpers: void FlushMojoForTest(); @@ -75,14 +67,9 @@ // initial settings. void ObservePrefs(PrefService* prefs); - // Returns |pref_service_for_test_| if not null, otherwise return - // SessionController::GetActivePrefService(). - PrefService* GetActivePrefService() const; - void UpdateHighContrastFromPref(); void UpdateLargeCursorFromPref(); void UpdateMonoAudioFromPref(); - void UpdateSpokenFeedbackFromPref(); service_manager::Connector* connector_ = nullptr; std::unique_ptr<PrefChangeRegistrar> pref_change_registrar_; @@ -97,12 +84,6 @@ bool large_cursor_enabled_ = false; int large_cursor_size_in_dip_ = kDefaultLargeCursorSize; bool mono_audio_enabled_ = false; - bool spoken_feedback_enabled_ = false; - - AccessibilityNotificationVisibility spoken_feedback_notification_ = - A11Y_NOTIFICATION_NONE; - - PrefService* pref_service_for_test_ = nullptr; DISALLOW_COPY_AND_ASSIGN(AccessibilityController); };
diff --git a/ash/accessibility/accessibility_controller_unittest.cc b/ash/accessibility/accessibility_controller_unittest.cc index 5f1e64e..b441e91 100644 --- a/ash/accessibility/accessibility_controller_unittest.cc +++ b/ash/accessibility/accessibility_controller_unittest.cc
@@ -23,15 +23,10 @@ // AccessibilityObserver: void OnAccessibilityStatusChanged( AccessibilityNotificationVisibility notify) override { - if (notify == A11Y_NOTIFICATION_NONE) { - ++notification_none_changed_; - } else if (notify == A11Y_NOTIFICATION_SHOW) { - ++notification_show_changed_; - } + changed_++; } - int notification_none_changed_ = 0; - int notification_show_changed_ = 0; + int changed_ = 0; private: DISALLOW_COPY_AND_ASSIGN(TestAccessibilityObserver); @@ -48,8 +43,6 @@ EXPECT_TRUE(prefs->FindPreference(prefs::kAccessibilityMonoAudioEnabled)); EXPECT_TRUE( prefs->FindPreference(prefs::kAccessibilityScreenMagnifierEnabled)); - EXPECT_TRUE( - prefs->FindPreference(prefs::kAccessibilitySpokenFeedbackEnabled)); } TEST_F(AccessibilityControllerTest, SetHighContrastEnabled) { @@ -59,15 +52,15 @@ TestAccessibilityObserver observer; Shell::Get()->system_tray_notifier()->AddAccessibilityObserver(&observer); - EXPECT_EQ(0, observer.notification_none_changed_); + EXPECT_EQ(0, observer.changed_); controller->SetHighContrastEnabled(true); EXPECT_TRUE(controller->IsHighContrastEnabled()); - EXPECT_EQ(1, observer.notification_none_changed_); + EXPECT_EQ(1, observer.changed_); controller->SetHighContrastEnabled(false); EXPECT_FALSE(controller->IsHighContrastEnabled()); - EXPECT_EQ(2, observer.notification_none_changed_); + EXPECT_EQ(2, observer.changed_); Shell::Get()->system_tray_notifier()->RemoveAccessibilityObserver(&observer); } @@ -79,15 +72,15 @@ TestAccessibilityObserver observer; Shell::Get()->system_tray_notifier()->AddAccessibilityObserver(&observer); - EXPECT_EQ(0, observer.notification_none_changed_); + EXPECT_EQ(0, observer.changed_); controller->SetLargeCursorEnabled(true); EXPECT_TRUE(controller->IsLargeCursorEnabled()); - EXPECT_EQ(1, observer.notification_none_changed_); + EXPECT_EQ(1, observer.changed_); controller->SetLargeCursorEnabled(false); EXPECT_FALSE(controller->IsLargeCursorEnabled()); - EXPECT_EQ(2, observer.notification_none_changed_); + EXPECT_EQ(2, observer.changed_); Shell::Get()->system_tray_notifier()->RemoveAccessibilityObserver(&observer); } @@ -116,38 +109,15 @@ TestAccessibilityObserver observer; Shell::Get()->system_tray_notifier()->AddAccessibilityObserver(&observer); - EXPECT_EQ(0, observer.notification_none_changed_); + EXPECT_EQ(0, observer.changed_); controller->SetMonoAudioEnabled(true); EXPECT_TRUE(controller->IsMonoAudioEnabled()); - EXPECT_EQ(1, observer.notification_none_changed_); + EXPECT_EQ(1, observer.changed_); controller->SetMonoAudioEnabled(false); EXPECT_FALSE(controller->IsMonoAudioEnabled()); - EXPECT_EQ(2, observer.notification_none_changed_); - - Shell::Get()->system_tray_notifier()->RemoveAccessibilityObserver(&observer); -} - -TEST_F(AccessibilityControllerTest, SetSpokenFeedbackEnabled) { - AccessibilityController* controller = - Shell::Get()->accessibility_controller(); - EXPECT_FALSE(controller->IsSpokenFeedbackEnabled()); - - TestAccessibilityObserver observer; - Shell::Get()->system_tray_notifier()->AddAccessibilityObserver(&observer); - EXPECT_EQ(0, observer.notification_none_changed_); - EXPECT_EQ(0, observer.notification_show_changed_); - - controller->SetSpokenFeedbackEnabled(true, A11Y_NOTIFICATION_SHOW); - EXPECT_TRUE(controller->IsSpokenFeedbackEnabled()); - EXPECT_EQ(0, observer.notification_none_changed_); - EXPECT_EQ(1, observer.notification_show_changed_); - - controller->SetSpokenFeedbackEnabled(false, A11Y_NOTIFICATION_NONE); - EXPECT_FALSE(controller->IsSpokenFeedbackEnabled()); - EXPECT_EQ(1, observer.notification_none_changed_); - EXPECT_EQ(1, observer.notification_show_changed_); + EXPECT_EQ(2, observer.changed_); Shell::Get()->system_tray_notifier()->RemoveAccessibilityObserver(&observer); }
diff --git a/ash/accessibility/accessibility_delegate.h b/ash/accessibility/accessibility_delegate.h index 8e8deb0..15870f0b 100644 --- a/ash/accessibility/accessibility_delegate.h +++ b/ash/accessibility/accessibility_delegate.h
@@ -21,6 +21,13 @@ public: virtual ~AccessibilityDelegate() {} + // Invoked to toggle spoken feedback for accessibility + virtual void ToggleSpokenFeedback( + AccessibilityNotificationVisibility notify) = 0; + + // Returns true if spoken feedback is enabled. + virtual bool IsSpokenFeedbackEnabled() const = 0; + // Invoked to enable the screen magnifier. virtual void SetMagnifierEnabled(bool enabled) = 0;
diff --git a/ash/accessibility/default_accessibility_delegate.cc b/ash/accessibility/default_accessibility_delegate.cc index 2da9584..f3e6183 100644 --- a/ash/accessibility/default_accessibility_delegate.cc +++ b/ash/accessibility/default_accessibility_delegate.cc
@@ -15,6 +15,10 @@ DefaultAccessibilityDelegate::~DefaultAccessibilityDelegate() = default; +bool DefaultAccessibilityDelegate::IsSpokenFeedbackEnabled() const { + return spoken_feedback_enabled_; +} + void DefaultAccessibilityDelegate::SetMagnifierEnabled(bool enabled) { screen_magnifier_enabled_ = enabled; } @@ -98,7 +102,7 @@ bool DefaultAccessibilityDelegate::ShouldShowAccessibilityMenu() const { AccessibilityController* controller = Shell::Get()->accessibility_controller(); - return controller->IsSpokenFeedbackEnabled() || screen_magnifier_enabled_ || + return spoken_feedback_enabled_ || screen_magnifier_enabled_ || autoclick_enabled_ || virtual_keyboard_enabled_ || controller->IsMonoAudioEnabled() || controller->IsLargeCursorEnabled() || @@ -111,6 +115,11 @@ void DefaultAccessibilityDelegate::SilenceSpokenFeedback() const {} +void DefaultAccessibilityDelegate::ToggleSpokenFeedback( + AccessibilityNotificationVisibility notify) { + spoken_feedback_enabled_ = !spoken_feedback_enabled_; +} + void DefaultAccessibilityDelegate::SaveScreenMagnifierScale(double scale) {} double DefaultAccessibilityDelegate::GetSavedScreenMagnifierScale() {
diff --git a/ash/accessibility/default_accessibility_delegate.h b/ash/accessibility/default_accessibility_delegate.h index 71fe6946..74ca6f193 100644 --- a/ash/accessibility/default_accessibility_delegate.h +++ b/ash/accessibility/default_accessibility_delegate.h
@@ -17,6 +17,7 @@ DefaultAccessibilityDelegate(); ~DefaultAccessibilityDelegate() override; + bool IsSpokenFeedbackEnabled() const override; void SetMagnifierEnabled(bool enabled) override; bool IsMagnifierEnabled() const override; void SetAutoclickEnabled(bool enabled) override; @@ -40,6 +41,8 @@ bool ShouldShowAccessibilityMenu() const override; bool IsBrailleDisplayConnected() const override; void SilenceSpokenFeedback() const override; + void ToggleSpokenFeedback( + AccessibilityNotificationVisibility notify) override; void SaveScreenMagnifierScale(double scale) override; double GetSavedScreenMagnifierScale() override; bool ShouldToggleSpokenFeedbackViaTouch() override; @@ -49,6 +52,7 @@ void HandleAccessibilityGesture(ui::AXGesture gesture) override; private: + bool spoken_feedback_enabled_ = false; bool screen_magnifier_enabled_ = false; bool autoclick_enabled_ = false; bool virtual_keyboard_enabled_ = false;
diff --git a/ash/ash_touch_exploration_manager_chromeos.cc b/ash/ash_touch_exploration_manager_chromeos.cc index c090a49b..a453885 100644 --- a/ash/ash_touch_exploration_manager_chromeos.cc +++ b/ash/ash_touch_exploration_manager_chromeos.cc
@@ -7,7 +7,6 @@ #include <memory> #include <vector> -#include "ash/accessibility/accessibility_controller.h" #include "ash/accessibility/accessibility_delegate.h" #include "ash/accessibility/accessibility_focus_ring_controller.h" #include "ash/keyboard/keyboard_observer_register.h" @@ -68,7 +67,7 @@ } void AshTouchExplorationManager::SilenceSpokenFeedback() { - if (Shell::Get()->accessibility_controller()->IsSpokenFeedbackEnabled()) + if (Shell::Get()->accessibility_delegate()->IsSpokenFeedbackEnabled()) Shell::Get()->accessibility_delegate()->SilenceSpokenFeedback(); } @@ -136,12 +135,8 @@ void AshTouchExplorationManager::ToggleSpokenFeedback() { AccessibilityDelegate* delegate = Shell::Get()->accessibility_delegate(); - if (delegate->ShouldToggleSpokenFeedbackViaTouch()) { - AccessibilityController* controller = - Shell::Get()->accessibility_controller(); - controller->SetSpokenFeedbackEnabled(!controller->IsSpokenFeedbackEnabled(), - ash::A11Y_NOTIFICATION_SHOW); - } + if (delegate->ShouldToggleSpokenFeedbackViaTouch()) + delegate->ToggleSpokenFeedback(ash::A11Y_NOTIFICATION_SHOW); } void AshTouchExplorationManager::OnWindowActivated( @@ -185,7 +180,7 @@ aura::client::kAccessibilityTouchExplorationPassThrough); const bool spoken_feedback_enabled = - Shell::Get()->accessibility_controller()->IsSpokenFeedbackEnabled(); + Shell::Get()->accessibility_delegate()->IsSpokenFeedbackEnabled(); if (!touch_accessibility_enabler_) { // Always enable gesture to toggle spoken feedback.
diff --git a/ash/frame/custom_frame_view_ash.cc b/ash/frame/custom_frame_view_ash.cc index 6b85e86..23e918d 100644 --- a/ash/frame/custom_frame_view_ash.cc +++ b/ash/frame/custom_frame_view_ash.cc
@@ -162,25 +162,6 @@ } // namespace -//////////////////////////////////////////////////////////////////////////////// -// CustomFrameViewAshBase, public: - -CustomFrameViewAshBase::CustomFrameViewAshBase() { - Shell::Get()->AddShellObserver(this); -} - -CustomFrameViewAshBase::~CustomFrameViewAshBase() { - Shell::Get()->RemoveShellObserver(this); -} - -void CustomFrameViewAshBase::OnOverviewModeStarting() { - SetShouldPaintHeader(false); -} - -void CustomFrameViewAshBase::OnOverviewModeEnded() { - SetShouldPaintHeader(true); -} - // static bool CustomFrameViewAsh::use_empty_minimum_size_for_test_ = false; @@ -285,7 +266,7 @@ int onscreen_height = header_height_ ? *header_height_ : header_view_->GetPreferredOnScreenHeight(); - if (onscreen_height == 0) { + if (onscreen_height == 0 || !enabled()) { header_view_->SetVisible(false); } else { const int height = @@ -340,9 +321,12 @@ new CustomFrameViewAshWindowStateDelegate(window_state, this, enable_immersive))); } + Shell::Get()->AddShellObserver(this); } -CustomFrameViewAsh::~CustomFrameViewAsh() = default; +CustomFrameViewAsh::~CustomFrameViewAsh() { + Shell::Get()->RemoveShellObserver(this); +} void CustomFrameViewAsh::InitImmersiveFullscreenControllerForView( ImmersiveFullscreenController* immersive_fullscreen_controller) { @@ -428,6 +412,8 @@ } void CustomFrameViewAsh::Layout() { + if (!enabled()) + return; views::NonClientFrameView::Layout(); aura::Window* frame_window = frame_->GetNativeWindow(); frame_window->SetProperty(aura::client::kTopViewInset, @@ -439,7 +425,7 @@ } gfx::Size CustomFrameViewAsh::GetMinimumSize() const { - if (use_empty_minimum_size_for_test_) + if (use_empty_minimum_size_for_test_ || !enabled()) return gfx::Size(); gfx::Size min_client_view_size(frame_->client_view()->GetMinimumSize()); @@ -495,6 +481,14 @@ header_view_->SetShouldPaintHeader(paint); } +void CustomFrameViewAsh::OnOverviewModeStarting() { + SetShouldPaintHeader(false); +} + +void CustomFrameViewAsh::OnOverviewModeEnded() { + SetShouldPaintHeader(true); +} + //////////////////////////////////////////////////////////////////////////////// // CustomFrameViewAsh, private: @@ -513,9 +507,9 @@ } int CustomFrameViewAsh::NonClientTopBorderHeight() const { - // The frame should not occupy the window area when it's not visible - // or in fullscreen. - if (frame_->IsFullscreen() || !visible()) + // The frame should not occupy the window area when it's in fullscreen, + // not visible or disabled. + if (frame_->IsFullscreen() || !visible() || !enabled()) return 0; const bool should_hide_titlebar_in_tablet_mode =
diff --git a/ash/frame/custom_frame_view_ash.h b/ash/frame/custom_frame_view_ash.h index 1863663..ee408094 100644 --- a/ash/frame/custom_frame_view_ash.h +++ b/ash/frame/custom_frame_view_ash.h
@@ -32,30 +32,14 @@ kVisibleDisabled, }; -// A base class for v2 and ARC apps to hide header in overview mode. -class ASH_EXPORT CustomFrameViewAshBase : public views::NonClientFrameView, - public ash::ShellObserver { - public: - CustomFrameViewAshBase(); - ~CustomFrameViewAshBase() override; - - // ash::ShellObserver: - void OnOverviewModeStarting() override; - void OnOverviewModeEnded() override; - - // If |paint| is false, we should not paint the header. Used for overview mode - // with OnOverviewModeStarting() and OnOverviewModeEnded() to hide/show the - // header of v2 and ARC apps. - virtual void SetShouldPaintHeader(bool paint) {} -}; - // A NonClientFrameView used for packaged apps, dialogs and other non-browser // windows. It supports immersive fullscreen. When in immersive fullscreen, the // client view takes up the entire widget and the window header is an overlay. // The window header overlay slides onscreen when the user hovers the mouse at // the top of the screen. See also views::CustomFrameView and // BrowserNonClientFrameViewAsh. -class ASH_EXPORT CustomFrameViewAsh : public CustomFrameViewAshBase { +class ASH_EXPORT CustomFrameViewAsh : public views::NonClientFrameView, + public ash::ShellObserver { public: // Internal class name. static const char kViewClassName[]; @@ -116,8 +100,14 @@ void SchedulePaintInRect(const gfx::Rect& r) override; void SetVisible(bool visible) override; - // ash::CustomFrameViewAshBase: - void SetShouldPaintHeader(bool paint) override; + // If |paint| is false, we should not paint the header. Used for overview mode + // with OnOverviewModeStarting() and OnOverviewModeEnded() to hide/show the + // header of v2 and ARC apps. + virtual void SetShouldPaintHeader(bool paint); + + // ash::ShellObserver: + void OnOverviewModeStarting() override; + void OnOverviewModeEnded() override; const views::View* GetAvatarIconViewForTest() const;
diff --git a/ash/system/ime_menu/ime_menu_tray.cc b/ash/system/ime_menu/ime_menu_tray.cc index 72d58e9..a6946d5 100644 --- a/ash/system/ime_menu/ime_menu_tray.cc +++ b/ash/system/ime_menu/ime_menu_tray.cc
@@ -4,7 +4,6 @@ #include "ash/system/ime_menu/ime_menu_tray.h" -#include "ash/accessibility/accessibility_controller.h" #include "ash/accessibility/accessibility_delegate.h" #include "ash/ash_constants.h" #include "ash/ime/ime_controller.h" @@ -509,7 +508,7 @@ } bool ImeMenuTray::ShouldEnableExtraKeyboardAccessibility() { - return Shell::Get()->accessibility_controller()->IsSpokenFeedbackEnabled(); + return Shell::Get()->accessibility_delegate()->IsSpokenFeedbackEnabled(); } void ImeMenuTray::HideBubble(const views::TrayBubbleView* bubble_view) {
diff --git a/ash/system/palette/palette_tray.cc b/ash/system/palette/palette_tray.cc index bb8aab1..fcf09663 100644 --- a/ash/system/palette/palette_tray.cc +++ b/ash/system/palette/palette_tray.cc
@@ -6,7 +6,7 @@ #include <memory> -#include "ash/accessibility/accessibility_controller.h" +#include "ash/accessibility/accessibility_delegate.h" #include "ash/public/cpp/ash_pref_names.h" #include "ash/public/cpp/config.h" #include "ash/public/cpp/stylus_utils.h" @@ -333,7 +333,7 @@ } bool PaletteTray::ShouldEnableExtraKeyboardAccessibility() { - return Shell::Get()->accessibility_controller()->IsSpokenFeedbackEnabled(); + return Shell::Get()->accessibility_delegate()->IsSpokenFeedbackEnabled(); } void PaletteTray::HideBubble(const views::TrayBubbleView* bubble_view) {
diff --git a/ash/system/tray/system_tray.cc b/ash/system/tray/system_tray.cc index 62f1e1a..df22319b 100644 --- a/ash/system/tray/system_tray.cc +++ b/ash/system/tray/system_tray.cc
@@ -9,7 +9,6 @@ #include <memory> #include <vector> -#include "ash/accessibility/accessibility_controller.h" #include "ash/login_status.h" #include "ash/metrics/user_metrics_recorder.h" #include "ash/public/cpp/ash_switches.h" @@ -622,7 +621,7 @@ // e.g. volume slider. Persistent system bubble is a bubble which is not // closed even if user clicks outside of the bubble. return system_bubble_ && !system_bubble_->is_persistent() && - Shell::Get()->accessibility_controller()->IsSpokenFeedbackEnabled(); + Shell::Get()->accessibility_delegate()->IsSpokenFeedbackEnabled(); } void SystemTray::HideBubble(const TrayBubbleView* bubble_view) {
diff --git a/ash/system/tray_accessibility.cc b/ash/system/tray_accessibility.cc index bf37398..4ca6c379 100644 --- a/ash/system/tray_accessibility.cc +++ b/ash/system/tray_accessibility.cc
@@ -63,7 +63,7 @@ AccessibilityController* controller = Shell::Get()->accessibility_controller(); uint32_t state = A11Y_NONE; - if (controller->IsSpokenFeedbackEnabled()) + if (delegate->IsSpokenFeedbackEnabled()) state |= A11Y_SPOKEN_FEEDBACK; if (controller->IsHighContrastEnabled()) state |= A11Y_HIGH_CONTRAST; @@ -157,7 +157,7 @@ AccessibilityController* controller = Shell::Get()->accessibility_controller(); - spoken_feedback_enabled_ = controller->IsSpokenFeedbackEnabled(); + spoken_feedback_enabled_ = delegate->IsSpokenFeedbackEnabled(); TrayPopupUtils::UpdateCheckMarkVisibility(spoken_feedback_view_, spoken_feedback_enabled_); @@ -215,7 +215,7 @@ AccessibilityController* controller = Shell::Get()->accessibility_controller(); - spoken_feedback_enabled_ = controller->IsSpokenFeedbackEnabled(); + spoken_feedback_enabled_ = delegate->IsSpokenFeedbackEnabled(); spoken_feedback_view_ = AddScrollListCheckableItem( kSystemMenuAccessibilityChromevoxIcon, l10n_util::GetStringUTF16( @@ -304,11 +304,10 @@ using base::RecordAction; using base::UserMetricsAction; if (view == spoken_feedback_view_) { - bool new_state = !controller->IsSpokenFeedbackEnabled(); - RecordAction(new_state - ? UserMetricsAction("StatusArea_SpokenFeedbackEnabled") - : UserMetricsAction("StatusArea_SpokenFeedbackDisabled")); - controller->SetSpokenFeedbackEnabled(new_state, A11Y_NOTIFICATION_NONE); + RecordAction(delegate->IsSpokenFeedbackEnabled() + ? UserMetricsAction("StatusArea_SpokenFeedbackDisabled") + : UserMetricsAction("StatusArea_SpokenFeedbackEnabled")); + delegate->ToggleSpokenFeedback(A11Y_NOTIFICATION_NONE); } else if (view == high_contrast_view_) { bool new_state = !controller->IsHighContrastEnabled(); RecordAction(new_state
diff --git a/ash/system/tray_accessibility_unittest.cc b/ash/system/tray_accessibility_unittest.cc index 2940a63..26f1347 100644 --- a/ash/system/tray_accessibility_unittest.cc +++ b/ash/system/tray_accessibility_unittest.cc
@@ -12,11 +12,7 @@ #include "ash/system/tray/system_tray_notifier.h" #include "ash/system/tray/system_tray_test_api.h" #include "ash/test/ash_test_base.h" -#include "base/strings/utf_string_conversions.h" #include "components/prefs/pref_service.h" -#include "ui/message_center/message_center.h" - -using message_center::MessageCenter; namespace ash { namespace { @@ -70,27 +66,5 @@ EXPECT_FALSE(tray_item->tray_view()->visible()); } -TEST_F(TrayAccessibilityTest, ShowNotificationOnSpokenFeedback) { - const base::string16 kChromeVoxEnabledTitle = - base::ASCIIToUTF16("ChromeVox enabled"); - const base::string16 kChromeVoxEnabled = - base::ASCIIToUTF16("Press Ctrl + Alt + Z to disable spoken feedback."); - AccessibilityController* controller = - Shell::Get()->accessibility_controller(); - - // Enabling spoken feedback should show the notification. - controller->SetSpokenFeedbackEnabled(true, A11Y_NOTIFICATION_SHOW); - message_center::NotificationList::Notifications notifications = - MessageCenter::Get()->GetVisibleNotifications(); - EXPECT_EQ(1u, notifications.size()); - EXPECT_EQ(kChromeVoxEnabledTitle, (*notifications.begin())->title()); - EXPECT_EQ(kChromeVoxEnabled, (*notifications.begin())->message()); - - // Disabling spoken feedback should not show any notification. - controller->SetSpokenFeedbackEnabled(false, A11Y_NOTIFICATION_SHOW); - notifications = MessageCenter::Get()->GetVisibleNotifications(); - EXPECT_EQ(0u, notifications.size()); -} - } // namespace } // namespace ash
diff --git a/ash/system/web_notification/web_notification_tray.cc b/ash/system/web_notification/web_notification_tray.cc index 73cf1d3..6f9a0ee 100644 --- a/ash/system/web_notification/web_notification_tray.cc +++ b/ash/system/web_notification/web_notification_tray.cc
@@ -6,7 +6,7 @@ #include <memory> -#include "ash/accessibility/accessibility_controller.h" +#include "ash/accessibility/accessibility_delegate.h" #include "ash/message_center/message_center_bubble.h" #include "ash/public/cpp/ash_switches.h" #include "ash/resources/vector_icons/vector_icons.h" @@ -489,7 +489,7 @@ } bool WebNotificationTray::ShouldEnableExtraKeyboardAccessibility() { - return Shell::Get()->accessibility_controller()->IsSpokenFeedbackEnabled(); + return Shell::Get()->accessibility_delegate()->IsSpokenFeedbackEnabled(); } void WebNotificationTray::HideBubble(const views::TrayBubbleView* bubble_view) {
diff --git a/ash/wm/client_controlled_state.cc b/ash/wm/client_controlled_state.cc index a02c978..b402b92 100644 --- a/ash/wm/client_controlled_state.cc +++ b/ash/wm/client_controlled_state.cc
@@ -45,7 +45,7 @@ return; } mojom::WindowStateType next_state_type = GetStateForTransitionEvent(event); - delegate_->HandleWindowStateRequest(state_type_, next_state_type); + delegate_->HandleWindowStateRequest(window_state, next_state_type); mojom::WindowStateType old_state_type = state_type_; bool was_pinned = window_state->IsPinned(); @@ -74,7 +74,7 @@ VLOG(1) << "Processing State Transtion: event=" << event->type() << ", state=" << state_type_ << ", next_state=" << next_state; // Then ask delegate to handle the window state change. - delegate_->HandleWindowStateRequest(state_type_, next_state); + delegate_->HandleWindowStateRequest(window_state, next_state); break; } case WM_EVENT_SHOW_INACTIVE: @@ -152,7 +152,7 @@ // In pinned state, it should ignore the SetBounds from window manager // or user. } else { - delegate_->HandleBoundsRequest(window_state->GetStateType(), + delegate_->HandleBoundsRequest(window_state, set_bounds_event->requested_bounds()); } break;
diff --git a/ash/wm/client_controlled_state.h b/ash/wm/client_controlled_state.h index cdfe54c..ea88e02 100644 --- a/ash/wm/client_controlled_state.h +++ b/ash/wm/client_controlled_state.h
@@ -30,16 +30,16 @@ class Delegate { public: virtual ~Delegate() = default; - // Handles the state change from |current_state| to |requested_state|. + // Handles the state change of |window_state| to |requested_state|. // Delegate may decide to ignore the state change, proceed with the state // change, or can move to a different state. virtual void HandleWindowStateRequest( - mojom::WindowStateType current_state, + WindowState* window_state, mojom::WindowStateType requested_state) = 0; - // Handles the bounds change request. |current_state| specifies the current - // window state. Delegate may choose to ignore the request, set the given - // bounds, or set the different bounds. - virtual void HandleBoundsRequest(mojom::WindowStateType current_state, + // Handles the bounds change request for |window_state|. Delegate + // may choose to ignore the request, set the given bounds, or set + // the different bounds. + virtual void HandleBoundsRequest(WindowState* window_state, const gfx::Rect& requested_bounds) = 0; };
diff --git a/ash/wm/client_controlled_state_unittest.cc b/ash/wm/client_controlled_state_unittest.cc index c4fd7a920..e1d2f8e 100644 --- a/ash/wm/client_controlled_state_unittest.cc +++ b/ash/wm/client_controlled_state_unittest.cc
@@ -25,13 +25,13 @@ TestClientControlledStateDelegate() = default; ~TestClientControlledStateDelegate() override = default; - void HandleWindowStateRequest(mojom::WindowStateType current_state, + void HandleWindowStateRequest(WindowState* window_state, mojom::WindowStateType next_state) override { - old_state_ = current_state; + old_state_ = window_state->GetStateType(); new_state_ = next_state; } - void HandleBoundsRequest(mojom::WindowStateType current_state, + void HandleBoundsRequest(WindowState* window_state, const gfx::Rect& bounds) override { requested_bounds_ = bounds; }
diff --git a/ash/wm/workspace/backdrop_controller.cc b/ash/wm/workspace/backdrop_controller.cc index 39b8418..87785864c 100644 --- a/ash/wm/workspace/backdrop_controller.cc +++ b/ash/wm/workspace/backdrop_controller.cc
@@ -6,7 +6,6 @@ #include <memory> -#include "ash/accessibility/accessibility_controller.h" #include "ash/accessibility/accessibility_delegate.h" #include "ash/public/cpp/app_types.h" #include "ash/public/cpp/shell_window_ids.h" @@ -191,7 +190,7 @@ return; bool enabled = - Shell::Get()->accessibility_controller()->IsSpokenFeedbackEnabled(); + Shell::Get()->accessibility_delegate()->IsSpokenFeedbackEnabled(); if (enabled) { if (!backdrop_event_handler_) { backdrop_event_handler_ = std::make_unique<BackdropEventHandler>(); @@ -229,7 +228,7 @@ if (window->GetProperty(aura::client::kAppType) == static_cast<int>(AppType::ARC_APP) && wm::IsActiveWindow(window) && - Shell::Get()->accessibility_controller()->IsSpokenFeedbackEnabled()) { + Shell::Get()->accessibility_delegate()->IsSpokenFeedbackEnabled()) { return true; }
diff --git a/ash/wm/workspace/workspace_layout_manager_unittest.cc b/ash/wm/workspace/workspace_layout_manager_unittest.cc index 9b1b30f5..a2d2763 100644 --- a/ash/wm/workspace/workspace_layout_manager_unittest.cc +++ b/ash/wm/workspace/workspace_layout_manager_unittest.cc
@@ -7,7 +7,6 @@ #include <string> #include <utility> -#include "ash/accessibility/accessibility_controller.h" #include "ash/accessibility/test_accessibility_delegate.h" #include "ash/app_list/test_app_list_presenter_impl.h" #include "ash/frame/custom_frame_view_ash.h" @@ -25,6 +24,7 @@ #include "ash/shell.h" #include "ash/shell_observer.h" #include "ash/shell_test_api.h" +#include "ash/system/tray/system_tray_notifier.h" #include "ash/test/ash_test_base.h" #include "ash/wm/fullscreen_window_finder.h" #include "ash/wm/overview/window_selector_controller.h" @@ -1325,10 +1325,12 @@ EXPECT_EQ(kNoSoundKey, accessibility_delegate->GetPlayedEarconAndReset()); // Enable spoken feedback. - AccessibilityController* controller = - Shell::Get()->accessibility_controller(); - controller->SetSpokenFeedbackEnabled(true, A11Y_NOTIFICATION_NONE); - EXPECT_TRUE(controller->IsSpokenFeedbackEnabled()); + Shell::Get()->accessibility_delegate()->ToggleSpokenFeedback( + ash::A11Y_NOTIFICATION_NONE); + Shell::Get()->system_tray_notifier()->NotifyAccessibilityStatusChanged( + ash::A11Y_NOTIFICATION_NONE); + EXPECT_TRUE( + Shell::Get()->accessibility_delegate()->IsSpokenFeedbackEnabled()); generator.MoveMouseTo(300, 300); generator.ClickLeftButton(); @@ -1340,8 +1342,12 @@ EXPECT_EQ(kNoSoundKey, accessibility_delegate->GetPlayedEarconAndReset()); // Disable spoken feedback. Shadow underlay is restored. - controller->SetSpokenFeedbackEnabled(false, A11Y_NOTIFICATION_NONE); - EXPECT_FALSE(controller->IsSpokenFeedbackEnabled()); + Shell::Get()->accessibility_delegate()->ToggleSpokenFeedback( + A11Y_NOTIFICATION_NONE); + Shell::Get()->system_tray_notifier()->NotifyAccessibilityStatusChanged( + A11Y_NOTIFICATION_NONE); + EXPECT_FALSE( + Shell::Get()->accessibility_delegate()->IsSpokenFeedbackEnabled()); generator.MoveMouseTo(300, 300); generator.ClickLeftButton(); @@ -1435,11 +1441,11 @@ TestAccessibilityDelegate* accessibility_delegate = static_cast<TestAccessibilityDelegate*>( Shell::Get()->accessibility_delegate()); - AccessibilityController* controller = - Shell::Get()->accessibility_controller(); - controller->SetSpokenFeedbackEnabled(true, A11Y_NOTIFICATION_NONE); - EXPECT_TRUE(controller->IsSpokenFeedbackEnabled()); + accessibility_delegate->ToggleSpokenFeedback(A11Y_NOTIFICATION_NONE); + Shell::Get()->system_tray_notifier()->NotifyAccessibilityStatusChanged( + A11Y_NOTIFICATION_NONE); + EXPECT_TRUE(accessibility_delegate->IsSpokenFeedbackEnabled()); aura::test::TestWindowDelegate delegate; std::unique_ptr<aura::Window> window_arc(CreateTestWindowInShellWithDelegate(
diff --git a/base/BUILD.gn b/base/BUILD.gn index 6239096..28ebd2c 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -2759,11 +2759,12 @@ "test/android/javatests/src/org/chromium/base/test/params/ParameterAnnotations.java", "test/android/javatests/src/org/chromium/base/test/params/ParameterProvider.java", "test/android/javatests/src/org/chromium/base/test/util/AdvancedMockContext.java", - "test/android/javatests/src/org/chromium/base/test/util/AnnotationProcessor.java", + "test/android/javatests/src/org/chromium/base/test/util/AnnotationRule.java", "test/android/javatests/src/org/chromium/base/test/util/CallbackHelper.java", "test/android/javatests/src/org/chromium/base/test/util/CommandLineFlags.java", "test/android/javatests/src/org/chromium/base/test/util/DisableIf.java", "test/android/javatests/src/org/chromium/base/test/util/DisableIfSkipCheck.java", + "test/android/javatests/src/org/chromium/base/test/util/AnnotationProcessingUtils.java", "test/android/javatests/src/org/chromium/base/test/util/DisabledTest.java", "test/android/javatests/src/org/chromium/base/test/util/EnormousTest.java", "test/android/javatests/src/org/chromium/base/test/util/Feature.java", @@ -2822,6 +2823,7 @@ "android/junit/src/org/chromium/base/process_launcher/ChildProcessConnectionTest.java", "test/android/junit/src/org/chromium/base/test/SetUpStatementTest.java", "test/android/junit/src/org/chromium/base/test/TestListInstrumentationRunListenerTest.java", + "test/android/junit/src/org/chromium/base/test/util/AnnotationProcessingUtilsTest.java", "test/android/junit/src/org/chromium/base/test/util/DisableIfTest.java", "test/android/junit/src/org/chromium/base/test/util/MinAndroidSdkLevelSkipCheckTest.java", "test/android/junit/src/org/chromium/base/test/util/RestrictionSkipCheckTest.java", @@ -2836,6 +2838,7 @@ ":base_java_process_launcher_test_support", ":base_java_test_support", "//third_party/android_support_test_runner:runner_java", + "//third_party/hamcrest:hamcrest_java", ] srcjar_deps = [ ":base_build_config_gen" ] }
diff --git a/base/test/android/javatests/src/org/chromium/base/test/util/AnnotationProcessingUtils.java b/base/test/android/javatests/src/org/chromium/base/test/util/AnnotationProcessingUtils.java new file mode 100644 index 0000000..d335412 --- /dev/null +++ b/base/test/android/javatests/src/org/chromium/base/test/util/AnnotationProcessingUtils.java
@@ -0,0 +1,259 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.base.test.util; + +import android.support.annotation.Nullable; + +import org.junit.runner.Description; + +import org.chromium.base.VisibleForTesting; + +import java.lang.annotation.Annotation; +import java.lang.reflect.AnnotatedElement; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; +import java.util.Set; + +/** + * Utility class to help with processing annotations, going around the code to collect them, etc. + */ +public abstract class AnnotationProcessingUtils { + /** + * Returns the closest instance of the requested annotation or null if there is none. + * See {@link AnnotationExtractor} for context of "closest". + */ + @SuppressWarnings("unchecked") + public static <A extends Annotation> A getAnnotation(Description description, Class<A> clazz) { + AnnotationExtractor extractor = new AnnotationExtractor(clazz); + return (A) extractor.getClosest(extractor.getMatchingAnnotations(description)); + } + + /** + * Returns the closest instance of the requested annotation or null if there is none. + * See {@link AnnotationExtractor} for context of "closest". + */ + @SuppressWarnings("unchecked") + public static <A extends Annotation> A getAnnotation(AnnotatedElement element, Class<A> clazz) { + AnnotationExtractor extractor = new AnnotationExtractor(clazz); + return (A) extractor.getClosest(extractor.getMatchingAnnotations(element)); + } + + /** See {@link AnnotationExtractor} for details about the output sorting order. */ + @SuppressWarnings("unchecked") + public static <A extends Annotation> List<A> getAnnotations( + Description description, Class<A> annotationType) { + return (List<A>) new AnnotationExtractor(annotationType) + .getMatchingAnnotations(description); + } + + /** See {@link AnnotationExtractor} for details about the output sorting order. */ + @SuppressWarnings("unchecked") + public static <A extends Annotation> List<A> getAnnotations( + AnnotatedElement annotatedElement, Class<A> annotationType) { + return (List<A>) new AnnotationExtractor(annotationType) + .getMatchingAnnotations(annotatedElement); + } + + private static boolean isChromiumAnnotation(Annotation annotation) { + Package pkg = annotation.annotationType().getPackage(); + return pkg != null && pkg.getName().startsWith("org.chromium"); + } + + /** + * Processes various types of annotated elements ({@link Class}es, {@link Annotation}s, + * {@link Description}s, etc.) and extracts the targeted annotations from it. The output will be + * sorted in BFS-like order. + * + * For example, for a method we would get in reverse order: + * - the method annotations + * - the meta-annotations present on the method annotations, + * - the class annotations + * - the meta-annotations present on the class annotations, + * - the annotations present on the super class, + * - the meta-annotations present on the super class annotations, + * - etc. + * + * When multiple annotations are targeted, if more than one is picked up at a given level (for + * example directly on the method), they will be returned in the reverse order that they were + * provided to the constructor. + * + * Note: We return the annotations in reverse order because we assume that if some processing + * is going to be made on related annotations, the later annotations would likely override + * modifications made by the former. + * + * Note: While resolving meta annotations, we don't expand the explorations to annotations types + * that have already been visited. Please file a bug and assign to dgn@ if you think it caused + * an issue. + */ + public static class AnnotationExtractor { + private final List<Class<? extends Annotation>> mAnnotationTypes; + private final Comparator<Class<? extends Annotation>> mAnnotationTypeComparator; + private final Comparator<Annotation> mAnnotationComparator; + + @SafeVarargs + public AnnotationExtractor(Class<? extends Annotation>... additionalTypes) { + this(Arrays.asList(additionalTypes)); + } + + public AnnotationExtractor(List<Class<? extends Annotation>> additionalTypes) { + assert !additionalTypes.isEmpty(); + mAnnotationTypes = Collections.unmodifiableList(additionalTypes); + mAnnotationTypeComparator = + (t1, t2) -> mAnnotationTypes.indexOf(t1) - mAnnotationTypes.indexOf(t2); + mAnnotationComparator = (t1, t2) + -> mAnnotationTypeComparator.compare(t1.annotationType(), t2.annotationType()); + } + + public List<Annotation> getMatchingAnnotations(Description description) { + return getMatchingAnnotations(new AnnotatedNode.DescriptionNode(description)); + } + + public List<Annotation> getMatchingAnnotations(AnnotatedElement annotatedElement) { + AnnotatedNode annotatedNode; + if (annotatedElement instanceof Method) { + annotatedNode = new AnnotatedNode.MethodNode((Method) annotatedElement); + } else if (annotatedElement instanceof Class) { + annotatedNode = new AnnotatedNode.ClassNode((Class) annotatedElement); + } else { + throw new IllegalArgumentException("Unsupported type for " + annotatedElement); + } + + return getMatchingAnnotations(annotatedNode); + } + + /** + * For a given list obtained from the extractor, returns the {@link Annotation} that would + * be closest from the extraction point, or {@code null} if the list is empty. + */ + @Nullable + public Annotation getClosest(List<Annotation> annotationList) { + return annotationList.isEmpty() ? null : annotationList.get(annotationList.size() - 1); + } + + @VisibleForTesting + Comparator<Class<? extends Annotation>> getTypeComparator() { + return mAnnotationTypeComparator; + } + + private List<Annotation> getMatchingAnnotations(AnnotatedNode annotatedNode) { + List<Annotation> collectedAnnotations = new ArrayList<>(); + Queue<Annotation> workingSet = new LinkedList<>(); + Set<Class<? extends Annotation>> visited = new HashSet<>(); + + AnnotatedNode currentAnnotationLayer = annotatedNode; + while (currentAnnotationLayer != null) { + queueAnnotations(currentAnnotationLayer.getAnnotations(), workingSet); + + while (!workingSet.isEmpty()) { + sweepAnnotations(collectedAnnotations, workingSet, visited); + } + + currentAnnotationLayer = currentAnnotationLayer.getParent(); + } + + return collectedAnnotations; + } + + private void queueAnnotations(List<Annotation> annotations, Queue<Annotation> workingSet) { + Collections.sort(annotations, mAnnotationComparator); + workingSet.addAll(annotations); + } + + private void sweepAnnotations(List<Annotation> collectedAnnotations, + Queue<Annotation> workingSet, Set<Class<? extends Annotation>> visited) { + // 1. Grab node at the front of the working set. + Annotation annotation = workingSet.remove(); + + // 2. If it's an annotation of interest, put it aside for the output. + if (mAnnotationTypes.contains(annotation.annotationType())) { + collectedAnnotations.add(0, annotation); + } + + // 3. Check if we can get skip some redundant iterations and avoid cycles. + if (!visited.add(annotation.annotationType())) return; + if (!isChromiumAnnotation(annotation)) return; + + // 4. Expand the working set + queueAnnotations(Arrays.asList(annotation.annotationType().getDeclaredAnnotations()), + workingSet); + } + } + + /** + * Abstraction to hide differences between Class, Method and Description with regards to their + * annotations and what should be analyzed next. + */ + private static abstract class AnnotatedNode { + @Nullable + abstract AnnotatedNode getParent(); + + abstract List<Annotation> getAnnotations(); + + static class DescriptionNode extends AnnotatedNode { + final Description mDescription; + + DescriptionNode(Description description) { + mDescription = description; + } + + @Nullable + @Override + AnnotatedNode getParent() { + return new ClassNode(mDescription.getTestClass()); + } + + @Override + List<Annotation> getAnnotations() { + return new ArrayList<>(mDescription.getAnnotations()); + } + } + + static class ClassNode extends AnnotatedNode { + final Class<?> mClass; + + ClassNode(Class<?> clazz) { + mClass = clazz; + } + + @Nullable + @Override + AnnotatedNode getParent() { + Class<?> superClass = mClass.getSuperclass(); + return superClass == null ? null : new ClassNode(superClass); + } + + @Override + List<Annotation> getAnnotations() { + return Arrays.asList(mClass.getDeclaredAnnotations()); + } + } + + static class MethodNode extends AnnotatedNode { + final Method mMethod; + + MethodNode(Method method) { + mMethod = method; + } + + @Nullable + @Override + AnnotatedNode getParent() { + return new ClassNode(mMethod.getDeclaringClass()); + } + + @Override + List<Annotation> getAnnotations() { + return Arrays.asList(mMethod.getDeclaredAnnotations()); + } + } + } +}
diff --git a/base/test/android/javatests/src/org/chromium/base/test/util/AnnotationProcessor.java b/base/test/android/javatests/src/org/chromium/base/test/util/AnnotationProcessor.java deleted file mode 100644 index 6286dea..0000000 --- a/base/test/android/javatests/src/org/chromium/base/test/util/AnnotationProcessor.java +++ /dev/null
@@ -1,83 +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. - -package org.chromium.base.test.util; - -import android.support.annotation.Nullable; - -import org.junit.rules.ExternalResource; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; - -import java.lang.annotation.Annotation; - -/** - * Test rule that is activated when a test or its class has a specific annotation. - * It allows to run some code before the test (and the {@link org.junit.Before}) runs, - * and guarantees to also run code after. - * - * Usage: - * - * <pre> - * public class Test { - * @Rule - * public AnnotationProcessor<Foo> rule = new AnnotationProcessor(Foo.class) { - * @Override - * protected void before() { ... } - * - * @Override - * protected void after() { ... } - * }; - * - * @Test - * @Foo - * public void myTest() { ... } - * } - * </pre> - * - * @param <T> type of the annotation to match on the test case. - */ -public abstract class AnnotationProcessor<T extends Annotation> extends ExternalResource { - private final Class<T> mAnnotationClass; - private Description mTestDescription; - - @Nullable - private T mClassAnnotation; - - @Nullable - private T mTestAnnotation; - - public AnnotationProcessor(Class<T> annotationClass) { - mAnnotationClass = annotationClass; - } - - @Override - public Statement apply(Statement base, Description description) { - mTestDescription = description; - mClassAnnotation = description.getTestClass().getAnnotation(mAnnotationClass); - mTestAnnotation = description.getAnnotation(mAnnotationClass); - - if (mClassAnnotation == null && mTestAnnotation == null) return base; - - // Return the wrapped statement to execute before() and after(). - return super.apply(base, description); - } - - /** @return {@link Description} of the current test. */ - protected Description getTestDescription() { - return mTestDescription; - } - - /** @return the annotation on the test class. */ - @Nullable - protected T getClassAnnotation() { - return mClassAnnotation; - } - - /** @return the annotation on the test method. */ - @Nullable - protected T getTestAnnotation() { - return mTestAnnotation; - } -}
diff --git a/base/test/android/javatests/src/org/chromium/base/test/util/AnnotationRule.java b/base/test/android/javatests/src/org/chromium/base/test/util/AnnotationRule.java new file mode 100644 index 0000000..9780e5eb --- /dev/null +++ b/base/test/android/javatests/src/org/chromium/base/test/util/AnnotationRule.java
@@ -0,0 +1,134 @@ +// 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. + +package org.chromium.base.test.util; + +import org.junit.rules.ExternalResource; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; + +import java.lang.annotation.Annotation; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.ListIterator; + +/** + * Test rule that is activated when a test or its class has a specific annotation. + * It allows to run some code before the test (and the {@link org.junit.Before}) runs, + * and guarantees to also run code after. + * + * Usage: + * + * <pre> + * public class Test { + * @Rule + * public AnnotationRule rule = new AnnotationRule(Foo.class) { + * @Override + * protected void before() { ... } + * + * @Override + * protected void after() { ... } + * }; + * + * @Test + * @Foo + * public void myTest() { ... } + * } + * </pre> + * + * It can also be used to trigger for multiple annotations: + * + * <pre> + * @DisableFoo + * public class Test { + * @Rule + * public AnnotationRule rule = new AnnotationRule(EnableFoo.class, DisableFoo.class) { + * @Override + * protected void before() { + * // Loops through all the picked up annotations. For myTest(), it would process + * // DisableFoo first, then EnableFoo. + * for (Annotation annotation : getAnnotations()) { + * if (annotation instanceof EnableFoo) { ... } + * else if (annotation instanceof DisableFoo) { ... } + * } + * } + * + * @Override + * protected void after() { + * // For myTest(), would return EnableFoo as it's directly set on the method. + * Annotation a = getClosestAnnotation(); + * ... + * } + * }; + * + * @Test + * @EnableFoo + * public void myTest() { ... } + * } + * </pre> + * + * @see AnnotationProcessingUtils.AnnotationExtractor + */ +public abstract class AnnotationRule extends ExternalResource { + private final AnnotationProcessingUtils.AnnotationExtractor mAnnotationExtractor; + private List<Annotation> mCollectedAnnotations; + private Description mTestDescription; + + @SafeVarargs + public AnnotationRule(Class<? extends Annotation> firstAnnotationType, + Class<? extends Annotation>... additionalTypes) { + List<Class<? extends Annotation>> mAnnotationTypes = new ArrayList<>(); + mAnnotationTypes.add(firstAnnotationType); + mAnnotationTypes.addAll(Arrays.asList(additionalTypes)); + mAnnotationExtractor = new AnnotationProcessingUtils.AnnotationExtractor(mAnnotationTypes); + } + + @Override + public Statement apply(Statement base, Description description) { + mTestDescription = description; + + mCollectedAnnotations = mAnnotationExtractor.getMatchingAnnotations(description); + if (mCollectedAnnotations.isEmpty()) return base; + + // Return the wrapped statement to execute before() and after(). + return super.apply(base, description); + } + + /** @return {@link Description} of the current test. */ + protected Description getTestDescription() { + return mTestDescription; + } + + /** + * @return The collected annotations that match the declared type(s). + * @throws NullPointerException if this is called before annotations have been collected, + * which happens when the rule is applied to the {@link Statement}. + */ + protected List<Annotation> getAnnotations() { + return Collections.unmodifiableList(mCollectedAnnotations); + } + + /** + * @return The closest annotation matching the provided type, or {@code null} if there is none. + */ + @SuppressWarnings("unchecked") + protected <A extends Annotation> A getAnnotation(Class<A> annnotationType) { + ListIterator<Annotation> iteratorFromEnd = + mCollectedAnnotations.listIterator(mCollectedAnnotations.size()); + while (iteratorFromEnd.hasPrevious()) { + Annotation annotation = iteratorFromEnd.previous(); + if (annnotationType.isAssignableFrom(annotation.annotationType())) { + return (A) annotation; + } + } + return null; + } + + protected Annotation getClosestAnnotation() { + assert !mCollectedAnnotations.isEmpty() : "The rule should not trigger without match."; + return mCollectedAnnotations.get(mCollectedAnnotations.size() - 1); + } +}
diff --git a/base/test/android/javatests/src/org/chromium/base/test/util/DisableIfSkipCheck.java b/base/test/android/javatests/src/org/chromium/base/test/util/DisableIfSkipCheck.java index cbcbd5ab..e46b9799 100644 --- a/base/test/android/javatests/src/org/chromium/base/test/util/DisableIfSkipCheck.java +++ b/base/test/android/javatests/src/org/chromium/base/test/util/DisableIfSkipCheck.java
@@ -24,7 +24,8 @@ @Override public boolean shouldSkip(FrameworkMethod method) { if (method == null) return true; - for (DisableIf.Build v : getAnnotations(method, DisableIf.Build.class)) { + for (DisableIf.Build v : AnnotationProcessingUtils.getAnnotations( + method.getMethod(), DisableIf.Build.class)) { if (abi(v) && hardware(v) && product(v) && sdk(v)) { if (!v.message().isEmpty()) { Log.i(TAG, "%s is disabled: %s", method.getName(), v.message()); @@ -33,7 +34,8 @@ } } - for (DisableIf.Device d : getAnnotations(method, DisableIf.Device.class)) { + for (DisableIf.Device d : AnnotationProcessingUtils.getAnnotations( + method.getMethod(), DisableIf.Device.class)) { for (String deviceType : d.type()) { if (deviceTypeApplies(deviceType)) { Log.i(TAG, "Test " + method.getDeclaringClass().getName() + "#"
diff --git a/base/test/android/javatests/src/org/chromium/base/test/util/MinAndroidSdkLevelSkipCheck.java b/base/test/android/javatests/src/org/chromium/base/test/util/MinAndroidSdkLevelSkipCheck.java index 99bd1acf..8b07c0f1 100644 --- a/base/test/android/javatests/src/org/chromium/base/test/util/MinAndroidSdkLevelSkipCheck.java +++ b/base/test/android/javatests/src/org/chromium/base/test/util/MinAndroidSdkLevelSkipCheck.java
@@ -27,7 +27,8 @@ @Override public boolean shouldSkip(FrameworkMethod frameworkMethod) { int minSdkLevel = 0; - for (MinAndroidSdkLevel m : getAnnotations(frameworkMethod, MinAndroidSdkLevel.class)) { + for (MinAndroidSdkLevel m : AnnotationProcessingUtils.getAnnotations( + frameworkMethod.getMethod(), MinAndroidSdkLevel.class)) { minSdkLevel = Math.max(minSdkLevel, m.value()); } if (Build.VERSION.SDK_INT < minSdkLevel) {
diff --git a/base/test/android/javatests/src/org/chromium/base/test/util/RestrictionSkipCheck.java b/base/test/android/javatests/src/org/chromium/base/test/util/RestrictionSkipCheck.java index 377a1ee..a27dd1f 100644 --- a/base/test/android/javatests/src/org/chromium/base/test/util/RestrictionSkipCheck.java +++ b/base/test/android/javatests/src/org/chromium/base/test/util/RestrictionSkipCheck.java
@@ -35,7 +35,8 @@ public boolean shouldSkip(FrameworkMethod frameworkMethod) { if (frameworkMethod == null) return true; - for (Restriction restriction : getAnnotations(frameworkMethod, Restriction.class)) { + for (Restriction restriction : AnnotationProcessingUtils.getAnnotations( + frameworkMethod.getMethod(), Restriction.class)) { for (String restrictionVal : restriction.value()) { if (restrictionApplies(restrictionVal)) { Log.i(TAG, "Test " + frameworkMethod.getDeclaringClass().getName() + "#"
diff --git a/base/test/android/javatests/src/org/chromium/base/test/util/SkipCheck.java b/base/test/android/javatests/src/org/chromium/base/test/util/SkipCheck.java index 33dea83..d1dd7be 100644 --- a/base/test/android/javatests/src/org/chromium/base/test/util/SkipCheck.java +++ b/base/test/android/javatests/src/org/chromium/base/test/util/SkipCheck.java
@@ -10,11 +10,7 @@ import org.chromium.base.Log; -import java.lang.annotation.Annotation; -import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; /** * Check whether a test case should be skipped. @@ -49,23 +45,5 @@ return false; } } - - protected static <T extends Annotation> List<T> getAnnotations(FrameworkMethod frameworkMethod, - Class<T> annotationClass) { - return getAnnotations(frameworkMethod.getMethod(), annotationClass); - } - - protected static <T extends Annotation> List<T> getAnnotations(AnnotatedElement element, - Class<T> annotationClass) { - AnnotatedElement parent = (element instanceof Method) - ? ((Method) element).getDeclaringClass() - : ((Class) element).getSuperclass(); - List<T> annotations = (parent == null) - ? new ArrayList<T>() - : getAnnotations(parent, annotationClass); - T annotation = element.getAnnotation(annotationClass); - if (annotation != null) annotations.add(annotation); - return annotations; - } }
diff --git a/base/test/android/junit/src/org/chromium/base/test/util/AnnotationProcessingUtilsTest.java b/base/test/android/junit/src/org/chromium/base/test/util/AnnotationProcessingUtilsTest.java new file mode 100644 index 0000000..dc4ade7 --- /dev/null +++ b/base/test/android/junit/src/org/chromium/base/test/util/AnnotationProcessingUtilsTest.java
@@ -0,0 +1,375 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.base.test.util; + +import static org.hamcrest.Matchers.contains; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.fail; +import static org.junit.runner.Description.createTestDescription; + +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runner.RunWith; +import org.junit.runners.BlockJUnit4ClassRunner; +import org.junit.runners.model.FrameworkMethod; +import org.junit.runners.model.InitializationError; +import org.junit.runners.model.Statement; + +import org.chromium.base.test.util.AnnotationProcessingUtils.AnnotationExtractor; + +import java.lang.annotation.Annotation; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +/** Test for {@link AnnotationProcessingUtils}. */ +@RunWith(BlockJUnit4ClassRunner.class) +public class AnnotationProcessingUtilsTest { + @Test + public void testGetTargetAnnotation_NotOnClassNorMethod() { + TargetAnnotation retrievedAnnotation; + + retrievedAnnotation = AnnotationProcessingUtils.getAnnotation( + createTestDescription( + ClassWithoutTargetAnnotation.class, "methodWithoutAnnotation"), + TargetAnnotation.class); + assertNull(retrievedAnnotation); + } + + @Test + public void testGetTargetAnnotation_NotOnClassButOnMethod() { + TargetAnnotation retrievedAnnotation; + + retrievedAnnotation = AnnotationProcessingUtils.getAnnotation( + getTest(ClassWithoutTargetAnnotation.class, "methodWithTargetAnnotation"), + TargetAnnotation.class); + assertNotNull(retrievedAnnotation); + } + + @Test + public void testGetTargetAnnotation_NotOnClassDifferentOneOnMethod() { + TargetAnnotation retrievedAnnotation; + + retrievedAnnotation = AnnotationProcessingUtils.getAnnotation( + getTest(ClassWithoutTargetAnnotation.class, "methodWithAnnotatedAnnotation"), + TargetAnnotation.class); + assertNull(retrievedAnnotation); + } + + @Test + public void testGetTargetAnnotation_OnClassButNotOnMethod() { + TargetAnnotation retrievedAnnotation; + + retrievedAnnotation = AnnotationProcessingUtils.getAnnotation( + getTest(ClassWithAnnotation.class, "methodWithoutAnnotation"), + TargetAnnotation.class); + assertNotNull(retrievedAnnotation); + assertEquals(Location.Class, retrievedAnnotation.value()); + } + + @Test + public void testGetTargetAnnotation_OnClassAndMethod() { + TargetAnnotation retrievedAnnotation; + + retrievedAnnotation = AnnotationProcessingUtils.getAnnotation( + getTest(ClassWithAnnotation.class, "methodWithTargetAnnotation"), + TargetAnnotation.class); + assertNotNull(retrievedAnnotation); + assertEquals(Location.Method, retrievedAnnotation.value()); + } + + @Test + @Ignore("Rules not supported yet.") + public void testGetTargetAnnotation_OnRuleButNotOnMethod() { + TargetAnnotation retrievedAnnotation; + + retrievedAnnotation = AnnotationProcessingUtils.getAnnotation( + getTest(ClassWithRule.class, "methodWithoutAnnotation"), TargetAnnotation.class); + assertNotNull(retrievedAnnotation); + assertEquals(Location.Rule, retrievedAnnotation.value()); + } + + @Test + @Ignore("Rules not supported yet.") + public void testGetTargetAnnotation_OnRuleAndMethod() { + TargetAnnotation retrievedAnnotation; + + retrievedAnnotation = AnnotationProcessingUtils.getAnnotation( + getTest(ClassWithRule.class, "methodWithTargetAnnotation"), TargetAnnotation.class); + assertNotNull(retrievedAnnotation); + assertEquals(Location.Method, retrievedAnnotation.value()); + } + + @Test + public void testGetMetaAnnotation_Indirectly() { + MetaAnnotation retrievedAnnotation; + + retrievedAnnotation = AnnotationProcessingUtils.getAnnotation( + getTest(ClassWithoutTargetAnnotation.class, "methodWithAnnotatedAnnotation"), + MetaAnnotation.class); + assertNotNull(retrievedAnnotation); + } + + @Test + public void testGetAllTargetAnnotations() { + List<TargetAnnotation> retrievedAnnotations; + + retrievedAnnotations = AnnotationProcessingUtils.getAnnotations( + getTest(ClassWithAnnotation.class, "methodWithTargetAnnotation"), + TargetAnnotation.class); + assertEquals(2, retrievedAnnotations.size()); + assertEquals(Location.Class, retrievedAnnotations.get(0).value()); + assertEquals(Location.Method, retrievedAnnotations.get(1).value()); + } + + @Test + public void testGetAllTargetAnnotations_OnParentClass() { + List<TargetAnnotation> retrievedAnnotations; + + retrievedAnnotations = AnnotationProcessingUtils.getAnnotations( + getTest(DerivedClassWithoutAnnotation.class, "newMethodWithoutAnnotation"), + TargetAnnotation.class); + assertEquals(1, retrievedAnnotations.size()); + assertEquals(Location.Class, retrievedAnnotations.get(0).value()); + } + + @Test + public void testGetAllTargetAnnotations_OnDerivedMethodAndParentClass() { + List<TargetAnnotation> retrievedAnnotations; + + retrievedAnnotations = AnnotationProcessingUtils.getAnnotations( + getTest(DerivedClassWithoutAnnotation.class, "newMethodWithTargetAnnotation"), + TargetAnnotation.class); + assertEquals(2, retrievedAnnotations.size()); + assertEquals(Location.Class, retrievedAnnotations.get(0).value()); + assertEquals(Location.DerivedMethod, retrievedAnnotations.get(1).value()); + } + + @Test + public void testGetAllTargetAnnotations_OnDerivedMethodAndParentClassAndMethod() { + List<TargetAnnotation> retrievedAnnotations; + + retrievedAnnotations = AnnotationProcessingUtils.getAnnotations( + getTest(DerivedClassWithoutAnnotation.class, "methodWithTargetAnnotation"), + TargetAnnotation.class); + // We should not look at the base implementation of the method. Mostly it should not happen + // in the context of tests. + assertEquals(2, retrievedAnnotations.size()); + assertEquals(Location.Class, retrievedAnnotations.get(0).value()); + assertEquals(Location.DerivedMethod, retrievedAnnotations.get(1).value()); + } + + @Test + public void testGetAllTargetAnnotations_OnDerivedParentAndParentClass() { + List<TargetAnnotation> retrievedAnnotations; + + retrievedAnnotations = AnnotationProcessingUtils.getAnnotations( + getTest(DerivedClassWithAnnotation.class, "methodWithoutAnnotation"), + TargetAnnotation.class); + assertEquals(2, retrievedAnnotations.size()); + assertEquals(Location.Class, retrievedAnnotations.get(0).value()); + assertEquals(Location.DerivedClass, retrievedAnnotations.get(1).value()); + } + + @Test + public void testGetAllAnnotations() { + List<Annotation> annotations; + + AnnotationExtractor annotationExtractor = new AnnotationExtractor( + TargetAnnotation.class, MetaAnnotation.class, AnnotatedAnnotation.class); + annotations = annotationExtractor.getMatchingAnnotations( + getTest(DerivedClassWithAnnotation.class, "methodWithTwoAnnotations")); + assertEquals(5, annotations.size()); + + // Retrieved annotation order: + // On Parent Class + assertEquals(TargetAnnotation.class, annotations.get(0).annotationType()); + assertEquals(Location.Class, ((TargetAnnotation) annotations.get(0)).value()); + + // On Class + assertEquals(TargetAnnotation.class, annotations.get(1).annotationType()); + assertEquals(Location.DerivedClass, ((TargetAnnotation) annotations.get(1)).value()); + + // Meta-annotations from method + assertEquals(MetaAnnotation.class, annotations.get(2).annotationType()); + + // On Method + assertEquals(AnnotatedAnnotation.class, annotations.get(3).annotationType()); + assertEquals(TargetAnnotation.class, annotations.get(4).annotationType()); + assertEquals(Location.DerivedMethod, ((TargetAnnotation) annotations.get(4)).value()); + } + + @Test + public void testAnnotationExtractorSortOrder_UnknownAnnotations() { + AnnotationExtractor annotationExtractor = new AnnotationExtractor(Target.class); + Comparator<Class<? extends Annotation>> comparator = + annotationExtractor.getTypeComparator(); + List<Class<? extends Annotation>> testList = + Arrays.asList(Rule.class, Test.class, Override.class, Target.class, Rule.class); + testList.sort(comparator); + assertThat("Unknown annotations should not be reordered and come before the known ones.", + testList, + contains(Rule.class, Test.class, Override.class, Rule.class, Target.class)); + } + + @Test + public void testAnnotationExtractorSortOrder_KnownAnnotations() { + AnnotationExtractor annotationExtractor = + new AnnotationExtractor(Test.class, Target.class, Rule.class); + Comparator<Class<? extends Annotation>> comparator = + annotationExtractor.getTypeComparator(); + List<Class<? extends Annotation>> testList = + Arrays.asList(Rule.class, Test.class, Override.class, Target.class, Rule.class); + testList.sort(comparator); + assertThat( + "Known annotations should be sorted in the same order as provided to the extractor", + testList, + contains(Override.class, Test.class, Target.class, Rule.class, Rule.class)); + } + + private static Description getTest(Class<?> klass, String testName) { + Description description = null; + try { + description = new DummyTestRunner(klass).describe(testName); + } catch (InitializationError initializationError) { + initializationError.printStackTrace(); + fail("DummyTestRunner initialization failed:" + initializationError.getMessage()); + } + if (description == null) { + fail("Not test named '" + testName + "' in class" + klass.getSimpleName()); + } + return description; + } + + // region Test Data: Annotations and dummy test classes + private enum Location { Unspecified, Class, Method, Rule, DerivedClass, DerivedMethod } + + @Retention(RetentionPolicy.RUNTIME) + @Target({ElementType.TYPE, ElementType.METHOD}) + private @interface TargetAnnotation { + Location value() default Location.Unspecified; + } + + @Retention(RetentionPolicy.RUNTIME) + @Target({ElementType.ANNOTATION_TYPE, ElementType.TYPE, ElementType.METHOD}) + private @interface MetaAnnotation {} + + @Retention(RetentionPolicy.RUNTIME) + @Target({ElementType.TYPE, ElementType.METHOD}) + @MetaAnnotation + private @interface AnnotatedAnnotation {} + + private @interface SimpleAnnotation {} + + @SimpleAnnotation + private static class ClassWithoutTargetAnnotation { + @Test + public void methodWithoutAnnotation() {} + + @Test + @TargetAnnotation + public void methodWithTargetAnnotation() {} + + @Test + @AnnotatedAnnotation + public void methodWithAnnotatedAnnotation() {} + } + + @TargetAnnotation(Location.Class) + private static class ClassWithAnnotation { + @Test + public void methodWithoutAnnotation() {} + + @Test + @TargetAnnotation(Location.Method) + public void methodWithTargetAnnotation() {} + + @Test + @MetaAnnotation + public void methodWithMetaAnnotation() {} + + @Test + @AnnotatedAnnotation + public void methodWithAnnotatedAnnotation() {} + } + + private static class DerivedClassWithoutAnnotation extends ClassWithAnnotation { + @Test + public void newMethodWithoutAnnotation() {} + + @Test + @TargetAnnotation(Location.DerivedMethod) + public void newMethodWithTargetAnnotation() {} + + @Test + @Override + @TargetAnnotation(Location.DerivedMethod) + public void methodWithTargetAnnotation() {} + } + + @TargetAnnotation(Location.DerivedClass) + private static class DerivedClassWithAnnotation extends ClassWithAnnotation { + @Test + public void newMethodWithoutAnnotation() {} + + @Test + @AnnotatedAnnotation + @TargetAnnotation(Location.DerivedMethod) + public void methodWithTwoAnnotations() {} + } + + private static class ClassWithRule { + @Rule + Rule1 mRule = new Rule1(); + + @Test + public void methodWithoutAnnotation() {} + + @Test + @TargetAnnotation + public void methodWithTargetAnnotation() {} + } + + @TargetAnnotation(Location.Rule) + @MetaAnnotation + private static class Rule1 implements TestRule { + @Override + public Statement apply(Statement statement, Description description) { + return null; + } + } + + private static class DummyTestRunner extends BlockJUnit4ClassRunner { + public DummyTestRunner(Class<?> klass) throws InitializationError { + super(klass); + } + + @Override + protected void collectInitializationErrors(List<Throwable> errors) { + // Do nothing. BlockJUnit4ClassRunner requires the class to be public, but we don't + // want/need it. + } + + public Description describe(String testName) { + List<FrameworkMethod> tests = getTestClass().getAnnotatedMethods(Test.class); + for (FrameworkMethod testMethod : tests) { + if (testMethod.getName().equals(testName)) return describeChild(testMethod); + } + return null; + } + } + + // endregion + }
diff --git a/base/test/android/junit/src/org/chromium/base/test/util/SkipCheckTest.java b/base/test/android/junit/src/org/chromium/base/test/util/SkipCheckTest.java index a749184..56cbdaf 100644 --- a/base/test/android/junit/src/org/chromium/base/test/util/SkipCheckTest.java +++ b/base/test/android/junit/src/org/chromium/base/test/util/SkipCheckTest.java
@@ -10,7 +10,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.model.FrameworkMethod; - import org.robolectric.annotation.Config; import org.chromium.testing.local.LocalRobolectricTestRunner; @@ -30,7 +29,7 @@ private static class TestableSkipCheck extends SkipCheck { public static <T extends Annotation> List<T> getAnnotationsForTesting( AnnotatedElement element, Class<T> annotationClass) { - return getAnnotations(element, annotationClass); + return AnnotationProcessingUtils.getAnnotations(element, annotationClass); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderImpl.java index ed953ca..7f911e5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderImpl.java
@@ -250,6 +250,10 @@ // Get the <meta-data> from this app's manifest. // Throws NameNotFoundException if the application is not installed. ApplicationInfo appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA); + if (appInfo == null || appInfo.metaData == null) { + return new JSONArray(); + } + int identifier = appInfo.metaData.getInt(ASSET_STATEMENTS_KEY); if (identifier == 0) { return new JSONArray();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java index 90ddcf7c..7e944c1 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java
@@ -438,6 +438,19 @@ verifyInstalledApps(manifestRelatedApps, expectedInstalledRelatedApps); } + /** One related Android app; Android app is not mutually related (has no asset_statements). */ + @Test + @Feature({"InstalledApp"}) + public void testOneRelatedAppNoAssetStatementsNullMetadata() { + RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { + createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; + + FakeResources resources = new FakeResources(0x4321, null); + setMetaDataAndResourcesForTest(PACKAGE_NAME_1, null, resources); + RelatedApplication[] expectedInstalledRelatedApps = new RelatedApplication[] {}; + verifyInstalledApps(manifestRelatedApps, expectedInstalledRelatedApps); + } + /** * One related Android app; Android app is related to other origins. *
diff --git a/chrome/app/media_router_strings.grdp b/chrome/app/media_router_strings.grdp index 47032ef..fd375e4 100644 --- a/chrome/app/media_router_strings.grdp +++ b/chrome/app/media_router_strings.grdp
@@ -184,6 +184,15 @@ <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_ALWAYS_USE_MIRRORING_TITLE" desc="The title for a toggle setting to choose whether video should always be mirrored (played locally and remotely), or played only remotely."> Always use mirroring </message> + <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_FULLSCREEN_VIDEOS_DROPDOWN_TITLE" desc="The title for a toggle setting to choose whether fullscreen videos should always be mirrored (played locally and remotely), or played only remotely."> + Show fullscreen videos on: + </message> + <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_FULLSCREEN_VIDEOS_BOTH_SCREENS" desc="Settings option to play fullscreen videos both locally and remotely."> + Both screens + </message> + <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_FULLSCREEN_VIDEOS_REMOTE_SCREEN" desc="Settings option to play fullscreen videos only remotely."> + Remote screen + </message> <!-- Sink List --> <message name="IDS_MEDIA_ROUTER_DESTINATION_MISSING" desc="Link to display when no Cast destinations are found which, on click, opens a page to the Chromecast help center explaining possible reasons why none are detected.">
diff --git a/chrome/browser/autocomplete/autocomplete_classifier_factory.cc b/chrome/browser/autocomplete/autocomplete_classifier_factory.cc index 546f574..0d758c8 100644 --- a/chrome/browser/autocomplete/autocomplete_classifier_factory.cc +++ b/chrome/browser/autocomplete/autocomplete_classifier_factory.cc
@@ -39,12 +39,14 @@ std::unique_ptr<KeyedService> AutocompleteClassifierFactory::BuildInstanceFor( content::BrowserContext* context) { Profile* profile = static_cast<Profile*>(context); + auto provider_client = + base::MakeUnique<ChromeAutocompleteProviderClient>(profile); + auto controller = base::WrapUnique(new AutocompleteController( + std::move(provider_client), NULL, + AutocompleteClassifier::DefaultOmniboxProviders())); return base::MakeUnique<AutocompleteClassifier>( - base::WrapUnique(new AutocompleteController( - base::WrapUnique(new ChromeAutocompleteProviderClient(profile)), NULL, - AutocompleteClassifier::DefaultOmniboxProviders())), - std::unique_ptr<AutocompleteSchemeClassifier>( - new ChromeAutocompleteSchemeClassifier(profile))); + std::move(controller), + base::MakeUnique<ChromeAutocompleteSchemeClassifier>(profile)); } AutocompleteClassifierFactory::AutocompleteClassifierFactory()
diff --git a/chrome/browser/autocomplete/search_provider_unittest.cc b/chrome/browser/autocomplete/search_provider_unittest.cc index 3e814722..2923b0a 100644 --- a/chrome/browser/autocomplete/search_provider_unittest.cc +++ b/chrome/browser/autocomplete/search_provider_unittest.cc
@@ -1000,8 +1000,8 @@ profile_.BlockUntilHistoryProcessesPendingRequests(); AutocompleteController controller( - base::WrapUnique(new ChromeAutocompleteProviderClient(&profile_)), - nullptr, AutocompleteProvider::TYPE_SEARCH); + base::MakeUnique<ChromeAutocompleteProviderClient>(&profile_), nullptr, + AutocompleteProvider::TYPE_SEARCH); AutocompleteInput input(ASCIIToUTF16("k t"), metrics::OmniboxEventProto::OTHER, ChromeAutocompleteSchemeClassifier(&profile_));
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.cc b/chrome/browser/chromeos/accessibility/accessibility_manager.cc index b3467932..eac1f79 100644 --- a/chrome/browser/chromeos/accessibility/accessibility_manager.cc +++ b/chrome/browser/chromeos/accessibility/accessibility_manager.cc
@@ -241,6 +241,7 @@ switch_access_pref_handler_( ash::prefs::kAccessibilitySwitchAccessEnabled), sticky_keys_enabled_(false), + spoken_feedback_enabled_(false), autoclick_enabled_(false), autoclick_delay_ms_(ash::AutoclickController::GetDefaultAutoclickDelay()), virtual_keyboard_enabled_(false), @@ -444,7 +445,7 @@ spoken_feedback_notification_ = ash::A11Y_NOTIFICATION_NONE; } -void AccessibilityManager::OnSpokenFeedbackChanged() { +void AccessibilityManager::UpdateSpokenFeedbackFromPref() { if (!profile_) return; @@ -457,6 +458,11 @@ weak_ptr_factory_.GetWeakPtr())); } + if (spoken_feedback_enabled_ == enabled) + return; + + spoken_feedback_enabled_ = enabled; + AccessibilityStatusEventDetails details(ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK, enabled, spoken_feedback_notification_); @@ -477,8 +483,12 @@ } bool AccessibilityManager::IsSpokenFeedbackEnabled() const { - return profile_ && profile_->GetPrefs()->GetBoolean( - ash::prefs::kAccessibilitySpokenFeedbackEnabled); + return spoken_feedback_enabled_; +} + +void AccessibilityManager::ToggleSpokenFeedback( + ash::AccessibilityNotificationVisibility notify) { + EnableSpokenFeedback(!IsSpokenFeedbackEnabled(), notify); } void AccessibilityManager::EnableHighContrast(bool enabled) { @@ -1036,7 +1046,7 @@ extension_ime_util::kBrailleImeEngineId); bool is_enabled = (it != preload_engines.end()); bool should_be_enabled = - (IsSpokenFeedbackEnabled() && braille_display_connected_); + (spoken_feedback_enabled_ && braille_display_connected_); if (is_enabled == should_be_enabled) return; if (should_be_enabled) @@ -1113,7 +1123,7 @@ base::Unretained(this))); pref_change_registrar_->Add( ash::prefs::kAccessibilitySpokenFeedbackEnabled, - base::Bind(&AccessibilityManager::OnSpokenFeedbackChanged, + base::Bind(&AccessibilityManager::UpdateSpokenFeedbackFromPref, base::Unretained(this))); pref_change_registrar_->Add( ash::prefs::kAccessibilityHighContrastEnabled, @@ -1201,6 +1211,7 @@ UpdateBrailleImeState(); UpdateAlwaysShowMenuFromPref(); UpdateStickyKeysFromPref(); + UpdateSpokenFeedbackFromPref(); UpdateAutoclickFromPref(); UpdateAutoclickDelayFromPref(); UpdateVirtualKeyboardFromPref(); @@ -1263,8 +1274,7 @@ if (details.notification_type != ACCESSIBILITY_MANAGER_SHUTDOWN && details.notification_type != ACCESSIBILITY_TOGGLE_HIGH_CONTRAST_MODE && details.notification_type != ACCESSIBILITY_TOGGLE_LARGE_CURSOR && - details.notification_type != ACCESSIBILITY_TOGGLE_MONO_AUDIO && - details.notification_type != ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK) { + details.notification_type != ACCESSIBILITY_TOGGLE_MONO_AUDIO) { ash::Shell::Get()->system_tray_notifier()->NotifyAccessibilityStatusChanged( details.notify); } @@ -1366,13 +1376,7 @@ const DisplayState& display_state) { braille_display_connected_ = display_state.available; if (braille_display_connected_) { - // TODO(crbug.com/594887): Fix for mash by moving notifying accessibility - // status change to ash for BrailleDisplayStateChanged. - if (GetAshConfig() == ash::Config::MASH) - return; - - ash::Shell::Get()->accessibility_controller()->SetSpokenFeedbackEnabled( - true, ash::A11Y_NOTIFICATION_SHOW); + EnableSpokenFeedback(true, ash::A11Y_NOTIFICATION_SHOW); } UpdateBrailleImeState();
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.h b/chrome/browser/chromeos/accessibility/accessibility_manager.h index 9d91757..728c8a7 100644 --- a/chrome/browser/chromeos/accessibility/accessibility_manager.h +++ b/chrome/browser/chromeos/accessibility/accessibility_manager.h
@@ -147,6 +147,9 @@ // Returns true if spoken feedback is enabled, or false if not. bool IsSpokenFeedbackEnabled() const; + // Toggles whether Chrome OS spoken feedback is on or off. + void ToggleSpokenFeedback(ash::AccessibilityNotificationVisibility notify); + // Enables or disables the high contrast mode for Chrome. void EnableHighContrast(bool enabled); @@ -309,7 +312,7 @@ void UpdateAlwaysShowMenuFromPref(); void OnLargeCursorChanged(); void UpdateStickyKeysFromPref(); - void OnSpokenFeedbackChanged(); + void UpdateSpokenFeedbackFromPref(); void OnHighContrastChanged(); void UpdateAutoclickFromPref(); void UpdateAutoclickDelayFromPref(); @@ -385,6 +388,7 @@ PrefHandler switch_access_pref_handler_; bool sticky_keys_enabled_; + bool spoken_feedback_enabled_; bool autoclick_enabled_; base::TimeDelta autoclick_delay_ms_; bool virtual_keyboard_enabled_;
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager_browsertest.cc b/chrome/browser/chromeos/accessibility/accessibility_manager_browsertest.cc index 778060ba..a7369eb 100644 --- a/chrome/browser/chromeos/accessibility/accessibility_manager_browsertest.cc +++ b/chrome/browser/chromeos/accessibility/accessibility_manager_browsertest.cc
@@ -4,7 +4,6 @@ #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" -#include "ash/accessibility/accessibility_controller.h" #include "ash/magnifier/magnification_controller.h" #include "ash/public/cpp/accessibility_types.h" #include "ash/public/cpp/ash_pref_names.h" @@ -177,10 +176,8 @@ // Simulates how UserSessionManager starts a user session by loading user // profile and marking session as started. void StartUserSession(const AccountId& account_id) { - Profile* profile = ProfileHelper::GetProfileByUserIdHashForTest( + ProfileHelper::GetProfileByUserIdHashForTest( user_manager::UserManager::Get()->FindUser(account_id)->username_hash()); - ash::Shell::Get()->accessibility_controller()->SetPrefServiceForTest( - profile->GetPrefs()); session_manager::SessionManager::Get()->SessionStarted(); } @@ -283,10 +280,8 @@ void SetUpOnMainThread() override { // Sets the login-screen profile. - Profile* profile = ProfileHelper::GetSigninProfile(); - AccessibilityManager::Get()->SetProfileForTest(profile); - ash::Shell::Get()->accessibility_controller()->SetPrefServiceForTest( - profile->GetPrefs()); + AccessibilityManager::Get()->SetProfileForTest( + ProfileHelper::GetSigninProfile()); default_autoclick_delay_ = GetAutoclickDelay(); }
diff --git a/chrome/browser/chromeos/accessibility/touch_exploration_controller_browsertest.cc b/chrome/browser/chromeos/accessibility/touch_exploration_controller_browsertest.cc index 9b1b5b6..61cf0a2 100644 --- a/chrome/browser/chromeos/accessibility/touch_exploration_controller_browsertest.cc +++ b/chrome/browser/chromeos/accessibility/touch_exploration_controller_browsertest.cc
@@ -12,7 +12,6 @@ #include "base/test/simple_test_tick_clock.h" #include "base/time/time.h" #include "build/build_config.h" -#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/test/base/in_process_browser_test.h" @@ -57,8 +56,10 @@ } void SwitchTouchExplorationMode(bool on) { - chromeos::AccessibilityManager::Get()->EnableSpokenFeedback( - on, ash::A11Y_NOTIFICATION_NONE); + ash::AccessibilityDelegate* delegate = + ash::Shell::Get()->accessibility_delegate(); + if (on != delegate->IsSpokenFeedbackEnabled()) + delegate->ToggleSpokenFeedback(ash::A11Y_NOTIFICATION_NONE); } base::TimeTicks Now() { return simulated_clock_->NowTicks(); }
diff --git a/chrome/browser/chromeos/extensions/external_cache.cc b/chrome/browser/chromeos/extensions/external_cache.cc index 40a2a5904..cef9a02 100644 --- a/chrome/browser/chromeos/extensions/external_cache.cc +++ b/chrome/browser/chromeos/extensions/external_cache.cc
@@ -26,6 +26,7 @@ #include "extensions/browser/notification_types.h" #include "extensions/browser/updater/extension_downloader.h" #include "extensions/common/extension.h" +#include "content/public/common/service_manager_connection.h" #include "extensions/common/extension_urls.h" #include "net/url_request/url_request_context_getter.h" @@ -218,6 +219,11 @@ return false; } +service_manager::Connector* ExternalCache::GetConnector() { + return content::ServiceManagerConnection::GetForProcess()->GetConnector(); + +} + void ExternalCache::UpdateExtensionLoader() { VLOG(1) << "Notify ExternalCache delegate about cache update"; if (delegate_) @@ -231,7 +237,7 @@ // If request_context_ is missing we can't download anything. if (request_context_.get()) { downloader_ = ChromeExtensionDownloaderFactory::CreateForRequestContext( - request_context_.get(), this); + request_context_.get(), this, GetConnector()); } cached_extensions_->Clear();
diff --git a/chrome/browser/chromeos/extensions/external_cache.h b/chrome/browser/chromeos/extensions/external_cache.h index 9f53962..2b33d492c 100644 --- a/chrome/browser/chromeos/extensions/external_cache.h +++ b/chrome/browser/chromeos/extensions/external_cache.h
@@ -31,6 +31,10 @@ class URLRequestContextGetter; } +namespace service_manager { +class Connector; +} + namespace chromeos { // The ExternalCache manages a cache for external extensions. @@ -136,6 +140,10 @@ void set_flush_on_put(bool flush_on_put) { flush_on_put_ = flush_on_put; } + protected: + // Overridden in tests. + virtual service_manager::Connector* GetConnector(); + private: // Notifies the that the cache has been updated, providing // extensions loader with an updated list of extensions.
diff --git a/chrome/browser/chromeos/extensions/external_cache_unittest.cc b/chrome/browser/chromeos/extensions/external_cache_unittest.cc index 30779f6c..a6caf830 100644 --- a/chrome/browser/chromeos/extensions/external_cache_unittest.cc +++ b/chrome/browser/chromeos/extensions/external_cache_unittest.cc
@@ -40,6 +40,27 @@ namespace chromeos { +class TestExternalCache : public ExternalCache { + public: + TestExternalCache(const base::FilePath& cache_dir, + net::URLRequestContextGetter* request_context, + const scoped_refptr<base::SequencedTaskRunner>& + backend_task_runner, + Delegate* delegate, + bool always_check_updates, + bool wait_for_cache_initialization) + : ExternalCache(cache_dir, request_context, backend_task_runner, delegate, + always_check_updates, wait_for_cache_initialization) {} + + protected: + service_manager::Connector* GetConnector() override { + return nullptr; + } + + private: + DISALLOW_COPY_AND_ASSIGN(TestExternalCache); +}; + class ExternalCacheTest : public testing::Test, public ExternalCache::Delegate { public: @@ -141,7 +162,7 @@ TEST_F(ExternalCacheTest, Basic) { base::FilePath cache_dir(CreateCacheDir(false)); - ExternalCache external_cache( + TestExternalCache external_cache( cache_dir, request_context_getter(), base::CreateSequencedTaskRunnerWithTraits({base::MayBlock()}), this, true, false); @@ -264,7 +285,7 @@ TEST_F(ExternalCacheTest, PreserveInstalled) { base::FilePath cache_dir(CreateCacheDir(false)); - ExternalCache external_cache( + TestExternalCache external_cache( cache_dir, request_context_getter(), base::CreateSequencedTaskRunnerWithTraits({base::MayBlock()}), this, true, false);
diff --git a/chrome/browser/chromeos/preferences.cc b/chrome/browser/chromeos/preferences.cc index 972c8083..d21804a 100644 --- a/chrome/browser/chromeos/preferences.cc +++ b/chrome/browser/chromeos/preferences.cc
@@ -203,7 +203,7 @@ ash::kDefaultLargeCursorSize, PrefRegistry::PUBLIC); registry->RegisterBooleanPref(ash::prefs::kAccessibilitySpokenFeedbackEnabled, - false, PrefRegistry::PUBLIC); + false); registry->RegisterBooleanPref( ash::prefs::kAccessibilityHighContrastEnabled, false, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF | PrefRegistry::PUBLIC);
diff --git a/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc b/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc index 2d21fcb4..5b6dea9 100644 --- a/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc +++ b/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc
@@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/accessibility/accessibility_controller.h" #include "ash/login_status.h" #include "ash/public/cpp/accessibility_types.h" #include "ash/public/cpp/ash_pref_names.h" @@ -971,6 +970,8 @@ IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowNotification) { const base::string16 BRAILLE_CONNECTED = base::ASCIIToUTF16("Braille display connected."); + const base::string16 CHROMEVOX_ENABLED_TITLE = + base::ASCIIToUTF16("ChromeVox enabled"); const base::string16 CHROMEVOX_ENABLED = base::ASCIIToUTF16("Press Ctrl + Alt + Z to disable spoken feedback."); const base::string16 BRAILLE_CONNECTED_AND_CHROMEVOX_ENABLED_TITLE = @@ -978,17 +979,18 @@ EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled()); - ash::Shell::Get()->accessibility_controller()->SetSpokenFeedbackEnabled( - true, ash::A11Y_NOTIFICATION_SHOW); - // Spin the run loop to make sure ash see the change. - base::RunLoop().RunUntilIdle(); - EXPECT_TRUE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled()); + // Enabling spoken feedback should show the notification. + EnableSpokenFeedback(true, ash::A11Y_NOTIFICATION_SHOW); + message_center::NotificationList::Notifications notifications = + MessageCenter::Get()->GetVisibleNotifications(); + EXPECT_EQ(1u, notifications.size()); + EXPECT_EQ(CHROMEVOX_ENABLED_TITLE, (*notifications.begin())->title()); + EXPECT_EQ(CHROMEVOX_ENABLED, (*notifications.begin())->message()); // Connecting a braille display when spoken feedback is already enabled // should only show the message about the braille display. SetBrailleConnected(true); - message_center::NotificationList::Notifications notifications = - MessageCenter::Get()->GetVisibleNotifications(); + notifications = MessageCenter::Get()->GetVisibleNotifications(); EXPECT_EQ(1u, notifications.size()); EXPECT_EQ(base::string16(), (*notifications.begin())->title()); EXPECT_EQ(BRAILLE_CONNECTED, (*notifications.begin())->message()); @@ -999,10 +1001,7 @@ EXPECT_TRUE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled()); notifications = MessageCenter::Get()->GetVisibleNotifications(); EXPECT_EQ(0u, notifications.size()); - ash::Shell::Get()->accessibility_controller()->SetSpokenFeedbackEnabled( - false, ash::A11Y_NOTIFICATION_SHOW); - // Spin the run loop to make sure ash see the change. - base::RunLoop().RunUntilIdle(); + EnableSpokenFeedback(false, ash::A11Y_NOTIFICATION_SHOW); notifications = MessageCenter::Get()->GetVisibleNotifications(); EXPECT_EQ(0u, notifications.size()); EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled()); @@ -1010,8 +1009,6 @@ // Connecting a braille display should enable spoken feedback and show // both messages. SetBrailleConnected(true); - // Spin the run loop to make sure ash see the change. - base::RunLoop().RunUntilIdle(); EXPECT_TRUE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled()); notifications = MessageCenter::Get()->GetVisibleNotifications(); EXPECT_EQ(BRAILLE_CONNECTED_AND_CHROMEVOX_ENABLED_TITLE,
diff --git a/chrome/browser/extensions/api/certificate_provider/certificate_provider_api.cc b/chrome/browser/extensions/api/certificate_provider/certificate_provider_api.cc index 762de52..4b792356 100644 --- a/chrome/browser/extensions/api/certificate_provider/certificate_provider_api.cc +++ b/chrome/browser/extensions/api/certificate_provider/certificate_provider_api.cc
@@ -125,8 +125,12 @@ return false; } - out_info->certificate = - net::X509Certificate::CreateFromBytes(cert_der.data(), cert_der.size()); + // Allow UTF-8 inside PrintableStrings in client certificates. See + // crbug.com/770323 and crbug.com/788655. + net::X509Certificate::UnsafeCreateOptions options; + options.printable_string_is_utf8 = true; + out_info->certificate = net::X509Certificate::CreateFromBytesUnsafeOptions( + cert_der.data(), cert_der.size(), options); if (!out_info->certificate) { WriteToConsole(content::CONSOLE_MESSAGE_LEVEL_ERROR, kErrorInvalidX509Cert); return false;
diff --git a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc index 3a0a01a..d20974aad 100644 --- a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc +++ b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc
@@ -142,8 +142,13 @@ return RespondNow(Error(platform_keys::kErrorInvalidToken)); const std::vector<char>& cert_der = params->certificate; + // Allow UTF-8 inside PrintableStrings in client certificates. See + // crbug.com/770323 and crbug.com/788655. + net::X509Certificate::UnsafeCreateOptions options; + options.printable_string_is_utf8 = true; scoped_refptr<net::X509Certificate> cert_x509 = - net::X509Certificate::CreateFromBytes(cert_der.data(), cert_der.size()); + net::X509Certificate::CreateFromBytesUnsafeOptions( + cert_der.data(), cert_der.size(), options); if (!cert_x509.get()) return RespondNow(Error(kErrorInvalidX509Cert)); @@ -180,8 +185,13 @@ return RespondNow(Error(platform_keys::kErrorInvalidToken)); const std::vector<char>& cert_der = params->certificate; + // Allow UTF-8 inside PrintableStrings in client certificates. See + // crbug.com/770323 and crbug.com/788655. + net::X509Certificate::UnsafeCreateOptions options; + options.printable_string_is_utf8 = true; scoped_refptr<net::X509Certificate> cert_x509 = - net::X509Certificate::CreateFromBytes(cert_der.data(), cert_der.size()); + net::X509Certificate::CreateFromBytesUnsafeOptions( + cert_der.data(), cert_der.size(), options); if (!cert_x509.get()) return RespondNow(Error(kErrorInvalidX509Cert));
diff --git a/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc b/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc index 4372d80..7fd7ef4d 100644 --- a/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc +++ b/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc
@@ -131,8 +131,13 @@ const std::vector<char>& cert_der = params->certificate; if (cert_der.empty()) return RespondNow(Error(platform_keys::kErrorInvalidX509Cert)); + // Allow UTF-8 inside PrintableStrings in client certificates. See + // crbug.com/770323 and crbug.com/788655. + net::X509Certificate::UnsafeCreateOptions options; + options.printable_string_is_utf8 = true; scoped_refptr<net::X509Certificate> cert_x509 = - net::X509Certificate::CreateFromBytes(cert_der.data(), cert_der.size()); + net::X509Certificate::CreateFromBytesUnsafeOptions( + cert_der.data(), cert_der.size(), options); if (!cert_x509) return RespondNow(Error(platform_keys::kErrorInvalidX509Cert)); @@ -206,9 +211,13 @@ *params->details.client_certs) { if (client_cert_der.empty()) return RespondNow(Error(platform_keys::kErrorInvalidX509Cert)); + // Allow UTF-8 inside PrintableStrings in client certificates. See + // crbug.com/770323 and crbug.com/788655. + net::X509Certificate::UnsafeCreateOptions options; + options.printable_string_is_utf8 = true; scoped_refptr<net::X509Certificate> client_cert_x509 = - net::X509Certificate::CreateFromBytes(client_cert_der.data(), - client_cert_der.size()); + net::X509Certificate::CreateFromBytesUnsafeOptions( + client_cert_der.data(), client_cert_der.size(), options); if (!client_cert_x509) return RespondNow(Error(platform_keys::kErrorInvalidX509Cert)); client_certs->push_back(client_cert_x509);
diff --git a/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc b/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc index 4881e6c..f1c5d73 100644 --- a/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc +++ b/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc
@@ -7,7 +7,6 @@ #include <string> #include <utility> - #include "base/command_line.h" #include "chrome/browser/google/google_brand.h" #include "chrome/browser/profiles/profile.h" @@ -19,6 +18,7 @@ #include "components/update_client/update_query_params.h" #include "extensions/browser/updater/extension_downloader.h" #include "google_apis/gaia/identity_provider.h" +#include "content/public/common/service_manager_connection.h" using extensions::ExtensionDownloader; using extensions::ExtensionDownloaderDelegate; @@ -31,9 +31,10 @@ std::unique_ptr<ExtensionDownloader> ChromeExtensionDownloaderFactory::CreateForRequestContext( net::URLRequestContextGetter* request_context, - ExtensionDownloaderDelegate* delegate) { + ExtensionDownloaderDelegate* delegate, + service_manager::Connector* connector) { std::unique_ptr<ExtensionDownloader> downloader( - new ExtensionDownloader(delegate, request_context)); + new ExtensionDownloader(delegate, request_context, connector)); #if defined(GOOGLE_CHROME_BUILD) std::string brand; google_brand::GetBrand(&brand); @@ -61,8 +62,11 @@ SigninManagerFactory::GetForProfile(profile), ProfileOAuth2TokenServiceFactory::GetForProfile(profile), LoginUIServiceFactory::GetShowLoginPopupCallbackForProfile(profile))); + service_manager::Connector* connector = + content::ServiceManagerConnection::GetForProcess()->GetConnector(); std::unique_ptr<ExtensionDownloader> downloader = - CreateForRequestContext(profile->GetRequestContext(), delegate); + CreateForRequestContext(profile->GetRequestContext(), delegate, + connector); downloader->SetWebstoreIdentityProvider(std::move(identity_provider)); return downloader; }
diff --git a/chrome/browser/extensions/updater/chrome_extension_downloader_factory.h b/chrome/browser/extensions/updater/chrome_extension_downloader_factory.h index 2f3a787a..4426256b 100644 --- a/chrome/browser/extensions/updater/chrome_extension_downloader_factory.h +++ b/chrome/browser/extensions/updater/chrome_extension_downloader_factory.h
@@ -18,6 +18,10 @@ class URLRequestContextGetter; } +namespace service_manager { +class Connector; +} + // This provides a simple static interface for constructing an // ExtensionDownloader suitable for use from within Chrome. class ChromeExtensionDownloaderFactory { @@ -26,7 +30,8 @@ // is associated with this downloader. static std::unique_ptr<extensions::ExtensionDownloader> CreateForRequestContext(net::URLRequestContextGetter* request_context, - extensions::ExtensionDownloaderDelegate* delegate); + extensions::ExtensionDownloaderDelegate* delegate, + service_manager::Connector* connector); // Creates a downloader for a given Profile. This downloader will be able // to authenticate as the signed-in user in the event that it's asked to
diff --git a/chrome/browser/extensions/updater/extension_updater_unittest.cc b/chrome/browser/extensions/updater/extension_updater_unittest.cc index fe637a2..e873c40 100644 --- a/chrome/browser/extensions/updater/extension_updater_unittest.cc +++ b/chrome/browser/extensions/updater/extension_updater_unittest.cc
@@ -74,6 +74,7 @@ #include "net/http/http_request_headers.h" #include "net/url_request/test_url_fetcher_factory.h" #include "net/url_request/url_request_status.h" +#include "services/data_decoder/public/cpp/test_data_decoder_service.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/third_party/mozilla/url_parse.h" @@ -377,7 +378,8 @@ ChromeExtensionDownloaderFactory::CreateForRequestContext( request_context(), downloader_delegate_override_ ? downloader_delegate_override_ - : delegate); + : delegate, + /*connector=*/nullptr); return downloader; } @@ -679,8 +681,8 @@ void AddParseResult(const std::string& id, const std::string& version, const std::string& url, - UpdateManifest::Results* results) { - UpdateManifest::Result result; + UpdateManifestResults* results) { + UpdateManifestResult result; result.extension_id = id; result.version = version; result.crx_url = GURL(url); @@ -820,7 +822,8 @@ MockService service(prefs_.get()); MockExtensionDownloaderDelegate delegate; - ExtensionDownloader downloader(&delegate, service.request_context()); + ExtensionDownloader downloader(&delegate, service.request_context(), + data_decoder_service_connector()); ExtensionList extensions; service.CreateTestExtensions(1, num_extensions, &extensions, &update_url, @@ -909,12 +912,13 @@ void TestDetermineUpdates() { TestingProfile profile; MockExtensionDownloaderDelegate delegate; - ExtensionDownloader downloader(&delegate, profile.GetRequestContext()); + ExtensionDownloader downloader(&delegate, profile.GetRequestContext(), + data_decoder_service_connector()); // Check passing an empty list of parse results to DetermineUpdates std::unique_ptr<ManifestFetchData> fetch_data( CreateManifestFetchData(GURL("http://localhost/foo"))); - UpdateManifest::Results updates; + UpdateManifestResults updates; std::vector<int> updateable; downloader.DetermineUpdates(*fetch_data, updates, &updateable); EXPECT_TRUE(updateable.empty()); @@ -955,11 +959,12 @@ TestingProfile profile; MockExtensionDownloaderDelegate delegate; - ExtensionDownloader downloader(&delegate, profile.GetRequestContext()); + ExtensionDownloader downloader(&delegate, profile.GetRequestContext(), + data_decoder_service_connector()); std::unique_ptr<ManifestFetchData> fetch_data( CreateManifestFetchData(GURL("http://localhost/foo"))); - UpdateManifest::Results updates; + UpdateManifestResults updates; std::list<std::string> ids_for_update_check; pending_extension_manager->GetPendingIdsForUpdateCheck( @@ -993,7 +998,8 @@ net::TestURLFetcher* fetcher = NULL; MockService service(prefs_.get()); MockExtensionDownloaderDelegate delegate; - ExtensionDownloader downloader(&delegate, service.request_context()); + ExtensionDownloader downloader(&delegate, service.request_context(), + data_decoder_service_connector()); downloader.manifests_queue_.set_backoff_policy(&kNoBackoffPolicy); GURL kUpdateUrl("http://localhost/manifest1"); @@ -1141,7 +1147,8 @@ NotificationsObserver observer; MockService service(prefs_.get()); MockExtensionDownloaderDelegate delegate; - ExtensionDownloader downloader(&delegate, service.request_context()); + ExtensionDownloader downloader(&delegate, service.request_context(), + data_decoder_service_connector()); downloader.manifests_queue_.set_backoff_policy(&kNoBackoffPolicy); GURL kUpdateUrl("http://localhost/manifest1"); @@ -1843,15 +1850,18 @@ &kNeverPingedData, kEmptyUpdateUrlData, std::string(), ManifestFetchData::FetchPriority::BACKGROUND); - UpdateManifest::Results results; - results.daystart_elapsed_seconds = 750; + auto results = std::make_unique<UpdateManifestResults>(); + constexpr int kDaystartElapsedSeconds = 750; + results->daystart_elapsed_seconds = kDaystartElapsedSeconds; - updater.downloader_->HandleManifestResults(fetch_data.get(), &results); + updater.downloader_->HandleManifestResults( + std::move(fetch_data), std::move(results), + /*error=*/base::Optional<std::string>()); Time last_ping_day = service.extension_prefs()->LastPingDay(extension->id()); EXPECT_FALSE(last_ping_day.is_null()); int64_t seconds_diff = (Time::Now() - last_ping_day).InSeconds(); - EXPECT_LT(seconds_diff - results.daystart_elapsed_seconds, 5); + EXPECT_LT(seconds_diff - kDaystartElapsedSeconds, 5); } // This lets us run a test with some enabled and some disabled @@ -1993,10 +2003,15 @@ update_url, ManifestFetchData::FetchPriority::BACKGROUND); } + service_manager::Connector* data_decoder_service_connector() const { + return test_data_decoder_service_.connector(); + } + private: content::TestBrowserThreadBundle thread_bundle_; content::InProcessUtilityThreadHelper in_process_utility_thread_helper_; ScopedTestingLocalState testing_local_state_; + data_decoder::TestDataDecoderService test_data_decoder_service_; #if defined OS_CHROMEOS chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; @@ -2231,8 +2246,8 @@ net::TestURLFetcherFactory factory; MockService service(prefs_.get()); MockExtensionDownloaderDelegate delegate; - std::unique_ptr<ExtensionDownloader> downloader( - new ExtensionDownloader(&delegate, service.request_context())); + std::unique_ptr<ExtensionDownloader> downloader(new ExtensionDownloader( + &delegate, service.request_context(), data_decoder_service_connector())); EXPECT_EQ(0u, ManifestFetchersCount(downloader.get())); // First, verify that adding valid extensions does invoke the callbacks on @@ -2265,8 +2280,8 @@ // converted from user scripts are rejected. // Reset the ExtensionDownloader so that it drops the current fetcher. - downloader.reset( - new ExtensionDownloader(&delegate, service.request_context())); + downloader.reset(new ExtensionDownloader(&delegate, service.request_context(), + data_decoder_service_connector())); EXPECT_EQ(0u, ManifestFetchersCount(downloader.get())); // Extensions with empty update URLs should have a default one @@ -2288,7 +2303,8 @@ net::TestURLFetcherFactory factory; MockService service(prefs_.get()); MockExtensionDownloaderDelegate delegate; - ExtensionDownloader downloader(&delegate, service.request_context()); + ExtensionDownloader downloader(&delegate, service.request_context(), + data_decoder_service_connector()); StartUpdateCheck(&downloader, CreateManifestFetchData(GURL("http://localhost/foo")));
diff --git a/chrome/browser/ui/ash/chrome_shell_delegate.cc b/chrome/browser/ui/ash/chrome_shell_delegate.cc index 043f1e6c..61b1598e 100644 --- a/chrome/browser/ui/ash/chrome_shell_delegate.cc +++ b/chrome/browser/ui/ash/chrome_shell_delegate.cc
@@ -103,6 +103,17 @@ ash::Shell::Get()->RemoveShellObserver(AccessibilityManager::Get()); } + bool IsSpokenFeedbackEnabled() const override { + DCHECK(AccessibilityManager::Get()); + return AccessibilityManager::Get()->IsSpokenFeedbackEnabled(); + } + + void ToggleSpokenFeedback( + ash::AccessibilityNotificationVisibility notify) override { + DCHECK(AccessibilityManager::Get()); + AccessibilityManager::Get()->ToggleSpokenFeedback(notify); + } + void SetMagnifierEnabled(bool enabled) override { DCHECK(chromeos::MagnificationManager::Get()); return chromeos::MagnificationManager::Get()->SetMagnifierEnabled(enabled);
diff --git a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc index d88dd81f..33dcfaa 100644 --- a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
@@ -98,7 +98,8 @@ } } -CoreOobeHandler::~CoreOobeHandler() {} +CoreOobeHandler::~CoreOobeHandler() { +} void CoreOobeHandler::DeclareLocalizedValues( ::login::LocalizedValuesBuilder* builder) { @@ -152,13 +153,16 @@ } void CoreOobeHandler::RegisterMessages() { - AddCallback("screenStateInitialize", &CoreOobeHandler::HandleInitialized); + AddCallback("screenStateInitialize", + &CoreOobeHandler::HandleInitialized); AddCallback("skipUpdateEnrollAfterEula", &CoreOobeHandler::HandleSkipUpdateEnrollAfterEula); AddCallback("updateCurrentScreen", &CoreOobeHandler::HandleUpdateCurrentScreen); - AddCallback("enableHighContrast", &CoreOobeHandler::HandleEnableHighContrast); - AddCallback("enableLargeCursor", &CoreOobeHandler::HandleEnableLargeCursor); + AddCallback("enableHighContrast", + &CoreOobeHandler::HandleEnableHighContrast); + AddCallback("enableLargeCursor", + &CoreOobeHandler::HandleEnableLargeCursor); AddCallback("enableVirtualKeyboard", &CoreOobeHandler::HandleEnableVirtualKeyboard); AddCallback("enableScreenMagnifier", @@ -167,14 +171,17 @@ &CoreOobeHandler::HandleEnableSpokenFeedback); AddCallback("setDeviceRequisition", &CoreOobeHandler::HandleSetDeviceRequisition); - AddCallback("screenAssetsLoaded", &CoreOobeHandler::HandleScreenAssetsLoaded); + AddCallback("screenAssetsLoaded", + &CoreOobeHandler::HandleScreenAssetsLoaded); AddRawCallback("skipToLoginForTesting", &CoreOobeHandler::HandleSkipToLoginForTesting); - AddCallback("launchHelpApp", &CoreOobeHandler::HandleLaunchHelpApp); + AddCallback("launchHelpApp", + &CoreOobeHandler::HandleLaunchHelpApp); AddCallback("toggleResetScreen", &CoreOobeHandler::HandleToggleResetScreen); AddCallback("toggleEnableDebuggingScreen", &CoreOobeHandler::HandleEnableDebuggingScreen); - AddCallback("headerBarVisible", &CoreOobeHandler::HandleHeaderBarVisible); + AddCallback("headerBarVisible", + &CoreOobeHandler::HandleHeaderBarVisible); AddCallback("raiseTabKeyEvent", &CoreOobeHandler::HandleRaiseTabKeyEvent); AddCallback("setOobeBootstrappingSlave", &CoreOobeHandler::HandleSetOobeBootstrappingSlave); @@ -186,8 +193,8 @@ const std::string& help_link_text, HelpAppLauncher::HelpTopic help_topic_id) { LOG(ERROR) << "CoreOobeHandler::ShowSignInError: error_text=" << error_text; - CallJSOrDefer("showSignInError", login_attempts, error_text, help_link_text, - static_cast<int>(help_topic_id)); + CallJSOrDefer("showSignInError", login_attempts, error_text, + help_link_text, static_cast<int>(help_topic_id)); } void CoreOobeHandler::ShowTpmError() { @@ -227,7 +234,8 @@ void CoreOobeHandler::ShowEnableDebuggingScreen() { // Don't recreate WizardController if it already exists. - WizardController* wizard_controller = WizardController::default_controller(); + WizardController* wizard_controller = + WizardController::default_controller(); if (wizard_controller && !wizard_controller->login_screen_started()) { wizard_controller->AdvanceToScreen( OobeScreen::SCREEN_OOBE_ENABLE_DEBUGGING); @@ -341,9 +349,8 @@ void CoreOobeHandler::HandleEnableSpokenFeedback(bool /* enabled */) { // Checkbox is initialized on page init and updates when spoken feedback // setting is changed so just toggle spoken feedback here. - AccessibilityManager* manager = AccessibilityManager::Get(); - manager->EnableSpokenFeedback(!manager->IsSpokenFeedbackEnabled(), - ash::A11Y_NOTIFICATION_NONE); + AccessibilityManager::Get()->ToggleSpokenFeedback( + ash::A11Y_NOTIFICATION_NONE); } void CoreOobeHandler::HandleSetDeviceRequisition( @@ -364,7 +371,7 @@ // Exit Chrome to force the restart as soon as a new requisition is set. if (initial_requisition != - connector->GetDeviceCloudPolicyManager()->GetDeviceRequisition()) { + connector->GetDeviceCloudPolicyManager()->GetDeviceRequisition()) { chrome::AttemptRestart(); } } @@ -374,10 +381,11 @@ oobe_ui_->OnScreenAssetsLoaded(screen_async_load_id); } -void CoreOobeHandler::HandleSkipToLoginForTesting(const base::ListValue* args) { +void CoreOobeHandler::HandleSkipToLoginForTesting( + const base::ListValue* args) { LoginScreenContext context(args); if (WizardController::default_controller()) - WizardController::default_controller()->SkipToLoginForTesting(context); + WizardController::default_controller()->SkipToLoginForTesting(context); } void CoreOobeHandler::HandleToggleResetScreen() { @@ -427,8 +435,8 @@ void CoreOobeHandler::UpdateOobeUIVisibility() { const std::string& display = oobe_ui_->display_type(); CallJSOrDefer("showAPIKeysNotice", !google_apis::HasKeysConfigured() && - (display == OobeUI::kOobeDisplay || - display == OobeUI::kLoginDisplay)); + (display == OobeUI::kOobeDisplay || + display == OobeUI::kLoginDisplay)); // Don't show version label on the stable channel by default. bool should_show_version = true; @@ -448,8 +456,8 @@ UpdateLabel("version", os_version_label_text); } -void CoreOobeHandler::OnEnterpriseInfoUpdated(const std::string& message_text, - const std::string& asset_id) { +void CoreOobeHandler::OnEnterpriseInfoUpdated( + const std::string& message_text, const std::string& asset_id) { CallJSOrDefer("setEnterpriseInfo", message_text, asset_id); }
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/ChromeHome.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/ChromeHome.java index c203327..94f8391 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/ChromeHome.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/ChromeHome.java
@@ -11,13 +11,12 @@ import android.text.TextUtils; import org.chromium.base.CommandLine; -import org.chromium.base.test.util.AnnotationProcessor; +import org.chromium.base.test.util.AnnotationRule; import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.preferences.ChromePreferenceManager; import org.chromium.chrome.browser.util.FeatureUtilities; import java.lang.annotation.ElementType; -import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @@ -29,7 +28,6 @@ * @see ChromeHome.Processor * @see FeatureUtilities#isChromeHomeEnabled() */ -@Inherited @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.TYPE}) public @interface ChromeHome { @@ -43,7 +41,7 @@ * used by explicitly calling methods ({@link #setPrefs(boolean)} and {@link #clearTestState()}) * or by using the {@link ChromeHome} annotation on tests. */ - class Processor extends AnnotationProcessor<ChromeHome> { + class Processor extends AnnotationRule { private Boolean mOldState; public Processor() { @@ -52,7 +50,7 @@ @Override protected void before() throws Throwable { - boolean enabled = getRequestedState(); + boolean enabled = getAnnotation(ChromeHome.class).value(); if (enabled) { Features.getInstance().enable(ChromeFeatureList.CHROME_HOME); } else { @@ -108,12 +106,5 @@ commandLine.appendSwitch(ENABLE_FLAGS); } - - private boolean getRequestedState() { - if (getTestAnnotation() != null) return getTestAnnotation().value(); - if (getClassAnnotation() != null) return getClassAnnotation().value(); - - throw new IllegalStateException("Rule called with no annotation"); - } } }
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/Features.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/Features.java index f2980e7..a67843a 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/Features.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/Features.java
@@ -7,13 +7,11 @@ import android.support.annotation.Nullable; import android.text.TextUtils; -import org.junit.rules.ExternalResource; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; - import org.chromium.base.CommandLine; +import org.chromium.base.test.util.AnnotationRule; import org.chromium.chrome.browser.ChromeFeatureList; +import java.lang.annotation.Annotation; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Collections; @@ -151,23 +149,14 @@ * to enable, or get rid of exceptions when the production code tries to check for enabled * features. */ - private static abstract class Processor extends ExternalResource { - private Description mDescription; - - @Override - public Statement apply(Statement base, Description description) { - mDescription = description; - return super.apply(base, description); + private static abstract class Processor extends AnnotationRule { + public Processor() { + super(EnableFeatures.class, DisableFeatures.class); } @Override protected void before() throws Throwable { - collectDisabledFeatures( - mDescription.getTestClass().getAnnotation(DisableFeatures.class)); - collectEnabledFeatures(mDescription.getTestClass().getAnnotation(EnableFeatures.class)); - collectDisabledFeatures(mDescription.getAnnotation(DisableFeatures.class)); - collectEnabledFeatures(mDescription.getAnnotation(EnableFeatures.class)); - + collectFeatures(); applyFeatures(); } @@ -178,12 +167,14 @@ abstract protected void applyFeatures(); - private void collectEnabledFeatures(@Nullable EnableFeatures annotation) { - if (annotation != null) getInstance().enable(annotation.value()); - } - - private void collectDisabledFeatures(@Nullable DisableFeatures annotation) { - if (annotation != null) getInstance().disable(annotation.value()); + private void collectFeatures() { + for (Annotation annotation : getAnnotations()) { + if (annotation instanceof EnableFeatures) { + getInstance().enable(((EnableFeatures) annotation).value()); + } else if (annotation instanceof DisableFeatures) { + getInstance().disable(((DisableFeatures) annotation).value()); + } + } } } }
diff --git a/chrome/test/data/webui/print_preview/new_print_preview_ui_browsertest.js b/chrome/test/data/webui/print_preview/new_print_preview_ui_browsertest.js index ef54268..88c2d02 100644 --- a/chrome/test/data/webui/print_preview/new_print_preview_ui_browsertest.js +++ b/chrome/test/data/webui/print_preview/new_print_preview_ui_browsertest.js
@@ -67,3 +67,23 @@ TEST_F('PrintPreviewSettingsSectionsTest', 'Layout', function() { this.runMochaTest(settings_sections_tests.TestNames.Layout); }); + +TEST_F('PrintPreviewSettingsSectionsTest', 'Color', function() { + this.runMochaTest(settings_sections_tests.TestNames.Color); +}); + +TEST_F('PrintPreviewSettingsSectionsTest', 'MediaSize', function() { + this.runMochaTest(settings_sections_tests.TestNames.MediaSize); +}); + +TEST_F('PrintPreviewSettingsSectionsTest', 'Margins', function() { + this.runMochaTest(settings_sections_tests.TestNames.Margins); +}); + +TEST_F('PrintPreviewSettingsSectionsTest', 'Dpi', function() { + this.runMochaTest(settings_sections_tests.TestNames.Dpi); +}); + +TEST_F('PrintPreviewSettingsSectionsTest', 'Scaling', function() { + this.runMochaTest(settings_sections_tests.TestNames.Scaling); +});
diff --git a/chrome/test/data/webui/print_preview/settings_section_test.js b/chrome/test/data/webui/print_preview/settings_section_test.js index 7edcd59..deddf1a 100644 --- a/chrome/test/data/webui/print_preview/settings_section_test.js +++ b/chrome/test/data/webui/print_preview/settings_section_test.js
@@ -7,6 +7,11 @@ const TestNames = { Copies: 'copies', Layout: 'layout', + Color: 'color', + MediaSize: 'media size', + Margins: 'margins', + Dpi: 'dpi', + Scaling: 'scaling', }; const suiteName = 'SettingsSectionsTests'; @@ -73,9 +78,27 @@ }; } + /** @param {boolean} isPdf Whether the document should be a PDF. */ + function setPdfDocument(isPdf) { + const info = new print_preview.DocumentInfo(); + info.init(!isPdf, 'title', false); + page.set('documentInfo', info); + } + + function setPdfDestination() { + const saveAsPdfDestination = new print_preview.Destination( + print_preview.Destination.GooglePromotedId.SAVE_AS_PDF, + print_preview.DestinationType.LOCAL, + print_preview.DestinationOrigin.LOCAL, + loadTimeData.getString('printToPDF'), false /*isRecent*/, + print_preview.DestinationConnectionStatus.ONLINE); + saveAsPdfDestination.capabilities = getCdd(); + page.set('destination', saveAsPdfDestination); + } + test(assert(TestNames.Copies), function() { const copiesElement = page.$$('print-preview-copies-settings'); - assertEquals(false, copiesElement.hidden); + expectEquals(false, copiesElement.hidden); // Remove copies capability. const capabilities = getCdd(); @@ -83,17 +106,15 @@ // Copies section should now be hidden. page.set('destination.capabilities', capabilities); - assertEquals(true, copiesElement.hidden); + expectEquals(true, copiesElement.hidden); }); test(assert(TestNames.Layout), function() { const layoutElement = page.$$('print-preview-layout-settings'); // Set up with HTML document. - const htmlInfo = new print_preview.DocumentInfo(); - htmlInfo.init(true, 'title', false); - page.set('documentInfo', htmlInfo); - assertEquals(false, layoutElement.hidden); + setPdfDocument(false); + expectEquals(false, layoutElement.hidden); // Remove layout capability. let capabilities = getCdd(); @@ -105,22 +126,140 @@ {option: [{ type: 'PORTRAIT', is_default: true }]}, {option: [{ type: 'LANDSCAPE', is_default: true}]}, ].forEach(layoutCap => { + capabilities = getCdd(); capabilities.printer.page_orientation = layoutCap; // Layout section should now be hidden. page.set('destination.capabilities', capabilities); - assertEquals(true, layoutElement.hidden); + expectEquals(true, layoutElement.hidden); }); // Reset full capabilities capabilities = getCdd(); page.set('destination.capabilities', capabilities); - assertEquals(false, layoutElement.hidden); + expectEquals(false, layoutElement.hidden); // Test with PDF - should be hidden. - const pdfInfo = new print_preview.DocumentInfo(); - pdfInfo.init(false, 'title', false); - page.set('documentInfo', pdfInfo); - assertEquals(true, layoutElement.hidden); + setPdfDocument(true); + expectEquals(true, layoutElement.hidden); + }); + + test(assert(TestNames.Color), function() { + const colorElement = page.$$('print-preview-color-settings'); + expectEquals(false, colorElement.hidden); + + // Remove color capability. + let capabilities = getCdd(); + delete capabilities.printer.color; + + // Each of these settings should not show the capability. + [ + null, + {option: [{ type: 'STANDARD_COLOR', is_default: true }]}, + {option: [{ type: 'STANDARD_COLOR', is_default: true }, + { type: 'CUSTOM_COLOR'}]}, + {option: [{ type: 'STANDARD_MONOCHROME', is_default: true }, + { type: 'CUSTOM_MONOCHROME' }]}, + {option: [{ type: 'STANDARD_MONOCHROME', is_default: true}]}, + ].forEach(colorCap => { + capabilities = getCdd(); + capabilities.printer.color = colorCap; + // Layout section should now be hidden. + page.set('destination.capabilities', capabilities); + expectEquals(true, colorElement.hidden); + }); + + // Custom color and monochrome options should make the section visible. + capabilities = getCdd(); + capabilities.printer.color = + {option: [{ type: 'CUSTOM_COLOR', is_default: true }, + { type: 'CUSTOM_MONOCHROME' }]}; + page.set('destination.capabilities', capabilities); + expectEquals(false, colorElement.hidden); + }); + + test(assert(TestNames.MediaSize), function() { + const mediaSizeElement = page.$$('print-preview-media-size-settings'); + expectEquals(false, mediaSizeElement.hidden); + + // Remove capability. + let capabilities = getCdd(); + delete capabilities.printer.media_size; + + // Section should now be hidden. + page.set('destination.capabilities', capabilities); + expectEquals(true, mediaSizeElement.hidden); + + // Reset + capabilities = getCdd(); + page.set('destination.capabilities', capabilities); + + // Set PDF document type. + setPdfDocument(true); + expectEquals(false, mediaSizeElement.hidden); + + // Set save as PDF. This should hide the settings section. + setPdfDestination(); + expectEquals(true, mediaSizeElement.hidden); + + // Set HTML document type, should now show the section. + setPdfDocument(false); + expectEquals(false, mediaSizeElement.hidden); + }); + + test(assert(TestNames.Margins), function() { + const marginsElement = page.$$('print-preview-margins-settings'); + + // Section is available for HTML (modifiable) documents + setPdfDocument(false); + expectEquals(false, marginsElement.hidden); + + // Unavailable for PDFs. + setPdfDocument(true); + expectEquals(true, marginsElement.hidden); + }); + + test(assert(TestNames.Dpi), function() { + const dpiElement = page.$$('print-preview-dpi-settings'); + expectEquals(false, dpiElement.hidden); + + // Remove capability. + let capabilities = getCdd(); + delete capabilities.printer.dpi; + + // Section should now be hidden. + page.set('destination.capabilities', capabilities); + expectEquals(true, dpiElement.hidden); + + // Does not show up for only 1 option. + capabilities = getCdd(); + capabilities.printer.dpi.option.pop(); + page.set('destination.capabilities', capabilities); + expectEquals(true, dpiElement.hidden); + }); + + test(assert(TestNames.Scaling), function() { + const scalingElement = page.$$('print-preview-scaling-settings'); + expectEquals(false, scalingElement.hidden); + + // HTML to non-PDF destination -> only input shown + setPdfDocument(false); + const fitToPageContainer = scalingElement.$$('#fit-to-page-container'); + const scalingInput = + scalingElement.$$('print-preview-number-settings-section') + .$$('.user-value'); + expectEquals(false, scalingElement.hidden); + expectEquals(true, fitToPageContainer.hidden); + expectEquals(false, scalingInput.hidden); + + // PDF to non-PDF destination -> checkbox and input shown. + setPdfDocument(true); + expectEquals(false, scalingElement.hidden); + expectEquals(false, fitToPageContainer.hidden); + expectEquals(false, scalingInput.hidden); + + // PDF to PDF destination -> section disappears. + setPdfDestination(); + expectEquals(true, scalingElement.hidden); }); });
diff --git a/components/app_modal/javascript_dialog_manager.cc b/components/app_modal/javascript_dialog_manager.cc index a1875d14..bfe42fe 100644 --- a/components/app_modal/javascript_dialog_manager.cc +++ b/components/app_modal/javascript_dialog_manager.cc
@@ -105,20 +105,49 @@ return GetTitleImpl(web_contents->GetURL(), alerting_frame_url); } +namespace { + +// Unwraps an URL to get to an embedded URL. +GURL UnwrapURL(const GURL& url) { + // GURL will unwrap filesystem:// URLs so ask it to do so. + const GURL* unwrapped_url = url.inner_url(); + if (unwrapped_url) + return *unwrapped_url; + + // GURL::inner_url() should unwrap blob: URLs but doesn't do so + // (https://crbug.com/690091). Therefore, do it manually. + // + // https://url.spec.whatwg.org/#origin defines the origin of a blob:// URL as + // the origin of the URL which results from parsing the "path", which boils + // down to everything after the scheme. GURL's 'GetContent()' gives us exactly + // that. See url::Origin()'s constructor. + if (url.SchemeIsBlob()) + return GURL(url.GetContent()); + + return url; +} + +} // namespace + // static base::string16 JavaScriptDialogManager::GetTitleImpl( const GURL& parent_frame_url, const GURL& alerting_frame_url) { + GURL unwrapped_parent_frame_url = UnwrapURL(parent_frame_url); + GURL unwrapped_alerting_frame_url = UnwrapURL(alerting_frame_url); + bool is_same_origin_as_main_frame = - (parent_frame_url.GetOrigin() == alerting_frame_url.GetOrigin()); - if (alerting_frame_url.IsStandard() && !alerting_frame_url.SchemeIsFile() && - !alerting_frame_url.SchemeIsFileSystem()) { + (unwrapped_parent_frame_url.GetOrigin() == + unwrapped_alerting_frame_url.GetOrigin()); + if (unwrapped_alerting_frame_url.IsStandard() && + !unwrapped_alerting_frame_url.SchemeIsFile()) { #if defined(OS_ANDROID) base::string16 url_string = url_formatter::FormatUrlForSecurityDisplay( - alerting_frame_url, url_formatter::SchemeDisplay::OMIT_HTTP_AND_HTTPS); + unwrapped_alerting_frame_url, + url_formatter::SchemeDisplay::OMIT_HTTP_AND_HTTPS); #else base::string16 url_string = url_formatter::ElideHost( - alerting_frame_url, gfx::FontList(), kUrlElideWidth); + unwrapped_alerting_frame_url, gfx::FontList(), kUrlElideWidth); #endif return l10n_util::GetStringFUTF16( is_same_origin_as_main_frame ? IDS_JAVASCRIPT_MESSAGEBOX_TITLE
diff --git a/components/app_modal/javascript_dialog_manager_unittest.cc b/components/app_modal/javascript_dialog_manager_unittest.cc index ec96db9..c4974de1 100644 --- a/components/app_modal/javascript_dialog_manager_unittest.cc +++ b/components/app_modal/javascript_dialog_manager_unittest.cc
@@ -32,73 +32,72 @@ "An embedded page at bar.com says", "An embedded page at bar.com says"}, // file: - // -main frame: + // - main frame: {"file:///path/to/page.html", "file:///path/to/page.html", "This Page Says", "This page says", "This page says"}, - // -subframe: + // - subframe: {"http://foo.com/", "file:///path/to/page.html", "An Embedded Page on This Page Says", "An embedded page on this page says", "An embedded page on this page says"}, // ftp: - // -main frame: + // - main frame: {"ftp://foo.com/path/to/page.html", "ftp://foo.com/path/to/page.html", "foo.com Says", "foo.com says", "ftp://foo.com says"}, - // -subframe: + // - subframe: {"http://foo.com/", "ftp://foo.com/path/to/page.html", "An Embedded Page at foo.com Says", "An embedded page at foo.com says", "An embedded page at ftp://foo.com says"}, // data: - // -main frame: + // - main frame: {"data:blahblah", "data:blahblah", "This Page Says", "This page says", "This page says"}, - // -subframe: + // - subframe: {"http://foo.com/", "data:blahblah", "An Embedded Page on This Page Says", "An embedded page on this page says", "An embedded page on this page says"}, // javascript: - // -main frame: + // - main frame: {"javascript:abc", "javascript:abc", "This Page Says", "This page says", "This page says"}, - // -subframe: + // - subframe: {"http://foo.com/", "javascript:abc", "An Embedded Page on This Page Says", "An embedded page on this page says", "An embedded page on this page says"}, // about: - // -main frame: + // - main frame: {"about:blank", "about:blank", "This Page Says", "This page says", "This page says"}, - // -subframe: + // - subframe: {"http://foo.com/", "about:blank", "An Embedded Page on This Page Says", "An embedded page on this page says", "An embedded page on this page says"}, // blob: - // -main frame: + // - main frame: {"blob:http://foo.com/66666666-6666-6666-6666-666666666666", "blob:http://foo.com/66666666-6666-6666-6666-666666666666", - "This Page Says", "This page says", "This page says"}, - // -subframe: - {"http://foo.com/", + "foo.com Says", "foo.com says", "foo.com says"}, + // - subframe: + {"http://bar.com/", "blob:http://foo.com/66666666-6666-6666-6666-666666666666", - "An Embedded Page on This Page Says", - "An embedded page on this page says", - "An embedded page on this page says"}, + "An Embedded Page at foo.com Says", "An embedded page at foo.com says", + "An embedded page at foo.com says"}, // filesystem: - // -main frame: - {"filesystem:http://foo.com/", "filesystem:http://foo.com/", - "This Page Says", "This page says", "This page says"}, - // -subframe: - {"http://foo.com/", "filesystem:http://foo.com/", - "An Embedded Page on This Page Says", - "An embedded page on this page says", - "An embedded page on this page says"}, + // - main frame: + {"filesystem:http://foo.com/bar.html", + "filesystem:http://foo.com/bar.html", "foo.com Says", "foo.com says", + "foo.com says"}, + // - subframe: + {"http://bar.com/", "filesystem:http://foo.com/bar.html", + "An Embedded Page at foo.com Says", "An embedded page at foo.com says", + "An embedded page at foo.com says"}, }; for (const auto& test_case : cases) {
diff --git a/components/exo/shell_surface.cc b/components/exo/shell_surface.cc index 9820981..6d125e9 100644 --- a/components/exo/shell_surface.cc +++ b/components/exo/shell_surface.cc
@@ -15,6 +15,7 @@ #include "ash/wm/drag_window_resizer.h" #include "ash/wm/window_resizer.h" #include "ash/wm/window_state.h" +#include "ash/wm/window_state_delegate.h" #include "ash/wm/window_util.h" #include "base/logging.h" #include "base/macros.h" @@ -67,16 +68,26 @@ {ui::VKEY_W, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}, {ui::VKEY_F4, ui::EF_ALT_DOWN}}; -class CustomFrameView : public ash::CustomFrameViewAshBase { +class CustomFrameView : public ash::CustomFrameViewAsh { public: using ShapeRects = std::vector<gfx::Rect>; - explicit CustomFrameView(views::Widget* widget) : widget_(widget) {} + CustomFrameView(views::Widget* widget, bool enabled) + : CustomFrameViewAsh(widget) { + SetEnabled(enabled); + if (!enabled) + CustomFrameViewAsh::SetShouldPaintHeader(false); + } + ~CustomFrameView() override {} // Overridden from ash::CustomFrameViewAshBase: void SetShouldPaintHeader(bool paint) override { - aura::Window* window = widget_->GetNativeWindow(); + if (enabled()) { + CustomFrameViewAsh::SetShouldPaintHeader(paint); + return; + } + aura::Window* window = GetWidget()->GetNativeWindow(); ui::Layer* layer = window->layer(); if (paint) { if (layer->alpha_shape()) { @@ -99,23 +110,46 @@ } // Overridden from views::NonClientFrameView: - gfx::Rect GetBoundsForClientView() const override { return bounds(); } + gfx::Rect GetBoundsForClientView() const override { + if (enabled()) + return ash::CustomFrameViewAsh::GetBoundsForClientView(); + return bounds(); + } gfx::Rect GetWindowBoundsForClientBounds( const gfx::Rect& client_bounds) const override { + if (enabled()) { + return ash::CustomFrameViewAsh::GetWindowBoundsForClientBounds( + client_bounds); + } return client_bounds; } int NonClientHitTest(const gfx::Point& point) override { - return widget_->client_view()->NonClientHitTest(point); + if (enabled()) + return ash::CustomFrameViewAsh::NonClientHitTest(point); + return GetWidget()->client_view()->NonClientHitTest(point); } - void GetWindowMask(const gfx::Size& size, gfx::Path* window_mask) override {} - void ResetWindowControls() override {} - void UpdateWindowIcon() override {} - void UpdateWindowTitle() override {} - void SizeConstraintsChanged() override {} + void GetWindowMask(const gfx::Size& size, gfx::Path* window_mask) override { + if (enabled()) + return ash::CustomFrameViewAsh::GetWindowMask(size, window_mask); + } + void ResetWindowControls() override { + if (enabled()) + return ash::CustomFrameViewAsh::ResetWindowControls(); + } + void UpdateWindowIcon() override { + if (enabled()) + return ash::CustomFrameViewAsh::ResetWindowControls(); + } + void UpdateWindowTitle() override { + if (enabled()) + return ash::CustomFrameViewAsh::UpdateWindowTitle(); + } + void SizeConstraintsChanged() override { + if (enabled()) + return ash::CustomFrameViewAsh::SizeConstraintsChanged(); + } private: - views::Widget* const widget_; - DISALLOW_COPY_AND_ASSIGN(CustomFrameView); }; @@ -172,6 +206,26 @@ DISALLOW_COPY_AND_ASSIGN(ShellSurfaceWidget); }; +// A place holder to disable default implementation created by +// ash::CustomFrameViewAsh, which triggers immersive fullscreen etc, which +// we don't need. +class CustomWindowStateDelegate : public ash::wm::WindowStateDelegate { + public: + CustomWindowStateDelegate() {} + ~CustomWindowStateDelegate() override {} + + // Overridden from ash::wm::WindowStateDelegate: + bool ToggleFullscreen(ash::wm::WindowState* window_state) override { + return false; + } + bool RestoreAlwaysOnTop(ash::wm::WindowState* window_state) override { + return false; + } + + private: + DISALLOW_COPY_AND_ASSIGN(CustomWindowStateDelegate); +}; + } // namespace // Surface state associated with each configure request. @@ -799,10 +853,11 @@ aura::Window* window = widget_->GetNativeWindow(); // ShellSurfaces always use immersive mode. window->SetProperty(aura::client::kImmersiveFullscreenKey, true); - if (frame_enabled_) - return new ash::CustomFrameViewAsh(widget); - - return new CustomFrameView(widget); + if (!frame_enabled_) { + ash::wm::WindowState* window_state = ash::wm::GetWindowState(window); + window_state->SetDelegate(std::make_unique<CustomWindowStateDelegate>()); + } + return new CustomFrameView(widget, frame_enabled_); } bool ShellSurface::WidgetHasHitTestMask() const {
diff --git a/components/exo/wayland/server.cc b/components/exo/wayland/server.cc index ee720ecf..0fbb762 100644 --- a/components/exo/wayland/server.cc +++ b/components/exo/wayland/server.cc
@@ -3496,19 +3496,20 @@ int64_t microseconds = presentation_time_us % base::Time::kMicrosecondsPerSecond; static_assert( - static_cast<uint32_t>(gfx::PresentationFlags::kVSync) == + static_cast<uint32_t>(gfx::PresentationFeedback::Flags::kVSync) == static_cast<uint32_t>(WP_PRESENTATION_FEEDBACK_KIND_VSYNC), "gfx::PresentationFlags::VSync don't match!"); static_assert( - static_cast<uint32_t>(gfx::PresentationFlags::kHWClock) == + static_cast<uint32_t>(gfx::PresentationFeedback::Flags::kHWClock) == static_cast<uint32_t>(WP_PRESENTATION_FEEDBACK_KIND_HW_CLOCK), "gfx::PresentationFlags::HWClock don't match!"); static_assert( - static_cast<uint32_t>(gfx::PresentationFlags::kHWCompletion) == + static_cast<uint32_t>( + gfx::PresentationFeedback::Flags::kHWCompletion) == static_cast<uint32_t>(WP_PRESENTATION_FEEDBACK_KIND_HW_COMPLETION), "gfx::PresentationFlags::HWCompletion don't match!"); static_assert( - static_cast<uint32_t>(gfx::PresentationFlags::kZeroCopy) == + static_cast<uint32_t>(gfx::PresentationFeedback::Flags::kZeroCopy) == static_cast<uint32_t>(WP_PRESENTATION_FEEDBACK_KIND_ZERO_COPY), "gfx::PresentationFlags::ZeroCopy don't match!"); wp_presentation_feedback_send_presented(
diff --git a/components/omnibox/browser/suggestion_answer.cc b/components/omnibox/browser/suggestion_answer.cc index 9f4458d..00d3c666 100644 --- a/components/omnibox/browser/suggestion_answer.cc +++ b/components/omnibox/browser/suggestion_answer.cc
@@ -195,7 +195,7 @@ // static std::unique_ptr<SuggestionAnswer> SuggestionAnswer::ParseAnswer( const base::DictionaryValue* answer_json) { - auto result = base::WrapUnique(new SuggestionAnswer); + auto result = base::MakeUnique<SuggestionAnswer>(); const base::ListValue* lines_json; if (!answer_json->GetList(kAnswerJsonLines, &lines_json) ||
diff --git a/components/omnibox/browser/suggestion_answer_unittest.cc b/components/omnibox/browser/suggestion_answer_unittest.cc index d0a3553f..5f154a2 100644 --- a/components/omnibox/browser/suggestion_answer_unittest.cc +++ b/components/omnibox/browser/suggestion_answer_unittest.cc
@@ -35,7 +35,7 @@ SuggestionAnswer answer1; EXPECT_TRUE(answer1.Equals(SuggestionAnswer(answer1))); - auto answer2 = base::WrapUnique(new SuggestionAnswer); + auto answer2 = base::MakeUnique<SuggestionAnswer>(); answer2->set_type(832345); EXPECT_TRUE(answer2->Equals(SuggestionAnswer(*answer2)));
diff --git a/content/gpu/gpu_sandbox_hook_linux.cc b/content/gpu/gpu_sandbox_hook_linux.cc index 1ccff94..c0ea362 100644 --- a/content/gpu/gpu_sandbox_hook_linux.cc +++ b/content/gpu/gpu_sandbox_hook_linux.cc
@@ -342,9 +342,7 @@ if (!LoadLibrariesForGpu(options)) return false; - // TODO(tsepez): enable once we can proxy the stat(), readlink() syscalls. - if (!IsChromeOS() || !options.use_amd_specific_policies) - instance->EngageNamespaceSandbox(false /* from_zygote */); + // TODO(tsepez): enable namspace sandbox here once crashes are understood. errno = 0; return true;
diff --git a/extensions/BUILD.gn b/extensions/BUILD.gn index 7659aff..c11f618 100644 --- a/extensions/BUILD.gn +++ b/extensions/BUILD.gn
@@ -217,6 +217,8 @@ "//extensions/renderer:unit_tests", "//extensions/shell:unit_tests", "//extensions/utility:unit_tests", + "//services/data_decoder:lib", + "//services/service_manager/public/cpp/test:test_support", "//ui/gl:test_support", ]
diff --git a/extensions/browser/BUILD.gn b/extensions/browser/BUILD.gn index ddcf4e8..c052d184 100644 --- a/extensions/browser/BUILD.gn +++ b/extensions/browser/BUILD.gn
@@ -557,6 +557,7 @@ "requirements_checker_unittest.cc", "runtime_data_unittest.cc", "sandboxed_unpacker_unittest.cc", + "updater/safe_manifest_parser_unittest.cc", "updater/update_service_unittest.cc", "value_store/leveldb_scoped_database_unittest.cc", "value_store/leveldb_value_store_unittest.cc", @@ -595,6 +596,7 @@ "//extensions/features", "//ipc:test_support", "//net:test_support", + "//services/data_decoder/public/cpp:test_support", "//services/device/public/interfaces", "//storage/browser:test_support", "//third_party/leveldatabase",
diff --git a/extensions/browser/DEPS b/extensions/browser/DEPS index 10aca03b..ef0d6ac8 100644 --- a/extensions/browser/DEPS +++ b/extensions/browser/DEPS
@@ -23,6 +23,7 @@ "+net", # This directory contains build flags and does not pull all of PPAPI in. "+ppapi/features", + "+services/data_decoder/public/cpp", "+services/network/public/cpp", "+services/preferences/public/cpp", "+services/service_manager/public/cpp",
diff --git a/extensions/browser/updater/BUILD.gn b/extensions/browser/updater/BUILD.gn index 12590472..fb43114 100644 --- a/extensions/browser/updater/BUILD.gn +++ b/extensions/browser/updater/BUILD.gn
@@ -41,5 +41,6 @@ deps = [ "//extensions/common", "//extensions/strings", + "//services/data_decoder/public/cpp", ] }
diff --git a/extensions/browser/updater/extension_downloader.cc b/extensions/browser/updater/extension_downloader.cc index be85f4d6..aedf07d 100644 --- a/extensions/browser/updater/extension_downloader.cc +++ b/extensions/browser/updater/extension_downloader.cc
@@ -30,7 +30,6 @@ #include "extensions/browser/updater/extension_cache.h" #include "extensions/browser/updater/extension_downloader_test_delegate.h" #include "extensions/browser/updater/request_queue_impl.h" -#include "extensions/browser/updater/safe_manifest_parser.h" #include "extensions/common/extension_urls.h" #include "extensions/common/manifest_url_handlers.h" #include "google_apis/gaia/identity_provider.h" @@ -196,10 +195,12 @@ ExtensionDownloader::ExtensionDownloader( ExtensionDownloaderDelegate* delegate, - net::URLRequestContextGetter* request_context) + net::URLRequestContextGetter* request_context, + service_manager::Connector* connector) : OAuth2TokenService::Consumer(kTokenServiceConsumerId), delegate_(delegate), request_context_(request_context), + connector_(connector), manifests_queue_(&kDefaultBackoffPolicy, base::Bind(&ExtensionDownloader::CreateManifestFetcher, base::Unretained(this))), @@ -578,11 +579,10 @@ manifests_queue_.active_request_failure_count(), url); VLOG(2) << "beginning manifest parse for " << url; - auto callback = base::Bind( - &ExtensionDownloader::HandleManifestResults, - weak_ptr_factory_.GetWeakPtr(), - base::Owned(manifests_queue_.reset_active_request().release())); - ParseUpdateManifest(data, callback); + auto callback = base::BindOnce(&ExtensionDownloader::HandleManifestResults, + weak_ptr_factory_.GetWeakPtr(), + manifests_queue_.reset_active_request()); + ParseUpdateManifest(connector_, data, std::move(callback)); } else { VLOG(1) << "Failed to fetch manifest '" << url.possibly_invalid_spec() << "' response code:" << response_code; @@ -607,8 +607,9 @@ } void ExtensionDownloader::HandleManifestResults( - const ManifestFetchData* fetch_data, - const UpdateManifest::Results* results) { + std::unique_ptr<ManifestFetchData> fetch_data, + std::unique_ptr<UpdateManifestResults> results, + const base::Optional<std::string>& error) { // Keep a list of extensions that will not be updated, so that the |delegate_| // can be notified once we're done here. std::set<std::string> not_updated(fetch_data->extension_ids()); @@ -627,7 +628,7 @@ std::vector<int> updates; DetermineUpdates(*fetch_data, *results, &updates); for (size_t i = 0; i < updates.size(); i++) { - const UpdateManifest::Result* update = &(results->list.at(updates[i])); + const UpdateManifestResult* update = &(results->list.at(updates[i])); const std::string& id = update->extension_id; not_updated.erase(id); @@ -679,10 +680,10 @@ void ExtensionDownloader::DetermineUpdates( const ManifestFetchData& fetch_data, - const UpdateManifest::Results& possible_updates, + const UpdateManifestResults& possible_updates, std::vector<int>* result) { for (size_t i = 0; i < possible_updates.list.size(); i++) { - const UpdateManifest::Result* update = &possible_updates.list[i]; + const UpdateManifestResult* update = &possible_updates.list[i]; const std::string& id = update->extension_id; if (!fetch_data.Includes(id)) {
diff --git a/extensions/browser/updater/extension_downloader.h b/extensions/browser/updater/extension_downloader.h index d0dffbcc..bac0601d 100644 --- a/extensions/browser/updater/extension_downloader.h +++ b/extensions/browser/updater/extension_downloader.h
@@ -19,8 +19,8 @@ #include "extensions/browser/updater/extension_downloader_delegate.h" #include "extensions/browser/updater/manifest_fetch_data.h" #include "extensions/browser/updater/request_queue.h" +#include "extensions/browser/updater/safe_manifest_parser.h" #include "extensions/common/extension.h" -#include "extensions/common/update_manifest.h" #include "google_apis/gaia/oauth2_token_service.h" #include "net/url_request/url_fetcher_delegate.h" #include "url/gurl.h" @@ -33,6 +33,10 @@ class URLRequestStatus; } +namespace service_manager { +class Connector; +} + namespace extensions { struct UpdateDetails { @@ -63,7 +67,8 @@ // |delegate| is stored as a raw pointer and must outlive the // ExtensionDownloader. ExtensionDownloader(ExtensionDownloaderDelegate* delegate, - net::URLRequestContextGetter* request_context); + net::URLRequestContextGetter* request_context, + service_manager::Connector* connector); ~ExtensionDownloader() override; // Adds |extension| to the list of extensions to check for updates. @@ -237,13 +242,14 @@ // Once a manifest is parsed, this starts fetches of any relevant crx files. // If |results| is null, it means something went wrong when parsing it. - void HandleManifestResults(const ManifestFetchData* fetch_data, - const UpdateManifest::Results* results); + void HandleManifestResults(std::unique_ptr<ManifestFetchData> fetch_data, + std::unique_ptr<UpdateManifestResults> results, + const base::Optional<std::string>& error); // Given a list of potential updates, returns the indices of the ones that are // applicable (are actually a new version, etc.) in |result|. void DetermineUpdates(const ManifestFetchData& fetch_data, - const UpdateManifest::Results& possible_updates, + const UpdateManifestResults& possible_updates, std::vector<int>* result); // Begins (or queues up) download of an updated extension. @@ -311,6 +317,9 @@ // The request context to use for the URLFetchers. scoped_refptr<net::URLRequestContextGetter> request_context_; + // The connector to the ServiceManager. + service_manager::Connector* connector_; + // Collects UMA samples that are reported when ReportStats() is called. URLStats url_stats_;
diff --git a/extensions/browser/updater/safe_manifest_parser.cc b/extensions/browser/updater/safe_manifest_parser.cc index 7e2731c..b13c755 100644 --- a/extensions/browser/updater/safe_manifest_parser.cc +++ b/extensions/browser/updater/safe_manifest_parser.cc
@@ -8,45 +8,220 @@ #include "base/bind.h" #include "base/optional.h" +#include "base/strings/string_number_conversions.h" +#include "base/values.h" +#include "base/version.h" #include "content/public/browser/browser_thread.h" -#include "content/public/browser/utility_process_mojo_client.h" -#include "extensions/common/manifest_parser.mojom.h" -#include "extensions/strings/grit/extensions_strings.h" -#include "ui/base/l10n/l10n_util.h" +#include "services/data_decoder/public/cpp/safe_xml_parser.h" + +namespace extensions { + +using data_decoder::GetXmlElementAttribute; +using data_decoder::GetXmlElementChildWithTag; +using data_decoder::GetXmlElementNamespacePrefix; +using data_decoder::GetXmlQualifiedName; +using data_decoder::IsXmlElementNamed; namespace { -using UtilityProcess = - content::UtilityProcessMojoClient<extensions::mojom::ManifestParser>; +constexpr char kExpectedGupdateProtocol[] = "2.0"; +constexpr char kExpectedGupdateXmlns[] = + "http://www.google.com/update2/response"; -using ResultCallback = base::Callback<void(const UpdateManifest::Results*)>; +void ReportError(ParseUpdateManifestCallback callback, + const std::string& error) { + std::move(callback).Run(/*results=*/nullptr, error); +} -void ParseDone(std::unique_ptr<UtilityProcess> /* utility_process */, - const ResultCallback& callback, - const base::Optional<UpdateManifest::Results>& results) { +// Helper function that reads in values for a single <app> tag. It returns a +// boolean indicating success or failure. On failure, it writes a error message +// into |error_detail|. +bool ParseSingleAppTag(const base::Value& app_element, + const std::string& xml_namespace, + UpdateManifestResult* result, + std::string* error_detail) { + // Read the extension id. + result->extension_id = GetXmlElementAttribute(app_element, "appid"); + if (result->extension_id.empty()) { + *error_detail = "Missing appid on app node"; + return false; + } + + // Get the updatecheck node. + std::string updatecheck_name = + GetXmlQualifiedName(xml_namespace, "updatecheck"); + int updatecheck_count = + data_decoder::GetXmlElementChildrenCount(app_element, updatecheck_name); + if (updatecheck_count != 1) { + *error_detail = updatecheck_count == 0 + ? "Too many updatecheck tags on app (expecting only 1)." + : "Missing updatecheck on app."; + return false; + } + + const base::Value* updatecheck = + data_decoder::GetXmlElementChildWithTag(app_element, updatecheck_name); + + if (GetXmlElementAttribute(*updatecheck, "status") == "noupdate") + return true; + + // Find the url to the crx file. + result->crx_url = GURL(GetXmlElementAttribute(*updatecheck, "codebase")); + if (!result->crx_url.is_valid()) { + *error_detail = "Invalid codebase url: '"; + *error_detail += result->crx_url.possibly_invalid_spec(); + *error_detail += "'."; + return false; + } + + // Get the version. + result->version = GetXmlElementAttribute(*updatecheck, "version"); + if (result->version.empty()) { + *error_detail = "Missing version for updatecheck."; + return false; + } + base::Version version(result->version); + if (!version.IsValid()) { + *error_detail = "Invalid version: '"; + *error_detail += result->version; + *error_detail += "'."; + return false; + } + + // Get the optional minimum browser version. + result->browser_min_version = + GetXmlElementAttribute(*updatecheck, "prodversionmin"); + if (!result->browser_min_version.empty()) { + base::Version browser_min_version(result->browser_min_version); + if (!browser_min_version.IsValid()) { + *error_detail = "Invalid prodversionmin: '"; + *error_detail += result->browser_min_version; + *error_detail += "'."; + return false; + } + } + + // package_hash is optional. It is a sha256 hash of the package in hex format. + result->package_hash = GetXmlElementAttribute(*updatecheck, "hash_sha256"); + + int size = 0; + if (base::StringToInt(GetXmlElementAttribute(*updatecheck, "size"), &size)) { + result->size = size; + } + + // package_fingerprint is optional. It identifies the package, preferably + // with a modified sha256 hash of the package in hex format. + result->package_fingerprint = GetXmlElementAttribute(*updatecheck, "fp"); + + // Differential update information is optional. + result->diff_crx_url = + GURL(GetXmlElementAttribute(*updatecheck, "codebasediff")); + result->diff_package_hash = GetXmlElementAttribute(*updatecheck, "hashdiff"); + int sizediff = 0; + if (base::StringToInt(GetXmlElementAttribute(*updatecheck, "sizediff"), + &sizediff)) { + result->diff_size = sizediff; + } + + return true; +} + +void ParseXmlDone(ParseUpdateManifestCallback callback, + std::unique_ptr<base::Value> root, + const base::Optional<std::string>& error) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - callback.Run(results ? &results.value() : nullptr); + if (error) { + ReportError(std::move(callback), "Failed to parse XML: " + *error); + return; + } + + auto results = std::make_unique<UpdateManifestResults>(); + if (!root) { + ReportError(std::move(callback), "Empty XML"); + return; + } + + // Look for the required namespace declaration. + std::string gupdate_ns; + if (!GetXmlElementNamespacePrefix(*root, kExpectedGupdateXmlns, + &gupdate_ns)) { + ReportError(std::move(callback), + "Missing or incorrect xmlns on gupdate tag"); + return; + } + + if (!IsXmlElementNamed(*root, GetXmlQualifiedName(gupdate_ns, "gupdate"))) { + ReportError(std::move(callback), "Missing gupdate tag"); + return; + } + + // Check for the gupdate "protocol" attribute. + if (GetXmlElementAttribute(*root, "protocol") != kExpectedGupdateProtocol) { + ReportError(std::move(callback), + std::string("Missing/incorrect protocol on gupdate tag " + "(expected '") + + kExpectedGupdateProtocol + "')"); + return; + } + + // Parse the first <daystart> if it's present. + const base::Value* daystart = GetXmlElementChildWithTag( + *root, GetXmlQualifiedName(gupdate_ns, "daystart")); + if (daystart) { + std::string elapsed_seconds = + GetXmlElementAttribute(*daystart, "elapsed_seconds"); + int parsed_elapsed = kNoDaystart; + if (base::StringToInt(elapsed_seconds, &parsed_elapsed)) { + results->daystart_elapsed_seconds = parsed_elapsed; + } + } + + // Parse each of the <app> tags. + std::vector<const base::Value*> apps; + data_decoder::GetAllXmlElementChildrenWithTag( + *root, GetXmlQualifiedName(gupdate_ns, "app"), &apps); + std::string error_msg; + for (const auto* app : apps) { + UpdateManifestResult result; + std::string app_error; + if (!ParseSingleAppTag(*app, gupdate_ns, &result, &app_error)) { + if (!error_msg.empty()) + error_msg += "\r\n"; // Should we have an OS specific EOL? + error_msg += app_error; + } else { + results->list.push_back(result); + } + } + + std::move(callback).Run( + results->list.empty() ? nullptr : std::move(results), + error_msg.empty() ? base::Optional<std::string>() : error_msg); } } // namespace -namespace extensions { +UpdateManifestResult::UpdateManifestResult() = default; -void ParseUpdateManifest(const std::string& xml, - const ResultCallback& callback) { +UpdateManifestResult::UpdateManifestResult(const UpdateManifestResult& other) = + default; + +UpdateManifestResult::~UpdateManifestResult() = default; + +UpdateManifestResults::UpdateManifestResults() = default; + +UpdateManifestResults::UpdateManifestResults( + const UpdateManifestResults& other) = default; + +UpdateManifestResults::~UpdateManifestResults() = default; + +void ParseUpdateManifest(service_manager::Connector* connector, + const std::string& xml, + ParseUpdateManifestCallback callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK(callback); - - auto process = std::make_unique<UtilityProcess>( - l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_MANIFEST_PARSER_NAME)); - auto* utility_process = process.get(); - auto done = base::Bind(&ParseDone, base::Passed(&process), callback); - utility_process->set_error_callback(base::Bind(done, base::nullopt)); - - utility_process->Start(); - - utility_process->service()->Parse(xml, done); + data_decoder::ParseXml(connector, xml, + base::BindOnce(&ParseXmlDone, std::move(callback))); } } // namespace extensions
diff --git a/extensions/browser/updater/safe_manifest_parser.h b/extensions/browser/updater/safe_manifest_parser.h index b3e953e..5415588 100644 --- a/extensions/browser/updater/safe_manifest_parser.h +++ b/extensions/browser/updater/safe_manifest_parser.h
@@ -5,19 +5,90 @@ #ifndef EXTENSIONS_BROWSER_UPDATER_SAFE_MANIFEST_PARSER_H_ #define EXTENSIONS_BROWSER_UPDATER_SAFE_MANIFEST_PARSER_H_ +#include <memory> #include <string> +#include <vector> #include "base/callback_forward.h" -#include "extensions/common/update_manifest.h" +#include "base/optional.h" +#include "url/gurl.h" + +namespace service_manager { +class Connector; +} namespace extensions { +struct UpdateManifestResult { + UpdateManifestResult(); + UpdateManifestResult(const UpdateManifestResult& other); + ~UpdateManifestResult(); + + std::string extension_id; + std::string version; + std::string browser_min_version; + + // Attributes for the full update. + GURL crx_url; + std::string package_hash; + int size = 0; + std::string package_fingerprint; + + // Attributes for the differential update. + GURL diff_crx_url; + std::string diff_package_hash; + int diff_size = 0; +}; + +constexpr int kNoDaystart = -1; +struct UpdateManifestResults { + UpdateManifestResults(); + UpdateManifestResults(const UpdateManifestResults& other); + UpdateManifestResults& operator=(const UpdateManifestResults& other); + ~UpdateManifestResults(); + + std::vector<UpdateManifestResult> list; + // This will be >= 0, or kNoDaystart if the <daystart> tag was not present. + int daystart_elapsed_seconds = kNoDaystart; +}; + // Parses an update manifest |xml| safely in a utility process and calls // |callback| with the results, which will be null on failure. Runs on // the UI thread. -void ParseUpdateManifest( - const std::string& xml, - const base::Callback<void(const UpdateManifest::Results*)>& callback); +// +// An update manifest looks like this: +// +// <?xml version="1.0" encoding="UTF-8"?> +// <gupdate xmlns="http://www.google.com/update2/response" protocol="2.0"> +// <daystart elapsed_seconds="300" /> +// <app appid="12345" status="ok"> +// <updatecheck codebase="http://example.com/extension_1.2.3.4.crx" +// hash="12345" size="9854" status="ok" version="1.2.3.4" +// prodversionmin="2.0.143.0" +// codebasediff="http://example.com/diff_1.2.3.4.crx" +// hashdiff="123" sizediff="101" +// fp="1.123" /> +// </app> +// </gupdate> +// +// The <daystart> tag contains a "elapsed_seconds" attribute which refers to +// the server's notion of how many seconds it has been since midnight. +// +// The "appid" attribute of the <app> tag refers to the unique id of the +// extension. The "codebase" attribute of the <updatecheck> tag is the url to +// fetch the updated crx file, and the "prodversionmin" attribute refers to +// the minimum version of the chrome browser that the update applies to. + +// The diff data members correspond to the differential update package, if +// a differential update is specified in the response. + +// The result of parsing one <app> tag in an xml update check manifest. +using ParseUpdateManifestCallback = + base::OnceCallback<void(std::unique_ptr<UpdateManifestResults> results, + const base::Optional<std::string>& error)>; +void ParseUpdateManifest(service_manager::Connector* connector, + const std::string& xml, + ParseUpdateManifestCallback callback); } // namespace extensions
diff --git a/extensions/browser/updater/safe_manifest_parser_unittest.cc b/extensions/browser/updater/safe_manifest_parser_unittest.cc new file mode 100644 index 0000000..2d7df9f --- /dev/null +++ b/extensions/browser/updater/safe_manifest_parser_unittest.cc
@@ -0,0 +1,241 @@ +// Copyright (c) 2011 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 "extensions/browser/updater/safe_manifest_parser.h" + +#include "base/run_loop.h" +#include "content/public/test/test_browser_thread_bundle.h" +#include "extensions/browser/updater/safe_manifest_parser.h" +#include "services/data_decoder/public/cpp/test_data_decoder_service.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace extensions { + +namespace { + +class ExtensionUpdateManifestTest : public testing::Test { + public: + void TestParseUpdateManifest(const std::string& xml) { + base::RunLoop run_loop; + ParseUpdateManifest( + test_data_decoder_service_.connector(), xml, + base::BindOnce(&ExtensionUpdateManifestTest::OnUpdateManifestParsed, + base::Unretained(this), run_loop.QuitClosure())); + run_loop.Run(); + } + + protected: + UpdateManifestResults* results() const { return results_.get(); } + const base::Optional<std::string>& error() const { return error_; } + + void ExpectNoError() { + EXPECT_FALSE(error_) << "Unexpected error: '" << *error_; + } + + private: + void OnUpdateManifestParsed(base::Closure quit_loop, + std::unique_ptr<UpdateManifestResults> results, + const base::Optional<std::string>& error) { + results_ = std::move(results); + error_ = error; + std::move(quit_loop).Run(); + } + + content::TestBrowserThreadBundle browser_thread_bundle_; + std::unique_ptr<UpdateManifestResults> results_; + base::Optional<std::string> error_; + data_decoder::TestDataDecoderService test_data_decoder_service_; +}; + +} // namespace + +TEST_F(ExtensionUpdateManifestTest, InvalidXml) { + TestParseUpdateManifest(std::string()); + EXPECT_FALSE(results()); + EXPECT_TRUE(error()); +} + +TEST_F(ExtensionUpdateManifestTest, MissingAppId) { + TestParseUpdateManifest( + "<?xml version='1.0'?>" + "<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" + " <app>" + " <updatecheck codebase='http://example.com/extension_1.2.3.4.crx'" + " version='1.2.3.4' />" + " </app>" + "</gupdate>"); + EXPECT_FALSE(results()); + EXPECT_TRUE(error()); +} + +TEST_F(ExtensionUpdateManifestTest, InvalidCodebase) { + TestParseUpdateManifest( + "<?xml version='1.0'?>" + "<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" + " <app appid='12345' status='ok'>" + " <updatecheck codebase='example.com/extension_1.2.3.4.crx'" + " version='1.2.3.4' />" + " </app>" + "</gupdate>"); + EXPECT_FALSE(results()); + EXPECT_TRUE(error()); +} + +TEST_F(ExtensionUpdateManifestTest, MissingVersion) { + TestParseUpdateManifest( + "<?xml version='1.0'?>" + "<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" + " <app appid='12345' status='ok'>" + " <updatecheck codebase='http://example.com/extension_1.2.3.4.crx' />" + " </app>" + "</gupdate>"); + EXPECT_FALSE(results()); + EXPECT_TRUE(error()); +} + +TEST_F(ExtensionUpdateManifestTest, InvalidVersion) { + TestParseUpdateManifest( + "<?xml version='1.0'?>" + "<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" + " <app appid='12345' status='ok'>" + " <updatecheck codebase='http://example.com/extension_1.2.3.4.crx' " + " version='1.2.3.a'/>" + " </app>" + "</gupdate>"); + EXPECT_FALSE(results()); + EXPECT_TRUE(error()); +} + +TEST_F(ExtensionUpdateManifestTest, ValidXml) { + TestParseUpdateManifest( + "<?xml version='1.0' encoding='UTF-8'?>" + "<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" + " <app appid='12345'>" + " <updatecheck codebase='http://example.com/extension_1.2.3.4.crx'" + " version='1.2.3.4' prodversionmin='2.0.143.0' />" + " </app>" + "</gupdate>"); + ExpectNoError(); + ASSERT_TRUE(results()); + EXPECT_EQ(1U, results()->list.size()); + const UpdateManifestResult& first_result = results()->list.at(0); + EXPECT_EQ(GURL("http://example.com/extension_1.2.3.4.crx"), + first_result.crx_url); + EXPECT_EQ("1.2.3.4", first_result.version); + EXPECT_EQ("2.0.143.0", first_result.browser_min_version); +} + +TEST_F(ExtensionUpdateManifestTest, ValidXmlWithNamespacePrefix) { + TestParseUpdateManifest( + "<?xml version='1.0' encoding='UTF-8'?>" + "<g:gupdate xmlns:g='http://www.google.com/update2/response'" + " protocol='2.0'>" + " <g:app appid='12345'>" + " <g:updatecheck codebase='http://example.com/extension_1.2.3.4.crx'" + " version='1.2.3.4' prodversionmin='2.0.143.0' />" + " </g:app>" + "</g:gupdate>"); + ExpectNoError(); + ASSERT_TRUE(results()); + EXPECT_EQ(1U, results()->list.size()); + const UpdateManifestResult& first_result = results()->list.at(0); + EXPECT_EQ(GURL("http://example.com/extension_1.2.3.4.crx"), + first_result.crx_url); + EXPECT_EQ("1.2.3.4", first_result.version); + EXPECT_EQ("2.0.143.0", first_result.browser_min_version); +} + +TEST_F(ExtensionUpdateManifestTest, SimilarTagnames) { + // Includes unrelated <app> tags from other xml namespaces. + // This should not cause problems, the unrelated app tags should be ignored. + TestParseUpdateManifest( + "<?xml version='1.0' encoding='UTF-8'?>" + "<gupdate xmlns='http://www.google.com/update2/response'" + " xmlns:a='http://a' protocol='2.0'>" + " <a:app/>" + " <b:app xmlns:b='http://b' />" + " <app appid='12345'>" + " <updatecheck codebase='http://example.com/extension_1.2.3.4.crx'" + " version='1.2.3.4' prodversionmin='2.0.143.0' />" + " </app>" + " <a:app appid='12345'>" + " <updatecheck codebase='http://example.com/extension_1.2.3.4.crx'" + " version='1.2.3.4' prodversionmin='2.0.143.0' />" + " </a:app>" + "</gupdate>"); + ExpectNoError(); + ASSERT_TRUE(results()); + // We should still have parsed the gupdate app tag. + EXPECT_EQ(1U, results()->list.size()); + EXPECT_EQ(GURL("http://example.com/extension_1.2.3.4.crx"), + results()->list.at(0).crx_url); +} + +TEST_F(ExtensionUpdateManifestTest, XmlWithHash) { + TestParseUpdateManifest( + "<?xml version='1.0' encoding='UTF-8'?>" + "<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" + " <app appid='12345'>" + " <updatecheck codebase='http://example.com/extension_1.2.3.4.crx'" + " version='1.2.3.4' prodversionmin='2.0.143.0' " + " hash_sha256='1234'/>" + " </app>" + "</gupdate>"); + ExpectNoError(); + ASSERT_TRUE(results()); + EXPECT_EQ(1U, results()->list.size()); + const UpdateManifestResult& first_result = results()->list.at(0); + EXPECT_EQ("1234", first_result.package_hash); +} + +TEST_F(ExtensionUpdateManifestTest, XmlWithDaystart) { + TestParseUpdateManifest( + "<?xml version='1.0' encoding='UTF-8'?>" + "<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" + " <daystart elapsed_seconds='456' />" + " <app appid='12345'>" + " <updatecheck codebase='http://example.com/extension_1.2.3.4.crx'" + " version='1.2.3.4' prodversionmin='2.0.143.0' />" + " </app>" + "</gupdate>"); + ExpectNoError(); + ASSERT_TRUE(results()); + EXPECT_EQ(results()->daystart_elapsed_seconds, 456); +} + +TEST_F(ExtensionUpdateManifestTest, NoUpdateResponse) { + TestParseUpdateManifest( + "<?xml version='1.0' encoding='UTF-8'?>" + "<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" + " <app appid='12345'>" + " <updatecheck status='noupdate' />" + " </app>" + "</gupdate>"); + ExpectNoError(); + ASSERT_TRUE(results()); + ASSERT_FALSE(results()->list.empty()); + const UpdateManifestResult& first_result = results()->list.at(0); + EXPECT_EQ(first_result.extension_id, "12345"); + EXPECT_TRUE(first_result.version.empty()); +} + +TEST_F(ExtensionUpdateManifestTest, TwoAppsOneError) { + TestParseUpdateManifest( + "<?xml version='1.0' encoding='UTF-8'?>" + "<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" + " <app appid='aaaaaaaa' status='error-unknownApplication'>" + " <updatecheck status='error-unknownapplication'/>" + " </app>" + " <app appid='bbbbbbbb'>" + " <updatecheck codebase='http://example.com/b_3.1.crx' version='3.1'/>" + " </app>" + "</gupdate>"); + EXPECT_TRUE(error()); + ASSERT_TRUE(results()); + EXPECT_EQ(1U, results()->list.size()); + const UpdateManifestResult& first_result = results()->list.at(0); + EXPECT_EQ(first_result.extension_id, "bbbbbbbb"); +} + +} // namespace extensions
diff --git a/extensions/common/BUILD.gn b/extensions/common/BUILD.gn index 9b2bfe9..521f0f8 100644 --- a/extensions/common/BUILD.gn +++ b/extensions/common/BUILD.gn
@@ -24,7 +24,6 @@ mojom("mojo") { sources = [ "extension_unpacker.mojom", - "manifest_parser.mojom", "mojo/app_window.mojom", "mojo/keep_alive.mojom", ] @@ -263,8 +262,6 @@ "stack_frame.h", "switches.cc", "switches.h", - "update_manifest.cc", - "update_manifest.h", "url_pattern.cc", "url_pattern.h", "url_pattern_set.cc", @@ -313,7 +310,6 @@ "//net", "//third_party/boringssl", "//third_party/icu", - "//third_party/libxml", "//third_party/re2", "//ui/base", "//ui/gfx/geometry", @@ -390,7 +386,6 @@ "permissions/socket_permission_unittest.cc", "permissions/usb_device_permission_unittest.cc", "stack_frame_unittest.cc", - "update_manifest_unittest.cc", "url_pattern_set_unittest.cc", "url_pattern_unittest.cc", "user_script_unittest.cc",
diff --git a/extensions/common/manifest_parser.mojom b/extensions/common/manifest_parser.mojom deleted file mode 100644 index be0aa78..0000000 --- a/extensions/common/manifest_parser.mojom +++ /dev/null
@@ -1,36 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Secure chrome extension update manifest parser provided by the utility -// process and exposed by mojo policy to the chrome browser process. - -module extensions.mojom; - -import "url/mojo/url.mojom"; - -interface ManifestParser { - // Parse an extensions update manifest |xml| document and return the - // |results|, or null if parsing fails. - Parse(string xml) => (UpdateManifestResults? results); -}; - -struct UpdateManifestResults { - array<UpdateManifestResult> list; - int32 daystart_elapsed_seconds; -}; - -struct UpdateManifestResult { - string extension_id; - string version; - string browser_min_version; - - url.mojom.Url crx_url; - string package_hash; - int32 size; - string package_fingerprint; - - url.mojom.Url diff_crx_url; - string diff_package_hash; - int32 diff_size; -};
diff --git a/extensions/common/manifest_parser.typemap b/extensions/common/manifest_parser.typemap deleted file mode 100644 index 82cb2b0..0000000 --- a/extensions/common/manifest_parser.typemap +++ /dev/null
@@ -1,18 +0,0 @@ -# Copyright 2017 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -mojom = "//extensions/common/manifest_parser.mojom" - -public_headers = [ "//extensions/common/update_manifest.h" ] - -traits_headers = [ "//extensions/common/manifest_parser_struct_traits.h" ] - -sources = [ - "//extensions/common/manifest_parser_struct_traits.cc", -] - -type_mappings = [ - "extensions.mojom.UpdateManifestResults=::UpdateManifest::Results", - "extensions.mojom.UpdateManifestResult=::UpdateManifest::Result", -]
diff --git a/extensions/common/manifest_parser_struct_traits.cc b/extensions/common/manifest_parser_struct_traits.cc deleted file mode 100644 index ddce9a53..0000000 --- a/extensions/common/manifest_parser_struct_traits.cc +++ /dev/null
@@ -1,47 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "extensions/common/manifest_parser_struct_traits.h" -#include "url/mojo/url_gurl_struct_traits.h" - -namespace mojo { - -// static -bool StructTraits<::extensions::mojom::UpdateManifestResults::DataView, - ::UpdateManifest::Results>:: - Read(::extensions::mojom::UpdateManifestResults::DataView input, - ::UpdateManifest::Results* output) { - if (!input.ReadList(&output->list)) - return false; - output->daystart_elapsed_seconds = input.daystart_elapsed_seconds(); - return true; -} - -// static -bool StructTraits<::extensions::mojom::UpdateManifestResult::DataView, - ::UpdateManifest::Result>:: - Read(::extensions::mojom::UpdateManifestResult::DataView input, - ::UpdateManifest::Result* output) { - if (!input.ReadExtensionId(&output->extension_id)) - return false; - if (!input.ReadVersion(&output->version)) - return false; - if (!input.ReadBrowserMinVersion(&output->browser_min_version)) - return false; - if (!input.ReadCrxUrl(&output->crx_url)) - return false; - if (!input.ReadPackageHash(&output->package_hash)) - return false; - output->size = input.size(); - if (!input.ReadPackageFingerprint(&output->package_fingerprint)) - return false; - if (!input.ReadDiffCrxUrl(&output->diff_crx_url)) - return false; - if (!input.ReadDiffPackageHash(&output->diff_package_hash)) - return false; - output->diff_size = input.diff_size(); - return true; -} - -} // namespace mojo
diff --git a/extensions/common/manifest_parser_struct_traits.h b/extensions/common/manifest_parser_struct_traits.h deleted file mode 100644 index abe4c65..0000000 --- a/extensions/common/manifest_parser_struct_traits.h +++ /dev/null
@@ -1,81 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef EXTENSIONS_COMMON_MANIFEST_PARSER_STRUCT_TRAITS_H -#define EXTENSIONS_COMMON_MANIFEST_PARSER_STRUCT_TRAITS_H - -#include "extensions/common/manifest_parser.mojom.h" -#include "extensions/common/update_manifest.h" - -namespace mojo { - -template <> -struct StructTraits<::extensions::mojom::UpdateManifestResults::DataView, - ::UpdateManifest::Results> { - static const std::vector<::UpdateManifest::Result>& list( - const ::UpdateManifest::Results& input) { - return input.list; - } - - static int daystart_elapsed_seconds(const ::UpdateManifest::Results& input) { - return input.daystart_elapsed_seconds; - } - - static bool Read(::extensions::mojom::UpdateManifestResults::DataView input, - ::UpdateManifest::Results* output); -}; - -template <> -struct StructTraits<::extensions::mojom::UpdateManifestResult::DataView, - ::UpdateManifest::Result> { - static const std::string& extension_id( - const ::UpdateManifest::Result& input) { - return input.extension_id; - } - - static const std::string& version(const ::UpdateManifest::Result& input) { - return input.version; - } - - static const std::string& browser_min_version( - const ::UpdateManifest::Result& input) { - return input.browser_min_version; - } - - static const GURL& crx_url(const ::UpdateManifest::Result& input) { - return input.crx_url; - } - - static const std::string& package_hash( - const ::UpdateManifest::Result& input) { - return input.package_hash; - } - - static int size(const ::UpdateManifest::Result& input) { return input.size; } - - static const std::string& package_fingerprint( - const ::UpdateManifest::Result& input) { - return input.package_fingerprint; - } - - static const GURL& diff_crx_url(const ::UpdateManifest::Result& input) { - return input.diff_crx_url; - } - - static const std::string& diff_package_hash( - const ::UpdateManifest::Result& input) { - return input.diff_package_hash; - } - - static int diff_size(const ::UpdateManifest::Result& input) { - return input.diff_size; - } - - static bool Read(::extensions::mojom::UpdateManifestResult::DataView input, - ::UpdateManifest::Result* output); -}; - -} // namespace mojo - -#endif // EXTENSIONS_COMMON_MANIFEST_PARSER_STRUCT_TRAITS_H
diff --git a/extensions/common/typemaps.gni b/extensions/common/typemaps.gni index 9f9b8cb..bb19434 100644 --- a/extensions/common/typemaps.gni +++ b/extensions/common/typemaps.gni
@@ -2,7 +2,4 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -typemaps = [ - "//extensions/common/extension_unpacker.typemap", - "//extensions/common/manifest_parser.typemap", -] +typemaps = [ "//extensions/common/extension_unpacker.typemap" ]
diff --git a/extensions/common/update_manifest.cc b/extensions/common/update_manifest.cc deleted file mode 100644 index 22c36746..0000000 --- a/extensions/common/update_manifest.cc +++ /dev/null
@@ -1,289 +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. - -#include "extensions/common/update_manifest.h" - -#include <algorithm> -#include <memory> - -#include "base/stl_util.h" -#include "base/strings/string_number_conversions.h" -#include "base/strings/string_util.h" -#include "base/strings/stringprintf.h" -#include "base/version.h" -#include "libxml/tree.h" -#include "third_party/libxml/chromium/libxml_utils.h" - -static const char* kExpectedGupdateProtocol = "2.0"; -static const char* kExpectedGupdateXmlns = - "http://www.google.com/update2/response"; - -UpdateManifest::Result::Result() : size(0), diff_size(0) {} - -UpdateManifest::Result::Result(const Result& other) = default; - -UpdateManifest::Result::~Result() = default; - -UpdateManifest::Results::Results() : daystart_elapsed_seconds(kNoDaystart) {} - -UpdateManifest::Results::Results(const Results& other) = default; - -UpdateManifest::Results& UpdateManifest::Results::operator=( - const Results& other) = default; - -UpdateManifest::Results::~Results() = default; - -UpdateManifest::UpdateManifest() = default; - -UpdateManifest::~UpdateManifest() = default; - -void UpdateManifest::ParseError(const char* details, ...) { - va_list args; - va_start(args, details); - - if (errors_.length() > 0) { - // TODO(asargent) make a platform abstracted newline? - errors_ += "\r\n"; - } - base::StringAppendV(&errors_, details, args); - va_end(args); -} - -// Checks whether a given node's name matches |expected_name| and -// |expected_namespace|. -static bool TagNameEquals(const xmlNode* node, const char* expected_name, - const xmlNs* expected_namespace) { - if (node->ns != expected_namespace) { - return false; - } - return 0 == strcmp(expected_name, reinterpret_cast<const char*>(node->name)); -} - -// Returns child nodes of |root| with name |name| in namespace |xml_namespace|. -static std::vector<xmlNode*> GetChildren(xmlNode* root, xmlNs* xml_namespace, - const char* name) { - std::vector<xmlNode*> result; - for (xmlNode* child = root->children; child != NULL; child = child->next) { - if (!TagNameEquals(child, name, xml_namespace)) { - continue; - } - result.push_back(child); - } - return result; -} - -// Returns the value of a named attribute, or the empty string. -static std::string GetAttribute(xmlNode* node, const char* attribute_name) { - const xmlChar* name = reinterpret_cast<const xmlChar*>(attribute_name); - for (xmlAttr* attr = node->properties; attr != NULL; attr = attr->next) { - if (!xmlStrcmp(attr->name, name) && attr->children && - attr->children->content) { - return std::string(reinterpret_cast<const char*>( - attr->children->content)); - } - } - return std::string(); -} - -// This is used for the xml parser to report errors. This assumes the context -// is a pointer to a std::string where the error message should be appended. -static void XmlErrorFunc(void *context, const char *message, ...) { - va_list args; - va_start(args, message); - std::string* error = static_cast<std::string*>(context); - base::StringAppendV(error, message, args); - va_end(args); -} - -// Utility class for cleaning up the xml document when leaving a scope. -class ScopedXmlDocument { - public: - explicit ScopedXmlDocument(xmlDocPtr document) : document_(document) {} - ~ScopedXmlDocument() { - if (document_) - xmlFreeDoc(document_); - } - - xmlDocPtr get() { - return document_; - } - - private: - xmlDocPtr document_; -}; - -// Returns a pointer to the xmlNs on |node| with the |expected_href|, or -// NULL if there isn't one with that href. -static xmlNs* GetNamespace(xmlNode* node, const char* expected_href) { - const xmlChar* href = reinterpret_cast<const xmlChar*>(expected_href); - for (xmlNs* ns = node->ns; ns != NULL; ns = ns->next) { - if (ns->href && !xmlStrcmp(ns->href, href)) { - return ns; - } - } - return NULL; -} - - -// Helper function that reads in values for a single <app> tag. It returns a -// boolean indicating success or failure. On failure, it writes a error message -// into |error_detail|. -static bool ParseSingleAppTag(xmlNode* app_node, xmlNs* xml_namespace, - UpdateManifest::Result* result, - std::string *error_detail) { - // Read the extension id. - result->extension_id = GetAttribute(app_node, "appid"); - if (result->extension_id.length() == 0) { - *error_detail = "Missing appid on app node"; - return false; - } - - // Get the updatecheck node. - std::vector<xmlNode*> updates = GetChildren(app_node, xml_namespace, - "updatecheck"); - if (updates.size() > 1) { - *error_detail = "Too many updatecheck tags on app (expecting only 1)."; - return false; - } - if (updates.empty()) { - *error_detail = "Missing updatecheck on app."; - return false; - } - xmlNode *updatecheck = updates[0]; - - if (GetAttribute(updatecheck, "status") == "noupdate") { - return true; - } - - // Find the url to the crx file. - result->crx_url = GURL(GetAttribute(updatecheck, "codebase")); - if (!result->crx_url.is_valid()) { - *error_detail = "Invalid codebase url: '"; - *error_detail += result->crx_url.possibly_invalid_spec(); - *error_detail += "'."; - return false; - } - - // Get the version. - result->version = GetAttribute(updatecheck, "version"); - if (result->version.length() == 0) { - *error_detail = "Missing version for updatecheck."; - return false; - } - base::Version version(result->version); - if (!version.IsValid()) { - *error_detail = "Invalid version: '"; - *error_detail += result->version; - *error_detail += "'."; - return false; - } - - // Get the minimum browser version (not required). - result->browser_min_version = GetAttribute(updatecheck, "prodversionmin"); - if (result->browser_min_version.length()) { - base::Version browser_min_version(result->browser_min_version); - if (!browser_min_version.IsValid()) { - *error_detail = "Invalid prodversionmin: '"; - *error_detail += result->browser_min_version; - *error_detail += "'."; - return false; - } - } - - // package_hash is optional. It is a sha256 hash of the package in hex - // format. - result->package_hash = GetAttribute(updatecheck, "hash_sha256"); - - int size = 0; - if (base::StringToInt(GetAttribute(updatecheck, "size"), &size)) { - result->size = size; - } - - // package_fingerprint is optional. It identifies the package, preferably - // with a modified sha256 hash of the package in hex format. - result->package_fingerprint = GetAttribute(updatecheck, "fp"); - - // Differential update information is optional. - result->diff_crx_url = GURL(GetAttribute(updatecheck, "codebasediff")); - result->diff_package_hash = GetAttribute(updatecheck, "hashdiff"); - int sizediff = 0; - if (base::StringToInt(GetAttribute(updatecheck, "sizediff"), &sizediff)) { - result->diff_size = sizediff; - } - - return true; -} - - -bool UpdateManifest::Parse(const std::string& manifest_xml) { - results_.list.resize(0); - results_.daystart_elapsed_seconds = kNoDaystart; - errors_ = ""; - - if (manifest_xml.length() < 1) { - ParseError("Empty xml"); - return false; - } - - std::string xml_errors; - ScopedXmlErrorFunc error_func(&xml_errors, &XmlErrorFunc); - - // Start up the xml parser with the manifest_xml contents. - ScopedXmlDocument document(xmlParseDoc( - reinterpret_cast<const xmlChar*>(manifest_xml.c_str()))); - if (!document.get()) { - ParseError("%s", xml_errors.c_str()); - return false; - } - - xmlNode *root = xmlDocGetRootElement(document.get()); - if (!root) { - ParseError("Missing root node"); - return false; - } - - // Look for the required namespace declaration. - xmlNs* gupdate_ns = GetNamespace(root, kExpectedGupdateXmlns); - if (!gupdate_ns) { - ParseError("Missing or incorrect xmlns on gupdate tag"); - return false; - } - - if (!TagNameEquals(root, "gupdate", gupdate_ns)) { - ParseError("Missing gupdate tag"); - return false; - } - - // Check for the gupdate "protocol" attribute. - if (GetAttribute(root, "protocol") != kExpectedGupdateProtocol) { - ParseError("Missing/incorrect protocol on gupdate tag " - "(expected '%s')", kExpectedGupdateProtocol); - return false; - } - - // Parse the first <daystart> if it's present. - std::vector<xmlNode*> daystarts = GetChildren(root, gupdate_ns, "daystart"); - if (!daystarts.empty()) { - xmlNode* first = daystarts[0]; - std::string elapsed_seconds = GetAttribute(first, "elapsed_seconds"); - int parsed_elapsed = kNoDaystart; - if (base::StringToInt(elapsed_seconds, &parsed_elapsed)) { - results_.daystart_elapsed_seconds = parsed_elapsed; - } - } - - // Parse each of the <app> tags. - std::vector<xmlNode*> apps = GetChildren(root, gupdate_ns, "app"); - for (unsigned int i = 0; i < apps.size(); i++) { - Result current; - std::string error; - if (!ParseSingleAppTag(apps[i], gupdate_ns, ¤t, &error)) { - ParseError("%s", error.c_str()); - } else { - results_.list.push_back(current); - } - } - - return true; -}
diff --git a/extensions/common/update_manifest.h b/extensions/common/update_manifest.h deleted file mode 100644 index d98586e2..0000000 --- a/extensions/common/update_manifest.h +++ /dev/null
@@ -1,102 +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 EXTENSIONS_COMMON_UPDATE_MANIFEST_H_ -#define EXTENSIONS_COMMON_UPDATE_MANIFEST_H_ - -#include <string> -#include <vector> - -#include "base/macros.h" -#include "url/gurl.h" - -class UpdateManifest { - public: - // An update manifest looks like this: - // - // <?xml version="1.0" encoding="UTF-8"?> - // <gupdate xmlns="http://www.google.com/update2/response" protocol="2.0"> - // <daystart elapsed_seconds="300" /> - // <app appid="12345" status="ok"> - // <updatecheck codebase="http://example.com/extension_1.2.3.4.crx" - // hash="12345" size="9854" status="ok" version="1.2.3.4" - // prodversionmin="2.0.143.0" - // codebasediff="http://example.com/diff_1.2.3.4.crx" - // hashdiff="123" sizediff="101" - // fp="1.123" /> - // </app> - // </gupdate> - // - // The <daystart> tag contains a "elapsed_seconds" attribute which refers to - // the server's notion of how many seconds it has been since midnight. - // - // The "appid" attribute of the <app> tag refers to the unique id of the - // extension. The "codebase" attribute of the <updatecheck> tag is the url to - // fetch the updated crx file, and the "prodversionmin" attribute refers to - // the minimum version of the chrome browser that the update applies to. - - // The diff data members correspond to the differential update package, if - // a differential update is specified in the response. - - // The result of parsing one <app> tag in an xml update check manifest. - // TODO(crbug.com/692120): consider removing struct Result and Results and - // using the corresponding mojo type instead. This would also remove the - // need for the Mojo struct traits that are currently defined / used to - // cart these Result/Results structs over Mojo IPC. - struct Result { - Result(); - Result(const Result& other); - ~Result(); - - std::string extension_id; - std::string version; - std::string browser_min_version; - - // Attributes for the full update. - GURL crx_url; - std::string package_hash; - int size; - std::string package_fingerprint; - - // Attributes for the differential update. - GURL diff_crx_url; - std::string diff_package_hash; - int diff_size; - }; - - static const int kNoDaystart = -1; - struct Results { - Results(); - Results(const Results& other); - Results& operator=(const Results& other); - ~Results(); - - std::vector<Result> list; - // This will be >= 0, or kNoDaystart if the <daystart> tag was not present. - int daystart_elapsed_seconds; - }; - - UpdateManifest(); - ~UpdateManifest(); - - // Parses an update manifest xml string into Result data. Returns a bool - // indicating success or failure. On success, the results are available by - // calling results(). The details for any failures are available by calling - // errors(). - bool Parse(const std::string& manifest_xml); - - const Results& results() { return results_; } - const std::string& errors() { return errors_; } - - private: - Results results_; - std::string errors_; - - // Helper function that adds parse error details to our errors_ string. - void ParseError(const char* details, ...); - - DISALLOW_COPY_AND_ASSIGN(UpdateManifest); -}; - -#endif // EXTENSIONS_COMMON_UPDATE_MANIFEST_H_
diff --git a/extensions/common/update_manifest_unittest.cc b/extensions/common/update_manifest_unittest.cc deleted file mode 100644 index 02beb677..0000000 --- a/extensions/common/update_manifest_unittest.cc +++ /dev/null
@@ -1,185 +0,0 @@ -// Copyright (c) 2011 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 "extensions/common/update_manifest.h" - -#include "testing/gtest/include/gtest/gtest.h" - -static const char kValidXml[] = -"<?xml version='1.0' encoding='UTF-8'?>" -"<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" -" <app appid='12345'>" -" <updatecheck codebase='http://example.com/extension_1.2.3.4.crx'" -" version='1.2.3.4' prodversionmin='2.0.143.0' />" -" </app>" -"</gupdate>"; - -static const char valid_xml_with_hash[] = - "<?xml version='1.0' encoding='UTF-8'?>" - "<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" - " <app appid='12345'>" - " <updatecheck codebase='http://example.com/extension_1.2.3.4.crx'" - " version='1.2.3.4' prodversionmin='2.0.143.0' " - " hash_sha256='1234'/>" - " </app>" - "</gupdate>"; - -static const char kMissingAppId[] = -"<?xml version='1.0'?>" -"<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" -" <app>" -" <updatecheck codebase='http://example.com/extension_1.2.3.4.crx'" -" version='1.2.3.4' />" -" </app>" -"</gupdate>"; - -static const char kInvalidCodebase[] = -"<?xml version='1.0'?>" -"<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" -" <app appid='12345' status='ok'>" -" <updatecheck codebase='example.com/extension_1.2.3.4.crx'" -" version='1.2.3.4' />" -" </app>" -"</gupdate>"; - -static const char kMissingVersion[] = -"<?xml version='1.0'?>" -"<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" -" <app appid='12345' status='ok'>" -" <updatecheck codebase='http://example.com/extension_1.2.3.4.crx' />" -" </app>" -"</gupdate>"; - -static const char kInvalidVersion[] = -"<?xml version='1.0'?>" -"<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" -" <app appid='12345' status='ok'>" -" <updatecheck codebase='http://example.com/extension_1.2.3.4.crx' " -" version='1.2.3.a'/>" -" </app>" -"</gupdate>"; - -static const char kUsesNamespacePrefix[] = -"<?xml version='1.0' encoding='UTF-8'?>" -"<g:gupdate xmlns:g='http://www.google.com/update2/response' protocol='2.0'>" -" <g:app appid='12345'>" -" <g:updatecheck codebase='http://example.com/extension_1.2.3.4.crx'" -" version='1.2.3.4' prodversionmin='2.0.143.0' />" -" </g:app>" -"</g:gupdate>"; - -// Includes unrelated <app> tags from other xml namespaces - this should -// not cause problems. -static const char kSimilarTagnames[] = -"<?xml version='1.0' encoding='UTF-8'?>" -"<gupdate xmlns='http://www.google.com/update2/response'" -" xmlns:a='http://a' protocol='2.0'>" -" <a:app/>" -" <b:app xmlns:b='http://b' />" -" <app appid='12345'>" -" <updatecheck codebase='http://example.com/extension_1.2.3.4.crx'" -" version='1.2.3.4' prodversionmin='2.0.143.0' />" -" </app>" -"</gupdate>"; - -// Includes a <daystart> tag. -static const char kWithDaystart[] = -"<?xml version='1.0' encoding='UTF-8'?>" -"<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" -" <daystart elapsed_seconds='456' />" -" <app appid='12345'>" -" <updatecheck codebase='http://example.com/extension_1.2.3.4.crx'" -" version='1.2.3.4' prodversionmin='2.0.143.0' />" -" </app>" -"</gupdate>"; - -// Indicates no updates available - this should not be a parse error. -static const char kNoUpdate[] = -"<?xml version='1.0' encoding='UTF-8'?>" -"<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" -" <app appid='12345'>" -" <updatecheck status='noupdate' />" -" </app>" -"</gupdate>"; - -// Includes two <app> tags, one with an error. -static const char kTwoAppsOneError[] = -"<?xml version='1.0' encoding='UTF-8'?>" -"<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>" -" <app appid='aaaaaaaa' status='error-unknownApplication'>" -" <updatecheck status='error-unknownapplication'/>" -" </app>" -" <app appid='bbbbbbbb'>" -" <updatecheck codebase='http://example.com/b_3.1.crx' version='3.1'/>" -" </app>" -"</gupdate>"; - -TEST(ExtensionUpdateManifestTest, TestUpdateManifest) { - UpdateManifest parser; - - // Test parsing of a number of invalid xml cases - EXPECT_FALSE(parser.Parse(std::string())); - EXPECT_FALSE(parser.errors().empty()); - - EXPECT_TRUE(parser.Parse(kMissingAppId)); - EXPECT_TRUE(parser.results().list.empty()); - EXPECT_FALSE(parser.errors().empty()); - - EXPECT_TRUE(parser.Parse(kInvalidCodebase)); - EXPECT_TRUE(parser.results().list.empty()); - EXPECT_FALSE(parser.errors().empty()); - - EXPECT_TRUE(parser.Parse(kMissingVersion)); - EXPECT_TRUE(parser.results().list.empty()); - EXPECT_FALSE(parser.errors().empty()); - - EXPECT_TRUE(parser.Parse(kInvalidVersion)); - EXPECT_TRUE(parser.results().list.empty()); - EXPECT_FALSE(parser.errors().empty()); - - // Parse some valid XML, and check that all params came out as expected - EXPECT_TRUE(parser.Parse(kValidXml)); - EXPECT_TRUE(parser.errors().empty()); - EXPECT_FALSE(parser.results().list.empty()); - const UpdateManifest::Result* firstResult = &parser.results().list.at(0); - EXPECT_EQ(GURL("http://example.com/extension_1.2.3.4.crx"), - firstResult->crx_url); - - EXPECT_EQ("1.2.3.4", firstResult->version); - EXPECT_EQ("2.0.143.0", firstResult->browser_min_version); - - // Parse some xml that uses namespace prefixes. - EXPECT_TRUE(parser.Parse(kUsesNamespacePrefix)); - EXPECT_TRUE(parser.errors().empty()); - EXPECT_TRUE(parser.Parse(kSimilarTagnames)); - EXPECT_TRUE(parser.errors().empty()); - - // Parse xml with hash value - EXPECT_TRUE(parser.Parse(valid_xml_with_hash)); - EXPECT_TRUE(parser.errors().empty()); - EXPECT_FALSE(parser.results().list.empty()); - firstResult = &parser.results().list.at(0); - EXPECT_EQ("1234", firstResult->package_hash); - - // Parse xml with a <daystart> element. - EXPECT_TRUE(parser.Parse(kWithDaystart)); - EXPECT_TRUE(parser.errors().empty()); - EXPECT_FALSE(parser.results().list.empty()); - EXPECT_EQ(parser.results().daystart_elapsed_seconds, 456); - - // Parse a no-update response. - EXPECT_TRUE(parser.Parse(kNoUpdate)); - EXPECT_TRUE(parser.errors().empty()); - EXPECT_FALSE(parser.results().list.empty()); - firstResult = &parser.results().list.at(0); - EXPECT_EQ(firstResult->extension_id, "12345"); - EXPECT_EQ(firstResult->version, ""); - - // Parse xml with one error and one success <app> tag. - EXPECT_TRUE(parser.Parse(kTwoAppsOneError)); - EXPECT_FALSE(parser.errors().empty()); - EXPECT_EQ(1u, parser.results().list.size()); - firstResult = &parser.results().list.at(0); - EXPECT_EQ(firstResult->extension_id, "bbbbbbbb"); -}
diff --git a/extensions/utility/utility_handler.cc b/extensions/utility/utility_handler.cc index 33902dd..9ffdbbc9 100644 --- a/extensions/utility/utility_handler.cc +++ b/extensions/utility/utility_handler.cc
@@ -19,9 +19,6 @@ #include "extensions/common/extensions_client.h" #include "extensions/common/features/feature_channel.h" #include "extensions/common/features/feature_session_type.h" -#include "extensions/common/manifest.h" -#include "extensions/common/manifest_parser.mojom.h" -#include "extensions/common/update_manifest.h" #include "extensions/strings/grit/extensions_strings.h" #include "extensions/utility/unpacker.h" #include "mojo/public/cpp/bindings/strong_binding.h" @@ -167,30 +164,6 @@ DISALLOW_COPY_AND_ASSIGN(ExtensionUnpackerImpl); }; -class ManifestParserImpl : public extensions::mojom::ManifestParser { - public: - ManifestParserImpl() = default; - ~ManifestParserImpl() override = default; - - static void Create(extensions::mojom::ManifestParserRequest request) { - mojo::MakeStrongBinding(std::make_unique<ManifestParserImpl>(), - std::move(request)); - } - - private: - void Parse(const std::string& xml, ParseCallback callback) override { - UpdateManifest manifest; - if (manifest.Parse(xml)) { - std::move(callback).Run(manifest.results()); - } else { - LOG(WARNING) << "Error parsing update manifest:\n" << manifest.errors(); - std::move(callback).Run(base::nullopt); - } - } - - DISALLOW_COPY_AND_ASSIGN(ManifestParserImpl); -}; - } // namespace namespace utility_handler { @@ -211,8 +184,6 @@ registry->AddInterface(base::Bind(&ExtensionUnpackerImpl::Create), base::ThreadTaskRunnerHandle::Get()); - registry->AddInterface(base::Bind(&ManifestParserImpl::Create), - base::ThreadTaskRunnerHandle::Get()); } } // namespace utility_handler
diff --git a/ios/chrome/browser/metrics/tab_usage_recorder.mm b/ios/chrome/browser/metrics/tab_usage_recorder.mm index 073624a..fb242bf 100644 --- a/ios/chrome/browser/metrics/tab_usage_recorder.mm +++ b/ios/chrome/browser/metrics/tab_usage_recorder.mm
@@ -451,8 +451,17 @@ } void TabUsageRecorder::RenderProcessGone(web::WebState* web_state) { - RendererTerminated(web_state, web_state->IsVisible(), - [UIApplication sharedApplication].applicationState); + bool is_active; + switch ([UIApplication sharedApplication].applicationState) { + case UIApplicationStateActive: + is_active = true; + break; + case UIApplicationStateInactive: + case UIApplicationStateBackground: + is_active = false; + break; + } + RendererTerminated(web_state, web_state->IsVisible(), is_active); } void TabUsageRecorder::WebStateDestroyed(web::WebState* web_state) {
diff --git a/ios/chrome/browser/ui/toolbar/clean/BUILD.gn b/ios/chrome/browser/ui/toolbar/clean/BUILD.gn index 26eb7f1..7f73e696 100644 --- a/ios/chrome/browser/ui/toolbar/clean/BUILD.gn +++ b/ios/chrome/browser/ui/toolbar/clean/BUILD.gn
@@ -43,6 +43,7 @@ "//ios/chrome/browser/ui/tools_menu/public", "//ios/chrome/browser/ui/voice", "//ios/chrome/browser/web_state_list", + "//ios/chrome/common", "//ios/public/provider/chrome/browser", "//ios/public/provider/chrome/browser/voice", "//ios/third_party/material_components_ios",
diff --git a/ios/chrome/browser/ui/toolbar/clean/toolbar_coordinator.mm b/ios/chrome/browser/ui/toolbar/clean/toolbar_coordinator.mm index f564129..e39d0e25 100644 --- a/ios/chrome/browser/ui/toolbar/clean/toolbar_coordinator.mm +++ b/ios/chrome/browser/ui/toolbar/clean/toolbar_coordinator.mm
@@ -43,6 +43,7 @@ #import "ios/chrome/browser/ui/voice/text_to_speech_player.h" #import "ios/chrome/browser/ui/voice/voice_search_notification_names.h" #import "ios/chrome/browser/web_state_list/web_state_list.h" +#import "ios/chrome/common/material_timing.h" #import "ios/public/provider/chrome/browser/chrome_browser_provider.h" #import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h" #import "ios/web/public/navigation_item.h" @@ -330,16 +331,12 @@ - (void)locationBarHasBecomeFirstResponder { [self.delegate locationBarDidBecomeFirstResponder]; - if (@available(iOS 10, *)) { - [self.toolbarViewController expandOmniboxAnimated:YES]; - } + [self expandOmniboxAnimated:YES]; } - (void)locationBarHasResignedFirstResponder { [self.delegate locationBarDidResignFirstResponder]; - if (@available(iOS 10, *)) { - [self.toolbarViewController contractOmnibox]; - } + [self contractOmnibox]; } - (void)locationBarBeganEdit { @@ -379,7 +376,7 @@ model->OnSetFocus(false); model->SetCaretVisibility(false); } else { - [self.toolbarViewController expandOmniboxAnimated:NO]; + [self expandOmniboxAnimated:NO]; } [self focusOmnibox]; @@ -521,4 +518,37 @@ } } +// Animates |_toolbar| and |_locationBarView| for omnibox expansion. If +// |animated| is NO the animation will happen instantly. +- (void)expandOmniboxAnimated:(BOOL)animated { + // There's no Toolbar expanding on iPad. + if (IsIPadIdiom()) + return; + NSTimeInterval duration = animated ? ios::material::kDuration1 : 0; + + UIViewPropertyAnimator* animator = [[UIViewPropertyAnimator alloc] + initWithDuration:duration + curve:UIViewAnimationCurveEaseInOut + animations:^{ + }]; + [self.locationBarView addExpandOmniboxAnimations:animator]; + [self.toolbarViewController addToolbarExpansionAnimations:animator]; + [animator startAnimation]; +} + +// Animates |_toolbar| and |_locationBarView| for omnibox contraction. +- (void)contractOmnibox { + // There's no Toolbar expanding on iPad, thus no need to contract. + if (IsIPadIdiom()) + return; + UIViewPropertyAnimator* animator = [[UIViewPropertyAnimator alloc] + initWithDuration:ios::material::kDuration1 + curve:UIViewAnimationCurveEaseInOut + animations:^{ + }]; + [self.locationBarView addContractOmniboxAnimations:animator]; + [self.toolbarViewController addToolbarContractionAnimations:animator]; + [animator startAnimation]; +} + @end
diff --git a/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.h b/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.h index c1c6513..fbbda99 100644 --- a/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.h +++ b/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.h
@@ -42,10 +42,12 @@ // The ToolsMenu button. @property(nonatomic, strong, readonly) ToolbarToolsMenuButton* toolsMenuButton; -// Animates the toolbar so the omnibox is shrinking to its standard state. -- (void)contractOmnibox; -// Expands the omnibox to its expanded state, |animated| or not. -- (void)expandOmniboxAnimated:(BOOL)animated; +// Adds the toolbar expanded state animations to |animator|, and changes the +// toolbar constraints in preparation for the animation. +- (void)addToolbarExpansionAnimations:(UIViewPropertyAnimator*)animator; +// Adds the toolbar contracted state animations to |animator|, and changes the +// toolbar constraints in preparation for the animation. +- (void)addToolbarContractionAnimations:(UIViewPropertyAnimator*)animator; // Updates the view so a snapshot can be taken. It needs to be adapted, // depending on if it is a snapshot displayed |onNTP| or not. - (void)updateForSideSwipeSnapshotOnNTP:(BOOL)onNTP;
diff --git a/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.mm b/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.mm index 1975030..3ab2948 100644 --- a/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.mm +++ b/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.mm
@@ -49,6 +49,15 @@ @property(nonatomic, strong) UIView* backgroundView; // Whether a page is loading. @property(nonatomic, assign, getter=isLoading) BOOL loading; +// Constraints used for the regular/contracted Toolbar state. +@property(nonatomic, strong) NSMutableArray* regularToolbarConstraints; +// Constraints used to layout the Toolbar to its expanded state. If these are +// active the locationBarContainer will expand to the size of this VC's view. +// The locationBarView will only expand up to the VC's view safeAreaLayoutGuide. +@property(nonatomic, strong) NSArray* expandedToolbarConstraints; +// Top anchor at the bottom of the safeAreaLayoutGuide. Used so views don't +// overlap with the Status Bar. +@property(nonatomic, strong) NSLayoutYAxisAnchor* topSafeAnchor; @end @implementation ToolbarViewController @@ -71,6 +80,9 @@ @synthesize bookmarkButton = _bookmarkButton; @synthesize voiceSearchEnabled = _voiceSearchEnabled; @synthesize progressBar = _progressBar; +@synthesize expandedToolbarConstraints = _expandedToolbarConstraints; +@synthesize topSafeAnchor = _topSafeAnchor; +@synthesize regularToolbarConstraints = _regularToolbarConstraints; #pragma mark - Properties accessor @@ -105,12 +117,20 @@ return self; } -- (void)contractOmnibox { - // TODO(crbug.com/785210): Implement this. +- (void)addToolbarExpansionAnimations:(UIViewPropertyAnimator*)animator { + [NSLayoutConstraint deactivateConstraints:self.regularToolbarConstraints]; + [NSLayoutConstraint activateConstraints:self.expandedToolbarConstraints]; + [animator addAnimations:^{ + [self.view layoutIfNeeded]; + }]; } -- (void)expandOmniboxAnimated:(BOOL)animated { - // TODO(crbug.com/785210): Implement this. +- (void)addToolbarContractionAnimations:(UIViewPropertyAnimator*)animator { + [NSLayoutConstraint deactivateConstraints:self.expandedToolbarConstraints]; + [NSLayoutConstraint activateConstraints:self.regularToolbarConstraints]; + [animator addAnimations:^{ + [self.view layoutIfNeeded]; + }]; } - (void)updateForSideSwipeSnapshotOnNTP:(BOOL)onNTP { @@ -153,8 +173,22 @@ [self setUpToolbarStackView]; if (self.locationBarView) { + NSLayoutConstraint* locationBarTopAnchorConstraint = + [self.locationBarView.topAnchor + constraintEqualToAnchor:self.locationBarContainer.topAnchor]; [self.locationBarContainer addSubview:self.locationBarView]; - AddSameConstraints(self.locationBarContainer, self.locationBarView); + NSArray* locationBarViewConstraints = @[ + [self.locationBarView.leadingAnchor + constraintEqualToAnchor:self.locationBarContainer.leadingAnchor], + [self.locationBarView.trailingAnchor + constraintEqualToAnchor:self.locationBarContainer.trailingAnchor], + [self.locationBarView.bottomAnchor + constraintEqualToAnchor:self.locationBarContainer.bottomAnchor], + locationBarTopAnchorConstraint, + ]; + // Adds + [self.regularToolbarConstraints addObject:locationBarTopAnchorConstraint]; + [NSLayoutConstraint activateConstraints:locationBarViewConstraints]; } [self.locationBarContainer addSubview:self.bookmarkButton]; [self.locationBarContainer addSubview:self.voiceSearchButton]; @@ -183,15 +217,23 @@ } - (void)setConstraints { - // Top anchor so Toolbar content never overlaps with the Status Bar. - NSLayoutYAxisAnchor* topAnchor; - if (@available(iOS 11, *)) { - topAnchor = self.view.safeAreaLayoutGuide.topAnchor; - } else { - topAnchor = self.topLayoutGuide.bottomAnchor; - } - self.view.translatesAutoresizingMaskIntoConstraints = NO; + [self.view.bottomAnchor constraintEqualToAnchor:self.topSafeAnchor + constant:kToolbarHeight] + .active = YES; + + NSArray* progressBarConstraints = @[ + [self.progressBar.leadingAnchor + constraintEqualToAnchor:self.view.leadingAnchor], + [self.progressBar.trailingAnchor + constraintEqualToAnchor:self.view.trailingAnchor], + [self.progressBar.bottomAnchor + constraintEqualToAnchor:self.view.bottomAnchor], + [self.progressBar.heightAnchor + constraintEqualToConstant:kProgressBarHeight], + ]; + [NSLayoutConstraint activateConstraints:progressBarConstraints]; + NSArray* constraints = @[ [self.stackView.heightAnchor constraintEqualToConstant:kToolbarHeight - 2 * kVerticalMargin], @@ -203,14 +245,6 @@ [self.stackView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor constant:-kHorizontalMargin], - [self.progressBar.leadingAnchor - constraintEqualToAnchor:self.view.leadingAnchor], - [self.progressBar.trailingAnchor - constraintEqualToAnchor:self.view.trailingAnchor], - [self.progressBar.bottomAnchor - constraintEqualToAnchor:self.view.bottomAnchor], - [self.progressBar.heightAnchor - constraintEqualToConstant:kProgressBarHeight], [self.bookmarkButton.centerYAnchor constraintEqualToAnchor:self.locationBarContainer.centerYAnchor], [self.voiceSearchButton.centerYAnchor @@ -219,10 +253,8 @@ constraintEqualToAnchor:self.locationBarContainer.trailingAnchor], [self.bookmarkButton.trailingAnchor constraintEqualToAnchor:self.voiceSearchButton.leadingAnchor], - [self.view.bottomAnchor constraintEqualToAnchor:topAnchor - constant:kToolbarHeight], ]; - + [self.regularToolbarConstraints addObjectsFromArray:constraints]; [NSLayoutConstraint activateConstraints:constraints]; } @@ -343,6 +375,7 @@ self.buttonUpdater.forwardButton = self.forwardButton; self.buttonUpdater.voiceSearchButton = self.voiceSearchButton; + [self.regularToolbarConstraints addObjectsFromArray:buttonConstraints]; [NSLayoutConstraint activateConstraints:buttonConstraints]; } @@ -546,6 +579,44 @@ [self.voiceSearchButton updateHiddenInCurrentSizeClass]; } +#pragma mark - Setters & Getters. + +- (NSLayoutYAxisAnchor*)topSafeAnchor { + if (!_topSafeAnchor) { + if (@available(iOS 11, *)) { + _topSafeAnchor = self.view.safeAreaLayoutGuide.topAnchor; + } else { + _topSafeAnchor = self.topLayoutGuide.bottomAnchor; + } + } + return _topSafeAnchor; +} + +- (NSMutableArray*)regularToolbarConstraints { + if (!_regularToolbarConstraints) { + _regularToolbarConstraints = [[NSMutableArray alloc] init]; + } + return _regularToolbarConstraints; +} + +- (NSArray*)expandedToolbarConstraints { + if (!_expandedToolbarConstraints) { + _expandedToolbarConstraints = @[ + [self.locationBarContainer.topAnchor + constraintEqualToAnchor:self.view.topAnchor], + [self.locationBarContainer.bottomAnchor + constraintEqualToAnchor:self.view.bottomAnchor], + [self.locationBarContainer.leadingAnchor + constraintEqualToAnchor:self.view.leadingAnchor], + [self.locationBarContainer.trailingAnchor + constraintEqualToAnchor:self.view.trailingAnchor], + [self.locationBarView.topAnchor constraintEqualToAnchor:self.topSafeAnchor + constant:kVerticalMargin], + ]; + } + return _expandedToolbarConstraints; +} + #pragma mark - Private // Sets the progress of the progressBar to 1 then hides it.
diff --git a/ios/web/public/web_state/ui/crw_web_view_scroll_view_proxy.h b/ios/web/public/web_state/ui/crw_web_view_scroll_view_proxy.h index ca269a2b..e3605b2 100644 --- a/ios/web/public/web_state/ui/crw_web_view_scroll_view_proxy.h +++ b/ios/web/public/web_state/ui/crw_web_view_scroll_view_proxy.h
@@ -42,6 +42,7 @@ UIPanGestureRecognizer* panGestureRecognizer; // Returns the scrollview's gesture recognizers. @property(weak, nonatomic, readonly) NSArray* gestureRecognizers; +@property(nonatomic, readonly, copy) NSArray<__kindof UIView*>* subviews; - (void)addGestureRecognizer:(UIGestureRecognizer*)gestureRecognizer; - (void)removeGestureRecognizer:(UIGestureRecognizer*)gestureRecognizer;
diff --git a/ios/web/web_state/ui/crw_web_view_scroll_view_proxy.mm b/ios/web/web_state/ui/crw_web_view_scroll_view_proxy.mm index ec2f09e..6941cfb 100644 --- a/ios/web/web_state/ui/crw_web_view_scroll_view_proxy.mm +++ b/ios/web/web_state/ui/crw_web_view_scroll_view_proxy.mm
@@ -203,6 +203,10 @@ return [_scrollView gestureRecognizers]; } +- (NSArray<__kindof UIView*>*)subviews { + return _scrollView ? [_scrollView subviews] : @[]; +} + #pragma mark - #pragma mark UIScrollViewDelegate callbacks
diff --git a/ios/web/web_state/ui/crw_web_view_scroll_view_proxy_unittest.mm b/ios/web/web_state/ui/crw_web_view_scroll_view_proxy_unittest.mm index 223f9d9..127571d 100644 --- a/ios/web/web_state/ui/crw_web_view_scroll_view_proxy_unittest.mm +++ b/ios/web/web_state/ui/crw_web_view_scroll_view_proxy_unittest.mm
@@ -126,6 +126,10 @@ [[[mockScrollView_ expect] andReturnValue:@NO] scrollsToTop]; EXPECT_FALSE([webViewScrollViewProxy_ scrollsToTop]); + NSArray<__kindof UIView*>* subviews = [NSArray array]; + [[[mockScrollView_ expect] andReturn:subviews] subviews]; + EXPECT_EQ(subviews, [webViewScrollViewProxy_ subviews]); + if (@available(iOS 11, *)) { [[[mockScrollView_ expect] andReturnValue:@(UIScrollViewContentInsetAdjustmentAutomatic)] @@ -159,6 +163,7 @@ EXPECT_FALSE([webViewScrollViewProxy_ isDragging]); EXPECT_FALSE([webViewScrollViewProxy_ isTracking]); EXPECT_FALSE([webViewScrollViewProxy_ scrollsToTop]); + EXPECT_EQ((NSUInteger)0, [webViewScrollViewProxy_ subviews].count); if (@available(iOS 11, *)) { EXPECT_EQ(UIScrollViewContentInsetAdjustmentAutomatic, [webViewScrollViewProxy_ contentInsetAdjustmentBehavior]);
diff --git a/ios/web_view/internal/cwv_scroll_view.mm b/ios/web_view/internal/cwv_scroll_view.mm index 7219b8b..693df0ca 100644 --- a/ios/web_view/internal/cwv_scroll_view.mm +++ b/ios/web_view/internal/cwv_scroll_view.mm
@@ -89,6 +89,10 @@ return _proxy.panGestureRecognizer; } +- (NSArray<__kindof UIView*>*)subviews { + return _proxy.subviews; +} + - (UIEdgeInsets)contentInset { return _proxy.contentInset; }
diff --git a/ios/web_view/public/cwv_scroll_view.h b/ios/web_view/public/cwv_scroll_view.h index 6e9a9f7..4e273b1 100644 --- a/ios/web_view/public/cwv_scroll_view.h +++ b/ios/web_view/public/cwv_scroll_view.h
@@ -36,6 +36,7 @@ UIScrollViewContentInsetAdjustmentBehavior contentInsetAdjustmentBehavior API_AVAILABLE(ios(11.0)); @property(nonatomic, readonly) UIPanGestureRecognizer* panGestureRecognizer; +@property(nonatomic, readonly, copy) NSArray<__kindof UIView*>* subviews; // KVO compliant. @property(nonatomic, readonly) CGSize contentSize;
diff --git a/media/base/android/java/src/org/chromium/media/CodecProfileLevelList.java b/media/base/android/java/src/org/chromium/media/CodecProfileLevelList.java index 8a8c6921..dfa8ab2 100644 --- a/media/base/android/java/src/org/chromium/media/CodecProfileLevelList.java +++ b/media/base/android/java/src/org/chromium/media/CodecProfileLevelList.java
@@ -117,8 +117,10 @@ case CodecProfileLevel.VP9Profile1: return VideoCodecProfile.VP9PROFILE_PROFILE1; case CodecProfileLevel.VP9Profile2: + case CodecProfileLevel.VP9Profile2HDR: return VideoCodecProfile.VP9PROFILE_PROFILE2; case CodecProfileLevel.VP9Profile3: + case CodecProfileLevel.VP9Profile3HDR: return VideoCodecProfile.VP9PROFILE_PROFILE3; default: throw new UnsupportedCodecProfileException(); @@ -128,9 +130,8 @@ case CodecProfileLevel.HEVCProfileMain: return VideoCodecProfile.HEVCPROFILE_MAIN; case CodecProfileLevel.HEVCProfileMain10: - return VideoCodecProfile.HEVCPROFILE_MAIN10; case CodecProfileLevel.HEVCProfileMain10HDR10: - return VideoCodecProfile.HEVCPROFILE_MAIN_STILL_PICTURE; + return VideoCodecProfile.HEVCPROFILE_MAIN10; default: throw new UnsupportedCodecProfileException(); }
diff --git a/media/ffmpeg/ffmpeg_common.cc b/media/ffmpeg/ffmpeg_common.cc index 7777468..e0ea4ad 100644 --- a/media/ffmpeg/ffmpeg_common.cc +++ b/media/ffmpeg/ffmpeg_common.cc
@@ -502,6 +502,11 @@ format = PIXEL_FORMAT_I420; profile = AV1PROFILE_PROFILE0; break; +#if BUILDFLAG(ENABLE_HEVC_DEMUXING) + case kCodecHEVC: + profile = HEVCPROFILE_MAIN; + break; +#endif case kCodecTheora: profile = THEORAPROFILE_ANY; break;
diff --git a/media/filters/gpu_video_decoder.cc b/media/filters/gpu_video_decoder.cc index 5eb772e..8b1d8cf 100644 --- a/media/filters/gpu_video_decoder.cc +++ b/media/filters/gpu_video_decoder.cc
@@ -207,7 +207,8 @@ needs_all_picture_buffers_to_decode_ = capabilities.flags & VideoDecodeAccelerator::Capabilities::NEEDS_ALL_PICTURE_BUFFERS_TO_DECODE; - needs_bitstream_conversion_ = (config.codec() == kCodecH264); + needs_bitstream_conversion_ = + (config.codec() == kCodecH264) || (config.codec() == kCodecHEVC); requires_texture_copy_ = !!(capabilities.flags & VideoDecodeAccelerator::Capabilities::REQUIRES_TEXTURE_COPY);
diff --git a/net/cert/root_cert_list_generated.h b/net/cert/root_cert_list_generated.h index d97a6b2..26c4b55 100644 --- a/net/cert/root_cert_list_generated.h +++ b/net/cert/root_cert_list_generated.h
@@ -454,6 +454,12 @@ }, 163}, {{ + 0x28, 0x2F, 0xB5, 0xCF, 0xBA, 0xF0, 0x15, 0x18, 0xD9, 0x70, 0x4D, + 0xE7, 0x88, 0x4D, 0x7A, 0x25, 0xFF, 0x01, 0xCF, 0x88, 0x2E, 0x99, + 0x42, 0x90, 0xD5, 0x99, 0x5D, 0x5E, 0xB6, 0xC4, 0x49, 0x88, + }, + 489}, + {{ 0x28, 0x33, 0x10, 0x81, 0x9F, 0x5E, 0x09, 0x20, 0x49, 0x95, 0xD8, 0xAD, 0x9F, 0xF6, 0xFC, 0x10, 0x74, 0x62, 0x97, 0xB5, 0xC0, 0xAE, 0x06, 0xBD, 0xD1, 0xE1, 0x12, 0x4B, 0x10, 0xA0, 0xD7, 0xAD, @@ -2716,6 +2722,12 @@ }, 9}, {{ + 0xE3, 0xB0, 0xC4, 0x42, 0x98, 0xFC, 0x1C, 0x14, 0x9A, 0xFB, 0xF4, + 0xC8, 0x99, 0x6F, 0xB9, 0x24, 0x27, 0xAE, 0x41, 0xE4, 0x64, 0x9B, + 0x93, 0x4C, 0xA4, 0x95, 0x99, 0x1B, 0x78, 0x52, 0xB8, 0x55, + }, + 488}, + {{ 0xE4, 0x2F, 0x24, 0xBD, 0x4D, 0x37, 0xF4, 0xAA, 0x2E, 0x56, 0xB9, 0x79, 0xD8, 0x3D, 0x1E, 0x65, 0x21, 0x9F, 0xE0, 0xE9, 0xE3, 0xA3, 0x82, 0xA1, 0xB3, 0xCB, 0x66, 0xC9, 0x39, 0x55, 0xDE, 0x75, @@ -2926,6 +2938,12 @@ }, 28}, {{ + 0xFD, 0x37, 0x1B, 0xEA, 0x97, 0x55, 0xFF, 0x60, 0xC8, 0x82, 0x8C, + 0x84, 0x9B, 0x8E, 0x52, 0x15, 0xDE, 0x53, 0x2D, 0x61, 0xB0, 0x09, + 0x85, 0x5F, 0xA0, 0xAD, 0x63, 0x0D, 0x90, 0xEE, 0xF8, 0x2E, + }, + 490}, + {{ 0xFD, 0x87, 0x2D, 0x17, 0x66, 0x17, 0xE5, 0x0C, 0x26, 0x61, 0x19, 0xD0, 0xFD, 0xB0, 0x47, 0xB0, 0x73, 0x2D, 0xA2, 0x04, 0x8B, 0x12, 0x1A, 0xF7, 0xB9, 0x86, 0x0C, 0xA3, 0xE2, 0xF2, 0xF2, 0xBE,
diff --git a/net/cert/x509_certificate.cc b/net/cert/x509_certificate.cc index ef7da40c..370d4abb 100644 --- a/net/cert/x509_certificate.cc +++ b/net/cert/x509_certificate.cc
@@ -233,12 +233,20 @@ scoped_refptr<X509Certificate> X509Certificate::CreateFromBytes( const char* data, size_t length) { + return CreateFromBytesUnsafeOptions(data, length, {}); +} + +// static +scoped_refptr<X509Certificate> X509Certificate::CreateFromBytesUnsafeOptions( + const char* data, + size_t length, + UnsafeCreateOptions options) { OSCertHandle cert_handle = CreateOSCertHandleFromBytes(data, length); if (!cert_handle) return NULL; scoped_refptr<X509Certificate> cert = - CreateFromHandle(cert_handle, OSCertHandles()); + CreateFromHandleUnsafeOptions(cert_handle, {}, options); FreeOSCertHandle(cert_handle); return cert; }
diff --git a/net/cert/x509_certificate.h b/net/cert/x509_certificate.h index 38c9c66..70cc20c 100644 --- a/net/cert/x509_certificate.h +++ b/net/cert/x509_certificate.h
@@ -112,6 +112,13 @@ static scoped_refptr<X509Certificate> CreateFromBytes(const char* data, size_t length); + // Create an X509Certificate with non-standard parsing options. + // Do not use without consulting //net owners. + static scoped_refptr<X509Certificate> CreateFromBytesUnsafeOptions( + const char* data, + size_t length, + UnsafeCreateOptions options); + // Create an X509Certificate from the representation stored in the given // pickle. The data for this object is found relative to the given // pickle_iter, which should be passed to the pickle's various Read* methods.
diff --git a/net/data/ssl/root_stores/root_stores.json b/net/data/ssl/root_stores/root_stores.json index d2e53ea..c2d141e 100644 --- a/net/data/ssl/root_stores/root_stores.json +++ b/net/data/ssl/root_stores/root_stores.json
@@ -29,7 +29,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "007e452fd5cf838946696dfe37a2db2ef3991436d27bcbab45922053c15a87a8": [ "windows/080328202117", @@ -77,7 +78,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "00ab444abd6bdba33da8de569ac4ecde326d1be1a61442d5eec3975a0c243f04": [ "windows/070201011524", @@ -130,7 +132,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "02ed0eb28c14da45165c566791700d6451d7fb56f0b2ab1d3b8eb070e56edff5": [ "android/kitkat-cts-release", @@ -185,7 +188,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "03458b6abeecc214953d97149af45391691de9f9cdcc2647863a3d67c95c243b": [ "android/kitkat-cts-release", @@ -295,7 +299,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "0378b202ccabba99a12e569a11a077db1edb39482061c75d0073059d9ab5b513": [ "windows/071219233937", @@ -379,7 +384,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "04048028bf1f2864d48f9ad4d83294366a828856553f3b14303f90147f5d40ef": [ "android/kitkat-cts-release", @@ -452,7 +458,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "04acfb3b24793f300f67ef87e44dd72cb9b28b204f389a7cd5ae28785c7d42cd": [ "macos/10.10.0", @@ -511,13 +518,15 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "04f1bec36951bc1454a904ce32890c5da3cde1356b7900f6e62dfa2041ebad51": [ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "0536801fbb443b3e905fd6d70d8c81eb88551be8061299110d2b4f82e64cade1": [ "windows/100719231554", @@ -555,7 +564,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "058a40323ec8c46262c3052a5d357b91ac24d3da26351b3ff4407e99f7a4e9b4": [ "windows/070201011524", @@ -608,7 +618,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "05d38c2a70bfc500ccb0cb509159b46b065c6ac9cb42d2e6f16167841434572a": [ "windows/120223022238", @@ -636,7 +647,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "063e4afac491dfd332f3089b8542e94617d893d7fe944e10a7937ee29d9693c0": [ "android/kitkat-cts-release", @@ -711,7 +723,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "0687260331a72403d909f105e69bcf0d32e1bd2493ffc6d9206d11bcd6770739": [ "android/kitkat-cts-release", @@ -798,7 +811,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "06a2c9a3379ab3c156159a27ca9ecdbd4ef75309b409cf70aeca9a12330f380e": [ "macos/10.9.0", @@ -869,7 +883,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "07453d53793bf41819a5251c69f88e2bb344b59ca828b5a543781599eaf3d602": [ "windows/070109202240", @@ -915,7 +930,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "075bfcca2d55ae6e35742c32afd0ca8ea4c958feefc23224999541c033d69c8d": [ "windows/120125230451", @@ -944,7 +960,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "0771920c8cb874d5c5a4dc0d6a51a2d495d38c4de2cd5b83d2a06faa051935f6": [ "windows/121102212406", @@ -970,7 +987,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "0791ca0749b20782aad3c7d7bd0cdfc9485835843eb2d7996009ce43ab6c6927": [ "android/kitkat-cts-release", @@ -1066,7 +1084,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "0a81ec5a929777f145904af38d5d509f66b5e2c58fcdb531058b0e17f3f0b41b": [ "android/kitkat-cts-release", @@ -1138,7 +1157,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "0b5eed4e846403cf55e065848440ed2a82758bf5b9aa1f253d4613cfa080ff3f": [ "android/kitkat-cts-release", @@ -1238,7 +1258,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "0c0b6b2bd1edd7b27fead157f8e846b335b784a39f06c47216c8746f64c5ceda": [ "windows/140912180251", @@ -1256,7 +1277,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "0c258a12a5674aef25f28ba7dcfaeceea348e541e6f5cc4ee63b71b361606ac3": [ "android/kitkat-cts-release", @@ -1343,7 +1365,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "0c2cd63df7806fa399ede809116b575bf87989f06518f9808c860503178baf66": [ "android/kitkat-cts-release", @@ -1455,7 +1478,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "0ed3ffab6c149c8b4e71058e8668d429abfda681c2fff508207641f0d751a3e5": [ "macos/10.10.0", @@ -1541,7 +1565,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "0f993c8aef97baaf5687140ed59ad1821bb4afacf0aa9a58b5d57a338a3afbcb": [ "android/kitkat-cts-release", @@ -1628,7 +1653,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "126bf01c1094d2f0ca2e352380b3c724294546ccc65597bef7f12d8a171f1984": [ "macos/10.10.0", @@ -1664,7 +1690,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "12d480c1a3c664781b99d9df0e9faf3f1cacee1b3c30c3123a337a4a454ffed2": [ "windows/071219233937", @@ -1713,7 +1740,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "136335439334a7698016a0d324de72284e079d7b5220bb8fbd747816eebebaca": [ "android/kitkat-cts-release", @@ -1788,7 +1816,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "1465fa205397b876faa6f0a9958e5590e40fcc7faa4fb7c2c8677521fb5fb658": [ "android/kitkat-cts-release", @@ -1875,7 +1904,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "1501f89c5c4dcf36cf588a17c9fd7cfceb9ee01e8729be355e25de80eb6284b4": [ "windows/160414222039", @@ -1884,7 +1914,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "152a402bfcdf2cd548054d2275b39c7fca3ec0978078b0f0ea76e561a6c7433e": [ "android/nougat-mr1-cts-release", @@ -1908,7 +1939,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "1594cb5b826c315de3bc932c56895ff23a3a988b5dc1f034d214dfd858d89ee8": [ "windows/070109202240", @@ -1949,7 +1981,8 @@ "windows/150122021939" ], "15d5b8774619ea7d54ce1ca6d0b0c403e037a917f131e8a04e1e6b7a71babce5": [ - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "15f0ba00a3ac7af3ac884c072b1011a077bd77c097f40164b2f8598abd83860c": [ "android/kitkat-cts-release", @@ -2094,7 +2127,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "1793927a0614549789adce2f8f34f7f0b66d0f3ae3a3b84d21ec15dbba4fadc7": [ "android/kitkat-cts-release", @@ -2160,7 +2194,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "179fbc148a3dd00fd24ea13458cc43bfa7f59c8182d783a513f6ebec100c8924": [ "android/lollipop-mr1-cts-release", @@ -2211,7 +2246,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "18ce6cfe7bf14e60b2e347b8dfe868cb31d02ebb3ada271569f50343b46db3a4": [ "android/oreo-cts-release", @@ -2228,7 +2264,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "18f1fc7f205df8adddeb7fe007dd57e3af375a9c4d8d73546bf4f1fed1e18d35": [ "android/kitkat-cts-release", @@ -2315,11 +2352,13 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "19abcdff3a74402fa8f0ca206bf7fab0dffff3ae2bbd719584d21090a4353207": [ "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "1a0d20445de5ba1862d19ef880858cbce50102b36e8f0a040c3c69e74522fe6e": [ "windows/110919210309", @@ -2350,7 +2389,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "1a2512cda6744abea11432a2fdc9f8c088db5a98c89e13352574cde4d9e80cdd": [ "windows/140912180251", @@ -2368,7 +2408,8 @@ "windows/161112005943", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "1aa980c8c0d316f25029978982f033cbb3a3f4188d669f2de6a8d84ee00a1575": [ "windows/080328202117", @@ -2416,7 +2457,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "1ba5b2aa8c65401a82960118f80bec4f62304d83cec4713a19c39c011ea46db4": [ "android/oreo-cts-release", @@ -2433,7 +2475,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "1ba622b36325544ae922afc22ef9d367943794f6e16874f368a733c65c9d5279": [ "windows/111018233154", @@ -2463,7 +2506,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "1c01c6f4dbb2fefc22558b2bca32563f49844acfc32b7be4b0ff599f9e8c7af7": [ "android/kitkat-cts-release", @@ -2521,7 +2565,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "1d4f0596fca2611d09f84c78f2ea565ef2eab9cfc272a1718bd336e6e0ae021a": [ "windows/070109202240", @@ -2588,7 +2633,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "1e49ac5dc69e86d0565da2c1305c419330b0b781bfec50e54a1b35af7fddd501": [ "macos/10.11.0", @@ -2633,7 +2679,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "1e51942b84fd467bf77d1c89da241c04254dc8f3ef4c22451fe7a89978bdcd4f": [ "windows/160916174005", @@ -2641,7 +2688,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "1e910b40c08184c0ca20468e824502ff2485163f77b03bb73296823f03885621": [ "windows/111018233154", @@ -2671,19 +2719,22 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "209e956af04df3996507c887d356230d6eb49fdbdd2d8a058ff50b8f80f690aa": [ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "2193cfea381211a1aeaa2de984e630643a87160b1208118145eafb8e1bc69958": [ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "21db20123660bb2ed418205da11ee7a85a65e2bc6e55b5af7e7899c8a266d92e": [ "android/kitkat-cts-release", @@ -2768,7 +2819,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "229ccc196d32c98421cc119e78486eebef603aecd525c6b88b47abb740692b96": [ "windows/150618202535", @@ -2784,7 +2836,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "22a2c1f7bded704cc1e701b5f408c310880fe956b5de2a4a44f99c873a25a7c8": [ "mozilla/2.18", @@ -2793,7 +2846,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "22e0d11dc9207e16c92b2ee18cfdb2c2e940626847921fc528cedd2f7932f714": [ "windows/070109202240", @@ -2892,7 +2946,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "2399561127a57125de8cefea610ddf2fa078b5c8067f4e828290bfb860e84b3c": [ "android/kitkat-cts-release", @@ -2966,7 +3021,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "248302a977f40f7dd6a2b770586adfaac3eb1e85fd1a102dbd7863c72b8f8ef2": [ "macos/10.10.0", @@ -2979,7 +3035,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "2530cc8e98321502bad96f9b1fba1b099e2d299e0f4548bb914f363bc0d4531f": [ "android/kitkat-cts-release", @@ -3096,7 +3153,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "27995829fe6a7515c1bfe848f9c4761db16c225929257bf40d0894f29ea8baf2": [ "android/nougat-mr1-cts-release", @@ -3120,7 +3178,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "2834991cf677466d22baac3b0055e5b911d9a9e55f5b85ba02dc566782c30e8a": [ "macos/10.10.0", @@ -3205,7 +3264,8 @@ "windows/150122021939" ], "2a575471e31340bc21581cbd2cf13e158463203ece94bcf9d3cc196bf09a5472": [ - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "2a8da2f8d23e0cd3b5871ecfb0f42276ca73230667f474eede71c5ee32cc3ec6": [ "windows/160414222039", @@ -3214,7 +3274,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "2a99f5bc1174b73cbb1d620884e01c34e51ccb3978da125f0e33268883bf4158": [ "android/marshmallow-cts-release", @@ -3259,10 +3320,12 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "2cabeafe37d06ca22aba7391c0033d25982952c453647349763a3ab5ad6ccf69": [ - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "2ce1cb0bf9d2f9e102993fbe215152c3b2dd0cabde1c68e5319b839154dbb7f5": [ "android/kitkat-cts-release", @@ -3334,7 +3397,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "2d47437de17951215a12f3c58e51c729a58026ef1fcc0a5fb3d9dc012f600d19": [ "android/kitkat-cts-release", @@ -3411,7 +3475,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "2d66a702ae81ba03af8cff55ab318afa919039d9f31b4d64388680f81311b65a": [ "windows/110919210309", @@ -3442,7 +3507,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "2dc62c3f6c0cc9020bba77e1c511511024b943ee598856da5a22e222b7277a20": [ "macos/10.9.0", @@ -3510,7 +3576,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "2dfcbacadf22a6ff107a51fd3e8b9e17858028879b13f7c3b57b3e1bd2315809": [ "windows/070109202240", @@ -3552,7 +3619,8 @@ ], "2e7bf16cc22485a7bbe2aa8696750761b0ae39be3b2fe9d0cc6d4ef73491425c": [ "mozilla/2.18", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "2f1062f8bf84e7eb83a0f64c98d891fbe2c811b17ffac0bce1a6dc9c7c3dcbb7": [ "macos/10.9.0", @@ -3680,7 +3748,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "31ad6648f8104138c738f39ea4320133393e3a18cc02296ef97c2ac9ef6731d0": [ "android/lollipop-cts-release", @@ -3731,7 +3800,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "31eace9b4c9c71734a185680bc24866ca6cbd82b3cb61bcc8706261b59ce1073": [ "windows/070109202240", @@ -3891,7 +3961,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "3417bb06cc6007da1b961c920b8ab4ce3fad820e4aa30b9acbc4a74ebdcebc65": [ "mozilla/2.18", @@ -3900,7 +3971,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "341de98b1392abf7f4ab90a960cf25d4bd6ec65b9a51ce6ed067d00ec7ce9b7f": [ "macos/10.10.0", @@ -3929,7 +4001,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "35ae5bddd8f7ae635cffba5682a8f00b95f48462c7108ee9a0e5292b074aafb2": [ "android/kitkat-cts-release", @@ -4006,7 +4079,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "363f3c849eab03b0a2a0f636d7b86d04d3ac7fcfe26a0a9121ab9795f6e176df": [ "macos/10.10.0", @@ -4075,7 +4149,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "37d51006c512eaab626421f1ec8c92013fc5f82ae98ee533eb4619b8deb4d06c": [ "android/kitkat-cts-release", @@ -4162,7 +4237,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "37d8dc8af7867845da3344a6b1bade448d8a80e47b5579f96bf631768f9f30f6": [ "windows/070201011524", @@ -4411,7 +4487,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "3c4fb0b95ab8b30032f432b86f535fe172c185d0fd39865837cf36187fa6f428": [ "android/marshmallow-cts-release", @@ -4452,7 +4529,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "3c5f81fea5fab82c64bfa2eaecafcde8e077fc8620a7cae537163df36edbf378": [ "android/kitkat-cts-release", @@ -4520,7 +4598,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "3ccc3ccfe45496d07b620dbf1328e8a1490018f48633c8a28a995ca60408b0be": [ "windows/070109202240", @@ -4574,7 +4653,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "3cfc3c14d1f684ff17e38c43ca440c00b967ec933e8bfe064ca1d72c90f2adb0": [ "mozilla/2.10", @@ -4660,7 +4740,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "3e9099b5015e8f486c00bcea9d111ee721faba355a89bcf1df69561e3dc6325c": [ "android/kitkat-cts-release", @@ -4747,7 +4828,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "3f06e55681d496f5be169eb5389f9f2b8ff61e1708df6881724849cd5d27cb69": [ "android/kitkat-cts-release", @@ -4897,7 +4979,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "417dcf3180f4ed1a3747acf1179316cd48cb05c5788435168aed98c98cdcb615": [ "windows/121102212406", @@ -4923,7 +5006,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "41c923866ab4cad6b7ad578081582e020797a6cbdf4fff78ce8396b38937d7f5": [ "android/kitkat-cts-release", @@ -5009,7 +5093,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "41d4f6dcf130b9843a3b9a9530953e925fdd84e8b7aeb8f205b8fae39352617d": [ "macos/10.10.0", @@ -5105,7 +5190,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "4210f199499a9ac33c8de02ba6dbaa14408bdd8a6e324689c1922d069715a332": [ "windows/100503224537", @@ -5144,7 +5230,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "42143a511a3afcdd80d555debb4191ec6bb285ee66e62ec657ed20adf7d55faa": [ "windows/090825180842", @@ -5186,7 +5273,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "4348a0e9444c78cb265e058d5e8944b4d84f9662bd26db257f8934a443c70161": [ "android/kitkat-cts-release", @@ -5273,7 +5361,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "43df5774b03e7fef5fe40d931a7bedf1bb2e6b42738c4e6d3841103d3aa7f339": [ "android/kitkat-cts-release", @@ -5347,7 +5436,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "43f257412d440d627476974f877da8f1fc2444565a367ae60eddc27a412531ae": [ "macos/10.10.0", @@ -5498,7 +5588,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "45140b3247eb9cc8c5b4f0d7b53091f73292089e6e5a63e2749dd3aca9198eda": [ "android/kitkat-cts-release", @@ -5570,7 +5661,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "46273285615d96e52da9fc2ed8c036f10af3d9f6280f8d288706c52b2011b4da": [ "windows/090501224247", @@ -5613,7 +5705,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "46edc3689046d53a453fb3104ab80dcaec658b2660ea1629dd7e867990648716": [ "mozilla/2.14", @@ -5624,7 +5717,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "488e134f30c5db56b76473e608086842bf21af8ab3cd7ac67ebdf125d531834e": [ "windows/090825180842", @@ -5666,7 +5760,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "488fca189eaadf54a3f920ed39e587183ba512232999fae3e4a285fe98e298d1": [ "windows/150122021939", @@ -5757,7 +5852,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "49c8175a9815e08bef129a929de1bacad04e4db67a8c839293953e5031c81ca0": [ "windows/070109202240", @@ -5855,7 +5951,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "49f74f824f2e059fe99c98af3219ec0d9a004d1b64dd2fd1452616318ab806c0": [ "windows/070109202240", @@ -5967,7 +6064,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "4b22d5a6aec99f3cdb79aa5ec06838479cd5ecba7164f7f22dc1d65f63d85708": [ "android/lollipop-cts-release", @@ -6001,7 +6099,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "4bdb7418bdf7ffe33ba0884afa7c0c61fd85a153972f65f7d01cb3ec7eb4073c": [ "windows/070109202240", @@ -6070,7 +6169,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "4d2491414cfe956746ec4cefa6cf6f72e28a1329432f9d8a907ac4cb5dadc15a": [ "android/marshmallow-cts-release", @@ -6116,7 +6216,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "4d9ebb28825c9643ab15d54e5f9614f13cb3e95de3cf4eac971301f320f9226e": [ "windows/090825180842", @@ -6158,7 +6259,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "4dbb0157a691fa7382289d65c0332ddb1dcb640b40ad10f010a43e20f3afed1e": [ "windows/070109202240", @@ -6288,7 +6390,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "507941c74460a0b47086220d4e9932572ab5d1b5bbcb8980ab1cb17651a844d2": [ "android/kitkat-cts-release", @@ -6365,7 +6468,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "513b2cecb810d4cde5dd85391adfc6c2dd60d87bb736d2b521484aa47a0ebef6": [ "android/kitkat-cts-release", @@ -6438,7 +6542,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "51847c8cbd2e9a72c91e292d2ae247d7de1e3fd270547a20ef7d610f38b8842c": [ "macos/10.10.0", @@ -6587,7 +6692,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "53dfdfa4e297fcfe07594e8c62d5b8ab06b32c7549f38a163094fd6429d5da43": [ "macos/10.10.0", @@ -6624,7 +6730,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "54455f7129c20b1447c418f997168f24c58fc5023bf5da5be2eb6e1dd8902ed5": [ "android/oreo-cts-release", @@ -6637,7 +6744,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "54ae8a683fe2d78ff1ef0e0b3f58425092953ba08c67fe4a95595d1cebcdcb30": [ "windows/140912180251", @@ -6655,7 +6763,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "54b4fc43d44aa4ca9fc03ca7e9949fbae267a064d02da21852412a381b5d1537": [ "windows/140912180251", @@ -6675,7 +6784,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "552f7bdcf1a7af9e6ce672017f4f12abf77240c78e761ac203d1d9d20ac89988": [ "android/lollipop-cts-release", @@ -6726,7 +6836,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "5533a0401f612c688ebce5bf53f2ec14a734eb178bfae00e50e85dae6723078a": [ "windows/131003230417", @@ -6748,7 +6859,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "55926084ec963a64b96e2abe01ce0ba86a64fbfebcc7aab5afc155b37fd76066": [ "android/kitkat-cts-release", @@ -6809,7 +6921,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "5607e260163f49c8ea4175a1c0a53b13195cb7d07845611e943a2ff507036834": [ "windows/070522004642", @@ -6861,7 +6974,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "568d6905a2c88708a4b3025190edcfedb1974a606a13c6e5290fcb2ae63edab5": [ "android/kitkat-cts-release", @@ -6933,7 +7047,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "56c77128d98c18d91b4cfdffbc25ee9103d4758ea2abad826a90f3457d460eb4": [ "android/nougat-mr1-cts-release", @@ -6957,7 +7072,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "56ce347cc6df4c35943dfdeaee023f9739a3f1cedeee0cd88dc2386bc8a91eaf": [ "windows/070109202240", @@ -7108,7 +7224,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "59b3829f1ff443344958fae8bff621b684c848cfbf7ead6b63a6ca50f2794f89": [ "macos/10.11.0", @@ -7153,7 +7270,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "5a1b5d6bc65523b40a6deffa45b48e4288ae8dd86dd70a5b858d4a5affc94f71": [ "windows/071219233937", @@ -7202,7 +7320,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "5a885db19c01d912c5759388938cafbbdf031ab2d48e91ee15589b42971d039c": [ "mozilla/2.18", @@ -7212,7 +7331,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "5adfa25013bed3710831572de51c4b9a21171c00313249c4cb4719d37fbb8d20": [ "windows/160916174005", @@ -7220,7 +7340,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "5b1d9d24de0afea8b35ba04a1c3e25d0812cdf7c4625de0a89af9fe4bbd1bb15": [ "windows/110919210309", @@ -7251,7 +7372,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "5b38bd129e83d5a0cad23921089490d50d4aae370428f8ddfffffa4c1564e184": [ "macos/10.10.0", @@ -7336,7 +7458,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "5cc3d78e4e1d5e45547a04e6873e64f90cf9536d1ccc2ef800f355c4c5fd70fd": [ "android/marshmallow-cts-release", @@ -7376,7 +7499,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "5d56499be4d2e08bcfcad08a3e38723d50503bde706948e42f55603019e528ae": [ "android/marshmallow-cts-release", @@ -7419,7 +7543,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "5e3571f33f45a7df1537a68b5ffb9e036af9d2f5bc4c9717130dc43d7175aac7": [ "windows/070201011524", @@ -7471,7 +7596,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "5edb7ac43b82a06a8761e8d7be4979ebf2611f7dd79bf91c1c6b566a219ed766": [ "android/kitkat-cts-release", @@ -7545,7 +7671,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "5f0b62eab5e353ea6521651658fbb65359f443280a4afbd104d77d10f9f04c07": [ "android/kitkat-cts-release", @@ -7609,7 +7736,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "5f960eebd716dbcb4d8a78b996e680ec2547441e69b4e44e98a595502e28a002": [ "android/kitkat-mr1-release", @@ -7664,7 +7792,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "604d32d036895aed3bfefaeb727c009ec0f2b3cdfa42a1c71730e6a72c3be9d4": [ "windows/150618202535", @@ -7680,7 +7809,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "606223d9db80df3939601e74b7e828e2800cce4273f76f276aa62db0a8e3b6c1": [ "windows/071219233937", @@ -7849,7 +7979,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "62dd0be9b9f50a163ea0f8e75c053b1eca57ea55c8688f647c6881f2c8357b95": [ "android/kitkat-cts-release", @@ -7935,7 +8066,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "62f240278c564c4dd8bf7d9d4f6f366ea894d22f5f34d989a983acec2fffed50": [ "android/kitkat-cts-release", @@ -8072,7 +8204,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "63343abfb89a6a03ebb57e9b3f5fa7be7c4f5c756f3017b3a8c488c3653e9179": [ "macos/10.10.0", @@ -8115,7 +8248,8 @@ "windows/150223195544" ], "65353833cf234c79562164f90849c0d104dbabf8ee41064d83e8cbe03ba1c5a5": [ - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "6639d13cab85df1ad9a23c443b3a60901e2b138d456fa71183578108884ec6bf": [ "macos/10.10.0", @@ -8209,7 +8343,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "67ec2059fbf52d2e6ab51a5a9b3fc2e1dcd658a1ef3a8f31107bc98028b494a2": [ "windows/070109202240", @@ -8398,7 +8533,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "68ad50909b04363c605ef13581a939ff2c96372e3f12325b0a6861e1d59f6603": [ "windows/100927165108", @@ -8435,7 +8571,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "69ddd7ea90bb57c93e135dc85ea6fcd5480b603239bdc454fc758b2a26cf7f79": [ "android/kitkat-cts-release", @@ -8509,7 +8646,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "69fac9bd55fb0ac78d53bbee5cf1d597989fd0aaab20a25151bdf1733ee7d122": [ "android/kitkat-cts-release", @@ -8596,7 +8734,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "6b9c08e86eb0f767cfad65cd98b62149e5494a67f5845e7bd1ed019f27b86bd6": [ "android/nougat-cts-release", @@ -8622,7 +8761,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "6baf50ae3467eff3c35fefdc76a02a97fab6267723eda91e99f1b3dc2b28f82e": [ "windows/090825180842", @@ -8664,7 +8804,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "6c61dac3a2def031506be036d2a6fe401994fbd13df9c8d466599274c446ec98": [ "android/kitkat-cts-release", @@ -8741,7 +8882,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "6cc05041e6445e74696c4cfbc9f80f543b7eabbb44b4ce6f787c6a9971c42f17": [ "android/nougat-mr1-cts-release", @@ -8765,7 +8907,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "6ccfd302fc44bf4599329b9750878ea44e7e8566564bcbd586169762dd10c74e": [ "windows/130626232015", @@ -8788,7 +8931,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "6cf5f658436d10507eba9df463987480bc8560a8e26ef4691e1d3c9a878a0952": [ "macos/10.10.0", @@ -8878,7 +9022,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "6dea86a1e66620a040c3c5943cb215d2ca87fb6ac09b59707e29d2facbd66b4e": [ "android/kitkat-mr1-release", @@ -9034,7 +9179,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "6ec6614e9a8efd47d6318ffdfd0bf65b493a141f77c38d0b319be1bbbc053dd2": [ "windows/110919210309", @@ -9065,7 +9211,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "6f2bc4cb632c24eae6782c0f39758932d1e1dc9b3e070f9303073fff38b288e2": [ "macos/10.9.0" @@ -9140,7 +9287,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "6fff78e400a70c11011cd85977c459fb5af96a3df0540820d0f4b8607875e58f": [ "macos/10.10.0", @@ -9229,7 +9377,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "70b922bfda0e3f4a342e4ee22d579ae598d071cc5ec9c30f123680340388aea5": [ "macos/10.10.0", @@ -9262,10 +9411,12 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "71cca5391f9e794b04802530b363e121da8a3043bb26662fea4dca7fc951a4bd": [ - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "7286ce249fe9e32bd4752257c17cd8f6991a9c1e6f1a3cc73304ed023e6ae4eb": [ "windows/131003230417", @@ -9287,7 +9438,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "730b619eaa759863c65360b7412e1457eca96844ef2f16d91fcf2efe46a647e9": [ "windows/070109202240", @@ -9372,7 +9524,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "73c176434f1bc6d5adf45b0e76e727287c8de57616c1e6e6141a2b2cbc7d8e4c": [ "android/kitkat-cts-release", @@ -9459,7 +9612,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "7431e5f4c3c1ce4690774f0b61e05440883ba9a01ed00ba6abd7806ed3b118cf": [ "android/kitkat-cts-release", @@ -9546,7 +9700,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "744b1147b4a9a69c32785e9e37c3323241ef29f63e76f1603d6761a783d8a0fe": [ "windows/150122021939", @@ -9605,7 +9760,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "75c9d4361cb96e993abd9620cf043be9407a4633f202f0f4c0e17851cc6089cd": [ "macos/10.10.0", @@ -9725,7 +9881,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "767c955a76412c89af688e90a1c70f556cfd6b6025dbea10416d7eb6831f8c40": [ "android/kitkat-cts-release", @@ -9812,7 +9969,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "76ef4762e573206006cbc338b17ca4bc200574a11928d90c3ef31c5e803e6c6f": [ "windows/070109202240", @@ -9944,7 +10102,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "77e04c9a751c73f23e2a1336112ec8d5153d382a152fed89d7532c3102771f3c": [ "windows/090501224247", @@ -9987,7 +10146,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "781d64dfa77b00f2c006700b1fda86bf68b865a603c7a656f92e90c042ca2873": [ "windows/080328202117", @@ -10033,7 +10193,8 @@ "windows/160916174005", "windows/161112005943", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "7908b40314c138100b518d0735807ffbfcf8518a0095337105ba386b153dd927": [ "android/kitkat-cts-release", @@ -10120,7 +10281,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "793cbf4559b9fde38ab22df16869f69881ae14c4b0139ac788a78a1afcca02fb": [ "android/kitkat-cts-release", @@ -10259,7 +10421,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "7af6ea9f753a1e709bd64d0beb867c11e8c295a56e24a6e0471459dccdaa1558": [ "macos/10.11.0", @@ -10304,7 +10467,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "7afc9d01a62f03a2de9637936d4afe68090d2de18d03f29c88cfb0b1ba63587f": [ "macos/10.10.0", @@ -10469,7 +10633,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "7d2bf3489ebc9ad3448b8b0827715a3cbfe3d523e3b56a9b5fc1d2a2da2f20fe": [ "windows/100503224537", @@ -10508,7 +10673,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "7d3b465a6014e526c0affcee2127d2311727ad811c26842d006af37306cc80bd": [ "android/kitkat-cts-release", @@ -10612,7 +10778,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "7e37cb8b4c47090cab36551ba6f45db840680fba166a952db100717f43053fc2": [ "android/lollipop-cts-release", @@ -10663,7 +10830,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "7f12cd5f7e5e290ec7d85179d5b72c20a5be7508ffdb5bf81ab9684a7fc9f667": [ "android/kitkat-cts-release", @@ -10737,7 +10905,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "8095210805db4bbc355e4428d8fd6ec2cde3ab5fb97a9942988eb8f4dcd06016": [ "android/kitkat-cts-release", @@ -10818,7 +10987,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "81c2568503eb3be5eec366653960e6d1be9448915e4605b793fbeb34ccb2470f": [ "windows/120223022238", @@ -10846,7 +11016,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "82d42db3d657f1944e65c192b1dd58db8df8417b89165b045f5c6a70c5f8939e": [ "windows/130626232015", @@ -10922,7 +11093,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "83ce3c1229688a593d485f81973c0f9195431eda37cc5e36430e79c7a888638b": [ "android/kitkat-cts-release", @@ -10986,7 +11158,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "847df6a78497943f27fc72eb93f9a637320a02b561d0a91b09e87a7807ed7c61": [ "windows/110919210309", @@ -11017,7 +11190,11 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" + ], + "8560f91c3624daba9570b5fea0dbe36ff11a8323be9486854fb3f34a5571198d": [ + "windows/171121202507" ], "85666a562ee0be5ce925c1d8890a6f76a87ec16d4d7d5f29ea7419cf20123b69": [ "mozilla/2.18", @@ -11026,7 +11203,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "85a0dd7dd720adb7ff05f83d542b209dc7ff4528f7d677b18389fea5e5c49e86": [ "android/kitkat-cts-release", @@ -11112,7 +11290,8 @@ "windows/161112005943", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "85e0dfae3e55a843195f8b08c8349050e4689372f6e133ad0d199af96e95cc08": [ "windows/070109202240", @@ -11231,7 +11410,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "87c678bfb8b25f38f7e97b336956bbcf144bbacaa53647e61a2325bc1055316b": [ "android/kitkat-cts-release", @@ -11338,7 +11518,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "885de64c340e3ea70658f01e1145f957fcda27aabeea1ab9faa9fdb0102d4077": [ "windows/070109202240", @@ -11392,7 +11573,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "88ef81de202eb018452e43f864725cea5fbd1fc2d9d205730709c5d8b8690f46": [ "android/lollipop-cts-release", @@ -11440,7 +11622,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "894ce6ddb012cb3f736954668de63f436080e95f17b7a81bd924eb21bee9e440": [ "windows/071219233937", @@ -11489,7 +11672,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "894ebc0b23da2a50c0186b7f8f25ef1f6b2935af32a94584ef80aaf877a3a06e": [ "macos/10.10.0", @@ -11540,7 +11724,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "8a866fd1b276b57e578e921c65828a2bed58e9f2f288054134b7f1f4bfc9cc74": [ "android/lollipop-cts-release", @@ -11588,7 +11773,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "8a968aadd88b20519672a452a3d6e31eacb71c26bcaf65b32f9793bf2ffa54a9": [ "macos/10.10.0", @@ -11621,7 +11807,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "8b45da1c06f791eb0cabf26be588f5fb23165c2e614bf885562d0dce50b29b02": [ "android/nougat-cts-release", @@ -11645,7 +11832,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "8ba1bd9c88efb3947e60ebe21137f81df7f09994cef27f097055018b8194c634": [ "windows/140912180251", @@ -11663,7 +11851,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "8c4edfd04348f322969e7e29a4cd4dca004655061c16e1b076422ef342ad630e": [ "android/kitkat-cts-release", @@ -11728,7 +11917,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "8c7209279ac04e275e16d07fd3b775e80154b5968046e31f52dd25766324e9a7": [ "android/kitkat-cts-release", @@ -11847,7 +12037,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "8da084fcf99ce07722f89b3205939806fa5cb811e1c813f6a108c7d336b3408e": [ "android/kitkat-cts-release", @@ -11951,7 +12142,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "8dbb5a7c06c20ef62dd912a36740992ff6e1e8583d42ede257c3affd7c769399": [ "windows/070109202240", @@ -12019,7 +12211,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "8e8c6ebf77dc73db3e38e93f4803e62b6b5933beb51ee4152f68d7aa14426b31": [ "windows/090825180842", @@ -12043,7 +12236,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "8f1ecdaf29bcd56eddd6b5d56a07fcac2b74d4bcd179179144a0365c27dcf14b": [ "windows/121102212406", @@ -12123,7 +12317,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "8f9e2751dcd574e9ba90e744ea92581fd0af640ae86ac1ce2198c90f96b44823": [ "windows/070109202240", @@ -12252,7 +12447,8 @@ "windows/161112005943", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "90f3e05396995ff20922c44592db62d7845e1bf64aef512cca75bc669caa2479": [ "windows/070702210503", @@ -12303,7 +12499,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "9111240747e1f652f66d1f712a11f698963b491702e312f7513da3d0fc1e5a28": [ "windows/150122021939", @@ -12366,7 +12563,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "92a9d9833fe1944db366e8bfae7a95b6480c2d6c6c2a1be65d4236b608fca1bb": [ "macos/10.10.0", @@ -12448,7 +12646,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "92d8092ee77bc9208f0897dc05271894e63ef27933ae537fb983eef0eae3eec8": [ "macos/10.10.0", @@ -12524,7 +12723,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "940ef46536713d8e2eb4b501e80b6abd8eb4e9928dba44784ce7d7e98595dfe8": [ "macos/10.9.0" @@ -12579,7 +12779,8 @@ "958abbaeff760f4fbf66ff0f2c2708f4739b2c686127239a2c4ec87a68a984c8": [ "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "959dc5880c457cd92e5447aaa5609db09ed47bd02c17a0edefdc819e756c74e5": [ "macos/10.10.0", @@ -12659,7 +12860,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "9676f287356c89a12683d65234098cb77c4f1c18f23c0e541de0e196725b7ebe": [ "macos/10.10.0", @@ -12763,7 +12965,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "97f654859cbde586fd90311e82ec7902c238cba0d6e529564c9c88f44895ec50": [ "windows/160916174005", @@ -12771,7 +12974,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "9806ab8509e2f35e192f275f0c308b9409b42512f90c659598c22be613962272": [ "windows/070109202240", @@ -12813,7 +13017,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "9a114025197c5bb95d94e63d55cd43790847b646b23cdf11ada4a00eff15fb48": [ "android/kitkat-cts-release", @@ -12875,7 +13080,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "9a6ec012e1a7da9dbe34194d478ad7c0db1822fb071df12981496ed104384113": [ "android/kitkat-cts-release", @@ -12917,7 +13123,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "9a73929a500f1a0bf49dcb046e8039169696557345e9f813f10ff9380db22695": [ "macos/10.10.0", @@ -13021,7 +13228,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "9b14e8f5f6ea167666e76dcd6becc190861d5e8970b99a9470f0231236049704": [ "windows/131003230417", @@ -13039,7 +13247,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "9cefb0cb7b74e642932532831e0dc8f4d68ad414261fc3f474b795e72a164e57": [ "windows/150618202535", @@ -13055,7 +13264,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "9d190b2e314566685be8a889e27aa8c7d7ae1d8aaddba3c1ecf9d24863cd34b9": [ "macos/10.10.0", @@ -13259,7 +13469,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "a040929a02ce53b4acf4f2ffc6981ce4496f755e6d45fe0b2a692bcd52523f36": [ "android/nougat-mr1-cts-release", @@ -13280,7 +13491,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "a0459b9f63b22559f5fa5d4c6db3f9f72ff19342033578f073bf1d1b46cbb912": [ "android/kitkat-cts-release", @@ -13352,7 +13564,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "a1339d33281a0b56e557d3d32b1ce7f9367eb094bd5fa72a7e5004c8ded7cafe": [ "android/nougat-cts-release", @@ -13367,7 +13580,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "a1b2dbeb64e706c6169e3c4118b23baa09018a8427666d8bf0e28891ec051950": [ "windows/110919210309", @@ -13398,7 +13612,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "a1f05ccb80c2d710ec7d479abdcbb879e58d7edb7149fe78a87884e3d0bad0f9": [ "macos/10.10.0", @@ -13458,7 +13673,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "a22dba681e97376e2d397d728aae3a9b6296b9fdba60bc2e11f647f2c675fb37": [ "android/kitkat-cts-release", @@ -13542,7 +13758,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "a31f093053bd12c1f5c3c6efd498023fd2914d7758d05d698ce084b50626e0e5": [ "macos/10.10.0", @@ -13605,7 +13822,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "a3cc68595dfe7e86d8ad1772a8b5284add54ace3b8a798df47bccafb1fdb84df": [ "windows/160414222039", @@ -13614,7 +13832,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "a3d7435a18c46b23b6a4f8929cd59050c9168b03a7fad532626f297cac5356e4": [ "windows/110919210309", @@ -13645,7 +13864,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "a4310d50af18a6447190372a86afaf8b951ffb431d837f1e5688b45971ed1557": [ "android/kitkat-cts-release", @@ -13720,7 +13940,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "a45ede3bbbf09c8ae15c72efc07268d693a21c996fd51e67ca079460fd6d8873": [ "android/kitkat-cts-release", @@ -13807,7 +14028,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "a4b6b3996fc2f306b3fd8681bd63413d8c5009cc4fa329c2ccf0e2fa1b140305": [ "android/kitkat-cts-release", @@ -13916,7 +14138,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "a6c51e0da5ca0a9309d2e4c0e40c2af9107aae8203857fe198e3e769e343085c": [ "android/kitkat-cts-release", @@ -14031,7 +14254,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "a73563e859cbcfa173cf3285debf2578ede15d47a3bee385861ab7a4fb6d7b6e": [ "windows/130420010442", @@ -14055,7 +14279,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "a798a1c70e9b6d50eaa5724a26fac7991848edc61bf48d79816bcafb66972128": [ "windows/070109202240", @@ -14154,7 +14379,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "aad9ceed5aa6b1cea28596a8e4e1abed9386d6ebc9d4aad9acde0fa36ba069d0": [ "macos/10.10.0", @@ -14211,7 +14437,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "ab7036365c7154aa29c2c29f5d4191163b162a2225011357d56d07ffa7bc1f72": [ "macos/10.10.0", @@ -14270,7 +14497,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "ad016f958050e0e7e46fae7dcc50197ed8e3ff0a4b262e5ddcdb3edddc7d6578": [ "windows/100503224537", @@ -14309,7 +14537,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "ad7539e5cdc985fa95244055a9202d63460ec921467d034cfdbe87ec6d00fedc": [ "windows/130626232015", @@ -14332,7 +14561,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "ae2fec829118a2455ad6a415e71823eb9b7b6e3578a51ac8a51446eadbb0979c": [ "windows/070109202240", @@ -14414,7 +14644,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "ae92e90000541a9ebc101b70b6c33a62f5a53a55ba815e81d31abddf03507f5d": [ "windows/070109202240", @@ -14468,7 +14699,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "af6d08eef3cac4e1584abc63c8a9472ac529af99f3f791319a43776063f58dca": [ "windows/070109202240", @@ -14522,7 +14754,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "af71a3bca322e5224df546895696ce449a8bd2bd130f7a7ae457767f5c23d8f8": [ "windows/070109202240", @@ -14642,7 +14875,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "afe80a97ea11159190e927e08ec2e60c59a40559483a3fee838a85321b3aeaad": [ "windows/090825180842", @@ -14684,7 +14918,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "b04d708f1ae0456265dd1b66907a2691a28680b853e031df3df9083af71614d7": [ "windows/070109202240", @@ -14791,7 +15026,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "b0b1730ecbc7ff4505142c49f1295e6eda6bcaed7e2c68c5be91b5a11001f024": [ "macos/10.10.0", @@ -14861,7 +15097,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "b2259996fff735ab35014ef63f3d413190079dd03a0962432635a8695f995305": [ "windows/100927165108", @@ -14919,7 +15156,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "b32396746453442f353e616292bb20bbaa5d23b546450fdb9c54b8386167d529": [ "macos/10.10.0", @@ -14956,7 +15194,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "b3c962d34019fb38ab9fe9c62399742ab26c43c2d18ce3f2b13c14321e52964b": [ "windows/070109202240", @@ -15109,7 +15348,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "b478b812250df878635c2aa7ec7d155eaa625ee82916e2cd294361886cd1fbd4": [ "android/kitkat-cts-release", @@ -15183,7 +15423,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "b5bd2cb79cbd1907298d6bdf4842e516d8c78fa6fc96d25f71af814e16cc245e": [ "windows/080828200829", @@ -15229,7 +15470,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "b6191a50d0c3977f7da99bcdaac86a227daeb9679ec70ba3b0c9d92271c170d3": [ "android/kitkat-cts-release", @@ -15316,7 +15558,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "b644d955fff29b74e3b5687e908ee7c3c9197ba3336cc6328531f6c057d677fd": [ "windows/100927165108", @@ -15353,7 +15596,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "b676f2eddae8775cd36cb0f63cd1d4603961f49e6265ba013a2f0307b6d0b804": [ "android/nougat-cts-release", @@ -15374,7 +15618,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "b7a7ec419454411761225ecf30d99585f851356077bf83274b11588fd05521b8": [ "macos/10.9.0" @@ -15456,7 +15701,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "b8bbe523bfca3b11d50f73f7f10b3ec8ec958aa1dc86f66d9541907ff1a110ef": [ "windows/090203164005", @@ -15550,7 +15796,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "ba7f1136389075b8e86c53c095fa14f5c83b6b017a0244ed7637114620d3a3b1": [ "macos/10.9.0", @@ -15612,7 +15859,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "bc23f98a313cb92de3bbfc3a5a9f4461ac39494c4ae15a9e9df131e99b73019a": [ "android/kitkat-cts-release", @@ -15781,7 +16029,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "bd81ce3b4f6591d11a67b5fc7a47fdef25521bf9aa4e18b9e3df2e34a7803be8": [ "android/kitkat-cts-release", @@ -15895,7 +16144,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "bebce57dcb85f60a93bfa5019edb1a294bf6d81f82d9b4e71f502f0b15a1fc08": [ "windows/160916174005", @@ -15903,7 +16153,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "bec94911c2955676db6c0a550986d76e3ba005667c442c9762b4fbb773de228c": [ "android/lollipop-mr1-cts-release", @@ -15954,7 +16205,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "bf0feefb9e3a581ad5f9e9db7589985743d261085c4d314f6f5d7259aa421612": [ "android/kitkat-cts-release", @@ -16084,7 +16336,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "bfff8fd04433487d6a8aa60c1a29767a9fc2bbb05e420f713a13b992891d3893": [ "mozilla/2.18", @@ -16101,7 +16354,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "c0a6f4dc63a24bfdcf54ef2a6a082a0a72de35803e2ff5ff527ae5d87206dfd5": [ "android/kitkat-cts-release", @@ -16181,7 +16435,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "c0c05a8d8da55eaf27aa9b910b0a6ef0d8bbded346928db872e182c2073e9802": [ "macos/10.10.0", @@ -16257,6 +16512,9 @@ "windows/150820181119", "windows/151119231843" ], + "c1727f3b673e6ae7f12f23d789a7be38b918223ef6911c592da1f583444a547e": [ + "windows/171121202507" + ], "c1b12f480020336e5b04f520bc19c2e2e10ab42c9d9235f05cbec33ffa4d4dea": [ "windows/070109202240", "windows/070201011524", @@ -16309,7 +16567,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "c1b48299aba5208fe9630ace55ca68a03eda5a519c8802a0d3a673be8f8e557d": [ "android/kitkat-cts-release", @@ -16395,7 +16654,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "c1cf0b52096435e3f1b71daaec455a2311c8404f5583a9e213c69d857d943305": [ "android/kitkat-mr1-release", @@ -16440,7 +16700,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "c2157309d9aee17bf34f4df5e88dbaeba57e0361eb814cbc239f4d54d329a38d": [ "windows/140912180251", @@ -16460,7 +16721,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "c2959db8339e8dbcf6409ca92a66c49fd2e32494940a901143bd7eb72827dec2": [ "windows/070109202240", @@ -16533,7 +16795,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "c34c5df53080078ffe45b21a7f600469917204f4f0293f1d7209393e5265c04f": [ "windows/150723231635", @@ -16548,7 +16811,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "c3846bf24b9e93ca64274c0ec67c1ecc5e024ffcacd2d74019350e81fe546ae4": [ "android/kitkat-cts-release", @@ -16635,7 +16899,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "c38dcb38959393358691ea4d4f3ce495ce748996e64ed1891d897a0fc4dd55c6": [ "android/kitkat-mr1-release", @@ -16702,7 +16967,8 @@ "windows/160916174005" ], "c45d7bb08e6d67e62e4235110b564e5f78fd92ef058c840aea4e6455d7585c60": [ - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "c470cf547e2302b977fb29dd71a89a7b6c1f60777b0329f56017f328bf4f6be6": [ "android/kitkat-cts-release", @@ -16872,7 +17138,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "c57bacf238f9336c3dfba62d12bcf5823603e5842c44e62f5448cc7e5f4cad59": [ "macos/10.9.0" @@ -16949,7 +17216,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "c795ff8ff20c966688f064a1e091421d3110a3456c17ec2404b998738741f622": [ "windows/150618202535", @@ -16965,7 +17233,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "c7ba6567de93a798ae1faa791e712d378fae1f93c4397fea441bb7cbe6fd5995": [ "android/kitkat-cts-release", @@ -17019,7 +17288,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "ca2d82a08677072f8ab6764ff035676cfe3e5e325e012172df3f92096db79b85": [ "android/kitkat-cts-release", @@ -17089,7 +17359,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "ca42dd41745fd0b81eb902362cf9d8bf719da1bd1b1efc946f5b4c99f42c1b9e": [ "android/kitkat-cts-release", @@ -17175,7 +17446,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "ca7a5e68c53d2c51f72f6b465d3ed753f5903ec7901c8d0f55d868337c81975a": [ "windows/110125205412", @@ -17211,7 +17483,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "cb3ccbb76031e5e0138f8dd39a23f9de47ffc35e43c1144cea27d46a5ab1cb5f": [ "android/lollipop-cts-release", @@ -17262,7 +17535,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "cb627d18b58ad56dde331a30456bc65c601a4e9b18dedcea08e7daaa07815ff0": [ "macos/10.10.0", @@ -17359,7 +17633,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "cbb5af185e942a2402f9eacbc0ed5bb876eea3c1223623d00447e4f3ba554b65": [ "macos/10.10.0", @@ -17416,7 +17691,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "ccc89489371bad111c90619bea240a2e6dadd99f9f6e1d4d41e58ed6de3d0285": [ "windows/070109202240", @@ -17470,7 +17746,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "cd0b3b2aa174b55f18c7502f3c3a76f2198175ce45637370cf4f48b9c2ce4fbf": [ "windows/090825180842", @@ -17512,7 +17789,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "cd201256fe5ced0bfff8df595fff36b1416d5313a999f532ef4a9915df96dee0": [ "windows/090825180842", @@ -17554,7 +17832,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "cd808284cf746ff2fd6eb58aa1d59c4ad4b3ca56fdc6274a8926a7835f32313d": [ "macos/10.10.0", @@ -17624,7 +17903,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "cecddc905099d8dadfc5b1d209b737cbe2c18cfb2c10c0ff0bcf0d3286fc1aa2": [ "android/kitkat-cts-release", @@ -17711,7 +17991,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "cf56ff46a4a186109dd96584b5eeb58a510c4275b0e5f94f40bbae865e19f673": [ "android/kitkat-cts-release", @@ -17774,7 +18055,8 @@ ], "d1a0319098034e3aec729a0b5c3111229d9d26e3e623e8c5e6843fa06ee8e2e4": [ "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "d1c339ea2784eb870f934fc5634e4aa9ad5505016401f26465d37a574663359f": [ "macos/10.10.0", @@ -17819,7 +18101,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "d40e9c86cd8fe468c1776959f49ea774fa548684b6c406f3909261f4dce2575c": [ "mozilla/2.18", @@ -17828,7 +18111,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "d41d829e8c1659822af93fce62bffcde264fc84e8b950c5ff275d052354695a3": [ "android/kitkat-cts-release", @@ -17901,14 +18185,16 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "d43af9b35473755c9684fc06d7d8cb70ee5c28e773fb294eb41ee71722924d24": [ "windows/161112005943", "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "d487a56f83b07482e85e963394c1ecc2c9e51d0903ee946b02c301581ed99e16": [ "android/nougat-cts-release", @@ -17932,7 +18218,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "d48d3d23eedb50a459e55197601c27774b9d7b18c94d5a059511a10250b93168": [ "windows/160414222039", @@ -17941,7 +18228,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "d68f7730b1ec2b3fb698c96d76540c9997415a25737dcd61d44960db77d2723d": [ "macos/10.9.0" @@ -17978,7 +18266,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "d7a7a0fb5d7e2731d771e9484ebcdef71d5f0c3e0a2948782bc83ee0ea699ef4": [ "android/kitkat-cts-release", @@ -18065,10 +18354,12 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "d7ba3f4ff8ad05633451470dda3378a3491b90005e5c687d2b68d53647cfdd66": [ - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "d80fef910ae3f104723b045cec2d019f441ce6213adf156791e70c1790110a31": [ "windows/150618202535", @@ -18083,7 +18374,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "d8e0febc1db2e38d00940f37d27d41344d993e734b99d5656d9778d4d8143624": [ "android/kitkat-cts-release", @@ -18169,7 +18461,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "d95fea3ca4eedce74cd76e75fc6d1ff62c441f0fa8bc77f034b19e5db258015d": [ "android/kitkat-cts-release", @@ -18221,7 +18514,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "da98f640194df128c7888bc8e3479a9dd31795ff087c649052fbafb02eaef184": [ "macos/10.10.0", @@ -18300,13 +18594,15 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "ddbf149733bc2bf8a09d7f012b01a6dea11d7bae26713783ef6407a2495bf189": [ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "ddff53ecd7743b60bb7b2795ff5732fa785f9a14df1120fb40a38cf84ca2a566": [ "windows/070201011524", @@ -18359,7 +18655,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "df545bf919a2439c36983b54cdfc903dfa4f37d3996d8d84b4c31eec6f3c163e": [ "windows/100719231554", @@ -18397,7 +18694,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "e0e17aea06cf9ce12aae8190345a2c59720130a7d8ff72f3745ad75dbaa365b6": [ "windows/140912180251", @@ -18417,7 +18715,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "e17890ee09a3fbf4f48b9c414a17d637b7a50647e9bc752322727fcc1742a911": [ "android/kitkat-cts-release", @@ -18503,7 +18802,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "e28393773da845a679f2080cc7fb44a3b7a1c3792cb7eb7729fdcb6a8d99aea7": [ "android/kitkat-cts-release", @@ -18566,7 +18866,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "e3268f6106ba8b665a1a962ddea1459d2a46972f1f2440329b390b895749ad45": [ "macos/10.10.3", @@ -18595,7 +18896,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "e389360d0fdbaeb3d250584b4730314e222f39c156a020144e8d960561791506": [ "android/kitkat-cts-release", @@ -18660,6 +18962,9 @@ "windows/150723231635", "windows/150820181119" ], + "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855": [ + "windows/110901174705" + ], "e3b6a2db2ed7ce48842f7ac53241c7b71d54144bfb40c11f3f1d0b42f5eea12d": [ "android/kitkat-cts-release", "android/kitkat-mr1-release", @@ -18739,7 +19044,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "e3efb6118a92e3b858fd806f690e31d46b95ca1bd756da2b3037fe2f87cc9137": [ "macos/10.9.0", @@ -18826,7 +19132,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "e57210ab812c8df308267cb4291b98e956597ca36ec2b95189ef1723396bcac8": [ "windows/070109202240", @@ -18981,7 +19288,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "e6b8f8766485f807ae7f8dac1670461f07c0a13eef3a1ff717538d7abad391b4": [ "android/kitkat-cts-release", @@ -19090,13 +19398,15 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "e74fbda55bd564c473a36b441aa799c8a68e077440e8288b9fa1e50e4bbaca11": [ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "e75e72ed9f560eec6eb4800073a43fc3ad19195a392282017895974a99026b6c": [ "android/kitkat-cts-release", @@ -19183,7 +19493,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "e7685634efacf69ace939a6b255b7b4fabef42935b50a265acb5cb6027e44e70": [ "macos/10.10.0", @@ -19242,7 +19553,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "e793c9b02fd8aa13e21c31228accb08119643b749c898964b1746d46c3d4cbd2": [ "android/lollipop-mr1-cts-release", @@ -19296,7 +19608,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "e873d4082a7b4632934f48a5cc1ee500932f661e56c3467c5c84d31447476b0c": [ "windows/070109202240", @@ -19562,7 +19875,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "eac0220c5c9fecc5121d3720872d06707b5266be25d4ebb56ab804bbbf85fe03": [ "macos/10.10.0", @@ -19621,7 +19935,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "eb04cf5eb1f39afa762f2bb120f296cba520c1b97db1589565b81cb9a17b7244": [ "android/kitkat-cts-release", @@ -19708,7 +20023,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "eb7e05aa58e7bd328a282bf8867033f3c035342b516ee85c01673dffffbbfe58": [ "windows/090203164005", @@ -19752,7 +20068,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "ebc5570c29018c4d67b1aa127baf12f703b4611ebc17b7dab5573894179b93fa": [ "android/oreo-cts-release", @@ -19760,7 +20077,8 @@ "mozilla/2.14", "mozilla/2.16", "mozilla/2.18", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "ebd41040e4bb3ec742c9e381d31ef2a41a48b6685c96e7cef3c1df6cd4331c99": [ "android/kitkat-cts-release", @@ -19841,7 +20159,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "ebf3c02a8789b1fb7d511995d663b72906d913ce0d5e10568a8a77e2586167e7": [ "android/kitkat-cts-release", @@ -19976,7 +20295,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "edf7ebbca27a2a384d387b7d4010c666e2edb4843e4c29b4ae1d5b9332e6b24d": [ "android/kitkat-cts-release", @@ -20038,7 +20358,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "eec5496b988ce98625b934092eec2908bed0b0f316c2d4730c84eaf1f3d34881": [ "android/kitkat-cts-release", @@ -20098,7 +20419,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "eefca888db442cea1f03fac5de5b1af210ae03f5e1658ddb880c645e78624546": [ "windows/091013033632", @@ -20210,7 +20532,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "efb5157e9c66caa1dcc63c9fac0127cde83b7a426c4579b7b43a41ba46a56deb": [ "windows/111018233154", @@ -20240,7 +20563,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "f00355eef101c7df4e46cce6417dffce3db82dbb1369c3b439c4e33bee445c42": [ "windows/070201011524", @@ -20293,7 +20617,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "f008733ec500dc498763cc9264c6fcea40ec22000e927d053ce9c90bfa046cb2": [ "macos/10.10.0", @@ -20360,7 +20685,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "f09b122c7114f4a09bd4ea4f4a99d558b46e4c25cd81140d29c05613914c3841": [ "android/kitkat-cts-release", @@ -20418,7 +20744,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "f1b13f5c9a326403b0f31bbe7699cd17c7d1c0b981586dd1a7b219c52508fe99": [ "windows/070702210503", @@ -20469,7 +20796,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "f1c1b50ae5a20dd8030ec9f6bc24823dd367b5255759b4e71b61fce9f7375d73": [ "android/kitkat-cts-release", @@ -20556,7 +20884,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "f1f3cc207a6d47947b8cb9c30422229de0d71fb867e0b9a3eda08e0e1736bc28": [ "windows/070109202240", @@ -20612,7 +20941,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "f356bea244b7a91eb35d53ca9ad7864ace018e2d35d5f8f96ddf68a6f41aa474": [ "android/kitkat-cts-release", @@ -20663,7 +20993,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "f375e2f77a108bacc4234894a9af308edeca1acd8fbde0e7aaa9634e9daf7e1c": [ "windows/091029013045", @@ -20744,7 +21075,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "f4336bc2ac75950beccf1c1f2f9da6dddafd1f41161ca71f59c76889bd474033": [ "windows/110919210309", @@ -20775,7 +21107,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "f4c149551a3013a35bc7bffe17a7f3449bc1ab5b5a0ae74b06c23b90004c0104": [ "android/kitkat-cts-release", @@ -20882,7 +21215,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "f773bc65659f1bc59087bf214eead864010d5887cd2cd84e4f1ba7523fe55640": [ "windows/070109202240", @@ -20973,7 +21307,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "f9e67d336c51002ac054c632022d66dda2e7e3fff10ad061ed31d8bbb410cfb2": [ "android/kitkat-cts-release", @@ -21060,7 +21395,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "fabcf5197cdd7f458ac33832d3284021db2425fd6bea7a2e69b7486e8f51f9cc": [ "macos/10.10.0", @@ -21096,12 +21432,14 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "fad540811afae0dc767cdf6572a088fa3ce8493dd82b3b869a67d10aab4e8124": [ "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "fb47d92a9909fd4fa9bec02737543e1f3514ced747407a8d9cfa397b0915067c": [ "windows/120223022238", @@ -21129,7 +21467,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "fc0a0fe27c9dc13c81238a5913a1daf8184168beb7e5a4512a771fd4f453651d": [ "windows/070109202240", @@ -21169,7 +21508,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "fcbfe2886206f72b27593c8b070297e12d769ed10ed7930705a8098effc14d17": [ "android/kitkat-cts-release", @@ -21237,7 +21577,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "fd73dad31c644ff1b43bef0ccdda96710b9cd9875eca7e31707af3e96d522bbd": [ "android/kitkat-cts-release", @@ -21300,7 +21641,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "fe7114d07a147759891ff37b4f53eb43568296bc3bf89bc12cafb186985ef28d": [ "windows/071219233937", @@ -21349,7 +21691,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "fe863d0822fe7a2353fa484d5924e875656d3dc9fb58771f6f616f9d571bc592": [ "macos/10.10.0", @@ -21451,7 +21794,8 @@ "windows/170228174808", "windows/170419224008", "windows/170613190204", - "windows/170922155710" + "windows/170922155710", + "windows/171121202507" ], "ffcef2224e29b0b36ec8314e686822f3ac0f1c5e0c2d5c0eb2484ce7e2540fd0": [ "windows/070109202240", @@ -21498,7 +21842,7 @@ "windows/151119231843" ] }, - "last_spki_id": 487, + "last_spki_id": 490, "spkis": { "004124ad6037fd5f3319e7a23d4d9c811f5598d66c4754155b0aaa9e8f00621f": { "fingerprints": [ @@ -21931,6 +22275,12 @@ ], "id": 163 }, + "282fb5cfbaf01518d9704de7884d7a25ff01cf882e994290d5995d5eb6c44988": { + "fingerprints": [ + "c1727f3b673e6ae7f12f23d789a7be38b918223ef6911c592da1f583444a547e" + ], + "id": 489 + }, "283310819f5e09204995d8ad9ff6fc10746297b5c0ae06bdd1e1124b10a0d7ad": { "fingerprints": [ "956057517ff3bb35049342288c1c9dce852daca652b465e9747253b5f93b1f5e" @@ -24216,6 +24566,12 @@ ], "id": 9 }, + "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855": { + "fingerprints": [ + "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + ], + "id": 488 + }, "e42f24bd4d37f4aa2e56b979d83d1e65219fe0e9e3a382a1b3cb66c93955de75": { "fingerprints": [ "c766a9bef2d4071c863a31aa4920e813b2d198608cb7b7cfe21143b836df09ea", @@ -24432,6 +24788,12 @@ ], "id": 28 }, + "fd371bea9755ff60c8828c849b8e5215de532d61b009855fa0ad630d90eef82e": { + "fingerprints": [ + "8560f91c3624daba9570b5fea0dbe36ff11a8323be9486854fb3f34a5571198d" + ], + "id": 490 + }, "fd872d176617e50c266119d0fdb047b0732da2048b121af7b9860ca3e2f2f2be": { "fingerprints": [ "a6c51e0da5ca0a9309d2e4c0e40c2af9107aae8203857fe198e3e769e343085c"
diff --git a/net/filter/filter_source_stream.cc b/net/filter/filter_source_stream.cc index 7ecf53b..cf9b46e 100644 --- a/net/filter/filter_source_stream.cc +++ b/net/filter/filter_source_stream.cc
@@ -36,7 +36,7 @@ DCHECK(upstream_); } -FilterSourceStream::~FilterSourceStream() {} +FilterSourceStream::~FilterSourceStream() = default; int FilterSourceStream::Read(IOBuffer* read_buffer, int read_buffer_size,
diff --git a/net/filter/gzip_header.cc b/net/filter/gzip_header.cc index 36a1c866..3792f0c 100644 --- a/net/filter/gzip_header.cc +++ b/net/filter/gzip_header.cc
@@ -17,8 +17,7 @@ Reset(); } -GZipHeader::~GZipHeader() { -} +GZipHeader::~GZipHeader() = default; void GZipHeader::Reset() { state_ = IN_HEADER_ID1;
diff --git a/net/filter/source_stream.cc b/net/filter/source_stream.cc index e2c4e6e2..f3981964 100644 --- a/net/filter/source_stream.cc +++ b/net/filter/source_stream.cc
@@ -8,7 +8,7 @@ SourceStream::SourceStream(SourceType type) : type_(type) {} -SourceStream::~SourceStream() {} +SourceStream::~SourceStream() = default; std::string SourceStream::Description() const { return "";
diff --git a/net/ftp/ftp_auth_cache.cc b/net/ftp/ftp_auth_cache.cc index 370cee5..7bebd110 100644 --- a/net/ftp/ftp_auth_cache.cc +++ b/net/ftp/ftp_auth_cache.cc
@@ -18,11 +18,11 @@ credentials(credentials) { } -FtpAuthCache::Entry::~Entry() {} +FtpAuthCache::Entry::~Entry() = default; -FtpAuthCache::FtpAuthCache() {} +FtpAuthCache::FtpAuthCache() = default; -FtpAuthCache::~FtpAuthCache() {} +FtpAuthCache::~FtpAuthCache() = default; FtpAuthCache::Entry* FtpAuthCache::Lookup(const GURL& origin) { for (EntryList::iterator it = entries_.begin(); it != entries_.end(); ++it) {
diff --git a/net/ftp/ftp_ctrl_response_buffer.cc b/net/ftp/ftp_ctrl_response_buffer.cc index f2cc5f5..274a0ae 100644 --- a/net/ftp/ftp_ctrl_response_buffer.cc +++ b/net/ftp/ftp_ctrl_response_buffer.cc
@@ -23,12 +23,12 @@ FtpCtrlResponse::FtpCtrlResponse(const FtpCtrlResponse& other) = default; -FtpCtrlResponse::~FtpCtrlResponse() {} +FtpCtrlResponse::~FtpCtrlResponse() = default; FtpCtrlResponseBuffer::FtpCtrlResponseBuffer(const NetLogWithSource& net_log) : multiline_(false), net_log_(net_log) {} -FtpCtrlResponseBuffer::~FtpCtrlResponseBuffer() {} +FtpCtrlResponseBuffer::~FtpCtrlResponseBuffer() = default; int FtpCtrlResponseBuffer::ConsumeData(const char* data, int data_length) { buffer_.append(data, data_length);
diff --git a/net/ftp/ftp_network_layer.cc b/net/ftp/ftp_network_layer.cc index 6780723..9cb3b286 100644 --- a/net/ftp/ftp_network_layer.cc +++ b/net/ftp/ftp_network_layer.cc
@@ -17,8 +17,7 @@ DCHECK(host_resolver); } -FtpNetworkLayer::~FtpNetworkLayer() { -} +FtpNetworkLayer::~FtpNetworkLayer() = default; std::unique_ptr<FtpTransaction> FtpNetworkLayer::CreateTransaction() { if (suspended_)
diff --git a/net/ftp/ftp_network_session.cc b/net/ftp/ftp_network_session.cc index 37a7cbe..9de9796b 100644 --- a/net/ftp/ftp_network_session.cc +++ b/net/ftp/ftp_network_session.cc
@@ -9,6 +9,6 @@ FtpNetworkSession::FtpNetworkSession(HostResolver* host_resolver) : host_resolver_(host_resolver) {} -FtpNetworkSession::~FtpNetworkSession() {} +FtpNetworkSession::~FtpNetworkSession() = default; } // namespace net
diff --git a/net/ftp/ftp_network_transaction.cc b/net/ftp/ftp_network_transaction.cc index 74caf028..566bbe4 100644 --- a/net/ftp/ftp_network_transaction.cc +++ b/net/ftp/ftp_network_transaction.cc
@@ -234,8 +234,7 @@ next_state_(STATE_NONE), state_after_data_connect_complete_(STATE_NONE) {} -FtpNetworkTransaction::~FtpNetworkTransaction() { -} +FtpNetworkTransaction::~FtpNetworkTransaction() = default; int FtpNetworkTransaction::Stop(int error) { if (command_sent_ == COMMAND_QUIT) {
diff --git a/net/ftp/ftp_network_transaction_unittest.cc b/net/ftp/ftp_network_transaction_unittest.cc index cfbd262..9ca3f5e 100644 --- a/net/ftp/ftp_network_transaction_unittest.cc +++ b/net/ftp/ftp_network_transaction_unittest.cc
@@ -63,7 +63,7 @@ data_type_('I') { Init(); } - ~FtpSocketDataProvider() override {} + ~FtpSocketDataProvider() override = default; // SocketDataProvider implementation. MockRead OnRead() override { @@ -243,8 +243,8 @@ class FtpSocketDataProviderDirectoryListing : public FtpSocketDataProvider { public: - FtpSocketDataProviderDirectoryListing() {} - ~FtpSocketDataProviderDirectoryListing() override {} + FtpSocketDataProviderDirectoryListing() = default; + ~FtpSocketDataProviderDirectoryListing() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -270,8 +270,8 @@ class FtpSocketDataProviderDirectoryListingWithPasvFallback : public FtpSocketDataProviderDirectoryListing { public: - FtpSocketDataProviderDirectoryListingWithPasvFallback() {} - ~FtpSocketDataProviderDirectoryListingWithPasvFallback() override {} + FtpSocketDataProviderDirectoryListingWithPasvFallback() = default; + ~FtpSocketDataProviderDirectoryListingWithPasvFallback() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -295,8 +295,8 @@ class FtpSocketDataProviderVMSDirectoryListing : public FtpSocketDataProvider { public: - FtpSocketDataProviderVMSDirectoryListing() {} - ~FtpSocketDataProviderVMSDirectoryListing() override {} + FtpSocketDataProviderVMSDirectoryListing() = default; + ~FtpSocketDataProviderVMSDirectoryListing() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -330,8 +330,8 @@ class FtpSocketDataProviderVMSDirectoryListingRootDirectory : public FtpSocketDataProvider { public: - FtpSocketDataProviderVMSDirectoryListingRootDirectory() {} - ~FtpSocketDataProviderVMSDirectoryListingRootDirectory() override {} + FtpSocketDataProviderVMSDirectoryListingRootDirectory() = default; + ~FtpSocketDataProviderVMSDirectoryListingRootDirectory() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -366,8 +366,8 @@ class FtpSocketDataProviderFileDownloadWithFileTypecode : public FtpSocketDataProvider { public: - FtpSocketDataProviderFileDownloadWithFileTypecode() {} - ~FtpSocketDataProviderFileDownloadWithFileTypecode() override {} + FtpSocketDataProviderFileDownloadWithFileTypecode() = default; + ~FtpSocketDataProviderFileDownloadWithFileTypecode() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -389,8 +389,8 @@ class FtpSocketDataProviderFileDownload : public FtpSocketDataProvider { public: - FtpSocketDataProviderFileDownload() {} - ~FtpSocketDataProviderFileDownload() override {} + FtpSocketDataProviderFileDownload() = default; + ~FtpSocketDataProviderFileDownload() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -416,8 +416,8 @@ class FtpSocketDataProviderPathSeparatorsNotUnescaped : public FtpSocketDataProvider { public: - FtpSocketDataProviderPathSeparatorsNotUnescaped() {} - ~FtpSocketDataProviderPathSeparatorsNotUnescaped() override {} + FtpSocketDataProviderPathSeparatorsNotUnescaped() = default; + ~FtpSocketDataProviderPathSeparatorsNotUnescaped() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -444,8 +444,8 @@ class FtpSocketDataProviderFileNotFound : public FtpSocketDataProvider { public: - FtpSocketDataProviderFileNotFound() {} - ~FtpSocketDataProviderFileNotFound() override {} + FtpSocketDataProviderFileNotFound() = default; + ~FtpSocketDataProviderFileNotFound() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -473,8 +473,8 @@ class FtpSocketDataProviderFileDownloadWithPasvFallback : public FtpSocketDataProviderFileDownload { public: - FtpSocketDataProviderFileDownloadWithPasvFallback() {} - ~FtpSocketDataProviderFileDownloadWithPasvFallback() override {} + FtpSocketDataProviderFileDownloadWithPasvFallback() = default; + ~FtpSocketDataProviderFileDownloadWithPasvFallback() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -498,8 +498,8 @@ class FtpSocketDataProviderFileDownloadZeroSize : public FtpSocketDataProviderFileDownload { public: - FtpSocketDataProviderFileDownloadZeroSize() {} - ~FtpSocketDataProviderFileDownloadZeroSize() override {} + FtpSocketDataProviderFileDownloadZeroSize() = default; + ~FtpSocketDataProviderFileDownloadZeroSize() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -524,8 +524,8 @@ class FtpSocketDataProviderFileDownloadCWD451 : public FtpSocketDataProviderFileDownload { public: - FtpSocketDataProviderFileDownloadCWD451() {} - ~FtpSocketDataProviderFileDownloadCWD451() override {} + FtpSocketDataProviderFileDownloadCWD451() = default; + ~FtpSocketDataProviderFileDownloadCWD451() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -546,8 +546,8 @@ class FtpSocketDataProviderVMSFileDownload : public FtpSocketDataProvider { public: - FtpSocketDataProviderVMSFileDownload() {} - ~FtpSocketDataProviderVMSFileDownload() override {} + FtpSocketDataProviderVMSFileDownload() = default; + ~FtpSocketDataProviderVMSFileDownload() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -582,8 +582,8 @@ class FtpSocketDataProviderEscaping : public FtpSocketDataProviderFileDownload { public: - FtpSocketDataProviderEscaping() {} - ~FtpSocketDataProviderEscaping() override {} + FtpSocketDataProviderEscaping() = default; + ~FtpSocketDataProviderEscaping() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -611,8 +611,8 @@ class FtpSocketDataProviderFileDownloadInvalidResponse : public FtpSocketDataProviderFileDownload { public: - FtpSocketDataProviderFileDownloadInvalidResponse() {} - ~FtpSocketDataProviderFileDownloadInvalidResponse() override {} + FtpSocketDataProviderFileDownloadInvalidResponse() = default; + ~FtpSocketDataProviderFileDownloadInvalidResponse() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -648,7 +648,7 @@ epsv_response_length_(epsv_response_length), expected_state_(expected_state) {} - ~FtpSocketDataProviderEvilEpsv() override {} + ~FtpSocketDataProviderEvilEpsv() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -677,7 +677,7 @@ : pasv_response_(pasv_response), expected_state_(expected_state) { } - ~FtpSocketDataProviderEvilPasv() override {} + ~FtpSocketDataProviderEvilPasv() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -703,7 +703,7 @@ : size_response_(size_response), expected_state_(expected_state) { } - ~FtpSocketDataProviderEvilSize() override {} + ~FtpSocketDataProviderEvilSize() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -731,7 +731,7 @@ : expected_user_(expected_user), expected_password_(expected_password) { } - ~FtpSocketDataProviderEvilLogin() override {} + ~FtpSocketDataProviderEvilLogin() override = default; MockWriteResult OnWrite(const std::string& data) override { if (InjectFault()) @@ -773,7 +773,7 @@ } host_resolver_->set_rules(rules.get()); } - ~FtpNetworkTransactionTest() override {} + ~FtpNetworkTransactionTest() override = default; // Sets up an FtpNetworkTransaction and MocketClientSocketFactory, replacing // the default one. Only needs to be called if a test runs multiple
diff --git a/net/ftp/ftp_response_info.cc b/net/ftp/ftp_response_info.cc index ddbd1ed..51b3c0e 100644 --- a/net/ftp/ftp_response_info.cc +++ b/net/ftp/ftp_response_info.cc
@@ -12,6 +12,6 @@ is_directory_listing(false) { } -FtpResponseInfo::~FtpResponseInfo() {} +FtpResponseInfo::~FtpResponseInfo() = default; } // namespace net
diff --git a/net/http/bidirectional_stream.cc b/net/http/bidirectional_stream.cc index e13e3f7d..3c72898a 100644 --- a/net/http/bidirectional_stream.cc +++ b/net/http/bidirectional_stream.cc
@@ -59,9 +59,9 @@ } // namespace -BidirectionalStream::Delegate::Delegate() {} +BidirectionalStream::Delegate::Delegate() = default; -BidirectionalStream::Delegate::~Delegate() {} +BidirectionalStream::Delegate::~Delegate() = default; BidirectionalStream::BidirectionalStream( std::unique_ptr<BidirectionalStreamRequestInfo> request_info,
diff --git a/net/http/bidirectional_stream_impl.cc b/net/http/bidirectional_stream_impl.cc index 6cbf69f..b8d11dbc 100644 --- a/net/http/bidirectional_stream_impl.cc +++ b/net/http/bidirectional_stream_impl.cc
@@ -6,12 +6,12 @@ namespace net { -BidirectionalStreamImpl::Delegate::Delegate() {} +BidirectionalStreamImpl::Delegate::Delegate() = default; -BidirectionalStreamImpl::Delegate::~Delegate() {} +BidirectionalStreamImpl::Delegate::~Delegate() = default; -BidirectionalStreamImpl::BidirectionalStreamImpl() {} +BidirectionalStreamImpl::BidirectionalStreamImpl() = default; -BidirectionalStreamImpl::~BidirectionalStreamImpl() {} +BidirectionalStreamImpl::~BidirectionalStreamImpl() = default; } // namespace net
diff --git a/net/http/bidirectional_stream_request_info.cc b/net/http/bidirectional_stream_request_info.cc index 309606e7..e79c16b 100644 --- a/net/http/bidirectional_stream_request_info.cc +++ b/net/http/bidirectional_stream_request_info.cc
@@ -9,6 +9,6 @@ BidirectionalStreamRequestInfo::BidirectionalStreamRequestInfo() : priority(LOW), end_stream_on_headers(false) {} -BidirectionalStreamRequestInfo::~BidirectionalStreamRequestInfo() {} +BidirectionalStreamRequestInfo::~BidirectionalStreamRequestInfo() = default; } // namespace net
diff --git a/net/http/bidirectional_stream_unittest.cc b/net/http/bidirectional_stream_unittest.cc index 1d1cfe7..7ea853b 100644 --- a/net/http/bidirectional_stream_unittest.cc +++ b/net/http/bidirectional_stream_unittest.cc
@@ -106,7 +106,7 @@ run_until_completion_(false), not_expect_callback_(false) {} - ~TestDelegateBase() override {} + ~TestDelegateBase() override = default; void OnStreamReady(bool request_headers_sent) override { // Request headers should always be sent in H2's case, because the @@ -312,7 +312,7 @@ DeleteStreamDelegate(IOBuffer* buf, int buf_len, Phase phase) : TestDelegateBase(buf, buf_len), phase_(phase) {} - ~DeleteStreamDelegate() override {} + ~DeleteStreamDelegate() override = default; void OnHeadersReceived(const SpdyHeaderBlock& response_headers) override { TestDelegateBase::OnHeadersReceived(response_headers); @@ -370,7 +370,7 @@ class MockTimer : public base::MockTimer { public: MockTimer() : base::MockTimer(false, false) {} - ~MockTimer() override {} + ~MockTimer() override = default; void Start(const base::Location& posted_from, base::TimeDelta delay,
diff --git a/net/http/broken_alternative_services.cc b/net/http/broken_alternative_services.cc index 2cb8cca8..0c42626f 100644 --- a/net/http/broken_alternative_services.cc +++ b/net/http/broken_alternative_services.cc
@@ -39,7 +39,7 @@ DCHECK(clock_); } -BrokenAlternativeServices::~BrokenAlternativeServices() {} +BrokenAlternativeServices::~BrokenAlternativeServices() = default; void BrokenAlternativeServices::Clear() { expiration_timer_.Stop();
diff --git a/net/http/failing_http_transaction_factory.cc b/net/http/failing_http_transaction_factory.cc index d6202bf..ec8d9d0f 100644 --- a/net/http/failing_http_transaction_factory.cc +++ b/net/http/failing_http_transaction_factory.cc
@@ -82,7 +82,7 @@ DCHECK_LT(error, OK); } -FailingHttpTransaction::~FailingHttpTransaction() {} +FailingHttpTransaction::~FailingHttpTransaction() = default; int FailingHttpTransaction::Start(const HttpRequestInfo* request_info, const CompletionCallback& callback, @@ -197,7 +197,7 @@ DCHECK_LT(error, OK); } -FailingHttpTransactionFactory::~FailingHttpTransactionFactory() {} +FailingHttpTransactionFactory::~FailingHttpTransactionFactory() = default; // HttpTransactionFactory: int FailingHttpTransactionFactory::CreateTransaction(
diff --git a/net/http/http_auth_cache.cc b/net/http/http_auth_cache.cc index 75f794d..57c1fe6 100644 --- a/net/http/http_auth_cache.cc +++ b/net/http/http_auth_cache.cc
@@ -72,11 +72,9 @@ namespace net { -HttpAuthCache::HttpAuthCache() { -} +HttpAuthCache::HttpAuthCache() = default; -HttpAuthCache::~HttpAuthCache() { -} +HttpAuthCache::~HttpAuthCache() = default; // Performance: O(n), where n is the number of realm entries. HttpAuthCache::Entry* HttpAuthCache::Lookup(const GURL& origin, @@ -183,8 +181,7 @@ HttpAuthCache::Entry::Entry(const Entry& other) = default; -HttpAuthCache::Entry::~Entry() { -} +HttpAuthCache::Entry::~Entry() = default; void HttpAuthCache::Entry::UpdateStaleChallenge( const std::string& auth_challenge) {
diff --git a/net/http/http_auth_cache_unittest.cc b/net/http/http_auth_cache_unittest.cc index 6ab67c4c..da2be13 100644 --- a/net/http/http_auth_cache_unittest.cc +++ b/net/http/http_auth_cache_unittest.cc
@@ -53,7 +53,7 @@ private: - ~MockAuthHandler() override {} + ~MockAuthHandler() override = default; }; const char kRealm1[] = "Realm1";
diff --git a/net/http/http_auth_challenge_tokenizer.cc b/net/http/http_auth_challenge_tokenizer.cc index 75c2d673..7ccd60b2 100644 --- a/net/http/http_auth_challenge_tokenizer.cc +++ b/net/http/http_auth_challenge_tokenizer.cc
@@ -20,8 +20,7 @@ Init(begin, end); } -HttpAuthChallengeTokenizer::~HttpAuthChallengeTokenizer() { -} +HttpAuthChallengeTokenizer::~HttpAuthChallengeTokenizer() = default; HttpUtil::NameValuePairsIterator HttpAuthChallengeTokenizer::param_pairs() const {
diff --git a/net/http/http_auth_filter.cc b/net/http/http_auth_filter.cc index 53d81ea..4d92591 100644 --- a/net/http/http_auth_filter.cc +++ b/net/http/http_auth_filter.cc
@@ -21,8 +21,7 @@ SetWhitelist(server_whitelist); } -HttpAuthFilterWhitelist::~HttpAuthFilterWhitelist() { -} +HttpAuthFilterWhitelist::~HttpAuthFilterWhitelist() = default; // Add a new domain |filter| to the whitelist, if it's not already there bool HttpAuthFilterWhitelist::AddFilter(const std::string& filter,
diff --git a/net/http/http_auth_gssapi_posix.cc b/net/http/http_auth_gssapi_posix.cc index 98385718..2ca0859 100644 --- a/net/http/http_auth_gssapi_posix.cc +++ b/net/http/http_auth_gssapi_posix.cc
@@ -667,8 +667,7 @@ DCHECK(library_); } -HttpAuthGSSAPI::~HttpAuthGSSAPI() { -} +HttpAuthGSSAPI::~HttpAuthGSSAPI() = default; bool HttpAuthGSSAPI::Init() { if (!library_)
diff --git a/net/http/http_auth_handler.cc b/net/http/http_auth_handler.cc index 3b0a4dce..5f035e0c 100644 --- a/net/http/http_auth_handler.cc +++ b/net/http/http_auth_handler.cc
@@ -20,8 +20,7 @@ properties_(-1) { } -HttpAuthHandler::~HttpAuthHandler() { -} +HttpAuthHandler::~HttpAuthHandler() = default; bool HttpAuthHandler::InitFromChallenge(HttpAuthChallengeTokenizer* challenge, HttpAuth::Target target,
diff --git a/net/http/http_auth_handler_basic.cc b/net/http/http_auth_handler_basic.cc index f756f05..ffec236 100644 --- a/net/http/http_auth_handler_basic.cc +++ b/net/http/http_auth_handler_basic.cc
@@ -101,11 +101,9 @@ return OK; } -HttpAuthHandlerBasic::Factory::Factory() { -} +HttpAuthHandlerBasic::Factory::Factory() = default; -HttpAuthHandlerBasic::Factory::~Factory() { -} +HttpAuthHandlerBasic::Factory::~Factory() = default; int HttpAuthHandlerBasic::Factory::CreateAuthHandler( HttpAuthChallengeTokenizer* challenge,
diff --git a/net/http/http_auth_handler_digest.cc b/net/http/http_auth_handler_digest.cc index 39015ae7..58350701 100644 --- a/net/http/http_auth_handler_digest.cc +++ b/net/http/http_auth_handler_digest.cc
@@ -49,14 +49,11 @@ // auth-int | | req-method:req-uri:MD5(req-entity-body) | //=====================+==========================================+ -HttpAuthHandlerDigest::NonceGenerator::NonceGenerator() { -} +HttpAuthHandlerDigest::NonceGenerator::NonceGenerator() = default; -HttpAuthHandlerDigest::NonceGenerator::~NonceGenerator() { -} +HttpAuthHandlerDigest::NonceGenerator::~NonceGenerator() = default; -HttpAuthHandlerDigest::DynamicNonceGenerator::DynamicNonceGenerator() { -} +HttpAuthHandlerDigest::DynamicNonceGenerator::DynamicNonceGenerator() = default; std::string HttpAuthHandlerDigest::DynamicNonceGenerator::GenerateNonce() const { @@ -82,8 +79,7 @@ : nonce_generator_(new DynamicNonceGenerator()) { } -HttpAuthHandlerDigest::Factory::~Factory() { -} +HttpAuthHandlerDigest::Factory::~Factory() = default; void HttpAuthHandlerDigest::Factory::set_nonce_generator( const NonceGenerator* nonce_generator) { @@ -169,8 +165,7 @@ DCHECK(nonce_generator_); } -HttpAuthHandlerDigest::~HttpAuthHandlerDigest() { -} +HttpAuthHandlerDigest::~HttpAuthHandlerDigest() = default; // The digest challenge header looks like: // WWW-Authenticate: Digest
diff --git a/net/http/http_auth_handler_factory.cc b/net/http/http_auth_handler_factory.cc index 97f3f2f7..c04ed23 100644 --- a/net/http/http_auth_handler_factory.cc +++ b/net/http/http_auth_handler_factory.cc
@@ -104,11 +104,9 @@ } // namespace -HttpAuthHandlerRegistryFactory::HttpAuthHandlerRegistryFactory() { -} +HttpAuthHandlerRegistryFactory::HttpAuthHandlerRegistryFactory() = default; -HttpAuthHandlerRegistryFactory::~HttpAuthHandlerRegistryFactory() { -} +HttpAuthHandlerRegistryFactory::~HttpAuthHandlerRegistryFactory() = default; void HttpAuthHandlerRegistryFactory::SetHttpAuthPreferences( const std::string& scheme,
diff --git a/net/http/http_auth_handler_factory_unittest.cc b/net/http/http_auth_handler_factory_unittest.cc index a0e6bafd..277a776 100644 --- a/net/http/http_auth_handler_factory_unittest.cc +++ b/net/http/http_auth_handler_factory_unittest.cc
@@ -29,7 +29,7 @@ public: explicit MockHttpAuthHandlerFactory(int return_code) : return_code_(return_code) {} - ~MockHttpAuthHandlerFactory() override {} + ~MockHttpAuthHandlerFactory() override = default; int CreateAuthHandler(HttpAuthChallengeTokenizer* challenge, HttpAuth::Target target,
diff --git a/net/http/http_auth_handler_mock.cc b/net/http/http_auth_handler_mock.cc index 061f99b..c908100 100644 --- a/net/http/http_auth_handler_mock.cc +++ b/net/http/http_auth_handler_mock.cc
@@ -50,8 +50,7 @@ allows_explicit_credentials_(true), weak_factory_(this) {} -HttpAuthHandlerMock::~HttpAuthHandlerMock() { -} +HttpAuthHandlerMock::~HttpAuthHandlerMock() = default; void HttpAuthHandlerMock::SetResolveExpectation(Resolve resolve) { EXPECT_EQ(RESOLVE_INIT, resolve_); @@ -203,8 +202,7 @@ // TODO(cbentzel): Default do_init_from_challenge_ to true. } -HttpAuthHandlerMock::Factory::~Factory() { -} +HttpAuthHandlerMock::Factory::~Factory() = default; void HttpAuthHandlerMock::Factory::AddMockHandler( HttpAuthHandler* handler, HttpAuth::Target target) {
diff --git a/net/http/http_auth_handler_negotiate.cc b/net/http/http_auth_handler_negotiate.cc index afe8c00..cfce66fb4 100644 --- a/net/http/http_auth_handler_negotiate.cc +++ b/net/http/http_auth_handler_negotiate.cc
@@ -49,8 +49,7 @@ is_unsupported_(false) { } -HttpAuthHandlerNegotiate::Factory::~Factory() { -} +HttpAuthHandlerNegotiate::Factory::~Factory() = default; void HttpAuthHandlerNegotiate::Factory::set_host_resolver( HostResolver* resolver) { @@ -139,8 +138,7 @@ http_auth_preferences_(prefs) { } -HttpAuthHandlerNegotiate::~HttpAuthHandlerNegotiate() { -} +HttpAuthHandlerNegotiate::~HttpAuthHandlerNegotiate() = default; std::string HttpAuthHandlerNegotiate::CreateSPN(const AddressList& address_list, const GURL& origin) {
diff --git a/net/http/http_auth_handler_ntlm_portable.cc b/net/http/http_auth_handler_ntlm_portable.cc index 2251b49..140bf6c 100644 --- a/net/http/http_auth_handler_ntlm_portable.cc +++ b/net/http/http_auth_handler_ntlm_portable.cc
@@ -59,7 +59,7 @@ return OK; } -HttpAuthHandlerNTLM::~HttpAuthHandlerNTLM() {} +HttpAuthHandlerNTLM::~HttpAuthHandlerNTLM() = default; // static HttpAuthHandlerNTLM::GetMSTimeProc HttpAuthHandlerNTLM::SetGetMSTimeProc( @@ -85,9 +85,9 @@ return old_proc; } -HttpAuthHandlerNTLM::Factory::Factory() {} +HttpAuthHandlerNTLM::Factory::Factory() = default; -HttpAuthHandlerNTLM::Factory::~Factory() {} +HttpAuthHandlerNTLM::Factory::~Factory() = default; ntlm::Buffer HttpAuthHandlerNTLM::GetNextToken(const ntlm::Buffer& in_token) { // If in_token is non-empty, then assume it contains a challenge message,
diff --git a/net/http/http_auth_preferences.cc b/net/http/http_auth_preferences.cc index 64171d2..90848be 100644 --- a/net/http/http_auth_preferences.cc +++ b/net/http/http_auth_preferences.cc
@@ -54,7 +54,7 @@ security_manager_(URLSecurityManager::Create()) { } -HttpAuthPreferences::~HttpAuthPreferences() {} +HttpAuthPreferences::~HttpAuthPreferences() = default; bool HttpAuthPreferences::IsSupportedScheme(const std::string& scheme) const { return base::ContainsKey(auth_schemes_, scheme);
diff --git a/net/http/http_basic_state.cc b/net/http/http_basic_state.cc index 90a2212c..0690de6 100644 --- a/net/http/http_basic_state.cc +++ b/net/http/http_basic_state.cc
@@ -26,7 +26,7 @@ http_09_on_non_default_ports_enabled_( http_09_on_non_default_ports_enabled) {} -HttpBasicState::~HttpBasicState() {} +HttpBasicState::~HttpBasicState() = default; int HttpBasicState::Initialize(const HttpRequestInfo* request_info, RequestPriority priority,
diff --git a/net/http/http_basic_stream.cc b/net/http/http_basic_stream.cc index d47e3f3..2fc6c4e5 100644 --- a/net/http/http_basic_stream.cc +++ b/net/http/http_basic_stream.cc
@@ -21,7 +21,7 @@ using_proxy, http_09_on_non_default_ports_enabled) {} -HttpBasicStream::~HttpBasicStream() {} +HttpBasicStream::~HttpBasicStream() = default; int HttpBasicStream::InitializeStream(const HttpRequestInfo* request_info, RequestPriority priority,
diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc index 7caf85c..0653b25 100644 --- a/net/http/http_cache.cc +++ b/net/http/http_cache.cc
@@ -63,7 +63,7 @@ path_(path), max_bytes_(max_bytes) {} -HttpCache::DefaultBackend::~DefaultBackend() {} +HttpCache::DefaultBackend::~DefaultBackend() = default; // static std::unique_ptr<HttpCache::BackendFactory> HttpCache::DefaultBackend::InMemory( @@ -127,7 +127,7 @@ // open cache entries or the backend itself. struct HttpCache::PendingOp { PendingOp() : disk_entry(NULL) {} - ~PendingOp() {} + ~PendingOp() = default; // Returns the estimate of dynamically allocated memory in bytes. size_t EstimateMemoryUsage() const { @@ -172,7 +172,7 @@ entry_(NULL), callback_(cb), backend_(backend) {} - ~WorkItem() {} + ~WorkItem() = default; // Calls back the transaction with the result of the operation. void NotifyTransaction(int result, ActiveEntry* entry) { @@ -222,7 +222,7 @@ explicit MetadataWriter(HttpCache::Transaction* trans) : verified_(false), buf_len_(0), transaction_(trans) {} - ~MetadataWriter() {} + ~MetadataWriter() = default; // Implements the bulk of HttpCache::WriteMetadata. void Write(const GURL& url,
diff --git a/net/http/http_cache_lookup_manager.cc b/net/http/http_cache_lookup_manager.cc index 804c384..d3f1ef53 100644 --- a/net/http/http_cache_lookup_manager.cc +++ b/net/http/http_cache_lookup_manager.cc
@@ -33,7 +33,7 @@ net_log, NetLogSourceType::SERVER_PUSH_LOOKUP_TRANSACTION)) {} -HttpCacheLookupManager::LookupTransaction::~LookupTransaction() {} +HttpCacheLookupManager::LookupTransaction::~LookupTransaction() = default; int HttpCacheLookupManager::LookupTransaction::StartLookup( HttpCache* cache, @@ -62,7 +62,7 @@ HttpCacheLookupManager::HttpCacheLookupManager(HttpCache* http_cache) : http_cache_(http_cache), weak_factory_(this) {} -HttpCacheLookupManager::~HttpCacheLookupManager() {} +HttpCacheLookupManager::~HttpCacheLookupManager() = default; void HttpCacheLookupManager::OnPush( std::unique_ptr<ServerPushHelper> push_helper,
diff --git a/net/http/http_cache_unittest.cc b/net/http/http_cache_unittest.cc index 883575c..4a6fbe8 100644 --- a/net/http/http_cache_unittest.cc +++ b/net/http/http_cache_unittest.cc
@@ -341,7 +341,7 @@ FastTransactionServer() { no_store = false; } - ~FastTransactionServer() {} + ~FastTransactionServer() = default; void set_no_store(bool value) { no_store = value; } @@ -639,7 +639,7 @@ class FakeWebSocketHandshakeStreamCreateHelper : public WebSocketHandshakeStreamBase::CreateHelper { public: - ~FakeWebSocketHandshakeStreamCreateHelper() override {} + ~FakeWebSocketHandshakeStreamCreateHelper() override = default; std::unique_ptr<WebSocketHandshakeStreamBase> CreateBasicStream( std::unique_ptr<ClientSocketHandle> connect, bool using_proxy) override {
diff --git a/net/http/http_cache_writers.cc b/net/http/http_cache_writers.cc index 7c348381..0fcf1c6a 100644 --- a/net/http/http_cache_writers.cc +++ b/net/http/http_cache_writers.cc
@@ -50,7 +50,7 @@ HttpCache::Writers::Writers(HttpCache* cache, HttpCache::ActiveEntry* entry) : cache_(cache), entry_(entry), weak_factory_(this) {} -HttpCache::Writers::~Writers() {} +HttpCache::Writers::~Writers() = default; int HttpCache::Writers::Read(scoped_refptr<IOBuffer> buf, int buf_len, @@ -323,7 +323,7 @@ DCHECK(!consumer_callback.is_null()); } -HttpCache::Writers::WaitingForRead::~WaitingForRead() {} +HttpCache::Writers::WaitingForRead::~WaitingForRead() = default; HttpCache::Writers::WaitingForRead::WaitingForRead(const WaitingForRead&) = default;
diff --git a/net/http/http_cache_writers_unittest.cc b/net/http/http_cache_writers_unittest.cc index 911cd2b2..cb05ec4 100644 --- a/net/http/http_cache_writers_unittest.cc +++ b/net/http/http_cache_writers_unittest.cc
@@ -33,7 +33,8 @@ public: TestHttpCacheTransaction(RequestPriority priority, HttpCache* cache) : HttpCache::Transaction(priority, cache){}; - ~TestHttpCacheTransaction() override{}; + ~TestHttpCacheTransaction() override = default; + ; Transaction::Mode mode() const override { return Transaction::READ_WRITE; } };
diff --git a/net/http/http_content_disposition.cc b/net/http/http_content_disposition.cc index 05f3e193..da72593 100644 --- a/net/http/http_content_disposition.cc +++ b/net/http/http_content_disposition.cc
@@ -339,8 +339,7 @@ Parse(header, referrer_charset); } -HttpContentDisposition::~HttpContentDisposition() { -} +HttpContentDisposition::~HttpContentDisposition() = default; std::string::const_iterator HttpContentDisposition::ConsumeDispositionType( std::string::const_iterator begin, std::string::const_iterator end) {
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc index 3d8b9d51..bcced4e 100644 --- a/net/http/http_network_session.cc +++ b/net/http/http_network_session.cc
@@ -138,7 +138,7 @@ HttpNetworkSession::Params::Params(const Params& other) = default; -HttpNetworkSession::Params::~Params() {} +HttpNetworkSession::Params::~Params() = default; HttpNetworkSession::Context::Context() : client_socket_factory(nullptr), @@ -162,7 +162,7 @@ HttpNetworkSession::Context::Context(const Context& other) = default; -HttpNetworkSession::Context::~Context() {} +HttpNetworkSession::Context::~Context() = default; // TODO(mbelshe): Move the socket factories into HttpStreamFactory. HttpNetworkSession::HttpNetworkSession(const Params& params,
diff --git a/net/http/http_network_session_peer.cc b/net/http/http_network_session_peer.cc index 4a42dc2..9b33d98 100644 --- a/net/http/http_network_session_peer.cc +++ b/net/http/http_network_session_peer.cc
@@ -17,7 +17,7 @@ HttpNetworkSessionPeer::HttpNetworkSessionPeer(HttpNetworkSession* session) : session_(session) {} -HttpNetworkSessionPeer::~HttpNetworkSessionPeer() {} +HttpNetworkSessionPeer::~HttpNetworkSessionPeer() = default; void HttpNetworkSessionPeer::SetClientSocketPoolManager( std::unique_ptr<ClientSocketPoolManager> socket_pool_manager) {
diff --git a/net/http/http_network_transaction_ssl_unittest.cc b/net/http/http_network_transaction_ssl_unittest.cc index b61a1e2..76f5e8c8 100644 --- a/net/http/http_network_transaction_ssl_unittest.cc +++ b/net/http/http_network_transaction_ssl_unittest.cc
@@ -46,7 +46,7 @@ void GetSSLConfig(SSLConfig* config) override { *config = ssl_config_; } private: - ~TokenBindingSSLConfigService() override {} + ~TokenBindingSSLConfigService() override = default; SSLConfig ssl_config_; };
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc index dc821cf..615019cc 100644 --- a/net/http/http_network_transaction_unittest.cc +++ b/net/http/http_network_transaction_unittest.cc
@@ -10183,8 +10183,8 @@ TEST_F(HttpNetworkTransactionTest, CancelDuringInitRequestBody) { class FakeUploadElementReader : public UploadElementReader { public: - FakeUploadElementReader() {} - ~FakeUploadElementReader() override {} + FakeUploadElementReader() = default; + ~FakeUploadElementReader() override = default; const CompletionCallback& callback() const { return callback_; } @@ -11513,8 +11513,8 @@ class CapturingProxyResolver : public ProxyResolver { public: - CapturingProxyResolver() {} - ~CapturingProxyResolver() override {} + CapturingProxyResolver() = default; + ~CapturingProxyResolver() override = default; int GetProxyForURL(const GURL& url, ProxyInfo* results, @@ -13061,7 +13061,7 @@ public: explicit UrlRecordingHttpAuthHandlerMock(GURL* url) : url_(url) {} - ~UrlRecordingHttpAuthHandlerMock() override {} + ~UrlRecordingHttpAuthHandlerMock() override = default; protected: int GenerateAuthTokenImpl(const AuthCredentials* credentials, @@ -14263,7 +14263,7 @@ public: explicit OneTimeCachingHostResolver(const HostPortPair& host_port) : MockHostResolverBase(/* use_caching = */ true), host_port_(host_port) {} - ~OneTimeCachingHostResolver() override {} + ~OneTimeCachingHostResolver() override = default; int ResolveFromCache(const RequestInfo& info, AddressList* addresses, @@ -15425,7 +15425,7 @@ public base::SupportsWeakPtr<FakeStream> { public: explicit FakeStream(RequestPriority priority) : priority_(priority) {} - ~FakeStream() override {} + ~FakeStream() override = default; RequestPriority priority() const { return priority_; } @@ -15541,7 +15541,7 @@ delegate_(delegate), websocket_stream_create_helper_(create_helper) {} - ~FakeStreamRequest() override {} + ~FakeStreamRequest() override = default; RequestPriority priority() const { return priority_; } @@ -15595,8 +15595,8 @@ // Fake HttpStreamFactory that vends FakeStreamRequests. class FakeStreamFactory : public HttpStreamFactory { public: - FakeStreamFactory() {} - ~FakeStreamFactory() override {} + FakeStreamFactory() = default; + ~FakeStreamFactory() override = default; // Returns a WeakPtr<> to the last HttpStreamRequest returned by // RequestStream() (which may be NULL if it was destroyed already). @@ -15798,7 +15798,7 @@ std::move(connection), using_proxy); } - ~FakeWebSocketStreamCreateHelper() override {} + ~FakeWebSocketStreamCreateHelper() override = default; virtual std::unique_ptr<WebSocketStream> Upgrade() { NOTREACHED();
diff --git a/net/http/http_proxy_client_socket_pool.cc b/net/http/http_proxy_client_socket_pool.cc index 6dabad1..ab7bbb3 100644 --- a/net/http/http_proxy_client_socket_pool.cc +++ b/net/http/http_proxy_client_socket_pool.cc
@@ -115,7 +115,7 @@ } } -HttpProxySocketParams::~HttpProxySocketParams() {} +HttpProxySocketParams::~HttpProxySocketParams() = default; HttpProxyConnectJob::HttpProxyConnectJob( const std::string& group_name, @@ -156,7 +156,7 @@ params->proxy_delegate(), this->net_log())) {} -HttpProxyConnectJob::~HttpProxyConnectJob() {} +HttpProxyConnectJob::~HttpProxyConnectJob() = default; LoadState HttpProxyConnectJob::GetLoadState() const { return client_socket_->GetConnectLoadState(); @@ -285,8 +285,7 @@ base_.AddLowerLayeredPool(ssl_pool_); } -HttpProxyClientSocketPool::~HttpProxyClientSocketPool() { -} +HttpProxyClientSocketPool::~HttpProxyClientSocketPool() = default; int HttpProxyClientSocketPool::RequestSocket(const std::string& group_name, const void* socket_params,
diff --git a/net/http/http_proxy_client_socket_pool_unittest.cc b/net/http/http_proxy_client_socket_pool_unittest.cc index 39eb4e14..2cf01c15 100644 --- a/net/http/http_proxy_client_socket_pool_unittest.cc +++ b/net/http/http_proxy_client_socket_pool_unittest.cc
@@ -92,7 +92,7 @@ session_ = CreateNetworkSession(); } - virtual ~HttpProxyClientSocketPoolTest() {} + virtual ~HttpProxyClientSocketPoolTest() = default; // Initializes the field trial paramters for the field trial that determines // connection timeout based on the network quality.
diff --git a/net/http/http_proxy_client_socket_wrapper_unittest.cc b/net/http/http_proxy_client_socket_wrapper_unittest.cc index bff691c..63398086 100644 --- a/net/http/http_proxy_client_socket_wrapper_unittest.cc +++ b/net/http/http_proxy_client_socket_wrapper_unittest.cc
@@ -43,12 +43,12 @@ class MockSSLConfigService : public SSLConfigService { public: - MockSSLConfigService() {} + MockSSLConfigService() = default; void GetSSLConfig(SSLConfig* config) override { *config = config_; } private: - ~MockSSLConfigService() override {} + ~MockSSLConfigService() override = default; SSLConfig config_; };
diff --git a/net/http/http_request_headers.cc b/net/http/http_request_headers.cc index cf9433e..49881ea 100644 --- a/net/http/http_request_headers.cc +++ b/net/http/http_request_headers.cc
@@ -44,8 +44,7 @@ const char HttpRequestHeaders::kTokenBinding[] = "Sec-Token-Binding"; const char HttpRequestHeaders::kUserAgent[] = "User-Agent"; -HttpRequestHeaders::HeaderKeyValuePair::HeaderKeyValuePair() { -} +HttpRequestHeaders::HeaderKeyValuePair::HeaderKeyValuePair() = default; HttpRequestHeaders::HeaderKeyValuePair::HeaderKeyValuePair( const base::StringPiece& key, const base::StringPiece& value) @@ -58,7 +57,7 @@ curr_(headers.headers_.begin()), end_(headers.headers_.end()) {} -HttpRequestHeaders::Iterator::~Iterator() {} +HttpRequestHeaders::Iterator::~Iterator() = default; bool HttpRequestHeaders::Iterator::GetNext() { if (!started_) { @@ -73,10 +72,10 @@ return curr_ != end_; } -HttpRequestHeaders::HttpRequestHeaders() {} +HttpRequestHeaders::HttpRequestHeaders() = default; HttpRequestHeaders::HttpRequestHeaders(const HttpRequestHeaders& other) = default; -HttpRequestHeaders::~HttpRequestHeaders() {} +HttpRequestHeaders::~HttpRequestHeaders() = default; bool HttpRequestHeaders::GetHeader(const base::StringPiece& key, std::string* out) const {
diff --git a/net/http/http_request_info.cc b/net/http/http_request_info.cc index d51d3d0..8b0c010c 100644 --- a/net/http/http_request_info.cc +++ b/net/http/http_request_info.cc
@@ -15,6 +15,6 @@ HttpRequestInfo::HttpRequestInfo(const HttpRequestInfo& other) = default; -HttpRequestInfo::~HttpRequestInfo() {} +HttpRequestInfo::~HttpRequestInfo() = default; } // namespace net
diff --git a/net/http/http_response_body_drainer.cc b/net/http/http_response_body_drainer.cc index 4091c85..d6ad2a4 100644 --- a/net/http/http_response_body_drainer.cc +++ b/net/http/http_response_body_drainer.cc
@@ -20,7 +20,7 @@ total_read_(0), session_(NULL) {} -HttpResponseBodyDrainer::~HttpResponseBodyDrainer() {} +HttpResponseBodyDrainer::~HttpResponseBodyDrainer() = default; void HttpResponseBodyDrainer::Start(HttpNetworkSession* session) { read_buf_ = new IOBuffer(kDrainBodyBufferSize);
diff --git a/net/http/http_response_body_drainer_unittest.cc b/net/http/http_response_body_drainer_unittest.cc index 422b5b9..9c5dfa8 100644 --- a/net/http/http_response_body_drainer_unittest.cc +++ b/net/http/http_response_body_drainer_unittest.cc
@@ -84,7 +84,7 @@ is_complete_(false), can_reuse_connection_(true), weak_factory_(this) {} - ~MockHttpStream() override {} + ~MockHttpStream() override = default; // HttpStream implementation. int InitializeStream(const HttpRequestInfo* request_info, @@ -243,7 +243,7 @@ mock_stream_(new MockHttpStream(&result_waiter_)), drainer_(new HttpResponseBodyDrainer(mock_stream_)) {} - ~HttpResponseBodyDrainerTest() override {} + ~HttpResponseBodyDrainerTest() override = default; HttpNetworkSession* CreateNetworkSession() { HttpNetworkSession::Context context;
diff --git a/net/http/http_response_headers.cc b/net/http/http_response_headers.cc index 85d321d2..59a8dd9 100644 --- a/net/http/http_response_headers.cc +++ b/net/http/http_response_headers.cc
@@ -582,8 +582,7 @@ return FindHeader(0, name) != std::string::npos; } -HttpResponseHeaders::~HttpResponseHeaders() { -} +HttpResponseHeaders::~HttpResponseHeaders() = default; // Note: this implementation implicitly assumes that line_end points at a valid // sentinel character (such as '\0').
diff --git a/net/http/http_response_info.cc b/net/http/http_response_info.cc index 21dd793a..35993f3 100644 --- a/net/http/http_response_info.cc +++ b/net/http/http_response_info.cc
@@ -120,56 +120,12 @@ unused_since_prefetch(false), connection_info(CONNECTION_INFO_UNKNOWN) {} -HttpResponseInfo::HttpResponseInfo(const HttpResponseInfo& rhs) - : was_cached(rhs.was_cached), - cache_entry_status(rhs.cache_entry_status), - server_data_unavailable(rhs.server_data_unavailable), - network_accessed(rhs.network_accessed), - was_fetched_via_spdy(rhs.was_fetched_via_spdy), - was_alpn_negotiated(rhs.was_alpn_negotiated), - was_fetched_via_proxy(rhs.was_fetched_via_proxy), - proxy_server(rhs.proxy_server), - did_use_http_auth(rhs.did_use_http_auth), - unused_since_prefetch(rhs.unused_since_prefetch), - socket_address(rhs.socket_address), - alpn_negotiated_protocol(rhs.alpn_negotiated_protocol), - connection_info(rhs.connection_info), - request_time(rhs.request_time), - response_time(rhs.response_time), - auth_challenge(rhs.auth_challenge), - cert_request_info(rhs.cert_request_info), - ssl_info(rhs.ssl_info), - headers(rhs.headers), - vary_data(rhs.vary_data), - metadata(rhs.metadata) {} +HttpResponseInfo::HttpResponseInfo(const HttpResponseInfo& rhs) = default; -HttpResponseInfo::~HttpResponseInfo() { -} +HttpResponseInfo::~HttpResponseInfo() = default; -HttpResponseInfo& HttpResponseInfo::operator=(const HttpResponseInfo& rhs) { - was_cached = rhs.was_cached; - cache_entry_status = rhs.cache_entry_status; - server_data_unavailable = rhs.server_data_unavailable; - network_accessed = rhs.network_accessed; - was_fetched_via_spdy = rhs.was_fetched_via_spdy; - proxy_server = rhs.proxy_server; - was_alpn_negotiated = rhs.was_alpn_negotiated; - was_fetched_via_proxy = rhs.was_fetched_via_proxy; - did_use_http_auth = rhs.did_use_http_auth; - unused_since_prefetch = rhs.unused_since_prefetch; - socket_address = rhs.socket_address; - alpn_negotiated_protocol = rhs.alpn_negotiated_protocol; - connection_info = rhs.connection_info; - request_time = rhs.request_time; - response_time = rhs.response_time; - auth_challenge = rhs.auth_challenge; - cert_request_info = rhs.cert_request_info; - ssl_info = rhs.ssl_info; - headers = rhs.headers; - vary_data = rhs.vary_data; - metadata = rhs.metadata; - return *this; -} +HttpResponseInfo& HttpResponseInfo::operator=(const HttpResponseInfo& rhs) = + default; bool HttpResponseInfo::InitFromPickle(const base::Pickle& pickle, bool* response_truncated) {
diff --git a/net/http/http_server_properties.cc b/net/http/http_server_properties.cc index b28084586..7abba85 100644 --- a/net/http/http_server_properties.cc +++ b/net/http/http_server_properties.cc
@@ -101,7 +101,7 @@ AlternativeServiceInfo::AlternativeServiceInfo() : alternative_service_() {} -AlternativeServiceInfo::~AlternativeServiceInfo() {} +AlternativeServiceInfo::~AlternativeServiceInfo() = default; AlternativeServiceInfo::AlternativeServiceInfo( const AlternativeService& alternative_service,
diff --git a/net/http/http_server_properties_manager.cc b/net/http/http_server_properties_manager.cc index c7bb25b..38948714 100644 --- a/net/http/http_server_properties_manager.cc +++ b/net/http/http_server_properties_manager.cc
@@ -91,7 +91,7 @@ //////////////////////////////////////////////////////////////////////////////// // HttpServerPropertiesManager -HttpServerPropertiesManager::PrefDelegate::~PrefDelegate() {} +HttpServerPropertiesManager::PrefDelegate::~PrefDelegate() = default; HttpServerPropertiesManager::HttpServerPropertiesManager( std::unique_ptr<PrefDelegate> pref_delegate,
diff --git a/net/http/http_server_properties_manager_unittest.cc b/net/http/http_server_properties_manager_unittest.cc index 0c5484da..e5eea96 100644 --- a/net/http/http_server_properties_manager_unittest.cc +++ b/net/http/http_server_properties_manager_unittest.cc
@@ -39,8 +39,8 @@ class MockPrefDelegate : public net::HttpServerPropertiesManager::PrefDelegate { public: - MockPrefDelegate() {} - ~MockPrefDelegate() override {} + MockPrefDelegate() = default; + ~MockPrefDelegate() override = default; // HttpServerPropertiesManager::PrefDelegate implementation. const base::DictionaryValue* GetServerProperties() const override {
diff --git a/net/http/http_stream_factory.cc b/net/http/http_stream_factory.cc index 6a8cfa6..077ec56c 100644 --- a/net/http/http_stream_factory.cc +++ b/net/http/http_stream_factory.cc
@@ -22,7 +22,7 @@ namespace net { -HttpStreamFactory::~HttpStreamFactory() {} +HttpStreamFactory::~HttpStreamFactory() = default; void HttpStreamFactory::ProcessAlternativeServices( HttpNetworkSession* session, @@ -84,7 +84,7 @@ RewriteHost(http_server), alternative_service_info_vector); } -HttpStreamFactory::HttpStreamFactory() {} +HttpStreamFactory::HttpStreamFactory() = default; url::SchemeHostPort HttpStreamFactory::RewriteHost( const url::SchemeHostPort& server) {
diff --git a/net/http/http_stream_factory_impl_job.cc b/net/http/http_stream_factory_impl_job.cc index e344d9b..8b1a2a4 100644 --- a/net/http/http_stream_factory_impl_job.cc +++ b/net/http/http_stream_factory_impl_job.cc
@@ -1456,9 +1456,9 @@ delegate_->AddConnectionAttemptsToRequest(this, socket_attempts); } -HttpStreamFactoryImpl::JobFactory::JobFactory() {} +HttpStreamFactoryImpl::JobFactory::JobFactory() = default; -HttpStreamFactoryImpl::JobFactory::~JobFactory() {} +HttpStreamFactoryImpl::JobFactory::~JobFactory() = default; std::unique_ptr<HttpStreamFactoryImpl::Job> HttpStreamFactoryImpl::JobFactory::CreateMainJob(
diff --git a/net/http/http_stream_factory_impl_job_controller_unittest.cc b/net/http/http_stream_factory_impl_job_controller_unittest.cc index 43c03f7f..ac8124de 100644 --- a/net/http/http_stream_factory_impl_job_controller_unittest.cc +++ b/net/http/http_stream_factory_impl_job_controller_unittest.cc
@@ -91,7 +91,7 @@ class FailingHostResolver : public MockHostResolverBase { public: FailingHostResolver() : MockHostResolverBase(false /*use_caching*/) {} - ~FailingHostResolver() override {} + ~FailingHostResolver() override = default; int Resolve(const RequestInfo& info, RequestPriority priority, @@ -108,7 +108,7 @@ class HangingResolver : public MockHostResolverBase { public: HangingResolver() : MockHostResolverBase(false /*use_caching*/) {} - ~HangingResolver() override {} + ~HangingResolver() override = default; int Resolve(const RequestInfo& info, RequestPriority priority, @@ -123,8 +123,8 @@ // A mock HttpServerProperties that always returns false for IsInitialized(). class MockHttpServerProperties : public HttpServerPropertiesImpl { public: - MockHttpServerProperties() {} - ~MockHttpServerProperties() override {} + MockHttpServerProperties() = default; + ~MockHttpServerProperties() override = default; bool IsInitialized() const override { return false; } };
diff --git a/net/http/http_stream_factory_impl_unittest.cc b/net/http/http_stream_factory_impl_unittest.cc index 5c3a0a0..b6a1a48 100644 --- a/net/http/http_stream_factory_impl_unittest.cc +++ b/net/http/http_stream_factory_impl_unittest.cc
@@ -91,7 +91,7 @@ explicit MockWebSocketHandshakeStream(StreamType type) : type_(type) {} - ~MockWebSocketHandshakeStream() override {} + ~MockWebSocketHandshakeStream() override = default; StreamType type() const { return type_; @@ -318,7 +318,7 @@ class WebSocketStreamCreateHelper : public WebSocketHandshakeStreamBase::CreateHelper { public: - ~WebSocketStreamCreateHelper() override {} + ~WebSocketStreamCreateHelper() override = default; std::unique_ptr<WebSocketHandshakeStreamBase> CreateBasicStream( std::unique_ptr<ClientSocketHandle> connection, @@ -835,7 +835,7 @@ public: MockQuicData() : packet_number_(0) {} - ~MockQuicData() {} + ~MockQuicData() = default; void AddRead(std::unique_ptr<QuicEncryptedPacket> packet) { reads_.push_back(
diff --git a/net/http/http_stream_factory_test_util.cc b/net/http/http_stream_factory_test_util.cc index fff12f7..264030e 100644 --- a/net/http/http_stream_factory_test_util.cc +++ b/net/http/http_stream_factory_test_util.cc
@@ -11,9 +11,9 @@ using ::testing::_; namespace net { -MockHttpStreamRequestDelegate::MockHttpStreamRequestDelegate() {} +MockHttpStreamRequestDelegate::MockHttpStreamRequestDelegate() = default; -MockHttpStreamRequestDelegate::~MockHttpStreamRequestDelegate() {} +MockHttpStreamRequestDelegate::~MockHttpStreamRequestDelegate() = default; MockHttpStreamFactoryImplJob::MockHttpStreamFactoryImplJob( HttpStreamFactoryImpl::Job::Delegate* delegate, @@ -49,14 +49,14 @@ DCHECK(!is_waiting()); } -MockHttpStreamFactoryImplJob::~MockHttpStreamFactoryImplJob() {} +MockHttpStreamFactoryImplJob::~MockHttpStreamFactoryImplJob() = default; TestJobFactory::TestJobFactory() : main_job_(nullptr), alternative_job_(nullptr), override_main_job_url_(false) {} -TestJobFactory::~TestJobFactory() {} +TestJobFactory::~TestJobFactory() = default; std::unique_ptr<HttpStreamFactoryImpl::Job> TestJobFactory::CreateMainJob( HttpStreamFactoryImpl::Job::Delegate* delegate,
diff --git a/net/http/http_stream_parser.cc b/net/http/http_stream_parser.cc index 1d5dec49..ced3da36 100644 --- a/net/http/http_stream_parser.cc +++ b/net/http/http_stream_parser.cc
@@ -211,8 +211,7 @@ weak_ptr_factory_.GetWeakPtr()); } -HttpStreamParser::~HttpStreamParser() { -} +HttpStreamParser::~HttpStreamParser() = default; int HttpStreamParser::SendRequest(const std::string& request_line, const HttpRequestHeaders& headers,
diff --git a/net/http/http_transaction_test_util.cc b/net/http/http_transaction_test_util.cc index 8a481e0..9ab28f7 100644 --- a/net/http/http_transaction_test_util.cc +++ b/net/http/http_transaction_test_util.cc
@@ -189,8 +189,7 @@ ++quit_counter_; } -TestTransactionConsumer::~TestTransactionConsumer() { -} +TestTransactionConsumer::~TestTransactionConsumer() = default; void TestTransactionConsumer::Start(const HttpRequestInfo* request, const NetLogWithSource& net_log) { @@ -558,7 +557,7 @@ clock_(nullptr) { } -MockNetworkLayer::~MockNetworkLayer() {} +MockNetworkLayer::~MockNetworkLayer() = default; void MockNetworkLayer::TransactionDoneReading() { CHECK(!done_reading_called_);
diff --git a/net/http/http_util.cc b/net/http/http_util.cc index 0bf40c3..9361272 100644 --- a/net/http/http_util.cc +++ b/net/http/http_util.cc
@@ -870,8 +870,7 @@ : lines_(headers_begin, headers_end, line_delimiter) { } -HttpUtil::HeadersIterator::~HeadersIterator() { -} +HttpUtil::HeadersIterator::~HeadersIterator() = default; bool HttpUtil::HeadersIterator::GetNext() { while (lines_.GetNext()) { @@ -929,8 +928,7 @@ HttpUtil::ValuesIterator::ValuesIterator(const ValuesIterator& other) = default; -HttpUtil::ValuesIterator::~ValuesIterator() { -} +HttpUtil::ValuesIterator::~ValuesIterator() = default; bool HttpUtil::ValuesIterator::GetNext() { while (values_.GetNext()) { @@ -977,7 +975,7 @@ HttpUtil::NameValuePairsIterator::NameValuePairsIterator( const NameValuePairsIterator& other) = default; -HttpUtil::NameValuePairsIterator::~NameValuePairsIterator() {} +HttpUtil::NameValuePairsIterator::~NameValuePairsIterator() = default; // We expect properties to be formatted as one of: // name="value"
diff --git a/net/http/mock_allow_http_auth_preferences.cc b/net/http/mock_allow_http_auth_preferences.cc index 12a4867..12ccfe2 100644 --- a/net/http/mock_allow_http_auth_preferences.cc +++ b/net/http/mock_allow_http_auth_preferences.cc
@@ -7,9 +7,9 @@ namespace net { -MockAllowHttpAuthPreferences::MockAllowHttpAuthPreferences() {} +MockAllowHttpAuthPreferences::MockAllowHttpAuthPreferences() = default; -MockAllowHttpAuthPreferences::~MockAllowHttpAuthPreferences() {} +MockAllowHttpAuthPreferences::~MockAllowHttpAuthPreferences() = default; bool MockAllowHttpAuthPreferences::CanUseDefaultCredentials( const GURL& auth_origin) const {
diff --git a/net/http/mock_gssapi_library_posix.cc b/net/http/mock_gssapi_library_posix.cc index 2e4c3c11..b129f2e 100644 --- a/net/http/mock_gssapi_library_posix.cc +++ b/net/http/mock_gssapi_library_posix.cc
@@ -229,13 +229,11 @@ MockGSSAPILibrary::SecurityContextQuery::SecurityContextQuery( const SecurityContextQuery& other) = default; -MockGSSAPILibrary::SecurityContextQuery::~SecurityContextQuery() {} +MockGSSAPILibrary::SecurityContextQuery::~SecurityContextQuery() = default; -MockGSSAPILibrary::MockGSSAPILibrary() { -} +MockGSSAPILibrary::MockGSSAPILibrary() = default; -MockGSSAPILibrary::~MockGSSAPILibrary() { -} +MockGSSAPILibrary::~MockGSSAPILibrary() = default; void MockGSSAPILibrary::ExpectSecurityContext( const std::string& expected_package,
diff --git a/net/http/mock_http_cache.cc b/net/http/mock_http_cache.cc index f1cb3a27..8c940f3 100644 --- a/net/http/mock_http_cache.cc +++ b/net/http/mock_http_cache.cc
@@ -328,8 +328,7 @@ StoreAndDeliverCallbacks(false, NULL, CompletionCallback(), 0); } -MockDiskEntry::~MockDiskEntry() { -} +MockDiskEntry::~MockDiskEntry() = default; // Unlike the callbacks for MockHttpTransaction, we want this one to run even // if the consumer called Close on the MockDiskEntry. We achieve that by @@ -779,8 +778,7 @@ fail_(false) { } -MockBlockingBackendFactory::~MockBlockingBackendFactory() { -} +MockBlockingBackendFactory::~MockBlockingBackendFactory() = default; int MockBlockingBackendFactory::CreateBackend( NetLog* net_log,
diff --git a/net/http/partial_data.cc b/net/http/partial_data.cc index dceea25b..7243fcf 100644 --- a/net/http/partial_data.cc +++ b/net/http/partial_data.cc
@@ -43,8 +43,7 @@ weak_factory_(this) { } -PartialData::~PartialData() { -} +PartialData::~PartialData() = default; bool PartialData::Init(const HttpRequestHeaders& headers) { std::string range_header;
diff --git a/net/http/proxy_connect_redirect_http_stream.cc b/net/http/proxy_connect_redirect_http_stream.cc index 26e5b6a..2fc8eb8 100644 --- a/net/http/proxy_connect_redirect_http_stream.cc +++ b/net/http/proxy_connect_redirect_http_stream.cc
@@ -18,7 +18,7 @@ load_timing_info_ = *load_timing_info; } -ProxyConnectRedirectHttpStream::~ProxyConnectRedirectHttpStream() {} +ProxyConnectRedirectHttpStream::~ProxyConnectRedirectHttpStream() = default; int ProxyConnectRedirectHttpStream::InitializeStream( const HttpRequestInfo* request_info,
diff --git a/net/http/transport_security_persister_unittest.cc b/net/http/transport_security_persister_unittest.cc index b742353..3ad2988 100644 --- a/net/http/transport_security_persister_unittest.cc +++ b/net/http/transport_security_persister_unittest.cc
@@ -27,8 +27,7 @@ class TransportSecurityPersisterTest : public testing::Test { public: - TransportSecurityPersisterTest() { - } + TransportSecurityPersisterTest() = default; ~TransportSecurityPersisterTest() override { EXPECT_TRUE(base::MessageLoopForIO::IsCurrent());
diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_state.cc index 425b387..a433afd 100644 --- a/net/http/transport_security_state.cc +++ b/net/http/transport_security_state.cc
@@ -1775,8 +1775,7 @@ : upgrade_mode(MODE_DEFAULT), include_subdomains(false) { } -TransportSecurityState::STSState::~STSState() { -} +TransportSecurityState::STSState::~STSState() = default; bool TransportSecurityState::STSState::ShouldUpgradeToSSL() const { return upgrade_mode == MODE_FORCE_HTTPS; @@ -1788,20 +1787,18 @@ end_(state.enabled_sts_hosts_.end()) { } -TransportSecurityState::STSStateIterator::~STSStateIterator() { -} +TransportSecurityState::STSStateIterator::~STSStateIterator() = default; TransportSecurityState::PKPState::PKPState() : include_subdomains(false) { } TransportSecurityState::PKPState::PKPState(const PKPState& other) = default; -TransportSecurityState::PKPState::~PKPState() { -} +TransportSecurityState::PKPState::~PKPState() = default; TransportSecurityState::ExpectCTState::ExpectCTState() : enforce(false) {} -TransportSecurityState::ExpectCTState::~ExpectCTState() {} +TransportSecurityState::ExpectCTState::~ExpectCTState() = default; TransportSecurityState::ExpectCTStateIterator::ExpectCTStateIterator( const TransportSecurityState& state) @@ -1810,12 +1807,13 @@ state.AssertCalledOnValidThread(); } -TransportSecurityState::ExpectCTStateIterator::~ExpectCTStateIterator() {} +TransportSecurityState::ExpectCTStateIterator::~ExpectCTStateIterator() = + default; TransportSecurityState::ExpectStapleState::ExpectStapleState() : include_subdomains(false) {} -TransportSecurityState::ExpectStapleState::~ExpectStapleState() {} +TransportSecurityState::ExpectStapleState::~ExpectStapleState() = default; bool TransportSecurityState::PKPState::CheckPublicKeyPins( const HashValueVector& hashes, @@ -1862,7 +1860,6 @@ end_(state.enabled_pkp_hosts_.end()) { } -TransportSecurityState::PKPStateIterator::~PKPStateIterator() { -} +TransportSecurityState::PKPStateIterator::~PKPStateIterator() = default; } // namespace net
diff --git a/net/http/transport_security_state_unittest.cc b/net/http/transport_security_state_unittest.cc index 373e176..d7a0df2 100644 --- a/net/http/transport_security_state_unittest.cc +++ b/net/http/transport_security_state_unittest.cc
@@ -113,8 +113,8 @@ class MockCertificateReportSender : public TransportSecurityState::ReportSenderInterface { public: - MockCertificateReportSender() {} - ~MockCertificateReportSender() override {} + MockCertificateReportSender() = default; + ~MockCertificateReportSender() override = default; void Send(const GURL& report_uri, base::StringPiece content_type, @@ -148,7 +148,7 @@ : public TransportSecurityState::ReportSenderInterface { public: MockFailingCertificateReportSender() : net_error_(ERR_CONNECTION_FAILED) {} - ~MockFailingCertificateReportSender() override {} + ~MockFailingCertificateReportSender() override = default; int net_error() { return net_error_; } @@ -172,7 +172,7 @@ class MockExpectCTReporter : public TransportSecurityState::ExpectCTReporter { public: MockExpectCTReporter() : num_failures_(0) {} - ~MockExpectCTReporter() override {} + ~MockExpectCTReporter() override = default; void OnExpectCTFailed(const HostPortPair& host_port_pair, const GURL& report_uri,
diff --git a/net/http/url_security_manager.cc b/net/http/url_security_manager.cc index 0d992919..9c94243 100644 --- a/net/http/url_security_manager.cc +++ b/net/http/url_security_manager.cc
@@ -10,9 +10,9 @@ namespace net { -URLSecurityManagerWhitelist::URLSecurityManagerWhitelist() {} +URLSecurityManagerWhitelist::URLSecurityManagerWhitelist() = default; -URLSecurityManagerWhitelist::~URLSecurityManagerWhitelist() {} +URLSecurityManagerWhitelist::~URLSecurityManagerWhitelist() = default; bool URLSecurityManagerWhitelist::CanUseDefaultCredentials( const GURL& auth_origin) const {
diff --git a/net/network_error_logging/network_error_logging_service.cc b/net/network_error_logging/network_error_logging_service.cc index bb2b152..b1773129 100644 --- a/net/network_error_logging/network_error_logging_service.cc +++ b/net/network_error_logging/network_error_logging_service.cc
@@ -134,7 +134,7 @@ return base::WrapUnique(new NetworkErrorLoggingService()); } -NetworkErrorLoggingService::~NetworkErrorLoggingService() {} +NetworkErrorLoggingService::~NetworkErrorLoggingService() = default; void NetworkErrorLoggingService::SetReportingService( ReportingService* reporting_service) {
diff --git a/net/network_error_logging/network_error_logging_service_unittest.cc b/net/network_error_logging/network_error_logging_service_unittest.cc index a41d2b1..e7192e0f 100644 --- a/net/network_error_logging/network_error_logging_service_unittest.cc +++ b/net/network_error_logging/network_error_logging_service_unittest.cc
@@ -29,7 +29,7 @@ class TestReportingService : public ReportingService { public: struct Report { - Report() {} + Report() = default; Report(Report&& other) : url(other.url), @@ -43,7 +43,7 @@ std::unique_ptr<const base::Value> body) : url(url), group(group), type(type), body(std::move(body)) {} - ~Report() {} + ~Report() = default; GURL url; std::string group; @@ -54,13 +54,13 @@ DISALLOW_COPY(Report); }; - TestReportingService() {} + TestReportingService() = default; const std::vector<Report>& reports() const { return reports_; } // ReportingService implementation: - ~TestReportingService() override {} + ~TestReportingService() override = default; void QueueReport(const GURL& url, const std::string& group,
diff --git a/net/nqe/cached_network_quality.cc b/net/nqe/cached_network_quality.cc index 9b78de2..2343a1b 100644 --- a/net/nqe/cached_network_quality.cc +++ b/net/nqe/cached_network_quality.cc
@@ -30,7 +30,7 @@ CachedNetworkQuality::CachedNetworkQuality(const CachedNetworkQuality& other) = default; -CachedNetworkQuality::~CachedNetworkQuality() {} +CachedNetworkQuality::~CachedNetworkQuality() = default; CachedNetworkQuality& CachedNetworkQuality::operator=( const CachedNetworkQuality& other) = default;
diff --git a/net/nqe/network_id.cc b/net/nqe/network_id.cc index 18d08a19..3e5fbe5e 100644 --- a/net/nqe/network_id.cc +++ b/net/nqe/network_id.cc
@@ -33,9 +33,9 @@ const std::string& id) : type(type), id(id) {} -NetworkID::NetworkID(const NetworkID& other) : type(other.type), id(other.id) {} +NetworkID::NetworkID(const NetworkID& other) = default; -NetworkID::~NetworkID() {} +NetworkID::~NetworkID() = default; bool NetworkID::operator==(const NetworkID& other) const { return type == other.type && id == other.id; @@ -45,11 +45,7 @@ return !operator==(other); } -NetworkID& NetworkID::operator=(const NetworkID& other) { - type = other.type; - id = other.id; - return *this; -} +NetworkID& NetworkID::operator=(const NetworkID& other) = default; // Overloaded to support ordered collections. bool NetworkID::operator<(const NetworkID& other) const {
diff --git a/net/nqe/network_quality.cc b/net/nqe/network_quality.cc index f54b00b..cff98ab 100644 --- a/net/nqe/network_quality.cc +++ b/net/nqe/network_quality.cc
@@ -29,7 +29,7 @@ other.transport_rtt_, other.downstream_throughput_kbps_) {} -NetworkQuality::~NetworkQuality() {} +NetworkQuality::~NetworkQuality() = default; NetworkQuality& NetworkQuality::operator=(const NetworkQuality& other) { http_rtt_ = other.http_rtt_;
diff --git a/net/nqe/network_quality_estimator_params.cc b/net/nqe/network_quality_estimator_params.cc index c63fd8f..c393f54 100644 --- a/net/nqe/network_quality_estimator_params.cc +++ b/net/nqe/network_quality_estimator_params.cc
@@ -468,8 +468,7 @@ ObtainConnectionThresholds(params_, connection_thresholds_); } -NetworkQualityEstimatorParams::~NetworkQualityEstimatorParams() { -} +NetworkQualityEstimatorParams::~NetworkQualityEstimatorParams() = default; void NetworkQualityEstimatorParams::SetUseSmallResponsesForTesting( bool use_small_responses) {
diff --git a/net/nqe/network_quality_estimator_test_util.cc b/net/nqe/network_quality_estimator_test_util.cc index 9bcfe4d2..d9d21f7 100644 --- a/net/nqe/network_quality_estimator_test_util.cc +++ b/net/nqe/network_quality_estimator_test_util.cc
@@ -100,7 +100,7 @@ EXPECT_TRUE(embedded_test_server_.Start()); } -TestNetworkQualityEstimator::~TestNetworkQualityEstimator() {} +TestNetworkQualityEstimator::~TestNetworkQualityEstimator() = default; void TestNetworkQualityEstimator::RunOneRequest() { TestDelegate test_delegate;
diff --git a/net/nqe/network_quality_estimator_unittest.cc b/net/nqe/network_quality_estimator_unittest.cc index 7a1663d..b8854e3 100644 --- a/net/nqe/network_quality_estimator_unittest.cc +++ b/net/nqe/network_quality_estimator_unittest.cc
@@ -1358,7 +1358,7 @@ class InvalidExternalEstimateProvider : public ExternalEstimateProvider { public: InvalidExternalEstimateProvider() : update_count_(0) {} - ~InvalidExternalEstimateProvider() override {} + ~InvalidExternalEstimateProvider() override = default; void SetUpdatedEstimateDelegate(UpdatedEstimateDelegate* delegate) override {} @@ -1420,7 +1420,7 @@ downstream_throughput_kbps_(downstream_throughput_kbps), update_count_(0), cached_estimate_cleared_(false) {} - ~TestExternalEstimateProvider() override {} + ~TestExternalEstimateProvider() override = default; void SetUpdatedEstimateDelegate(UpdatedEstimateDelegate* delegate) override { delegate_ = delegate; @@ -2872,7 +2872,7 @@ : network_id_(net::NetworkChangeNotifier::CONNECTION_UNKNOWN, std::string()), notification_received_(0) {} - ~TestNetworkQualitiesCacheObserver() override {} + ~TestNetworkQualitiesCacheObserver() override = default; void OnChangeInCachedNetworkQuality( const nqe::internal::NetworkID& network_id,
diff --git a/net/nqe/network_quality_observation.cc b/net/nqe/network_quality_observation.cc index b7411304..01827d5a 100644 --- a/net/nqe/network_quality_observation.cc +++ b/net/nqe/network_quality_observation.cc
@@ -34,7 +34,7 @@ Observation& Observation::operator=(const Observation& other) = default; -Observation::~Observation() {} +Observation::~Observation() = default; ObservationCategory Observation::GetObservationCategory() const { switch (source_) {
diff --git a/net/nqe/observation_buffer.cc b/net/nqe/observation_buffer.cc index 7101e22e..beb9359 100644 --- a/net/nqe/observation_buffer.cc +++ b/net/nqe/observation_buffer.cc
@@ -39,7 +39,7 @@ DCHECK(tick_clock_); } -ObservationBuffer::~ObservationBuffer() {} +ObservationBuffer::~ObservationBuffer() = default; void ObservationBuffer::AddObservation(const Observation& observation) { DCHECK_LE(observations_.size(), params_->observation_buffer_size());
diff --git a/net/nqe/socket_watcher.cc b/net/nqe/socket_watcher.cc index 98639b7..d10508b 100644 --- a/net/nqe/socket_watcher.cc +++ b/net/nqe/socket_watcher.cc
@@ -77,7 +77,7 @@ DCHECK(last_rtt_notification_.is_null()); } -SocketWatcher::~SocketWatcher() {} +SocketWatcher::~SocketWatcher() = default; bool SocketWatcher::ShouldNotifyUpdatedRTT() const { DCHECK(thread_checker_.CalledOnValidThread());
diff --git a/net/nqe/socket_watcher_factory.cc b/net/nqe/socket_watcher_factory.cc index fb8a596..e20cb0c 100644 --- a/net/nqe/socket_watcher_factory.cc +++ b/net/nqe/socket_watcher_factory.cc
@@ -28,7 +28,7 @@ DCHECK(tick_clock_); } -SocketWatcherFactory::~SocketWatcherFactory() {} +SocketWatcherFactory::~SocketWatcherFactory() = default; std::unique_ptr<SocketPerformanceWatcher> SocketWatcherFactory::CreateSocketPerformanceWatcher(
diff --git a/net/nqe/throughput_analyzer_unittest.cc b/net/nqe/throughput_analyzer_unittest.cc index f1913e7..66432232 100644 --- a/net/nqe/throughput_analyzer_unittest.cc +++ b/net/nqe/throughput_analyzer_unittest.cc
@@ -74,7 +74,7 @@ throughput_observations_received_(0), bits_received_(0) {} - ~TestThroughputAnalyzer() override {} + ~TestThroughputAnalyzer() override = default; int32_t throughput_observations_received() const { return throughput_observations_received_;
diff --git a/net/proxy/proxy_resolver_v8_tracing.cc b/net/proxy/proxy_resolver_v8_tracing.cc index 43495b3..4e95dcd 100644 --- a/net/proxy/proxy_resolver_v8_tracing.cc +++ b/net/proxy/proxy_resolver_v8_tracing.cc
@@ -1081,8 +1081,8 @@ DISALLOW_COPY_AND_ASSIGN(CreateJob); }; -ProxyResolverV8TracingFactoryImpl::ProxyResolverV8TracingFactoryImpl() { -} +ProxyResolverV8TracingFactoryImpl::ProxyResolverV8TracingFactoryImpl() = + default; ProxyResolverV8TracingFactoryImpl::~ProxyResolverV8TracingFactoryImpl() { for (auto* job : jobs_) {
diff --git a/net/server/http_connection.cc b/net/server/http_connection.cc index 092b4e9f4..99324350 100644 --- a/net/server/http_connection.cc +++ b/net/server/http_connection.cc
@@ -156,8 +156,7 @@ read_buf_(new ReadIOBuffer()), write_buf_(new QueuedWriteIOBuffer()) {} -HttpConnection::~HttpConnection() { -} +HttpConnection::~HttpConnection() = default; void HttpConnection::SetWebSocket(std::unique_ptr<WebSocket> web_socket) { DCHECK(!web_socket_);
diff --git a/net/server/http_server.cc b/net/server/http_server.cc index a647e2ce..142c2e36 100644 --- a/net/server/http_server.cc +++ b/net/server/http_server.cc
@@ -41,8 +41,7 @@ base::Bind(&HttpServer::DoAcceptLoop, weak_ptr_factory_.GetWeakPtr())); } -HttpServer::~HttpServer() { -} +HttpServer::~HttpServer() = default; void HttpServer::AcceptWebSocket( int connection_id,
diff --git a/net/server/http_server_request_info.cc b/net/server/http_server_request_info.cc index 765ddc0..58021cf 100644 --- a/net/server/http_server_request_info.cc +++ b/net/server/http_server_request_info.cc
@@ -9,12 +9,12 @@ namespace net { -HttpServerRequestInfo::HttpServerRequestInfo() {} +HttpServerRequestInfo::HttpServerRequestInfo() = default; HttpServerRequestInfo::HttpServerRequestInfo( const HttpServerRequestInfo& other) = default; -HttpServerRequestInfo::~HttpServerRequestInfo() {} +HttpServerRequestInfo::~HttpServerRequestInfo() = default; std::string HttpServerRequestInfo::GetHeaderValue( const std::string& header_name) const {
diff --git a/net/server/http_server_response_info.cc b/net/server/http_server_response_info.cc index 7c195812..7a81025 100644 --- a/net/server/http_server_response_info.cc +++ b/net/server/http_server_response_info.cc
@@ -18,7 +18,7 @@ HttpServerResponseInfo::HttpServerResponseInfo( const HttpServerResponseInfo& other) = default; -HttpServerResponseInfo::~HttpServerResponseInfo() {} +HttpServerResponseInfo::~HttpServerResponseInfo() = default; // static HttpServerResponseInfo HttpServerResponseInfo::CreateFor404() {
diff --git a/net/server/http_server_unittest.cc b/net/server/http_server_unittest.cc index af4ab98..cd60a7f 100644 --- a/net/server/http_server_unittest.cc +++ b/net/server/http_server_unittest.cc
@@ -61,7 +61,7 @@ class TestHttpClient { public: - TestHttpClient() {} + TestHttpClient() = default; int ConnectAndWait(const IPEndPoint& address) { AddressList addresses(address); @@ -453,7 +453,7 @@ public: TestURLFetcherDelegate(const base::Closure& quit_loop_func) : quit_loop_func_(quit_loop_func) {} - ~TestURLFetcherDelegate() override {} + ~TestURLFetcherDelegate() override = default; void OnURLFetchComplete(const URLFetcher* source) override { EXPECT_EQ(HTTP_INTERNAL_SERVER_ERROR, source->GetResponseCode()); @@ -624,7 +624,7 @@ } private: - ~MockStreamSocket() override {} + ~MockStreamSocket() override = default; bool connected_; scoped_refptr<IOBuffer> read_buf_;
diff --git a/net/server/web_socket.cc b/net/server/web_socket.cc index bd3d9e49..59879e6 100644 --- a/net/server/web_socket.cc +++ b/net/server/web_socket.cc
@@ -54,7 +54,7 @@ WebSocket::WebSocket(HttpServer* server, HttpConnection* connection) : server_(server), connection_(connection), closed_(false) {} -WebSocket::~WebSocket() {} +WebSocket::~WebSocket() = default; void WebSocket::Accept(const HttpServerRequestInfo& request) { std::string version = request.GetHeaderValue("sec-websocket-version");
diff --git a/net/server/web_socket_encoder.cc b/net/server/web_socket_encoder.cc index 0240be3..bec3c83 100644 --- a/net/server/web_socket_encoder.cc +++ b/net/server/web_socket_encoder.cc
@@ -285,7 +285,7 @@ deflater_(std::move(deflater)), inflater_(std::move(inflater)) {} -WebSocketEncoder::~WebSocketEncoder() {} +WebSocketEncoder::~WebSocketEncoder() = default; WebSocket::ParseResult WebSocketEncoder::DecodeFrame( const base::StringPiece& frame,
diff --git a/net/server/web_socket_encoder_unittest.cc b/net/server/web_socket_encoder_unittest.cc index 711a852..4a180ab 100644 --- a/net/server/web_socket_encoder_unittest.cc +++ b/net/server/web_socket_encoder_unittest.cc
@@ -77,7 +77,7 @@ class WebSocketEncoderTest : public testing::Test { public: - WebSocketEncoderTest() {} + WebSocketEncoderTest() = default; void SetUp() override { std::string response_extensions;
diff --git a/net/socket/client_socket_pool.cc b/net/socket/client_socket_pool.cc index 5d12324..4c9f13d 100644 --- a/net/socket/client_socket_pool.cc +++ b/net/socket/client_socket_pool.cc
@@ -43,8 +43,8 @@ g_used_idle_socket_timeout_s = timeout.InSeconds(); } -ClientSocketPool::ClientSocketPool() {} +ClientSocketPool::ClientSocketPool() = default; -ClientSocketPool::~ClientSocketPool() {} +ClientSocketPool::~ClientSocketPool() = default; } // namespace net
diff --git a/net/socket/client_socket_pool_base.cc b/net/socket/client_socket_pool_base.cc index 73700ba0..d80dc8e 100644 --- a/net/socket/client_socket_pool_base.cc +++ b/net/socket/client_socket_pool_base.cc
@@ -225,7 +225,7 @@ ClientSocketPoolBaseHelper::CallbackResultPair::CallbackResultPair( const CallbackResultPair& other) = default; -ClientSocketPoolBaseHelper::CallbackResultPair::~CallbackResultPair() {} +ClientSocketPoolBaseHelper::CallbackResultPair::~CallbackResultPair() = default; bool ClientSocketPoolBaseHelper::IsStalled() const { // If a lower layer pool is stalled, consider |this| stalled as well.
diff --git a/net/socket/client_socket_pool_base_unittest.cc b/net/socket/client_socket_pool_base_unittest.cc index 4911242..41dbccf 100644 --- a/net/socket/client_socket_pool_base_unittest.cc +++ b/net/socket/client_socket_pool_base_unittest.cc
@@ -114,11 +114,11 @@ class TestSocketParams : public base::RefCounted<TestSocketParams> { public: - explicit TestSocketParams() {} + explicit TestSocketParams() = default; private: friend class base::RefCounted<TestSocketParams>; - ~TestSocketParams() {} + ~TestSocketParams() = default; }; typedef ClientSocketPoolBase<TestSocketParams> TestClientSocketPoolBase; @@ -451,7 +451,7 @@ net_log_(net_log) { } - ~TestConnectJobFactory() override {} + ~TestConnectJobFactory() override = default; void set_job_type(TestConnectJob::JobType job_type) { job_type_ = job_type; } @@ -512,7 +512,7 @@ used_idle_socket_timeout, connect_job_factory) {} - ~TestClientSocketPool() override {} + ~TestClientSocketPool() override = default; int RequestSocket(const std::string& group_name, const void* params, @@ -656,7 +656,7 @@ public: TestConnectJobDelegate() : have_result_(false), waiting_for_result_(false), result_(OK) {} - ~TestConnectJobDelegate() override {} + ~TestConnectJobDelegate() override = default; void OnConnectJobComplete(int result, ConnectJob* job) override { result_ = result; @@ -2560,7 +2560,7 @@ base::Unretained(this))) { } - ~TestReleasingSocketRequest() override {} + ~TestReleasingSocketRequest() override = default; ClientSocketHandle* handle() { return &handle_; } @@ -2681,7 +2681,7 @@ base::Unretained(this))) { } - ~ConnectWithinCallback() override {} + ~ConnectWithinCallback() override = default; int WaitForNestedResult() { return nested_callback_.WaitForResult();
diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket_pool_manager.cc index 81a7fab..ffec16f 100644 --- a/net/socket/client_socket_pool_manager.cc +++ b/net/socket/client_socket_pool_manager.cc
@@ -275,8 +275,8 @@ } // namespace -ClientSocketPoolManager::ClientSocketPoolManager() {} -ClientSocketPoolManager::~ClientSocketPoolManager() {} +ClientSocketPoolManager::ClientSocketPoolManager() = default; +ClientSocketPoolManager::~ClientSocketPoolManager() = default; // static int ClientSocketPoolManager::max_sockets_per_pool(
diff --git a/net/socket/fuzzed_datagram_client_socket.cc b/net/socket/fuzzed_datagram_client_socket.cc index 328a1c8..85db485 100644 --- a/net/socket/fuzzed_datagram_client_socket.cc +++ b/net/socket/fuzzed_datagram_client_socket.cc
@@ -30,7 +30,7 @@ base::FuzzedDataProvider* data_provider) : data_provider_(data_provider), weak_factory_(this) {} -FuzzedDatagramClientSocket::~FuzzedDatagramClientSocket() {} +FuzzedDatagramClientSocket::~FuzzedDatagramClientSocket() = default; int FuzzedDatagramClientSocket::Connect(const IPEndPoint& address) { CHECK(!connected_);
diff --git a/net/socket/fuzzed_server_socket.cc b/net/socket/fuzzed_server_socket.cc index 5de7fb6b..d2b84f5 100644 --- a/net/socket/fuzzed_server_socket.cc +++ b/net/socket/fuzzed_server_socket.cc
@@ -19,7 +19,7 @@ listen_called_(false), weak_factory_(this) {} -FuzzedServerSocket::~FuzzedServerSocket() {} +FuzzedServerSocket::~FuzzedServerSocket() = default; int FuzzedServerSocket::Listen(const IPEndPoint& address, int backlog) { DCHECK(!listen_called_);
diff --git a/net/socket/fuzzed_socket.cc b/net/socket/fuzzed_socket.cc index 6c1a75c..08be4bf 100644 --- a/net/socket/fuzzed_socket.cc +++ b/net/socket/fuzzed_socket.cc
@@ -40,7 +40,7 @@ remote_address_(IPEndPoint(IPAddress::IPv4Localhost(), 80)), weak_factory_(this) {} -FuzzedSocket::~FuzzedSocket() {} +FuzzedSocket::~FuzzedSocket() = default; int FuzzedSocket::Read(IOBuffer* buf, int buf_len,
diff --git a/net/socket/fuzzed_socket_factory.cc b/net/socket/fuzzed_socket_factory.cc index 8e99cb6..55ffd99 100644 --- a/net/socket/fuzzed_socket_factory.cc +++ b/net/socket/fuzzed_socket_factory.cc
@@ -26,8 +26,8 @@ // SSLClientSocket implementation that always fails to connect. class FailingSSLClientSocket : public SSLClientSocket { public: - FailingSSLClientSocket() {} - ~FailingSSLClientSocket() override {} + FailingSSLClientSocket() = default; + ~FailingSSLClientSocket() override = default; // Socket implementation: int Read(IOBuffer* buf, @@ -130,7 +130,7 @@ base::FuzzedDataProvider* data_provider) : data_provider_(data_provider), fuzz_connect_result_(true) {} -FuzzedSocketFactory::~FuzzedSocketFactory() {} +FuzzedSocketFactory::~FuzzedSocketFactory() = default; std::unique_ptr<DatagramClientSocket> FuzzedSocketFactory::CreateDatagramClientSocket(
diff --git a/net/socket/mock_client_socket_pool_manager.cc b/net/socket/mock_client_socket_pool_manager.cc index 3c80ac6..a638653 100644 --- a/net/socket/mock_client_socket_pool_manager.cc +++ b/net/socket/mock_client_socket_pool_manager.cc
@@ -12,8 +12,8 @@ namespace net { -MockClientSocketPoolManager::MockClientSocketPoolManager() {} -MockClientSocketPoolManager::~MockClientSocketPoolManager() {} +MockClientSocketPoolManager::MockClientSocketPoolManager() = default; +MockClientSocketPoolManager::~MockClientSocketPoolManager() = default; void MockClientSocketPoolManager::SetTransportSocketPool( TransportClientSocketPool* pool) {
diff --git a/net/socket/server_socket.cc b/net/socket/server_socket.cc index f2c2383a..ebf5a22d 100644 --- a/net/socket/server_socket.cc +++ b/net/socket/server_socket.cc
@@ -10,11 +10,9 @@ namespace net { -ServerSocket::ServerSocket() { -} +ServerSocket::ServerSocket() = default; -ServerSocket::~ServerSocket() { -} +ServerSocket::~ServerSocket() = default; int ServerSocket::ListenWithAddressAndPort(const std::string& address_string, uint16_t port,
diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc index 5c0b0b7..e6b5253 100644 --- a/net/socket/socket_test_util.cc +++ b/net/socket/socket_test_util.cc
@@ -139,7 +139,7 @@ peer_addr(addr) { } -MockConnect::~MockConnect() {} +MockConnect::~MockConnect() = default; void SocketDataProvider::OnEnableTCPFastOpenIfSupported() {} @@ -178,8 +178,7 @@ write_count_(writes_count) { } -StaticSocketDataHelper::~StaticSocketDataHelper() { -} +StaticSocketDataHelper::~StaticSocketDataHelper() = default; const MockRead& StaticSocketDataHelper::PeekRead() const { CHECK(!AllReadDataConsumed()); @@ -248,8 +247,7 @@ : helper_(reads, reads_count, writes, writes_count) { } -StaticSocketDataProvider::~StaticSocketDataProvider() { -} +StaticSocketDataProvider::~StaticSocketDataProvider() = default; MockRead StaticSocketDataProvider::OnRead() { CHECK(!helper_.AllReadDataConsumed()); @@ -307,8 +305,7 @@ SSLSocketDataProvider::SSLSocketDataProvider( const SSLSocketDataProvider& other) = default; -SSLSocketDataProvider::~SSLSocketDataProvider() { -} +SSLSocketDataProvider::~SSLSocketDataProvider() = default; SequencedSocketData::SequencedSocketData(MockRead* reads, size_t reads_count, @@ -693,13 +690,12 @@ NET_TRACE(1, " *** ") << "Done"; } -SequencedSocketData::~SequencedSocketData() { -} +SequencedSocketData::~SequencedSocketData() = default; MockClientSocketFactory::MockClientSocketFactory() : enable_read_if_ready_(false) {} -MockClientSocketFactory::~MockClientSocketFactory() {} +MockClientSocketFactory::~MockClientSocketFactory() = default; void MockClientSocketFactory::AddSocketDataProvider( SocketDataProvider* data) { @@ -855,7 +851,7 @@ return NULL; } -MockClientSocket::~MockClientSocket() {} +MockClientSocket::~MockClientSocket() = default; void MockClientSocket::RunCallbackAsync(const CompletionCallback& callback, int result) { @@ -1532,8 +1528,7 @@ DCHECK(completion_count); } -TestSocketRequest::~TestSocketRequest() { -} +TestSocketRequest::~TestSocketRequest() = default; void TestSocketRequest::OnComplete(int result) { SetResult(result); @@ -1548,7 +1543,7 @@ const int ClientSocketPoolTest::kRequestNotFound = -2; ClientSocketPoolTest::ClientSocketPoolTest() : completion_count_(0) {} -ClientSocketPoolTest::~ClientSocketPoolTest() {} +ClientSocketPoolTest::~ClientSocketPoolTest() = default; int ClientSocketPoolTest::GetOrderOfRequest(size_t index) const { index--; @@ -1588,7 +1583,7 @@ const CompletionCallback& callback) : socket_(std::move(socket)), handle_(handle), user_callback_(callback) {} -MockTransportClientSocketPool::MockConnectJob::~MockConnectJob() {} +MockTransportClientSocketPool::MockConnectJob::~MockConnectJob() = default; int MockTransportClientSocketPool::MockConnectJob::Connect() { int rv = socket_->Connect(base::Bind(&MockConnectJob::OnConnect, @@ -1658,7 +1653,7 @@ release_count_(0), cancel_count_(0) {} -MockTransportClientSocketPool::~MockTransportClientSocketPool() {} +MockTransportClientSocketPool::~MockTransportClientSocketPool() = default; int MockTransportClientSocketPool::RequestSocket( const std::string& group_name, @@ -1714,7 +1709,7 @@ NULL), transport_pool_(transport_pool) {} -MockSOCKSClientSocketPool::~MockSOCKSClientSocketPool() {} +MockSOCKSClientSocketPool::~MockSOCKSClientSocketPool() = default; int MockSOCKSClientSocketPool::RequestSocket(const std::string& group_name, const void* socket_params,
diff --git a/net/socket/socks_client_socket_pool.cc b/net/socket/socks_client_socket_pool.cc index f2632f3..86b4ac0 100644 --- a/net/socket/socks_client_socket_pool.cc +++ b/net/socket/socks_client_socket_pool.cc
@@ -33,7 +33,7 @@ socks_v5_(socks_v5) { } -SOCKSSocketParams::~SOCKSSocketParams() {} +SOCKSSocketParams::~SOCKSSocketParams() = default; // SOCKSConnectJobs will time out after this many seconds. Note this is on // top of the timeout for the transport socket. @@ -209,8 +209,7 @@ base_.AddLowerLayeredPool(transport_pool_); } -SOCKSClientSocketPool::~SOCKSClientSocketPool() { -} +SOCKSClientSocketPool::~SOCKSClientSocketPool() = default; int SOCKSClientSocketPool::RequestSocket(const std::string& group_name, const void* socket_params,
diff --git a/net/socket/socks_client_socket_pool_unittest.cc b/net/socket/socks_client_socket_pool_unittest.cc index 5331739..eaafb9d9 100644 --- a/net/socket/socks_client_socket_pool_unittest.cc +++ b/net/socket/socks_client_socket_pool_unittest.cc
@@ -107,7 +107,7 @@ NULL, NULL) {} - ~SOCKSClientSocketPoolTest() override {} + ~SOCKSClientSocketPoolTest() override = default; int StartRequestV5(const std::string& group_name, RequestPriority priority) { return test_base_.StartRequestUsingPool(
diff --git a/net/socket/ssl_client_socket_pool.cc b/net/socket/ssl_client_socket_pool.cc index bc6960c..8eb860f 100644 --- a/net/socket/ssl_client_socket_pool.cc +++ b/net/socket/ssl_client_socket_pool.cc
@@ -59,7 +59,7 @@ (!direct_params_ && !socks_proxy_params_ && http_proxy_params_)); } -SSLSocketParams::~SSLSocketParams() {} +SSLSocketParams::~SSLSocketParams() = default; SSLSocketParams::ConnectionType SSLSocketParams::GetConnectionType() const { if (direct_params_.get()) { @@ -138,8 +138,7 @@ version_interference_error_(OK), version_interference_details_(SSLErrorDetails::kOther) {} -SSLConnectJob::~SSLConnectJob() { -} +SSLConnectJob::~SSLConnectJob() = default; LoadState SSLConnectJob::GetLoadState() const { switch (next_state_) { @@ -564,8 +563,7 @@ base::TimeDelta::FromSeconds(kSSLHandshakeTimeoutInSeconds); } -SSLClientSocketPool::SSLConnectJobFactory::~SSLConnectJobFactory() { -} +SSLClientSocketPool::SSLConnectJobFactory::~SSLConnectJobFactory() = default; SSLClientSocketPool::SSLClientSocketPool( int max_sockets,
diff --git a/net/socket/ssl_client_socket_unittest.cc b/net/socket/ssl_client_socket_unittest.cc index cab4c9ef..d0527ee 100644 --- a/net/socket/ssl_client_socket_unittest.cc +++ b/net/socket/ssl_client_socket_unittest.cc
@@ -97,7 +97,7 @@ public: explicit WrappedStreamSocket(std::unique_ptr<StreamSocket> transport) : transport_(std::move(transport)) {} - ~WrappedStreamSocket() override {} + ~WrappedStreamSocket() override = default; // StreamSocket implementation: int Connect(const CompletionCallback& callback) override { @@ -180,7 +180,7 @@ class ReadBufferingStreamSocket : public WrappedStreamSocket { public: explicit ReadBufferingStreamSocket(std::unique_ptr<StreamSocket> transport); - ~ReadBufferingStreamSocket() override {} + ~ReadBufferingStreamSocket() override = default; // Socket implementation: int Read(IOBuffer* buf, @@ -338,7 +338,7 @@ public: explicit SynchronousErrorStreamSocket(std::unique_ptr<StreamSocket> transport) : WrappedStreamSocket(std::move(transport)) {} - ~SynchronousErrorStreamSocket() override {} + ~SynchronousErrorStreamSocket() override = default; // Socket implementation: int Read(IOBuffer* buf, @@ -414,7 +414,7 @@ public: explicit FakeBlockingStreamSocket(std::unique_ptr<StreamSocket> transport) : WrappedStreamSocket(std::move(transport)) {} - ~FakeBlockingStreamSocket() override {} + ~FakeBlockingStreamSocket() override = default; // Socket implementation: int Read(IOBuffer* buf, @@ -702,7 +702,7 @@ : WrappedStreamSocket(std::move(transport)), read_count_(0), write_count_(0) {} - ~CountingStreamSocket() override {} + ~CountingStreamSocket() override = default; // Socket implementation: int Read(IOBuffer* buf, @@ -734,7 +734,7 @@ : socket_(socket), callback_(base::Bind(&DeleteSocketCallback::OnComplete, base::Unretained(this))) {} - ~DeleteSocketCallback() override {} + ~DeleteSocketCallback() override = default; const CompletionCallback& callback() const { return callback_; } @@ -811,7 +811,7 @@ class MockExpectCTReporter : public TransportSecurityState::ExpectCTReporter { public: MockExpectCTReporter() : num_failures_(0) {} - ~MockExpectCTReporter() override {} + ~MockExpectCTReporter() override = default; void OnExpectCTFailed(const HostPortPair& host_port_pair, const GURL& report_uri,
diff --git a/net/socket/ssl_server_socket_impl.cc b/net/socket/ssl_server_socket_impl.cc index da690a46..cba12a6b 100644 --- a/net/socket/ssl_server_socket_impl.cc +++ b/net/socket/ssl_server_socket_impl.cc
@@ -691,7 +691,7 @@ } } -SSLServerContextImpl::~SSLServerContextImpl() {} +SSLServerContextImpl::~SSLServerContextImpl() = default; std::unique_ptr<SSLServerSocket> SSLServerContextImpl::CreateSSLServerSocket( std::unique_ptr<StreamSocket> socket) {
diff --git a/net/socket/ssl_server_socket_unittest.cc b/net/socket/ssl_server_socket_unittest.cc index 102e8033b..73a038d 100644 --- a/net/socket/ssl_server_socket_unittest.cc +++ b/net/socket/ssl_server_socket_unittest.cc
@@ -222,7 +222,7 @@ FakeDataChannel* outgoing_channel) : incoming_(incoming_channel), outgoing_(outgoing_channel) {} - ~FakeSocket() override {} + ~FakeSocket() override = default; int Read(IOBuffer* buf, int buf_len,
diff --git a/net/socket/stream_socket.cc b/net/socket/stream_socket.cc index ec5500a..4eb7e14 100644 --- a/net/socket/stream_socket.cc +++ b/net/socket/stream_socket.cc
@@ -84,6 +84,6 @@ StreamSocket::SocketMemoryStats::SocketMemoryStats() : total_size(0), buffer_size(0), cert_count(0), cert_size(0) {} -StreamSocket::SocketMemoryStats::~SocketMemoryStats() {} +StreamSocket::SocketMemoryStats::~SocketMemoryStats() = default; } // namespace net
diff --git a/net/socket/tcp_client_socket_unittest.cc b/net/socket/tcp_client_socket_unittest.cc index b3257aa6..1766d7f 100644 --- a/net/socket/tcp_client_socket_unittest.cc +++ b/net/socket/tcp_client_socket_unittest.cc
@@ -115,7 +115,7 @@ class TestSocketPerformanceWatcher : public SocketPerformanceWatcher { public: TestSocketPerformanceWatcher() : connection_changed_count_(0u) {} - ~TestSocketPerformanceWatcher() override {} + ~TestSocketPerformanceWatcher() override = default; bool ShouldNotifyUpdatedRTT() const override { return true; }
diff --git a/net/socket/tcp_server_socket.cc b/net/socket/tcp_server_socket.cc index 779a24d..2d9c5fd 100644 --- a/net/socket/tcp_server_socket.cc +++ b/net/socket/tcp_server_socket.cc
@@ -22,8 +22,7 @@ return socket_.AdoptUnconnectedSocket(socket); } -TCPServerSocket::~TCPServerSocket() { -} +TCPServerSocket::~TCPServerSocket() = default; int TCPServerSocket::Listen(const IPEndPoint& address, int backlog) { int result = socket_.Open(address.GetFamily());
diff --git a/net/socket/tcp_socket_posix.cc b/net/socket/tcp_socket_posix.cc index 7e80ab03..b46ccad 100644 --- a/net/socket/tcp_socket_posix.cc +++ b/net/socket/tcp_socket_posix.cc
@@ -112,7 +112,7 @@ base::Unretained(this))); } - ~FastOpenProbe() {} + ~FastOpenProbe() = default; // Checks if the kernel supports TCP FastOpen. Called only once, on startup. void DetectTCPFastOpenSupport() {
diff --git a/net/socket/tcp_socket_unittest.cc b/net/socket/tcp_socket_unittest.cc index 508b2b74..e170f3b 100644 --- a/net/socket/tcp_socket_unittest.cc +++ b/net/socket/tcp_socket_unittest.cc
@@ -40,7 +40,7 @@ : should_notify_updated_rtt_(should_notify_updated_rtt), connection_changed_count_(0u), rtt_notification_count_(0u) {} - ~TestSocketPerformanceWatcher() override {} + ~TestSocketPerformanceWatcher() override = default; bool ShouldNotifyUpdatedRTT() const override { return should_notify_updated_rtt_;
diff --git a/net/socket/transport_client_socket_pool.cc b/net/socket/transport_client_socket_pool.cc index 1288c09..53f2c15 100644 --- a/net/socket/transport_client_socket_pool.cc +++ b/net/socket/transport_client_socket_pool.cc
@@ -62,7 +62,7 @@ destination_.set_allow_cached_response(false); } -TransportSocketParams::~TransportSocketParams() {} +TransportSocketParams::~TransportSocketParams() = default; // TODO(eroman): The use of this constant needs to be re-evaluated. The time // needed for TCPClientSocketXXX::Connect() can be arbitrarily long, since @@ -483,7 +483,7 @@ base_.EnableConnectBackupJobs(); } -TransportClientSocketPool::~TransportClientSocketPool() {} +TransportClientSocketPool::~TransportClientSocketPool() = default; int TransportClientSocketPool::RequestSocket(const std::string& group_name, const void* params,
diff --git a/net/socket/transport_client_socket_pool_test_util.cc b/net/socket/transport_client_socket_pool_test_util.cc index 46d352c6..361d7f8 100644 --- a/net/socket/transport_client_socket_pool_test_util.cc +++ b/net/socket/transport_client_socket_pool_test_util.cc
@@ -360,7 +360,7 @@ delay_(base::TimeDelta::FromMilliseconds( ClientSocketPool::kMaxConnectRetryIntervalMs)) {} -MockTransportClientSocketFactory::~MockTransportClientSocketFactory() {} +MockTransportClientSocketFactory::~MockTransportClientSocketFactory() = default; std::unique_ptr<DatagramClientSocket> MockTransportClientSocketFactory::CreateDatagramClientSocket(
diff --git a/net/socket/transport_client_socket_pool_unittest.cc b/net/socket/transport_client_socket_pool_unittest.cc index cbe31e1..313c5ba1 100644 --- a/net/socket/transport_client_socket_pool_unittest.cc +++ b/net/socket/transport_client_socket_pool_unittest.cc
@@ -492,7 +492,7 @@ base::Unretained(this))) { } - ~RequestSocketCallback() override {} + ~RequestSocketCallback() override = default; const CompletionCallback& callback() const { return callback_; }
diff --git a/net/socket/transport_client_socket_unittest.cc b/net/socket/transport_client_socket_unittest.cc index 7db6db4..ba6a76b 100644 --- a/net/socket/transport_client_socket_unittest.cc +++ b/net/socket/transport_client_socket_unittest.cc
@@ -49,7 +49,7 @@ socket_factory_(ClientSocketFactory::GetDefaultFactory()), close_server_socket_on_next_send_(false) {} - virtual ~TransportClientSocketTest() {} + virtual ~TransportClientSocketTest() = default; // Testcase hooks void SetUp() override;
diff --git a/net/socket/udp_client_socket.cc b/net/socket/udp_client_socket.cc index 767aa63..aac8ae06 100644 --- a/net/socket/udp_client_socket.cc +++ b/net/socket/udp_client_socket.cc
@@ -15,8 +15,7 @@ : socket_(bind_type, rand_int_cb, net_log, source), network_(NetworkChangeNotifier::kInvalidNetworkHandle) {} -UDPClientSocket::~UDPClientSocket() { -} +UDPClientSocket::~UDPClientSocket() = default; int UDPClientSocket::Connect(const IPEndPoint& address) { int rv = socket_.Open(address.GetFamily());
diff --git a/net/socket/udp_server_socket.cc b/net/socket/udp_server_socket.cc index 1b2d74e4..d5f107a 100644 --- a/net/socket/udp_server_socket.cc +++ b/net/socket/udp_server_socket.cc
@@ -15,8 +15,7 @@ allow_address_reuse_(false), allow_broadcast_(false) {} -UDPServerSocket::~UDPServerSocket() { -} +UDPServerSocket::~UDPServerSocket() = default; int UDPServerSocket::Listen(const IPEndPoint& address) { int rv = socket_.Open(address.GetFamily());
diff --git a/net/socket/unix_domain_server_socket_posix.cc b/net/socket/unix_domain_server_socket_posix.cc index 86927c8..2bea30e 100644 --- a/net/socket/unix_domain_server_socket_posix.cc +++ b/net/socket/unix_domain_server_socket_posix.cc
@@ -42,8 +42,7 @@ DCHECK(!auth_callback_.is_null()); } -UnixDomainServerSocket::~UnixDomainServerSocket() { -} +UnixDomainServerSocket::~UnixDomainServerSocket() = default; // static bool UnixDomainServerSocket::GetPeerCredentials(SocketDescriptor socket,
diff --git a/net/test/embedded_test_server/default_handlers.cc b/net/test/embedded_test_server/default_handlers.cc index a1bf86b..a1e984fa 100644 --- a/net/test/embedded_test_server/default_handlers.cc +++ b/net/test/embedded_test_server/default_handlers.cc
@@ -608,7 +608,7 @@ // Never returns a response. class HungHttpResponse : public HttpResponse { public: - HungHttpResponse() {} + HungHttpResponse() = default; void SendResponse(const SendBytesCallback& send, const SendCompleteCallback& done) override {} @@ -626,7 +626,7 @@ // Return headers, then hangs. class HungAfterHeadersHttpResponse : public HttpResponse { public: - HungAfterHeadersHttpResponse() {} + HungAfterHeadersHttpResponse() = default; void SendResponse(const SendBytesCallback& send, const SendCompleteCallback& done) override {
diff --git a/net/test/embedded_test_server/embedded_test_server_unittest.cc b/net/test/embedded_test_server/embedded_test_server_unittest.cc index 74b78728..4eec5c5 100644 --- a/net/test/embedded_test_server/embedded_test_server_unittest.cc +++ b/net/test/embedded_test_server/embedded_test_server_unittest.cc
@@ -78,7 +78,7 @@ did_read_from_socket_(false), task_runner_(base::ThreadTaskRunnerHandle::Get()) {} - ~TestConnectionListener() override {} + ~TestConnectionListener() override = default; // Get called from the EmbeddedTestServer thread to be notified that // a connection was accepted. @@ -419,8 +419,8 @@ class CancelRequestDelegate : public TestDelegate { public: - CancelRequestDelegate() {} - ~CancelRequestDelegate() override {} + CancelRequestDelegate() = default; + ~CancelRequestDelegate() override = default; void OnResponseStarted(URLRequest* request, int net_error) override { TestDelegate::OnResponseStarted(request, net_error);
diff --git a/net/test/embedded_test_server/http_request.cc b/net/test/embedded_test_server/http_request.cc index ecac880..a714157d 100644 --- a/net/test/embedded_test_server/http_request.cc +++ b/net/test/embedded_test_server/http_request.cc
@@ -36,8 +36,7 @@ HttpRequest::HttpRequest(const HttpRequest& other) = default; -HttpRequest::~HttpRequest() { -} +HttpRequest::~HttpRequest() = default; GURL HttpRequest::GetURL() const { if (base_url.is_valid()) @@ -52,8 +51,7 @@ declared_content_length_(0) { } -HttpRequestParser::~HttpRequestParser() { -} +HttpRequestParser::~HttpRequestParser() = default; void HttpRequestParser::ProcessChunk(const base::StringPiece& data) { data.AppendToString(&buffer_);
diff --git a/net/test/embedded_test_server/http_response.cc b/net/test/embedded_test_server/http_response.cc index fd55211..168049e 100644 --- a/net/test/embedded_test_server/http_response.cc +++ b/net/test/embedded_test_server/http_response.cc
@@ -13,14 +13,13 @@ namespace net { namespace test_server { -HttpResponse::~HttpResponse() { -} +HttpResponse::~HttpResponse() = default; RawHttpResponse::RawHttpResponse(const std::string& headers, const std::string& contents) : headers_(headers), contents_(contents) {} -RawHttpResponse::~RawHttpResponse() {} +RawHttpResponse::~RawHttpResponse() = default; void RawHttpResponse::SendResponse(const SendBytesCallback& send, const SendCompleteCallback& done) { @@ -47,8 +46,7 @@ BasicHttpResponse::BasicHttpResponse() : code_(HTTP_OK) { } -BasicHttpResponse::~BasicHttpResponse() { -} +BasicHttpResponse::~BasicHttpResponse() = default; std::string BasicHttpResponse::ToResponseString() const { // Response line with headers.
diff --git a/net/test/embedded_test_server/simple_connection_listener.cc b/net/test/embedded_test_server/simple_connection_listener.cc index d2ea1c9..cb36d760 100644 --- a/net/test/embedded_test_server/simple_connection_listener.cc +++ b/net/test/embedded_test_server/simple_connection_listener.cc
@@ -19,7 +19,7 @@ allow_additional_connections_(allow_additional_connections), run_loop_task_runner_(base::ThreadTaskRunnerHandle::Get()) {} -SimpleConnectionListener::~SimpleConnectionListener() {} +SimpleConnectionListener::~SimpleConnectionListener() = default; void SimpleConnectionListener::AcceptedSocket(const StreamSocket& socket) { ++seen_connections_;
diff --git a/net/test/scoped_disable_exit_on_dfatal.cc b/net/test/scoped_disable_exit_on_dfatal.cc index 14821db..4e7b750 100644 --- a/net/test/scoped_disable_exit_on_dfatal.cc +++ b/net/test/scoped_disable_exit_on_dfatal.cc
@@ -14,7 +14,7 @@ ScopedDisableExitOnDFatal::ScopedDisableExitOnDFatal() : assert_handler_(base::Bind(LogAssertHandler)) {} -ScopedDisableExitOnDFatal::~ScopedDisableExitOnDFatal() {} +ScopedDisableExitOnDFatal::~ScopedDisableExitOnDFatal() = default; // static void ScopedDisableExitOnDFatal::LogAssertHandler(
diff --git a/net/test/spawned_test_server/base_test_server.cc b/net/test/spawned_test_server/base_test_server.cc index 69d9403..c720d64 100644 --- a/net/test/spawned_test_server/base_test_server.cc +++ b/net/test/spawned_test_server/base_test_server.cc
@@ -164,12 +164,12 @@ } // namespace -BaseTestServer::SSLOptions::SSLOptions() {} +BaseTestServer::SSLOptions::SSLOptions() = default; BaseTestServer::SSLOptions::SSLOptions(ServerCertificate cert) : server_certificate(cert) {} BaseTestServer::SSLOptions::SSLOptions(const SSLOptions& other) = default; -BaseTestServer::SSLOptions::~SSLOptions() {} +BaseTestServer::SSLOptions::~SSLOptions() = default; base::FilePath BaseTestServer::SSLOptions::GetCertificateFile() const { switch (server_certificate) { @@ -257,7 +257,7 @@ Init(GetHostname(type, ssl_options)); } -BaseTestServer::~BaseTestServer() {} +BaseTestServer::~BaseTestServer() = default; bool BaseTestServer::Start() { return StartInBackground() && BlockUntilStarted();
diff --git a/net/test/url_request/ssl_certificate_error_job.cc b/net/test/url_request/ssl_certificate_error_job.cc index 759d545..d23f9ced 100644 --- a/net/test/url_request/ssl_certificate_error_job.cc +++ b/net/test/url_request/ssl_certificate_error_job.cc
@@ -23,8 +23,8 @@ class MockJobInterceptor : public URLRequestInterceptor { public: - MockJobInterceptor() {} - ~MockJobInterceptor() override {} + MockJobInterceptor() = default; + ~MockJobInterceptor() override = default; // URLRequestJobFactory::ProtocolHandler implementation: URLRequestJob* MaybeInterceptRequest( @@ -62,8 +62,7 @@ return GURL(base::StringPrintf("https://%s", kMockHostname)); } -SSLCertificateErrorJob::~SSLCertificateErrorJob() { -} +SSLCertificateErrorJob::~SSLCertificateErrorJob() = default; void SSLCertificateErrorJob::NotifyError() { SSLInfo info;
diff --git a/net/test/url_request/url_request_failed_job.cc b/net/test/url_request/url_request_failed_job.cc index d87e5d3..5417deb6 100644 --- a/net/test/url_request/url_request_failed_job.cc +++ b/net/test/url_request/url_request_failed_job.cc
@@ -37,8 +37,8 @@ class MockJobInterceptor : public URLRequestInterceptor { public: - MockJobInterceptor() {} - ~MockJobInterceptor() override {} + MockJobInterceptor() = default; + ~MockJobInterceptor() override = default; // URLRequestJobFactory::ProtocolHandler implementation: URLRequestJob* MaybeInterceptRequest( @@ -177,8 +177,7 @@ return GetMockUrl("https", hostname, START, net_error); } -URLRequestFailedJob::~URLRequestFailedJob() { -} +URLRequestFailedJob::~URLRequestFailedJob() = default; void URLRequestFailedJob::StartAsync() { if (phase_ == START) {
diff --git a/net/test/url_request/url_request_hanging_read_job.cc b/net/test/url_request/url_request_hanging_read_job.cc index 1e19435..006e7bab 100644 --- a/net/test/url_request/url_request_hanging_read_job.cc +++ b/net/test/url_request/url_request_hanging_read_job.cc
@@ -27,8 +27,8 @@ class MockJobInterceptor : public URLRequestInterceptor { public: - MockJobInterceptor() {} - ~MockJobInterceptor() override {} + MockJobInterceptor() = default; + ~MockJobInterceptor() override = default; // URLRequestInterceptor implementation URLRequestJob* MaybeInterceptRequest( @@ -58,7 +58,7 @@ weak_factory_.GetWeakPtr())); } -URLRequestHangingReadJob::~URLRequestHangingReadJob() {} +URLRequestHangingReadJob::~URLRequestHangingReadJob() = default; int URLRequestHangingReadJob::ReadRawData(IOBuffer* buf, int buf_size) { // Make read hang. It never completes.
diff --git a/net/test/url_request/url_request_mock_data_job.cc b/net/test/url_request/url_request_mock_data_job.cc index 256acf2b..2e71b9c 100644 --- a/net/test/url_request/url_request_mock_data_job.cc +++ b/net/test/url_request/url_request_mock_data_job.cc
@@ -75,8 +75,8 @@ class MockJobInterceptor : public URLRequestInterceptor { public: - MockJobInterceptor() {} - ~MockJobInterceptor() override {} + MockJobInterceptor() = default; + ~MockJobInterceptor() override = default; // URLRequestInterceptor implementation URLRequestJob* MaybeInterceptRequest( @@ -117,8 +117,7 @@ weak_factory_.GetWeakPtr())); } -URLRequestMockDataJob::~URLRequestMockDataJob() { -} +URLRequestMockDataJob::~URLRequestMockDataJob() = default; int URLRequestMockDataJob::ReadRawData(IOBuffer* buf, int buf_size) { int bytes_read =
diff --git a/net/test/url_request/url_request_mock_http_job.cc b/net/test/url_request/url_request_mock_http_job.cc index f2fb63b..8ca5a69 100644 --- a/net/test/url_request/url_request_mock_http_job.cc +++ b/net/test/url_request/url_request_mock_http_job.cc
@@ -37,7 +37,7 @@ bool map_all_requests_to_base_path) : base_path_(base_path), map_all_requests_to_base_path_(map_all_requests_to_base_path) {} - ~MockJobInterceptor() override {} + ~MockJobInterceptor() override = default; // URLRequestJobFactory::ProtocolHandler implementation URLRequestJob* MaybeInterceptRequest( @@ -133,8 +133,7 @@ base::CreateTaskRunnerWithTraits({base::MayBlock()})), weak_ptr_factory_(this) {} -URLRequestMockHTTPJob::~URLRequestMockHTTPJob() { -} +URLRequestMockHTTPJob::~URLRequestMockHTTPJob() = default; // Public virtual version. void URLRequestMockHTTPJob::GetResponseInfo(HttpResponseInfo* info) {
diff --git a/net/test/url_request/url_request_slow_download_job.cc b/net/test/url_request/url_request_slow_download_job.cc index 876e54a..dfba97e 100644 --- a/net/test/url_request/url_request_slow_download_job.cc +++ b/net/test/url_request/url_request_slow_download_job.cc
@@ -37,8 +37,8 @@ class URLRequestSlowDownloadJob::Interceptor : public URLRequestInterceptor { public: - Interceptor() {} - ~Interceptor() override {} + Interceptor() = default; + ~Interceptor() override = default; // URLRequestInterceptor implementation: URLRequestJob* MaybeInterceptRequest(
diff --git a/net/tools/cachetool/cachetool.cc b/net/tools/cachetool/cachetool.cc index 0b84790d..2c3207f 100644 --- a/net/tools/cachetool/cachetool.cc +++ b/net/tools/cachetool/cachetool.cc
@@ -81,7 +81,7 @@ public: explicit CommandMarshal(Backend* cache_backend) : command_failed_(false), cache_backend_(cache_backend) {} - virtual ~CommandMarshal() {} + virtual ~CommandMarshal() = default; // Reads the next command's name to execute. virtual std::string ReadCommandName() = 0;
diff --git a/net/tools/content_decoder_tool/content_decoder_tool.cc b/net/tools/content_decoder_tool/content_decoder_tool.cc index cf70028..6ff7eb1 100644 --- a/net/tools/content_decoder_tool/content_decoder_tool.cc +++ b/net/tools/content_decoder_tool/content_decoder_tool.cc
@@ -30,7 +30,7 @@ public: explicit StdinSourceStream(std::istream* input_stream) : SourceStream(SourceStream::TYPE_NONE), input_stream_(input_stream) {} - ~StdinSourceStream() override {} + ~StdinSourceStream() override = default; // SourceStream implementation. int Read(IOBuffer* dest_buffer,
diff --git a/net/tools/gdig/file_net_log.cc b/net/tools/gdig/file_net_log.cc index 0e55682..c160ae3 100644 --- a/net/tools/gdig/file_net_log.cc +++ b/net/tools/gdig/file_net_log.cc
@@ -20,8 +20,7 @@ DCHECK(destination != NULL); } -FileNetLogObserver::~FileNetLogObserver() { -} +FileNetLogObserver::~FileNetLogObserver() = default; void FileNetLogObserver::OnAddEntry(const net::NetLogEntry& entry) { // Only NetLogWithSources without a NetLog should have an invalid source.
diff --git a/net/tools/get_server_time/get_server_time.cc b/net/tools/get_server_time/get_server_time.cc index 9582b265a..60efacc6 100644 --- a/net/tools/get_server_time/get_server_time.cc +++ b/net/tools/get_server_time/get_server_time.cc
@@ -71,9 +71,9 @@ // URLFetcher synchronous. class QuitDelegate : public net::URLFetcherDelegate { public: - QuitDelegate() {} + QuitDelegate() = default; - ~QuitDelegate() override {} + ~QuitDelegate() override = default; // net::URLFetcherDelegate implementation. void OnURLFetchComplete(const net::URLFetcher* source) override { @@ -101,7 +101,7 @@ // to the logs. class PrintingLogObserver : public net::NetLog::ThreadSafeObserver { public: - PrintingLogObserver() {} + PrintingLogObserver() = default; ~PrintingLogObserver() override { // This is guaranteed to be safe as this program is single threaded.
diff --git a/net/tools/net_watcher/net_watcher.cc b/net/tools/net_watcher/net_watcher.cc index 53ca175..8f6f61f 100644 --- a/net/tools/net_watcher/net_watcher.cc +++ b/net/tools/net_watcher/net_watcher.cc
@@ -101,9 +101,9 @@ public net::NetworkChangeNotifier::NetworkChangeObserver, public net::ProxyConfigService::Observer { public: - NetWatcher() {} + NetWatcher() = default; - ~NetWatcher() override {} + ~NetWatcher() override = default; // net::NetworkChangeNotifier::IPAddressObserver implementation. void OnIPAddressChanged() override { LOG(INFO) << "OnIPAddressChanged()"; }
diff --git a/net/tools/quic/chlo_extractor.cc b/net/tools/quic/chlo_extractor.cc index 078d6a05..38cb989 100644 --- a/net/tools/quic/chlo_extractor.cc +++ b/net/tools/quic/chlo_extractor.cc
@@ -22,7 +22,7 @@ public: ChloFramerVisitor(QuicFramer* framer, ChloExtractor::Delegate* delegate); - ~ChloFramerVisitor() override {} + ~ChloFramerVisitor() override = default; // QuicFramerVisitorInterface implementation void OnError(QuicFramer* framer) override {}
diff --git a/net/tools/quic/chlo_extractor_test.cc b/net/tools/quic/chlo_extractor_test.cc index 488b0bd..4fdd591a 100644 --- a/net/tools/quic/chlo_extractor_test.cc +++ b/net/tools/quic/chlo_extractor_test.cc
@@ -18,8 +18,8 @@ class TestDelegate : public ChloExtractor::Delegate { public: - TestDelegate() {} - ~TestDelegate() override {} + TestDelegate() = default; + ~TestDelegate() override = default; // ChloExtractor::Delegate implementation void OnChlo(QuicTransportVersion version,
diff --git a/net/tools/quic/end_to_end_test.cc b/net/tools/quic/end_to_end_test.cc index dc1ff7d..ceeca25d 100644 --- a/net/tools/quic/end_to_end_test.cc +++ b/net/tools/quic/end_to_end_test.cc
@@ -242,7 +242,7 @@ public: explicit ServerDelegate(QuicDispatcher* dispatcher) : dispatcher_(dispatcher) {} - ~ServerDelegate() override {} + ~ServerDelegate() override = default; void OnCanWrite() override { dispatcher_->OnCanWrite(); } private: @@ -252,7 +252,7 @@ class ClientDelegate : public PacketDroppingTestWriter::Delegate { public: explicit ClientDelegate(QuicClient* client) : client_(client) {} - ~ClientDelegate() override {} + ~ClientDelegate() override = default; void OnCanWrite() override { EpollEvent event(EPOLLOUT); client_->epoll_network_helper()->OnEvent(client_->GetLatestFD(), &event); @@ -2214,7 +2214,7 @@ : QuicSimpleServerStream(id, session, response_cache), response_body_(std::move(response_body)) {} - ~ServerStreamWithErrorResponseBody() override {} + ~ServerStreamWithErrorResponseBody() override = default; protected: void SendErrorResponse() override { @@ -2237,7 +2237,7 @@ explicit StreamWithErrorFactory(string response_body) : response_body_(std::move(response_body)) {} - ~StreamWithErrorFactory() override {} + ~StreamWithErrorFactory() override = default; QuicSimpleServerStream* CreateStream( QuicStreamId id, @@ -2259,7 +2259,7 @@ QuicHttpResponseCache* response_cache) : QuicSimpleServerStream(id, session, response_cache) {} - ~ServerStreamThatDropsBody() override {} + ~ServerStreamThatDropsBody() override = default; protected: void OnDataAvailable() override { @@ -2293,9 +2293,9 @@ class ServerStreamThatDropsBodyFactory : public QuicTestServer::StreamFactory { public: - ServerStreamThatDropsBodyFactory() {} + ServerStreamThatDropsBodyFactory() = default; - ~ServerStreamThatDropsBodyFactory() override {} + ~ServerStreamThatDropsBodyFactory() override = default; QuicSimpleServerStream* CreateStream( QuicStreamId id, @@ -2315,7 +2315,7 @@ : QuicSimpleServerStream(id, session, response_cache), body_bytes_(body_bytes) {} - ~ServerStreamThatSendsHugeResponse() override {} + ~ServerStreamThatSendsHugeResponse() override = default; protected: void SendResponse() override { @@ -2338,7 +2338,7 @@ explicit ServerStreamThatSendsHugeResponseFactory(int64_t body_bytes) : body_bytes_(body_bytes) {} - ~ServerStreamThatSendsHugeResponseFactory() override {} + ~ServerStreamThatSendsHugeResponseFactory() override = default; QuicSimpleServerStream* CreateStream( QuicStreamId id, @@ -2356,7 +2356,7 @@ public: ClientStreamThatDropsBody(QuicStreamId id, QuicSpdyClientSession* session) : QuicSpdyClientStream(id, session) {} - ~ClientStreamThatDropsBody() override {} + ~ClientStreamThatDropsBody() override = default; void OnDataAvailable() override { while (HasBytesToRead()) { @@ -2387,7 +2387,7 @@ crypto_config, push_promise_index) {} - ~ClientSessionThatDropsBody() override {} + ~ClientSessionThatDropsBody() override = default; std::unique_ptr<QuicSpdyClientStream> CreateClientStream() override { return QuicMakeUnique<ClientStreamThatDropsBody>(GetNextOutgoingStreamId(), @@ -2408,7 +2408,7 @@ config, supported_versions, epoll_server) {} - ~MockableQuicClientThatDropsBody() override {} + ~MockableQuicClientThatDropsBody() override = default; std::unique_ptr<QuicSession> CreateQuicClientSession( QuicConnection* connection) override { @@ -2435,7 +2435,7 @@ PRIVACY_MODE_DISABLED), config, supported_versions, epoll_server())); } - ~QuicTestClientThatDropsBody() override {} + ~QuicTestClientThatDropsBody() override = default; }; TEST_P(EndToEndTest, EarlyResponseFinRecording) {
diff --git a/net/tools/quic/platform/impl/quic_epoll_clock.cc b/net/tools/quic/platform/impl/quic_epoll_clock.cc index ce484dc..c44c9dd4 100644 --- a/net/tools/quic/platform/impl/quic_epoll_clock.cc +++ b/net/tools/quic/platform/impl/quic_epoll_clock.cc
@@ -11,7 +11,7 @@ QuicEpollClock::QuicEpollClock(EpollServer* epoll_server) : epoll_server_(epoll_server) {} -QuicEpollClock::~QuicEpollClock() {} +QuicEpollClock::~QuicEpollClock() = default; QuicTime QuicEpollClock::ApproximateNow() const { return QuicTime::Zero() + QuicTime::Delta::FromMicroseconds(
diff --git a/net/tools/quic/quic_client.cc b/net/tools/quic/quic_client.cc index aacb3f0ab..ee4e584 100644 --- a/net/tools/quic/quic_client.cc +++ b/net/tools/quic/quic_client.cc
@@ -83,7 +83,7 @@ set_server_address(server_address); } -QuicClient::~QuicClient() {} +QuicClient::~QuicClient() = default; QuicClientEpollNetworkHelper* QuicClient::epoll_network_helper() { return static_cast<QuicClientEpollNetworkHelper*>(network_helper());
diff --git a/net/tools/quic/quic_client_base.cc b/net/tools/quic/quic_client_base.cc index f664ef9d..0ef9999 100644 --- a/net/tools/quic/quic_client_base.cc +++ b/net/tools/quic/quic_client_base.cc
@@ -16,7 +16,7 @@ namespace net { -QuicClientBase::NetworkHelper::~NetworkHelper() {} +QuicClientBase::NetworkHelper::~NetworkHelper() = default; QuicClientBase::QuicClientBase( const QuicServerId& server_id, @@ -41,7 +41,7 @@ connected_or_attempting_connect_(false), network_helper_(std::move(network_helper)) {} -QuicClientBase::~QuicClientBase() {} +QuicClientBase::~QuicClientBase() = default; bool QuicClientBase::Initialize() { num_sent_client_hellos_ = 0;
diff --git a/net/tools/quic/quic_client_message_loop_network_helper.cc b/net/tools/quic/quic_client_message_loop_network_helper.cc index 7930221..6c524fa 100644 --- a/net/tools/quic/quic_client_message_loop_network_helper.cc +++ b/net/tools/quic/quic_client_message_loop_network_helper.cc
@@ -38,7 +38,8 @@ QuicClientBase* client) : packet_reader_started_(false), clock_(clock), client_(client) {} -QuicClientMessageLooplNetworkHelper::~QuicClientMessageLooplNetworkHelper() {} +QuicClientMessageLooplNetworkHelper::~QuicClientMessageLooplNetworkHelper() = + default; bool QuicClientMessageLooplNetworkHelper::CreateUDPSocketAndBind( QuicSocketAddress server_address,
diff --git a/net/tools/quic/quic_default_packet_writer.cc b/net/tools/quic/quic_default_packet_writer.cc index e7aa91d..34c1bab 100644 --- a/net/tools/quic/quic_default_packet_writer.cc +++ b/net/tools/quic/quic_default_packet_writer.cc
@@ -11,7 +11,7 @@ QuicDefaultPacketWriter::QuicDefaultPacketWriter(int fd) : fd_(fd), write_blocked_(false) {} -QuicDefaultPacketWriter::~QuicDefaultPacketWriter() {} +QuicDefaultPacketWriter::~QuicDefaultPacketWriter() = default; WriteResult QuicDefaultPacketWriter::WritePacket( const char* buffer,
diff --git a/net/tools/quic/quic_dispatcher.cc b/net/tools/quic/quic_dispatcher.cc index caedc70..3d1188d 100644 --- a/net/tools/quic/quic_dispatcher.cc +++ b/net/tools/quic/quic_dispatcher.cc
@@ -57,7 +57,7 @@ : send_buffer_( allocator, FLAGS_quic_reloadable_flag_quic_allow_multiple_acks_for_data2) {} - ~PacketCollector() override {} + ~PacketCollector() override = default; // QuicPacketCreator::DelegateInterface methods: void OnSerializedPacket(SerializedPacket* serialized_packet) override {
diff --git a/net/tools/quic/quic_dispatcher_test.cc b/net/tools/quic/quic_dispatcher_test.cc index 7fd76f7..9fb6b3c 100644 --- a/net/tools/quic/quic_dispatcher_test.cc +++ b/net/tools/quic/quic_dispatcher_test.cc
@@ -198,7 +198,7 @@ .WillByDefault(Return(true)); } - ~QuicDispatcherTest() override {} + ~QuicDispatcherTest() override = default; MockQuicConnection* connection1() { return reinterpret_cast<MockQuicConnection*>(session1_->connection());
diff --git a/net/tools/quic/quic_epoll_alarm_factory.cc b/net/tools/quic/quic_epoll_alarm_factory.cc index 11e8190a..deb95597 100644 --- a/net/tools/quic/quic_epoll_alarm_factory.cc +++ b/net/tools/quic/quic_epoll_alarm_factory.cc
@@ -55,7 +55,7 @@ QuicEpollAlarmFactory::QuicEpollAlarmFactory(EpollServer* epoll_server) : epoll_server_(epoll_server) {} -QuicEpollAlarmFactory::~QuicEpollAlarmFactory() {} +QuicEpollAlarmFactory::~QuicEpollAlarmFactory() = default; QuicAlarm* QuicEpollAlarmFactory::CreateAlarm(QuicAlarm::Delegate* delegate) { return new QuicEpollAlarm(epoll_server_,
diff --git a/net/tools/quic/quic_epoll_connection_helper.cc b/net/tools/quic/quic_epoll_connection_helper.cc index d72c538a..2c7f9537 100644 --- a/net/tools/quic/quic_epoll_connection_helper.cc +++ b/net/tools/quic/quic_epoll_connection_helper.cc
@@ -19,7 +19,7 @@ random_generator_(QuicRandom::GetInstance()), allocator_type_(type) {} -QuicEpollConnectionHelper::~QuicEpollConnectionHelper() {} +QuicEpollConnectionHelper::~QuicEpollConnectionHelper() = default; const QuicClock* QuicEpollConnectionHelper::GetClock() const { return &clock_;
diff --git a/net/tools/quic/quic_http_response_cache.cc b/net/tools/quic/quic_http_response_cache.cc index 8ad7b7a..90c221a 100644 --- a/net/tools/quic/quic_http_response_cache.cc +++ b/net/tools/quic/quic_http_response_cache.cc
@@ -41,13 +41,13 @@ QuicHttpResponseCache::Response::Response() : response_type_(REGULAR_RESPONSE) {} -QuicHttpResponseCache::Response::~Response() {} +QuicHttpResponseCache::Response::~Response() = default; QuicHttpResponseCache::ResourceFile::ResourceFile( const base::FilePath& file_name) : file_name_(file_name), file_name_string_(file_name.AsUTF8Unsafe()) {} -QuicHttpResponseCache::ResourceFile::~ResourceFile() {} +QuicHttpResponseCache::ResourceFile::~ResourceFile() = default; void QuicHttpResponseCache::ResourceFile::Read() { base::ReadFileToString(FilePath(file_name_), &file_contents_); @@ -227,7 +227,7 @@ SpdyHeaderBlock()); } -QuicHttpResponseCache::QuicHttpResponseCache() {} +QuicHttpResponseCache::QuicHttpResponseCache() = default; void QuicHttpResponseCache::InitializeFromDirectory( const string& cache_directory) {
diff --git a/net/tools/quic/quic_packet_reader.cc b/net/tools/quic/quic_packet_reader.cc index e4cbbf34..76de5b2 100644 --- a/net/tools/quic/quic_packet_reader.cc +++ b/net/tools/quic/quic_packet_reader.cc
@@ -54,7 +54,7 @@ #endif } -QuicPacketReader::~QuicPacketReader() {} +QuicPacketReader::~QuicPacketReader() = default; bool QuicPacketReader::ReadAndDispatchPackets( int fd,
diff --git a/net/tools/quic/quic_packet_writer_wrapper.cc b/net/tools/quic/quic_packet_writer_wrapper.cc index 1104e69..42f7d0a 100644 --- a/net/tools/quic/quic_packet_writer_wrapper.cc +++ b/net/tools/quic/quic_packet_writer_wrapper.cc
@@ -8,9 +8,9 @@ namespace net { -QuicPacketWriterWrapper::QuicPacketWriterWrapper() {} +QuicPacketWriterWrapper::QuicPacketWriterWrapper() = default; -QuicPacketWriterWrapper::~QuicPacketWriterWrapper() {} +QuicPacketWriterWrapper::~QuicPacketWriterWrapper() = default; WriteResult QuicPacketWriterWrapper::WritePacket( const char* buffer,
diff --git a/net/tools/quic/quic_per_connection_packet_writer.cc b/net/tools/quic/quic_per_connection_packet_writer.cc index 0d98cc8..c9d3b514 100644 --- a/net/tools/quic/quic_per_connection_packet_writer.cc +++ b/net/tools/quic/quic_per_connection_packet_writer.cc
@@ -10,7 +10,7 @@ QuicPacketWriter* shared_writer) : shared_writer_(shared_writer) {} -QuicPerConnectionPacketWriter::~QuicPerConnectionPacketWriter() {} +QuicPerConnectionPacketWriter::~QuicPerConnectionPacketWriter() = default; WriteResult QuicPerConnectionPacketWriter::WritePacket( const char* buffer,
diff --git a/net/tools/quic/quic_server.cc b/net/tools/quic/quic_server.cc index b3d7414..bfaefc0 100644 --- a/net/tools/quic/quic_server.cc +++ b/net/tools/quic/quic_server.cc
@@ -109,7 +109,7 @@ QuicRandom::GetInstance(), &clock, crypto_config_options_)); } -QuicServer::~QuicServer() {} +QuicServer::~QuicServer() = default; bool QuicServer::CreateUDPSocketAndListen(const QuicSocketAddress& address) { fd_ = QuicSocketUtils::CreateUDPSocket(address, &overflow_supported_);
diff --git a/net/tools/quic/quic_server_test.cc b/net/tools/quic/quic_server_test.cc index e0da5509..1c3451b 100644 --- a/net/tools/quic/quic_server_test.cc +++ b/net/tools/quic/quic_server_test.cc
@@ -42,7 +42,7 @@ std::move(session_helper), std::move(alarm_factory), response_cache) {} - ~MockQuicSimpleDispatcher() override {} + ~MockQuicSimpleDispatcher() override = default; MOCK_METHOD0(OnCanWrite, void()); MOCK_CONST_METHOD0(HasPendingWrites, bool()); @@ -56,7 +56,7 @@ : QuicServer(crypto_test_utils::ProofSourceForTesting(), &response_cache_) {} - ~TestQuicServer() override {} + ~TestQuicServer() override = default; MockQuicSimpleDispatcher* mock_dispatcher() { return mock_dispatcher_; }
diff --git a/net/tools/quic/quic_simple_crypto_server_stream_helper.cc b/net/tools/quic/quic_simple_crypto_server_stream_helper.cc index 6f310eb..56afbf82 100644 --- a/net/tools/quic/quic_simple_crypto_server_stream_helper.cc +++ b/net/tools/quic/quic_simple_crypto_server_stream_helper.cc
@@ -10,7 +10,8 @@ QuicRandom* random) : random_(random) {} -QuicSimpleCryptoServerStreamHelper::~QuicSimpleCryptoServerStreamHelper() {} +QuicSimpleCryptoServerStreamHelper::~QuicSimpleCryptoServerStreamHelper() = + default; QuicConnectionId QuicSimpleCryptoServerStreamHelper::GenerateConnectionIdForReject(
diff --git a/net/tools/quic/quic_simple_dispatcher.cc b/net/tools/quic/quic_simple_dispatcher.cc index 663783ad..832415c 100644 --- a/net/tools/quic/quic_simple_dispatcher.cc +++ b/net/tools/quic/quic_simple_dispatcher.cc
@@ -24,7 +24,7 @@ std::move(alarm_factory)), response_cache_(response_cache) {} -QuicSimpleDispatcher::~QuicSimpleDispatcher() {} +QuicSimpleDispatcher::~QuicSimpleDispatcher() = default; int QuicSimpleDispatcher::GetRstErrorCount( QuicRstStreamErrorCode error_code) const {
diff --git a/net/tools/quic/quic_simple_per_connection_packet_writer.cc b/net/tools/quic/quic_simple_per_connection_packet_writer.cc index 4889724a..9046a9b 100644 --- a/net/tools/quic/quic_simple_per_connection_packet_writer.cc +++ b/net/tools/quic/quic_simple_per_connection_packet_writer.cc
@@ -15,7 +15,8 @@ connection_(nullptr), weak_factory_(this) {} -QuicSimplePerConnectionPacketWriter::~QuicSimplePerConnectionPacketWriter() {} +QuicSimplePerConnectionPacketWriter::~QuicSimplePerConnectionPacketWriter() = + default; QuicPacketWriter* QuicSimplePerConnectionPacketWriter::shared_writer() const { return shared_writer_;
diff --git a/net/tools/quic/quic_simple_server.cc b/net/tools/quic/quic_simple_server.cc index 9f0f9d15..4ecbf753 100644 --- a/net/tools/quic/quic_simple_server.cc +++ b/net/tools/quic/quic_simple_server.cc
@@ -86,7 +86,7 @@ crypto_config_options_)); } -QuicSimpleServer::~QuicSimpleServer() {} +QuicSimpleServer::~QuicSimpleServer() = default; int QuicSimpleServer::Listen(const IPEndPoint& address) { std::unique_ptr<UDPServerSocket> socket(
diff --git a/net/tools/quic/quic_simple_server_packet_writer.cc b/net/tools/quic/quic_simple_server_packet_writer.cc index 575ceca..fa7ece1 100644 --- a/net/tools/quic/quic_simple_server_packet_writer.cc +++ b/net/tools/quic/quic_simple_server_packet_writer.cc
@@ -23,7 +23,7 @@ write_blocked_(false), weak_factory_(this) {} -QuicSimpleServerPacketWriter::~QuicSimpleServerPacketWriter() {} +QuicSimpleServerPacketWriter::~QuicSimpleServerPacketWriter() = default; WriteResult QuicSimpleServerPacketWriter::WritePacketWithCallback( const char* buffer,
diff --git a/net/tools/quic/quic_simple_server_session_helper.cc b/net/tools/quic/quic_simple_server_session_helper.cc index 51a2e42..819553a 100644 --- a/net/tools/quic/quic_simple_server_session_helper.cc +++ b/net/tools/quic/quic_simple_server_session_helper.cc
@@ -9,7 +9,7 @@ QuicSimpleServerSessionHelper::QuicSimpleServerSessionHelper(QuicRandom* random) : random_(random) {} -QuicSimpleServerSessionHelper::~QuicSimpleServerSessionHelper() {} +QuicSimpleServerSessionHelper::~QuicSimpleServerSessionHelper() = default; QuicConnectionId QuicSimpleServerSessionHelper::GenerateConnectionIdForReject( QuicConnectionId /*connection_id*/) const {
diff --git a/net/tools/quic/quic_simple_server_session_test.cc b/net/tools/quic/quic_simple_server_session_test.cc index de80c5e..712fff9e 100644 --- a/net/tools/quic/quic_simple_server_session_test.cc +++ b/net/tools/quic/quic_simple_server_session_test.cc
@@ -92,7 +92,7 @@ FLAGS_quic_reloadable_flag_enable_quic_stateless_reject_support, session, helper) {} - ~MockQuicCryptoServerStream() override {} + ~MockQuicCryptoServerStream() override = default; MOCK_METHOD1(SendServerConfigUpdate, void(const CachedNetworkParameters* cached_network_parameters));
diff --git a/net/tools/quic/quic_simple_server_stream.cc b/net/tools/quic/quic_simple_server_stream.cc index d7aad712..c0ee02d 100644 --- a/net/tools/quic/quic_simple_server_stream.cc +++ b/net/tools/quic/quic_simple_server_stream.cc
@@ -30,7 +30,7 @@ content_length_(-1), response_cache_(response_cache) {} -QuicSimpleServerStream::~QuicSimpleServerStream() {} +QuicSimpleServerStream::~QuicSimpleServerStream() = default; void QuicSimpleServerStream::OnInitialHeadersComplete( bool fin,
diff --git a/net/tools/quic/quic_simple_server_stream_test.cc b/net/tools/quic/quic_simple_server_stream_test.cc index 222a88b..7a1040d 100644 --- a/net/tools/quic/quic_simple_server_stream_test.cc +++ b/net/tools/quic/quic_simple_server_stream_test.cc
@@ -43,7 +43,7 @@ QuicHttpResponseCache* response_cache) : QuicSimpleServerStream(stream_id, session, response_cache) {} - ~QuicSimpleServerStreamPeer() override {} + ~QuicSimpleServerStreamPeer() override = default; using QuicSimpleServerStream::SendErrorResponse; using QuicSimpleServerStream::SendResponse; @@ -97,7 +97,7 @@ .WillByDefault(testing::Return(QuicConsumedData(0, false))); } - ~MockQuicSimpleServerSession() override {} + ~MockQuicSimpleServerSession() override = default; MOCK_METHOD3(OnConnectionClosed, void(QuicErrorCode error,
diff --git a/net/tools/quic/quic_spdy_client_base.cc b/net/tools/quic/quic_spdy_client_base.cc index 7eca30d..d285648 100644 --- a/net/tools/quic/quic_spdy_client_base.cc +++ b/net/tools/quic/quic_spdy_client_base.cc
@@ -28,7 +28,7 @@ bool fin) : headers_(std::move(headers)), body_(body), fin_(fin) {} -QuicSpdyClientBase::QuicDataToResend::~QuicDataToResend() {} +QuicSpdyClientBase::QuicDataToResend::~QuicDataToResend() = default; QuicSpdyClientBase::QuicSpdyClientBase( const QuicServerId& server_id,
diff --git a/net/tools/quic/quic_spdy_client_session.cc b/net/tools/quic/quic_spdy_client_session.cc index c823716..78c3880 100644 --- a/net/tools/quic/quic_spdy_client_session.cc +++ b/net/tools/quic/quic_spdy_client_session.cc
@@ -29,7 +29,7 @@ crypto_config_(crypto_config), respect_goaway_(true) {} -QuicSpdyClientSession::~QuicSpdyClientSession() {} +QuicSpdyClientSession::~QuicSpdyClientSession() = default; void QuicSpdyClientSession::Initialize() { crypto_stream_ = CreateQuicCryptoStream();
diff --git a/net/tools/quic/quic_spdy_client_stream.cc b/net/tools/quic/quic_spdy_client_stream.cc index 4b76855..ac0ff0d 100644 --- a/net/tools/quic/quic_spdy_client_stream.cc +++ b/net/tools/quic/quic_spdy_client_stream.cc
@@ -27,7 +27,7 @@ session_(session), has_preliminary_headers_(false) {} -QuicSpdyClientStream::~QuicSpdyClientStream() {} +QuicSpdyClientStream::~QuicSpdyClientStream() = default; void QuicSpdyClientStream::OnInitialHeadersComplete( bool fin,
diff --git a/net/tools/quic/quic_spdy_client_stream_test.cc b/net/tools/quic/quic_spdy_client_stream_test.cc index c2e41176e..361f87e 100644 --- a/net/tools/quic/quic_spdy_client_stream_test.cc +++ b/net/tools/quic/quic_spdy_client_stream_test.cc
@@ -39,7 +39,7 @@ &crypto_config_, push_promise_index), crypto_config_(crypto_test_utils::ProofVerifierForTesting()) {} - ~MockQuicSpdyClientSession() override {} + ~MockQuicSpdyClientSession() override = default; MOCK_METHOD1(CloseStream, void(QuicStreamId stream_id));
diff --git a/net/tools/quic/quic_time_wait_list_manager.cc b/net/tools/quic/quic_time_wait_list_manager.cc index f52f66f..9f54816 100644 --- a/net/tools/quic/quic_time_wait_list_manager.cc +++ b/net/tools/quic/quic_time_wait_list_manager.cc
@@ -319,6 +319,6 @@ QuicTimeWaitListManager::ConnectionIdData::ConnectionIdData( ConnectionIdData&& other) = default; -QuicTimeWaitListManager::ConnectionIdData::~ConnectionIdData() {} +QuicTimeWaitListManager::ConnectionIdData::~ConnectionIdData() = default; } // namespace net
diff --git a/net/tools/quic/quic_time_wait_list_manager_test.cc b/net/tools/quic/quic_time_wait_list_manager_test.cc index e5d2185b..a157676 100644 --- a/net/tools/quic/quic_time_wait_list_manager_test.cc +++ b/net/tools/quic/quic_time_wait_list_manager_test.cc
@@ -44,8 +44,8 @@ class FramerVisitorCapturingPublicReset : public NoOpFramerVisitor { public: - FramerVisitorCapturingPublicReset() {} - ~FramerVisitorCapturingPublicReset() override {} + FramerVisitorCapturingPublicReset() = default; + ~FramerVisitorCapturingPublicReset() override = default; void OnPublicResetPacket(const QuicPublicResetPacket& public_reset) override { public_reset_packet_ = public_reset; @@ -77,7 +77,7 @@ client_address_(net::test::TestPeerIPAddress(), kTestPort), writer_is_blocked_(false) {} - ~QuicTimeWaitListManagerTest() override {} + ~QuicTimeWaitListManagerTest() override = default; void SetUp() override { EXPECT_CALL(writer_, IsWriteBlocked())
diff --git a/net/tools/quic/stateless_rejector.cc b/net/tools/quic/stateless_rejector.cc index c2ded3b..668065c 100644 --- a/net/tools/quic/stateless_rejector.cc +++ b/net/tools/quic/stateless_rejector.cc
@@ -18,7 +18,7 @@ std::unique_ptr<StatelessRejector::ProcessDoneCallback> cb) : rejector_(std::move(rejector)), cb_(std::move(cb)) {} - ~ValidateCallback() override {} + ~ValidateCallback() override = default; void Run(QuicReferenceCountedPointer<Result> result, std::unique_ptr<ProofSource::Details> /* proof_source_details */) @@ -58,7 +58,7 @@ signed_config_(new QuicSignedServerConfig), params_(new QuicCryptoNegotiatedParameters) {} -StatelessRejector::~StatelessRejector() {} +StatelessRejector::~StatelessRejector() = default; void StatelessRejector::OnChlo(QuicTransportVersion version, QuicConnectionId connection_id,
diff --git a/net/tools/quic/synchronous_host_resolver.cc b/net/tools/quic/synchronous_host_resolver.cc index 165fafe..e9423a2 100644 --- a/net/tools/quic/synchronous_host_resolver.cc +++ b/net/tools/quic/synchronous_host_resolver.cc
@@ -53,7 +53,7 @@ rv_(ERR_UNEXPECTED), weak_factory_(this) {} -ResolverThread::~ResolverThread() {} +ResolverThread::~ResolverThread() = default; void ResolverThread::Run() { base::MessageLoopForIO loop;
diff --git a/net/tools/quic/test_tools/limited_mtu_test_writer.cc b/net/tools/quic/test_tools/limited_mtu_test_writer.cc index 3d2ee877..f37ace7 100644 --- a/net/tools/quic/test_tools/limited_mtu_test_writer.cc +++ b/net/tools/quic/test_tools/limited_mtu_test_writer.cc
@@ -9,7 +9,7 @@ LimitedMtuTestWriter::LimitedMtuTestWriter(QuicByteCount mtu) : mtu_(mtu) {} -LimitedMtuTestWriter::~LimitedMtuTestWriter() {} +LimitedMtuTestWriter::~LimitedMtuTestWriter() = default; WriteResult LimitedMtuTestWriter::WritePacket( const char* buffer,
diff --git a/net/tools/quic/test_tools/mock_epoll_server.cc b/net/tools/quic/test_tools/mock_epoll_server.cc index 11b6ada7..ffca8d98 100644 --- a/net/tools/quic/test_tools/mock_epoll_server.cc +++ b/net/tools/quic/test_tools/mock_epoll_server.cc
@@ -9,7 +9,7 @@ FakeTimeEpollServer::FakeTimeEpollServer() : now_in_usec_(0) {} -FakeTimeEpollServer::~FakeTimeEpollServer() {} +FakeTimeEpollServer::~FakeTimeEpollServer() = default; int64_t FakeTimeEpollServer::NowInUsec() const { return now_in_usec_; @@ -17,7 +17,7 @@ MockEpollServer::MockEpollServer() : until_in_usec_(-1) {} -MockEpollServer::~MockEpollServer() {} +MockEpollServer::~MockEpollServer() = default; int MockEpollServer::epoll_wait_impl(int epfd, struct epoll_event* events,
diff --git a/net/tools/quic/test_tools/mock_quic_session_visitor.cc b/net/tools/quic/test_tools/mock_quic_session_visitor.cc index ea52f14e..8bca2752 100644 --- a/net/tools/quic/test_tools/mock_quic_session_visitor.cc +++ b/net/tools/quic/test_tools/mock_quic_session_visitor.cc
@@ -7,13 +7,13 @@ namespace net { namespace test { -MockQuicSessionVisitor::MockQuicSessionVisitor() {} +MockQuicSessionVisitor::MockQuicSessionVisitor() = default; -MockQuicSessionVisitor::~MockQuicSessionVisitor() {} +MockQuicSessionVisitor::~MockQuicSessionVisitor() = default; -MockQuicCryptoServerStreamHelper::MockQuicCryptoServerStreamHelper() {} +MockQuicCryptoServerStreamHelper::MockQuicCryptoServerStreamHelper() = default; -MockQuicCryptoServerStreamHelper::~MockQuicCryptoServerStreamHelper() {} +MockQuicCryptoServerStreamHelper::~MockQuicCryptoServerStreamHelper() = default; } // namespace test } // namespace net
diff --git a/net/tools/quic/test_tools/mock_quic_time_wait_list_manager.cc b/net/tools/quic/test_tools/mock_quic_time_wait_list_manager.cc index a3de570..33907839 100644 --- a/net/tools/quic/test_tools/mock_quic_time_wait_list_manager.cc +++ b/net/tools/quic/test_tools/mock_quic_time_wait_list_manager.cc
@@ -26,7 +26,7 @@ QuicTimeWaitListManager_AddConnectionIdToTimeWait)); } -MockTimeWaitListManager::~MockTimeWaitListManager() {} +MockTimeWaitListManager::~MockTimeWaitListManager() = default; } // namespace test } // namespace net
diff --git a/net/tools/quic/test_tools/packet_dropping_test_writer.cc b/net/tools/quic/test_tools/packet_dropping_test_writer.cc index 3de6dba..815000d90 100644 --- a/net/tools/quic/test_tools/packet_dropping_test_writer.cc +++ b/net/tools/quic/test_tools/packet_dropping_test_writer.cc
@@ -64,7 +64,7 @@ simple_random_.set_seed(seed); } -PacketDroppingTestWriter::~PacketDroppingTestWriter() {} +PacketDroppingTestWriter::~PacketDroppingTestWriter() = default; void PacketDroppingTestWriter::Initialize(QuicConnectionHelperInterface* helper, QuicAlarmFactory* alarm_factory, @@ -241,7 +241,7 @@ // PacketDroppingTestWriter::DelayedWrite::operator=( // PacketDroppingTestWriter::DelayedWrite&& other) = default; -PacketDroppingTestWriter::DelayedWrite::~DelayedWrite() {} +PacketDroppingTestWriter::DelayedWrite::~DelayedWrite() = default; } // namespace test } // namespace net
diff --git a/net/tools/quic/test_tools/packet_reordering_writer.cc b/net/tools/quic/test_tools/packet_reordering_writer.cc index a5262847..99c965f 100644 --- a/net/tools/quic/test_tools/packet_reordering_writer.cc +++ b/net/tools/quic/test_tools/packet_reordering_writer.cc
@@ -7,9 +7,9 @@ namespace net { namespace test { -PacketReorderingWriter::PacketReorderingWriter() {} +PacketReorderingWriter::PacketReorderingWriter() = default; -PacketReorderingWriter::~PacketReorderingWriter() {} +PacketReorderingWriter::~PacketReorderingWriter() = default; WriteResult PacketReorderingWriter::WritePacket( const char* buffer,
diff --git a/net/tools/quic/test_tools/quic_test_client.cc b/net/tools/quic/test_tools/quic_test_client.cc index c6320242..83ed299 100644 --- a/net/tools/quic/test_tools/quic_test_client.cc +++ b/net/tools/quic/test_tools/quic_test_client.cc
@@ -114,7 +114,7 @@ : public QuicClientEpollNetworkHelper { public: using QuicClientEpollNetworkHelper::QuicClientEpollNetworkHelper; - ~MockableQuicClientEpollNetworkHelper() override {} + ~MockableQuicClientEpollNetworkHelper() override = default; void ProcessPacket(const QuicSocketAddress& self_address, const QuicSocketAddress& peer_address, @@ -289,7 +289,7 @@ Initialize(); } -QuicTestClient::QuicTestClient() {} +QuicTestClient::QuicTestClient() = default; QuicTestClient::~QuicTestClient() { for (std::pair<QuicStreamId, QuicSpdyClientStream*> stream : open_streams_) { @@ -760,7 +760,7 @@ test_client_(test_client), ack_listener_(std::move(ack_listener)) {} -QuicTestClient::TestClientDataToResend::~TestClientDataToResend() {} +QuicTestClient::TestClientDataToResend::~TestClientDataToResend() = default; void QuicTestClient::TestClientDataToResend::Resend() { test_client_->GetOrCreateStreamAndSendRequest(headers_.get(), body_, fin_, @@ -802,7 +802,7 @@ bytes_written(bytes_written), response_body_size(response_body_size) {} -QuicTestClient::PerStreamState::~PerStreamState() {} +QuicTestClient::PerStreamState::~PerStreamState() = default; bool QuicTestClient::PopulateHeaderBlockFromUrl(const string& uri, SpdyHeaderBlock* headers) {
diff --git a/net/tools/quic/test_tools/server_thread.cc b/net/tools/quic/test_tools/server_thread.cc index 22f52ce9..641c5fc 100644 --- a/net/tools/quic/test_tools/server_thread.cc +++ b/net/tools/quic/test_tools/server_thread.cc
@@ -29,7 +29,7 @@ port_(0), initialized_(false) {} -ServerThread::~ServerThread() {} +ServerThread::~ServerThread() = default; void ServerThread::Initialize() { if (initialized_) {
diff --git a/net/tools/transport_security_state_generator/bit_writer.cc b/net/tools/transport_security_state_generator/bit_writer.cc index 82da76a..7f1b8ef 100644 --- a/net/tools/transport_security_state_generator/bit_writer.cc +++ b/net/tools/transport_security_state_generator/bit_writer.cc
@@ -10,9 +10,9 @@ namespace transport_security_state { -BitWriter::BitWriter() {} +BitWriter::BitWriter() = default; -BitWriter::~BitWriter() {} +BitWriter::~BitWriter() = default; void BitWriter::WriteBits(uint32_t bits, uint8_t number_of_bits) { DCHECK(number_of_bits <= 32);
diff --git a/net/tools/transport_security_state_generator/huffman/huffman_builder.cc b/net/tools/transport_security_state_generator/huffman/huffman_builder.cc index c185c9d..ac625fd 100644 --- a/net/tools/transport_security_state_generator/huffman/huffman_builder.cc +++ b/net/tools/transport_security_state_generator/huffman/huffman_builder.cc
@@ -24,7 +24,7 @@ count_(count), left_(std::move(left)), right_(std::move(right)) {} - ~HuffmanNode() {} + ~HuffmanNode() = default; bool IsLeaf() const { return left_.get() == nullptr && right_.get() == nullptr; @@ -49,9 +49,9 @@ } // namespace -HuffmanBuilder::HuffmanBuilder() {} +HuffmanBuilder::HuffmanBuilder() = default; -HuffmanBuilder::~HuffmanBuilder() {} +HuffmanBuilder::~HuffmanBuilder() = default; void HuffmanBuilder::RecordUsage(uint8_t character) { DCHECK(character < 128);
diff --git a/net/tools/transport_security_state_generator/pinset.cc b/net/tools/transport_security_state_generator/pinset.cc index 03c2d9e4..dffd86c 100644 --- a/net/tools/transport_security_state_generator/pinset.cc +++ b/net/tools/transport_security_state_generator/pinset.cc
@@ -11,7 +11,7 @@ Pinset::Pinset(std::string name, std::string report_uri) : name_(name), report_uri_(report_uri) {} -Pinset::~Pinset() {} +Pinset::~Pinset() = default; void Pinset::AddStaticSPKIHash(const std::string& hash_name) { static_spki_hashes_.push_back(hash_name);
diff --git a/net/tools/transport_security_state_generator/pinsets.cc b/net/tools/transport_security_state_generator/pinsets.cc index a9e7446a..5bf81f2 100644 --- a/net/tools/transport_security_state_generator/pinsets.cc +++ b/net/tools/transport_security_state_generator/pinsets.cc
@@ -10,9 +10,9 @@ namespace transport_security_state { -Pinsets::Pinsets() {} +Pinsets::Pinsets() = default; -Pinsets::~Pinsets() {} +Pinsets::~Pinsets() = default; void Pinsets::RegisterSPKIHash(base::StringPiece name, const SPKIHash& hash) { spki_hashes_.insert(std::pair<std::string, SPKIHash>(name.as_string(), hash));
diff --git a/net/tools/transport_security_state_generator/preloaded_state_generator.cc b/net/tools/transport_security_state_generator/preloaded_state_generator.cc index a7f6db0..976cb071 100644 --- a/net/tools/transport_security_state_generator/preloaded_state_generator.cc +++ b/net/tools/transport_security_state_generator/preloaded_state_generator.cc
@@ -124,9 +124,9 @@ } // namespace -PreloadedStateGenerator::PreloadedStateGenerator() {} +PreloadedStateGenerator::PreloadedStateGenerator() = default; -PreloadedStateGenerator::~PreloadedStateGenerator() {} +PreloadedStateGenerator::~PreloadedStateGenerator() = default; std::string PreloadedStateGenerator::Generate( const std::string& preload_template,
diff --git a/net/tools/transport_security_state_generator/spki_hash.cc b/net/tools/transport_security_state_generator/spki_hash.cc index e7914c3..1fcc61e 100644 --- a/net/tools/transport_security_state_generator/spki_hash.cc +++ b/net/tools/transport_security_state_generator/spki_hash.cc
@@ -15,9 +15,9 @@ namespace transport_security_state { -SPKIHash::SPKIHash() {} +SPKIHash::SPKIHash() = default; -SPKIHash::~SPKIHash() {} +SPKIHash::~SPKIHash() = default; bool SPKIHash::FromString(base::StringPiece hash_string) { base::StringPiece base64_string;
diff --git a/net/tools/transport_security_state_generator/transport_security_state_entry.cc b/net/tools/transport_security_state_generator/transport_security_state_entry.cc index 0a56beef..ac1c9db 100644 --- a/net/tools/transport_security_state_generator/transport_security_state_entry.cc +++ b/net/tools/transport_security_state_generator/transport_security_state_entry.cc
@@ -8,8 +8,8 @@ namespace transport_security_state { -TransportSecurityStateEntry::TransportSecurityStateEntry() {} -TransportSecurityStateEntry::~TransportSecurityStateEntry() {} +TransportSecurityStateEntry::TransportSecurityStateEntry() = default; +TransportSecurityStateEntry::~TransportSecurityStateEntry() = default; } // namespace transport_security_state
diff --git a/net/tools/transport_security_state_generator/trie/trie_bit_buffer.cc b/net/tools/transport_security_state_generator/trie/trie_bit_buffer.cc index 5add4ea..654efc77 100644 --- a/net/tools/transport_security_state_generator/trie/trie_bit_buffer.cc +++ b/net/tools/transport_security_state_generator/trie/trie_bit_buffer.cc
@@ -11,9 +11,9 @@ namespace transport_security_state { -TrieBitBuffer::TrieBitBuffer() {} +TrieBitBuffer::TrieBitBuffer() = default; -TrieBitBuffer::~TrieBitBuffer() {} +TrieBitBuffer::~TrieBitBuffer() = default; void TrieBitBuffer::WriteBit(uint8_t bit) { current_byte_ |= bit << (7 - used_);
diff --git a/net/tools/transport_security_state_generator/trie/trie_writer.cc b/net/tools/transport_security_state_generator/trie/trie_writer.cc index 0f92d5b..5d83d8f 100644 --- a/net/tools/transport_security_state_generator/trie/trie_writer.cc +++ b/net/tools/transport_security_state_generator/trie/trie_writer.cc
@@ -34,7 +34,7 @@ const TransportSecurityStateEntry* entry) : reversed_name(reversed_name), entry(entry) {} -ReversedEntry::~ReversedEntry() {} +ReversedEntry::~ReversedEntry() = default; TrieWriter::TrieWriter(const HuffmanRepresentationTable& huffman_table, const NameIDMap& expect_ct_report_uri_map, @@ -47,7 +47,7 @@ pinsets_map_(pinsets_map), huffman_builder_(huffman_builder) {} -TrieWriter::~TrieWriter() {} +TrieWriter::~TrieWriter() = default; bool TrieWriter::WriteEntries(const TransportSecurityStateEntries& entries, uint32_t* root_position) {
diff --git a/net/url_request/data_protocol_handler.cc b/net/url_request/data_protocol_handler.cc index c6d9716..3f4d318e 100644 --- a/net/url_request/data_protocol_handler.cc +++ b/net/url_request/data_protocol_handler.cc
@@ -8,8 +8,7 @@ namespace net { -DataProtocolHandler::DataProtocolHandler() { -} +DataProtocolHandler::DataProtocolHandler() = default; URLRequestJob* DataProtocolHandler::MaybeCreateJob( URLRequest* request, NetworkDelegate* network_delegate) const {
diff --git a/net/url_request/file_protocol_handler.cc b/net/url_request/file_protocol_handler.cc index ff19d16ee..eb15fa2 100644 --- a/net/url_request/file_protocol_handler.cc +++ b/net/url_request/file_protocol_handler.cc
@@ -19,7 +19,7 @@ const scoped_refptr<base::TaskRunner>& file_task_runner) : file_task_runner_(file_task_runner) {} -FileProtocolHandler::~FileProtocolHandler() {} +FileProtocolHandler::~FileProtocolHandler() = default; URLRequestJob* FileProtocolHandler::MaybeCreateJob( URLRequest* request, NetworkDelegate* network_delegate) const {
diff --git a/net/url_request/ftp_protocol_handler.cc b/net/url_request/ftp_protocol_handler.cc index 5a71ecbb..f8b4b56 100644 --- a/net/url_request/ftp_protocol_handler.cc +++ b/net/url_request/ftp_protocol_handler.cc
@@ -29,8 +29,7 @@ new FtpProtocolHandler(std::move(ftp_transaction_factory))); } -FtpProtocolHandler::~FtpProtocolHandler() { -} +FtpProtocolHandler::~FtpProtocolHandler() = default; URLRequestJob* FtpProtocolHandler::MaybeCreateJob( URLRequest* request, NetworkDelegate* network_delegate) const {
diff --git a/net/url_request/network_error_logging_delegate.cc b/net/url_request/network_error_logging_delegate.cc index 365e759..c9d773a 100644 --- a/net/url_request/network_error_logging_delegate.cc +++ b/net/url_request/network_error_logging_delegate.cc
@@ -6,22 +6,15 @@ namespace net { -NetworkErrorLoggingDelegate::ErrorDetails::ErrorDetails() {} +NetworkErrorLoggingDelegate::ErrorDetails::ErrorDetails() = default; NetworkErrorLoggingDelegate::ErrorDetails::ErrorDetails( - const ErrorDetails& other) - : uri(other.uri), - referrer(other.referrer), - server_ip(other.server_ip), - protocol(other.protocol), - status_code(other.status_code), - elapsed_time(other.elapsed_time), - type(other.type) {} + const ErrorDetails& other) = default; -NetworkErrorLoggingDelegate::ErrorDetails::~ErrorDetails() {} +NetworkErrorLoggingDelegate::ErrorDetails::~ErrorDetails() = default; const char NetworkErrorLoggingDelegate::kHeaderName[] = "NEL"; -NetworkErrorLoggingDelegate::~NetworkErrorLoggingDelegate() {} +NetworkErrorLoggingDelegate::~NetworkErrorLoggingDelegate() = default; } // namespace net
diff --git a/net/url_request/redirect_info.cc b/net/url_request/redirect_info.cc index 3df301e..ef4cc2a 100644 --- a/net/url_request/redirect_info.cc +++ b/net/url_request/redirect_info.cc
@@ -111,7 +111,7 @@ RedirectInfo::RedirectInfo(const RedirectInfo& other) = default; -RedirectInfo::~RedirectInfo() {} +RedirectInfo::~RedirectInfo() = default; RedirectInfo RedirectInfo::ComputeRedirectInfo( const std::string& original_method,
diff --git a/net/url_request/report_sender.cc b/net/url_request/report_sender.cc index f41347b..63fc6e38 100644 --- a/net/url_request/report_sender.cc +++ b/net/url_request/report_sender.cc
@@ -23,7 +23,7 @@ const net::ReportSender::ErrorCallback& error_callback) : success_callback_(success_callback), error_callback_(error_callback) {} - ~CallbackInfo() override {} + ~CallbackInfo() override = default; const net::ReportSender::SuccessCallback& success_callback() const { return success_callback_; @@ -45,8 +45,7 @@ : request_context_(request_context), traffic_annotation_(traffic_annotation) {} -ReportSender::~ReportSender() { -} +ReportSender::~ReportSender() = default; void ReportSender::Send(const GURL& report_uri, base::StringPiece content_type,
diff --git a/net/url_request/report_sender_unittest.cc b/net/url_request/report_sender_unittest.cc index c12720b..abf3f5a 100644 --- a/net/url_request/report_sender_unittest.cc +++ b/net/url_request/report_sender_unittest.cc
@@ -82,7 +82,7 @@ public: MockServerErrorJob(URLRequest* request, NetworkDelegate* network_delegate) : URLRequestJob(request, network_delegate) {} - ~MockServerErrorJob() override {} + ~MockServerErrorJob() override = default; protected: void GetResponseInfo(HttpResponseInfo* info) override { @@ -99,8 +99,8 @@ class MockServerErrorJobInterceptor : public URLRequestInterceptor { public: - MockServerErrorJobInterceptor() {} - ~MockServerErrorJobInterceptor() override {} + MockServerErrorJobInterceptor() = default; + ~MockServerErrorJobInterceptor() override = default; URLRequestJob* MaybeInterceptRequest( URLRequest* request,
diff --git a/net/url_request/static_http_user_agent_settings.cc b/net/url_request/static_http_user_agent_settings.cc index 84f82c4..7cc1847 100644 --- a/net/url_request/static_http_user_agent_settings.cc +++ b/net/url_request/static_http_user_agent_settings.cc
@@ -13,8 +13,7 @@ user_agent_(user_agent) { } -StaticHttpUserAgentSettings::~StaticHttpUserAgentSettings() { -} +StaticHttpUserAgentSettings::~StaticHttpUserAgentSettings() = default; std::string StaticHttpUserAgentSettings::GetAcceptLanguage() const { return accept_language_;
diff --git a/net/url_request/test_url_fetcher_factory.cc b/net/url_request/test_url_fetcher_factory.cc index 8191bfb..04027fca 100644 --- a/net/url_request/test_url_fetcher_factory.cc +++ b/net/url_request/test_url_fetcher_factory.cc
@@ -332,7 +332,7 @@ remove_fetcher_on_delete_(false) { } -TestURLFetcherFactory::~TestURLFetcherFactory() {} +TestURLFetcherFactory::~TestURLFetcherFactory() = default; std::unique_ptr<URLFetcher> TestURLFetcherFactory::CreateURLFetcher( int id, @@ -392,7 +392,7 @@ response_bytes_ = response_data.size(); } -FakeURLFetcher::~FakeURLFetcher() {} +FakeURLFetcher::~FakeURLFetcher() = default; void FakeURLFetcher::Start() { TestURLFetcher::Start(); @@ -442,7 +442,7 @@ new FakeURLFetcher(url, delegate, response_data, response_code, status)); } -FakeURLFetcherFactory::~FakeURLFetcherFactory() {} +FakeURLFetcherFactory::~FakeURLFetcherFactory() = default; std::unique_ptr<URLFetcher> FakeURLFetcherFactory::CreateURLFetcher( int id, @@ -485,9 +485,9 @@ fake_responses_.clear(); } -URLFetcherImplFactory::URLFetcherImplFactory() {} +URLFetcherImplFactory::URLFetcherImplFactory() = default; -URLFetcherImplFactory::~URLFetcherImplFactory() {} +URLFetcherImplFactory::~URLFetcherImplFactory() = default; std::unique_ptr<URLFetcher> URLFetcherImplFactory::CreateURLFetcher( int id,
diff --git a/net/url_request/test_url_request_interceptor.cc b/net/url_request/test_url_request_interceptor.cc index 063a4b5..56b8d66 100644 --- a/net/url_request/test_url_request_interceptor.cc +++ b/net/url_request/test_url_request_interceptor.cc
@@ -38,7 +38,7 @@ } private: - ~TestURLRequestJob() override {} + ~TestURLRequestJob() override = default; DISALLOW_COPY_AND_ASSIGN(TestURLRequestJob); }; @@ -59,7 +59,7 @@ network_task_runner_(network_task_runner), worker_task_runner_(worker_task_runner), hit_count_(0) {} - ~Delegate() override {} + ~Delegate() override = default; void Register() { URLRequestFilter::GetInstance()->AddHostnameInterceptor(
diff --git a/net/url_request/url_fetcher.cc b/net/url_request/url_fetcher.cc index 52d67c8c..e815b57 100644 --- a/net/url_request/url_fetcher.cc +++ b/net/url_request/url_fetcher.cc
@@ -9,7 +9,7 @@ namespace net { -URLFetcher::~URLFetcher() {} +URLFetcher::~URLFetcher() = default; // static std::unique_ptr<URLFetcher> URLFetcher::Create(
diff --git a/net/url_request/url_fetcher_core.cc b/net/url_request/url_fetcher_core.cc index e55d11b..e8254a9 100644 --- a/net/url_request/url_fetcher_core.cc +++ b/net/url_request/url_fetcher_core.cc
@@ -44,8 +44,8 @@ // URLFetcherCore::Registry --------------------------------------------------- -URLFetcherCore::Registry::Registry() {} -URLFetcherCore::Registry::~Registry() {} +URLFetcherCore::Registry::Registry() = default; +URLFetcherCore::Registry::~Registry() = default; void URLFetcherCore::Registry::AddURLFetcherCore(URLFetcherCore* core) { DCHECK(!base::ContainsKey(fetchers_, core));
diff --git a/net/url_request/url_fetcher_delegate.cc b/net/url_request/url_fetcher_delegate.cc index 18b9ab1..359b8172 100644 --- a/net/url_request/url_fetcher_delegate.cc +++ b/net/url_request/url_fetcher_delegate.cc
@@ -16,6 +16,6 @@ int64_t current, int64_t total) {} -URLFetcherDelegate::~URLFetcherDelegate() {} +URLFetcherDelegate::~URLFetcherDelegate() = default; } // namespace net
diff --git a/net/url_request/url_fetcher_impl_unittest.cc b/net/url_request/url_fetcher_impl_unittest.cc index ea72642..080d1101 100644 --- a/net/url_request/url_fetcher_impl_unittest.cc +++ b/net/url_request/url_fetcher_impl_unittest.cc
@@ -488,7 +488,7 @@ // Version of URLFetcherTest that tests bad HTTPS requests. class URLFetcherBadHTTPSTest : public URLFetcherTest { public: - URLFetcherBadHTTPSTest() {} + URLFetcherBadHTTPSTest() = default; // URLFetcherTest: void SetUpServer() override { @@ -933,7 +933,7 @@ public: CheckUploadProgressDelegate() : chunk_(1 << 16, 'a'), num_chunks_appended_(0), last_seen_progress_(0) {} - ~CheckUploadProgressDelegate() override {} + ~CheckUploadProgressDelegate() override = default; void OnURLFetchUploadProgress(const URLFetcher* source, int64_t current, @@ -1000,7 +1000,7 @@ public: CheckDownloadProgressDelegate(int64_t file_size) : file_size_(file_size), last_seen_progress_(0) {} - ~CheckDownloadProgressDelegate() override {} + ~CheckDownloadProgressDelegate() override = default; void OnURLFetchDownloadProgress(const URLFetcher* source, int64_t current, @@ -1050,8 +1050,8 @@ class CancelOnUploadProgressDelegate : public WaitingURLFetcherDelegate { public: - CancelOnUploadProgressDelegate() {} - ~CancelOnUploadProgressDelegate() override {} + CancelOnUploadProgressDelegate() = default; + ~CancelOnUploadProgressDelegate() override = default; void OnURLFetchUploadProgress(const URLFetcher* source, int64_t current, @@ -1087,8 +1087,8 @@ class CancelOnDownloadProgressDelegate : public WaitingURLFetcherDelegate { public: - CancelOnDownloadProgressDelegate() {} - ~CancelOnDownloadProgressDelegate() override {} + CancelOnDownloadProgressDelegate() = default; + ~CancelOnDownloadProgressDelegate() override = default; void OnURLFetchDownloadProgress(const URLFetcher* source, int64_t current, @@ -1402,7 +1402,7 @@ : first_request_complete_(false), second_request_context_getter_(second_request_context_getter) {} - ~ReuseFetcherDelegate() override {} + ~ReuseFetcherDelegate() override = default; void OnURLFetchComplete(const URLFetcher* source) override { EXPECT_EQ(fetcher(), source);
diff --git a/net/url_request/url_fetcher_response_writer.cc b/net/url_request/url_fetcher_response_writer.cc index 3286e675..de0edd5 100644 --- a/net/url_request/url_fetcher_response_writer.cc +++ b/net/url_request/url_fetcher_response_writer.cc
@@ -23,11 +23,9 @@ return NULL; } -URLFetcherStringWriter::URLFetcherStringWriter() { -} +URLFetcherStringWriter::URLFetcherStringWriter() = default; -URLFetcherStringWriter::~URLFetcherStringWriter() { -} +URLFetcherStringWriter::~URLFetcherStringWriter() = default; int URLFetcherStringWriter::Initialize(const CompletionCallback& callback) { data_.clear();
diff --git a/net/url_request/url_range_request_job.cc b/net/url_request/url_range_request_job.cc index cad7b836..68cf156 100644 --- a/net/url_request/url_range_request_job.cc +++ b/net/url_request/url_range_request_job.cc
@@ -15,8 +15,7 @@ : URLRequestJob(request, delegate), range_parse_result_(OK) { } -URLRangeRequestJob::~URLRangeRequestJob() { -} +URLRangeRequestJob::~URLRangeRequestJob() = default; void URLRangeRequestJob::SetExtraRequestHeaders( const HttpRequestHeaders& headers) {
diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc index fb354c3a..0d566da4 100644 --- a/net/url_request/url_request_context_builder.cc +++ b/net/url_request/url_request_context_builder.cc
@@ -71,8 +71,8 @@ class BasicNetworkDelegate : public NetworkDelegateImpl { public: - BasicNetworkDelegate() {} - ~BasicNetworkDelegate() override {} + BasicNetworkDelegate() = default; + ~BasicNetworkDelegate() override = default; private: int OnBeforeURLRequest(URLRequest* request, @@ -186,7 +186,7 @@ URLRequestContextBuilder::HttpCacheParams::HttpCacheParams() : type(IN_MEMORY), max_size(0) {} -URLRequestContextBuilder::HttpCacheParams::~HttpCacheParams() {} +URLRequestContextBuilder::HttpCacheParams::~HttpCacheParams() = default; URLRequestContextBuilder::URLRequestContextBuilder() : enable_brotli_(false), @@ -215,7 +215,7 @@ #endif // !BUILDFLAG(ENABLE_REPORTING) } -URLRequestContextBuilder::~URLRequestContextBuilder() {} +URLRequestContextBuilder::~URLRequestContextBuilder() = default; void URLRequestContextBuilder::SetHttpNetworkSessionComponents( const URLRequestContext* request_context,
diff --git a/net/url_request/url_request_context_builder_unittest.cc b/net/url_request/url_request_context_builder_unittest.cc index 3987f1a..bb0e450 100644 --- a/net/url_request/url_request_context_builder_unittest.cc +++ b/net/url_request/url_request_context_builder_unittest.cc
@@ -32,7 +32,7 @@ public: MockHttpAuthHandlerFactory(std::string supported_scheme, int return_code) : return_code_(return_code), supported_scheme_(supported_scheme) {} - ~MockHttpAuthHandlerFactory() override {} + ~MockHttpAuthHandlerFactory() override = default; int CreateAuthHandler(HttpAuthChallengeTokenizer* challenge, HttpAuth::Target target,
diff --git a/net/url_request/url_request_context_getter.cc b/net/url_request/url_request_context_getter.cc index 0bad748..028a449 100644 --- a/net/url_request/url_request_context_getter.cc +++ b/net/url_request/url_request_context_getter.cc
@@ -24,9 +24,9 @@ observer_list_.RemoveObserver(observer); } -URLRequestContextGetter::URLRequestContextGetter() {} +URLRequestContextGetter::URLRequestContextGetter() = default; -URLRequestContextGetter::~URLRequestContextGetter() {} +URLRequestContextGetter::~URLRequestContextGetter() = default; void URLRequestContextGetter::OnDestruct() const { scoped_refptr<base::SingleThreadTaskRunner> network_task_runner = @@ -67,7 +67,7 @@ : context_(context), main_task_runner_(main_task_runner) { } -TrivialURLRequestContextGetter::~TrivialURLRequestContextGetter() {} +TrivialURLRequestContextGetter::~TrivialURLRequestContextGetter() = default; URLRequestContext* TrivialURLRequestContextGetter::GetURLRequestContext() { return context_;
diff --git a/net/url_request/url_request_context_storage.cc b/net/url_request/url_request_context_storage.cc index 703bf56..b804e251 100644 --- a/net/url_request/url_request_context_storage.cc +++ b/net/url_request/url_request_context_storage.cc
@@ -37,7 +37,7 @@ DCHECK(context); } -URLRequestContextStorage::~URLRequestContextStorage() {} +URLRequestContextStorage::~URLRequestContextStorage() = default; void URLRequestContextStorage::set_net_log(std::unique_ptr<NetLog> net_log) { context_->set_net_log(net_log.get());
diff --git a/net/url_request/url_request_data_job.cc b/net/url_request/url_request_data_job.cc index 56d243f..a3c7b7b 100644 --- a/net/url_request/url_request_data_job.cc +++ b/net/url_request/url_request_data_job.cc
@@ -63,7 +63,6 @@ return BuildResponse(url, mime_type, charset, data, NULL); } -URLRequestDataJob::~URLRequestDataJob() { -} +URLRequestDataJob::~URLRequestDataJob() = default; } // namespace net
diff --git a/net/url_request/url_request_error_job.cc b/net/url_request/url_request_error_job.cc index 8a6b5c8..85ab61f2 100644 --- a/net/url_request/url_request_error_job.cc +++ b/net/url_request/url_request_error_job.cc
@@ -20,7 +20,7 @@ error_(error), weak_factory_(this) {} -URLRequestErrorJob::~URLRequestErrorJob() {} +URLRequestErrorJob::~URLRequestErrorJob() = default; void URLRequestErrorJob::Start() { base::ThreadTaskRunnerHandle::Get()->PostTask(
diff --git a/net/url_request/url_request_file_dir_job.cc b/net/url_request/url_request_file_dir_job.cc index b34b571..1d44ad6 100644 --- a/net/url_request/url_request_file_dir_job.cc +++ b/net/url_request/url_request_file_dir_job.cc
@@ -153,7 +153,7 @@ CompleteRead(list_complete_result_); } -URLRequestFileDirJob::~URLRequestFileDirJob() {} +URLRequestFileDirJob::~URLRequestFileDirJob() = default; void URLRequestFileDirJob::DidMakeAbsolutePath( const base::FilePath& absolute_path) {
diff --git a/net/url_request/url_request_file_dir_job_unittest.cc b/net/url_request/url_request_file_dir_job_unittest.cc index de0f004a..443766d 100644 --- a/net/url_request/url_request_file_dir_job_unittest.cc +++ b/net/url_request/url_request_file_dir_job_unittest.cc
@@ -85,7 +85,7 @@ class TestJobFactory : public URLRequestJobFactory { public: explicit TestJobFactory(const base::FilePath& path) : path_(path) {} - ~TestJobFactory() override {} + ~TestJobFactory() override = default; URLRequestJob* MaybeCreateJobWithProtocolHandler( const std::string& scheme, @@ -125,9 +125,9 @@ class TestDirectoryURLRequestDelegate : public TestDelegate { public: - TestDirectoryURLRequestDelegate() {} + TestDirectoryURLRequestDelegate() = default; - ~TestDirectoryURLRequestDelegate() override {} + ~TestDirectoryURLRequestDelegate() override = default; void OnResponseStarted(URLRequest* request, int net_error) override { got_response_started_ = true;
diff --git a/net/url_request/url_request_file_job.cc b/net/url_request/url_request_file_job.cc index 8951925..7076a8ca 100644 --- a/net/url_request/url_request_file_job.cc +++ b/net/url_request/url_request_file_job.cc
@@ -184,8 +184,7 @@ void URLRequestFileJob::OnReadComplete(IOBuffer* buf, int result) { } -URLRequestFileJob::~URLRequestFileJob() { -} +URLRequestFileJob::~URLRequestFileJob() = default; std::unique_ptr<SourceStream> URLRequestFileJob::SetUpSourceStream() { std::unique_ptr<SourceStream> source = URLRequestJob::SetUpSourceStream();
diff --git a/net/url_request/url_request_file_job_unittest.cc b/net/url_request/url_request_file_job_unittest.cc index 7e8cddc3..6033669 100644 --- a/net/url_request/url_request_file_job_unittest.cc +++ b/net/url_request/url_request_file_job_unittest.cc
@@ -54,7 +54,7 @@ observed_content_->clear(); } - ~TestURLRequestFileJob() override {} + ~TestURLRequestFileJob() override = default; protected: void OnOpenComplete(int result) override { @@ -105,7 +105,7 @@ CHECK(observed_content_); } - ~TestJobFactory() override {} + ~TestJobFactory() override = default; URLRequestJob* MaybeCreateJobWithProtocolHandler( const std::string& scheme, @@ -219,7 +219,7 @@ TestDelegate delegate_; }; -URLRequestFileJobEventsTest::URLRequestFileJobEventsTest() {} +URLRequestFileJobEventsTest::URLRequestFileJobEventsTest() = default; void URLRequestFileJobEventsTest::TearDown() { // Gives a chance to close the opening file.
diff --git a/net/url_request/url_request_filter_unittest.cc b/net/url_request/url_request_filter_unittest.cc index 9ee52df..be5e3f6 100644 --- a/net/url_request/url_request_filter_unittest.cc +++ b/net/url_request/url_request_filter_unittest.cc
@@ -24,7 +24,7 @@ class TestURLRequestInterceptor : public URLRequestInterceptor { public: TestURLRequestInterceptor() : job_(nullptr) {} - ~TestURLRequestInterceptor() override {} + ~TestURLRequestInterceptor() override = default; // URLRequestInterceptor implementation: URLRequestJob* MaybeInterceptRequest(
diff --git a/net/url_request/url_request_ftp_job.cc b/net/url_request/url_request_ftp_job.cc index e73bac0..8037581 100644 --- a/net/url_request/url_request_ftp_job.cc +++ b/net/url_request/url_request_ftp_job.cc
@@ -35,7 +35,7 @@ URLRequestFtpJob::AuthData::AuthData() : state(AUTH_STATE_NEED_AUTH) {} -URLRequestFtpJob::AuthData::~AuthData() {} +URLRequestFtpJob::AuthData::~AuthData() = default; URLRequestFtpJob::URLRequestFtpJob( URLRequest* request,
diff --git a/net/url_request/url_request_ftp_job_unittest.cc b/net/url_request/url_request_ftp_job_unittest.cc index e3eb668..770c5ab 100644 --- a/net/url_request/url_request_ftp_job_unittest.cc +++ b/net/url_request/url_request_ftp_job_unittest.cc
@@ -144,7 +144,7 @@ FtpTransactionFactory* ftp_factory, FtpAuthCache* ftp_auth_cache) : URLRequestFtpJob(request, NULL, ftp_factory, ftp_auth_cache) {} - ~TestURLRequestFtpJob() override {} + ~TestURLRequestFtpJob() override = default; using URLRequestFtpJob::SetPriority; using URLRequestFtpJob::Start;
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc index 1b1afc07..3e8d80ad 100644 --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc
@@ -88,6 +88,12 @@ // last. This complements the per-verification histogram // Net.Certificate.TrustAnchor.Verify void LogTrustAnchor(const net::HashValueVector& spki_hashes) { + // Don't record metrics if there are no hashes; this is true if the HTTP + // load did not come from an active network connection, such as the disk + // cache or a synthesized response. + if (spki_hashes.empty()) + return; + int32_t id = 0; for (const auto& hash : spki_hashes) { id = net::GetNetTrustAnchorHistogramIdForSPKI(hash);
diff --git a/net/url_request/url_request_http_job_unittest.cc b/net/url_request/url_request_http_job_unittest.cc index e0820ee..5d5377e 100644 --- a/net/url_request/url_request_http_job_unittest.cc +++ b/net/url_request/url_request_http_job_unittest.cc
@@ -94,7 +94,7 @@ request->context()->http_user_agent_settings()), use_null_source_stream_(false) {} - ~TestURLRequestHttpJob() override {} + ~TestURLRequestHttpJob() override = default; // URLRequestJob implementation: std::unique_ptr<SourceStream> SetUpSourceStream() override { @@ -1017,6 +1017,39 @@ } TEST_F(URLRequestHttpJobWithMockSocketsTest, + TestHttpJobDoesNotRecordTrustAnchorHistogramsWhenNoNetworkLoad) { + SSLSocketDataProvider ssl_socket_data(net::ASYNC, net::OK); + ssl_socket_data.ssl_info.cert = + ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"); + // Simulate a request loaded from a non-network source, such as a disk + // cache. + ssl_socket_data.ssl_info.public_key_hashes.clear(); + + socket_factory_.AddSSLSocketDataProvider(&ssl_socket_data); + + MockWrite writes[] = {MockWrite(kSimpleGetMockWrite)}; + MockRead reads[] = {MockRead("HTTP/1.1 200 OK\r\n" + "Content-Length: 12\r\n\r\n"), + MockRead("Test Content")}; + StaticSocketDataProvider socket_data(reads, arraysize(reads), writes, + arraysize(writes)); + socket_factory_.AddSocketDataProvider(&socket_data); + + base::HistogramTester histograms; + histograms.ExpectTotalCount(kTrustAnchorRequestHistogram, 0); + + TestDelegate delegate; + std::unique_ptr<URLRequest> request = context_->CreateRequest( + GURL("https://www.example.com/"), DEFAULT_PRIORITY, &delegate, + TRAFFIC_ANNOTATION_FOR_TESTS); + request->Start(); + base::RunLoop().Run(); + EXPECT_THAT(delegate.request_status(), IsOk()); + + histograms.ExpectTotalCount(kTrustAnchorRequestHistogram, 0); +} + +TEST_F(URLRequestHttpJobWithMockSocketsTest, TestHttpJobRecordsMostSpecificTrustAnchorHistograms) { SSLSocketDataProvider ssl_socket_data(net::ASYNC, net::OK); ssl_socket_data.ssl_info.cert =
diff --git a/net/url_request/url_request_interceptor.cc b/net/url_request/url_request_interceptor.cc index b93611b..29801d7 100644 --- a/net/url_request/url_request_interceptor.cc +++ b/net/url_request/url_request_interceptor.cc
@@ -6,11 +6,9 @@ namespace net { -URLRequestInterceptor::URLRequestInterceptor() { -} +URLRequestInterceptor::URLRequestInterceptor() = default; -URLRequestInterceptor::~URLRequestInterceptor() { -} +URLRequestInterceptor::~URLRequestInterceptor() = default; URLRequestJob* URLRequestInterceptor::MaybeInterceptRedirect( URLRequest* request,
diff --git a/net/url_request/url_request_job.cc b/net/url_request/url_request_job.cc index 706696d..25e971d7 100644 --- a/net/url_request/url_request_job.cc +++ b/net/url_request/url_request_job.cc
@@ -58,7 +58,7 @@ DCHECK(job_); } - ~URLRequestJobSourceStream() override {} + ~URLRequestJobSourceStream() override = default; // SourceStream implementation: int Read(IOBuffer* dest_buffer,
diff --git a/net/url_request/url_request_job_factory.cc b/net/url_request/url_request_job_factory.cc index 9895ae1c..7df9291 100644 --- a/net/url_request/url_request_job_factory.cc +++ b/net/url_request/url_request_job_factory.cc
@@ -6,14 +6,14 @@ namespace net { -URLRequestJobFactory::ProtocolHandler::~ProtocolHandler() {} +URLRequestJobFactory::ProtocolHandler::~ProtocolHandler() = default; bool URLRequestJobFactory::ProtocolHandler::IsSafeRedirectTarget( const GURL& location) const { return true; } -URLRequestJobFactory::URLRequestJobFactory() {} +URLRequestJobFactory::URLRequestJobFactory() = default; URLRequestJobFactory::~URLRequestJobFactory() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
diff --git a/net/url_request/url_request_job_factory_impl.cc b/net/url_request/url_request_job_factory_impl.cc index 9bc8cd48..61187634 100644 --- a/net/url_request/url_request_job_factory_impl.cc +++ b/net/url_request/url_request_job_factory_impl.cc
@@ -18,9 +18,9 @@ } // namespace -URLRequestJobFactoryImpl::URLRequestJobFactoryImpl() {} +URLRequestJobFactoryImpl::URLRequestJobFactoryImpl() = default; -URLRequestJobFactoryImpl::~URLRequestJobFactoryImpl() {} +URLRequestJobFactoryImpl::~URLRequestJobFactoryImpl() = default; bool URLRequestJobFactoryImpl::SetProtocolHandler( const std::string& scheme,
diff --git a/net/url_request/url_request_job_factory_impl_unittest.cc b/net/url_request/url_request_job_factory_impl_unittest.cc index 3fc08177..0034152c 100644 --- a/net/url_request/url_request_job_factory_impl_unittest.cc +++ b/net/url_request/url_request_job_factory_impl_unittest.cc
@@ -40,7 +40,7 @@ } protected: - ~MockURLRequestJob() override {} + ~MockURLRequestJob() override = default; private: void StartAsync() {
diff --git a/net/url_request/url_request_job_manager.cc b/net/url_request/url_request_job_manager.cc index 7d630ee0..0817a12 100644 --- a/net/url_request/url_request_job_manager.cc +++ b/net/url_request/url_request_job_manager.cc
@@ -151,9 +151,8 @@ return false; } -URLRequestJobManager::URLRequestJobManager() { -} +URLRequestJobManager::URLRequestJobManager() = default; -URLRequestJobManager::~URLRequestJobManager() {} +URLRequestJobManager::~URLRequestJobManager() = default; } // namespace net
diff --git a/net/url_request/url_request_redirect_job.cc b/net/url_request/url_request_redirect_job.cc index 3ca1ef37..a53e3dc2 100644 --- a/net/url_request/url_request_redirect_job.cc +++ b/net/url_request/url_request_redirect_job.cc
@@ -38,7 +38,7 @@ DCHECK(!redirect_reason_.empty()); } -URLRequestRedirectJob::~URLRequestRedirectJob() {} +URLRequestRedirectJob::~URLRequestRedirectJob() = default; void URLRequestRedirectJob::GetResponseInfo(HttpResponseInfo* info) { // Should only be called after the URLRequest has been notified there's header
diff --git a/net/url_request/url_request_simple_job.cc b/net/url_request/url_request_simple_job.cc index df8bca28..3e1dec95 100644 --- a/net/url_request/url_request_simple_job.cc +++ b/net/url_request/url_request_simple_job.cc
@@ -62,7 +62,7 @@ return true; } -URLRequestSimpleJob::~URLRequestSimpleJob() {} +URLRequestSimpleJob::~URLRequestSimpleJob() = default; int URLRequestSimpleJob::ReadRawData(IOBuffer* buf, int buf_size) { buf_size = std::min(static_cast<int64_t>(buf_size),
diff --git a/net/url_request/url_request_simple_job_unittest.cc b/net/url_request/url_request_simple_job_unittest.cc index 69796e6..71ec521 100644 --- a/net/url_request/url_request_simple_job_unittest.cc +++ b/net/url_request/url_request_simple_job_unittest.cc
@@ -60,7 +60,7 @@ } private: - ~MockSimpleJob() override {} + ~MockSimpleJob() override = default; const std::string data_; @@ -71,7 +71,7 @@ public: CancelAfterFirstReadURLRequestDelegate() : run_loop_(new base::RunLoop) {} - ~CancelAfterFirstReadURLRequestDelegate() override {} + ~CancelAfterFirstReadURLRequestDelegate() override = default; void OnResponseStarted(URLRequest* request, int net_error) override { DCHECK_NE(ERR_IO_PENDING, net_error); @@ -101,7 +101,7 @@ return new MockSimpleJob(request, network_delegate, kTestData); } - ~SimpleJobProtocolHandler() override {} + ~SimpleJobProtocolHandler() override = default; private: DISALLOW_COPY_AND_ASSIGN(SimpleJobProtocolHandler);
diff --git a/net/url_request/url_request_test_util.cc b/net/url_request/url_request_test_util.cc index 17cd976..9a34c24e 100644 --- a/net/url_request/url_request_test_util.cc +++ b/net/url_request/url_request_test_util.cc
@@ -162,7 +162,7 @@ DCHECK(network_task_runner_.get()); } -TestURLRequestContextGetter::~TestURLRequestContextGetter() {} +TestURLRequestContextGetter::~TestURLRequestContextGetter() = default; TestURLRequestContext* TestURLRequestContextGetter::GetURLRequestContext() { if (!context_.get()) @@ -197,7 +197,7 @@ request_status_(ERR_IO_PENDING), buf_(new IOBuffer(kBufferSize)) {} -TestDelegate::~TestDelegate() {} +TestDelegate::~TestDelegate() = default; void TestDelegate::ClearFullRequestHeaders() { full_request_headers_.Clear(); @@ -667,9 +667,9 @@ return cancel_request_with_policy_violating_referrer_; } -TestJobInterceptor::TestJobInterceptor() {} +TestJobInterceptor::TestJobInterceptor() = default; -TestJobInterceptor::~TestJobInterceptor() {} +TestJobInterceptor::~TestJobInterceptor() = default; URLRequestJob* TestJobInterceptor::MaybeCreateJob( URLRequest* request,
diff --git a/net/url_request/url_request_throttler_entry.cc b/net/url_request/url_request_throttler_entry.cc index f81e1b5..463c0ee5 100644 --- a/net/url_request/url_request_throttler_entry.cc +++ b/net/url_request/url_request_throttler_entry.cc
@@ -236,8 +236,7 @@ } } -URLRequestThrottlerEntry::~URLRequestThrottlerEntry() { -} +URLRequestThrottlerEntry::~URLRequestThrottlerEntry() = default; void URLRequestThrottlerEntry::Initialize() { sliding_window_release_time_ = base::TimeTicks::Now();
diff --git a/net/url_request/url_request_throttler_simulation_unittest.cc b/net/url_request/url_request_throttler_simulation_unittest.cc index f332084..7041118 100644 --- a/net/url_request/url_request_throttler_simulation_unittest.cc +++ b/net/url_request/url_request_throttler_simulation_unittest.cc
@@ -70,12 +70,12 @@ public: class Actor { public: - virtual ~Actor() {} + virtual ~Actor() = default; virtual void AdvanceTime(const TimeTicks& absolute_time) = 0; virtual void PerformAction() = 0; }; - DiscreteTimeSimulation() {} + DiscreteTimeSimulation() = default; // Adds an |actor| to the simulation. The client of the simulation maintains // ownership of |actor| and must ensure its lifetime exceeds that of the @@ -322,7 +322,7 @@ } protected: - ~MockURLRequestThrottlerEntry() override {} + ~MockURLRequestThrottlerEntry() override = default; private: mutable TestTickClock fake_clock_;
diff --git a/net/url_request/url_request_throttler_test_support.cc b/net/url_request/url_request_throttler_test_support.cc index 8d10335..d1ef6ca 100644 --- a/net/url_request/url_request_throttler_test_support.cc +++ b/net/url_request/url_request_throttler_test_support.cc
@@ -8,11 +8,11 @@ namespace net { -TestTickClock::TestTickClock() {} +TestTickClock::TestTickClock() = default; TestTickClock::TestTickClock(base::TimeTicks now) : now_ticks_(now) {} -TestTickClock::~TestTickClock() {} +TestTickClock::~TestTickClock() = default; base::TimeTicks TestTickClock::NowTicks() { return now_ticks_;
diff --git a/net/url_request/url_request_throttler_unittest.cc b/net/url_request/url_request_throttler_unittest.cc index 702c1348..c2301e51 100644 --- a/net/url_request/url_request_throttler_unittest.cc +++ b/net/url_request/url_request_throttler_unittest.cc
@@ -92,7 +92,7 @@ } protected: - ~MockURLRequestThrottlerEntry() override {} + ~MockURLRequestThrottlerEntry() override = default; private: mutable TestTickClock fake_clock_;
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc index 07a8d4e..1aa782f 100644 --- a/net/url_request/url_request_unittest.cc +++ b/net/url_request/url_request_unittest.cc
@@ -320,8 +320,8 @@ // the one in base/ because it insists on bringing its own MessageLoop. class TestPowerMonitorSource : public base::PowerMonitorSource { public: - TestPowerMonitorSource() {} - ~TestPowerMonitorSource() override {} + TestPowerMonitorSource() = default; + ~TestPowerMonitorSource() override = default; void Suspend() { ProcessPowerEvent(SUSPEND_EVENT); } @@ -736,7 +736,7 @@ set_network_delegate(delegate); Init(); } - ~TestURLRequestContextWithProxy() override {} + ~TestURLRequestContextWithProxy() override = default; }; // A mock ReportSenderInterface that just remembers the latest report @@ -744,8 +744,8 @@ class MockCertificateReportSender : public TransportSecurityState::ReportSenderInterface { public: - MockCertificateReportSender() {} - ~MockCertificateReportSender() override {} + MockCertificateReportSender() = default; + ~MockCertificateReportSender() override = default; void Send(const GURL& report_uri, base::StringPiece content_type, @@ -880,7 +880,8 @@ // whitelisted files are allowed. class CookieBlockingNetworkDelegate : public TestNetworkDelegate { public: - CookieBlockingNetworkDelegate(){}; + CookieBlockingNetworkDelegate() = default; + ; // Adds |directory| to the access white list. void AddToWhitelist(const base::FilePath& directory) { @@ -1499,7 +1500,7 @@ protected: void StartAsync() override { this->NotifyRestartRequired(); } private: - ~RestartTestJob() override {} + ~RestartTestJob() override = default; }; class CancelTestJob : public URLRequestTestJob { @@ -1509,7 +1510,7 @@ protected: void StartAsync() override { request_->Cancel(); } private: - ~CancelTestJob() override {} + ~CancelTestJob() override = default; }; class CancelThenRestartTestJob : public URLRequestTestJob { @@ -1524,7 +1525,7 @@ this->NotifyRestartRequired(); } private: - ~CancelThenRestartTestJob() override {} + ~CancelThenRestartTestJob() override = default; }; // An Interceptor for use with interceptor tests. @@ -1569,8 +1570,7 @@ did_intercept_final_(false), did_cancel_final_(false) { } - ~MockURLRequestInterceptor() override { - } + ~MockURLRequestInterceptor() override = default; // URLRequestInterceptor implementation: URLRequestJob* MaybeInterceptRequest( @@ -3398,7 +3398,7 @@ public: explicit FixedDateNetworkDelegate(const std::string& fixed_date) : fixed_date_(fixed_date) {} - ~FixedDateNetworkDelegate() override {} + ~FixedDateNetworkDelegate() override = default; // NetworkDelegate implementation int OnHeadersReceived( @@ -3749,7 +3749,7 @@ } protected: - ~TestSSLConfigService() override {} + ~TestSSLConfigService() override = default; private: const bool ev_enabled_; @@ -5231,7 +5231,7 @@ callback_(callback) { } - ~AsyncDelegateLogger() {} + ~AsyncDelegateLogger() = default; void Start() { url_request_->LogBlockedBy(kFirstDelegateInfo); @@ -5278,8 +5278,8 @@ // is requested. Uses AsyncDelegateLogger. class AsyncLoggingNetworkDelegate : public TestNetworkDelegate { public: - AsyncLoggingNetworkDelegate() {} - ~AsyncLoggingNetworkDelegate() override {} + AsyncLoggingNetworkDelegate() = default; + ~AsyncLoggingNetworkDelegate() override = default; // NetworkDelegate implementation. int OnBeforeURLRequest(URLRequest* request, @@ -5371,7 +5371,7 @@ else if (cancel_stage == CANCEL_ON_READ_COMPLETED) set_cancel_in_received_data(true); } - ~AsyncLoggingUrlRequestDelegate() override {} + ~AsyncLoggingUrlRequestDelegate() override = default; // URLRequest::Delegate implementation: void OnReceivedRedirect(URLRequest* request, @@ -6783,7 +6783,7 @@ class MockExpectCTReporter : public TransportSecurityState::ExpectCTReporter { public: MockExpectCTReporter() : num_failures_(0) {} - ~MockExpectCTReporter() override {} + ~MockExpectCTReporter() override = default; void OnExpectCTFailed(const HostPortPair& host_port_pair, const GURL& report_uri, @@ -6807,7 +6807,7 @@ public: MockCTPolicyEnforcer() : default_result_(ct::CTPolicyCompliance::CT_POLICY_COMPLIES_VIA_SCTS) {} - ~MockCTPolicyEnforcer() override {} + ~MockCTPolicyEnforcer() override = default; ct::CTPolicyCompliance CheckCompliance( X509Certificate* cert, @@ -7023,7 +7023,7 @@ // ReportingService implementation: - ~TestReportingService() override {} + ~TestReportingService() override = default; void QueueReport(const GURL& url, const std::string& group, @@ -7155,8 +7155,8 @@ class TestNetworkErrorLoggingDelegate : public NetworkErrorLoggingDelegate { public: struct Header { - Header() {} - ~Header() {} + Header() = default; + ~Header() = default; url::Origin origin; std::string value; @@ -7167,7 +7167,7 @@ // NetworkErrorLoggingDelegate implementation: - ~TestNetworkErrorLoggingDelegate() override {} + ~TestNetworkErrorLoggingDelegate() override = default; void SetReportingService(ReportingService* reporting_service) override { NOTREACHED(); @@ -8646,7 +8646,7 @@ explicit FailingHttpTransactionFactory(HttpNetworkSession* network_session) : network_session_(network_session) {} - ~FailingHttpTransactionFactory() override {} + ~FailingHttpTransactionFactory() override = default; // HttpTransactionFactory methods: int CreateTransaction(RequestPriority priority, @@ -9223,7 +9223,7 @@ class URLRequestTestReferrerPolicy : public URLRequestTest { public: - URLRequestTestReferrerPolicy() {} + URLRequestTestReferrerPolicy() = default; void InstantiateSameOriginServers(net::EmbeddedTestServer::Type type) { origin_server_.reset(new EmbeddedTestServer(type)); @@ -10136,7 +10136,7 @@ false /* token binding enabled */); context_.set_ssl_config_service(ssl_config_service_.get()); } - ~HTTPSFallbackTest() override {} + ~HTTPSFallbackTest() override = default; protected: TestSSLConfigService* ssl_config_service() { @@ -10235,7 +10235,7 @@ default_context_.set_cert_verifier(&cert_verifier_); default_context_.Init(); } - ~HTTPSSessionTest() override {} + ~HTTPSSessionTest() override = default; protected: MockCertVerifier cert_verifier_;
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/root-layer-scrolls b/third_party/WebKit/LayoutTests/FlagExpectations/root-layer-scrolls index 4f0580e8d..531662dd 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/root-layer-scrolls +++ b/third_party/WebKit/LayoutTests/FlagExpectations/root-layer-scrolls
@@ -4,15 +4,11 @@ crbug.com/417782 compositing/squashing/squash-above-fixed-1.html [ Failure ] crbug.com/417782 compositing/squashing/squash-above-fixed-3.html [ Failure ] crbug.com/417782 compositing/visibility/visibility-image-layers-dynamic.html [ Failure ] -crbug.com/417782 external/wpt/css/css-position/position-sticky-root-scroller.html [ Failure ] -crbug.com/417782 fast/css/sticky/replaced-sticky.html [ Failure ] -crbug.com/417782 fast/css/sticky/sticky-style-change.html [ Failure ] crbug.com/417782 fast/dom/Window/window-xy-properties.html [ Failure ] crbug.com/417782 [ Linux Mac ] fast/dom/horizontal-scrollbar-when-dir-change.html [ Failure ] crbug.com/417782 fast/dom/rtl-scroll-to-leftmost-and-resize.html [ Failure ] crbug.com/417782 fast/dom/scroll-reveal-left-overflow.html [ Failure ] crbug.com/417782 fast/dom/scroll-reveal-top-overflow.html [ Failure ] -crbug.com/417782 fast/events/autoscroll.html [ Failure ] crbug.com/417782 fast/events/clientXY-in-zoom-and-scroll.html [ Failure ] crbug.com/417782 fast/events/drag-and-drop-autoscroll-frameset.html [ Timeout ] crbug.com/417782 fast/events/drag-and-drop-autoscroll-mainframe.html [ Timeout ] @@ -79,7 +75,6 @@ crbug.com/417782 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/timeline-paint-with-style-recalc-invalidations.js [ Failure ] crbug.com/417782 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/timeline-paint.js [ Failure ] crbug.com/417782 virtual/mojo-loading/http/tests/misc/acid3.html [ Failure ] -crbug.com/417782 virtual/mouseevent_fractional/fast/events/autoscroll.html [ Failure ] crbug.com/417782 virtual/mouseevent_fractional/fast/events/pointerevents/pointer-event-mouse-coords-in-zoom-and-scroll.html [ Failure ] crbug.com/417782 virtual/mouseevent_fractional/fast/events/pointerevents/pointer-event-pen-coords-in-zoom-and-scroll.html [ Failure ] crbug.com/417782 virtual/mouseevent_fractional/fast/events/scale-and-scroll-iframe-window.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/fast/events/autoscroll.html b/third_party/WebKit/LayoutTests/fast/events/autoscroll.html index eccbb72..601fb929 100644 --- a/third_party/WebKit/LayoutTests/fast/events/autoscroll.html +++ b/third_party/WebKit/LayoutTests/fast/events/autoscroll.html
@@ -1,46 +1,49 @@ -<html> - <head> - <script> - function test() - { - if (window.testRunner) { - testRunner.waitUntilDone(); - setTimeout(autoscrollTestPart1, 0); - } - } - function autoscrollTestPart1() - { - var ta = document.getElementById('ta'); - if (window.eventSender) { - ta.scrollIntoView(); - var h = ta.offsetTop - document.scrollingElement.scrollTop + 10; - eventSender.dragMode = false; - eventSender.mouseMoveTo(20, h); - eventSender.mouseDown(); - eventSender.mouseMoveTo(20, h); - eventSender.mouseMoveTo(100, h); - } - setTimeout(autoscrollTestPart2, 100); - } - function autoscrollTestPart2() - { - if (window.eventSender) - eventSender.mouseUp(); - if (window.testRunner) - testRunner.notifyDone(); - } - function log(msg) - { - var res = document.getElementById('res'); - res.innerHTML = res.innerHTML + msg + "<br>"; - } - </script> - </head> - <body onload="test()"> - <p>Test for <a href="http://bugs.webkit.org/show_bug.cgi?id=12331">bug 12331</a>.</p> - <p>To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll back up to the top.</p> - <div style="height:3000px"></div> - <input id="ta" value="select some of this text"></input> - <p>If the bug does not occur, you'll be left down here at the bottom.</p> - </body> -</html> +<!DOCTYPE html> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script> + let originalScrollOffset; + let t = async_test("Scroll Offset Hasn't Changed"); + + function test() + { + setTimeout(autoscrollTestPart1, 0); + } + function autoscrollTestPart1() + { + var ta = document.getElementById('ta'); + if (window.eventSender) { + ta.scrollIntoView(); + var h = ta.offsetTop - document.scrollingElement.scrollTop + 10; + originalScrollOffset = window.scrollY; + eventSender.dragMode = false; + eventSender.mouseMoveTo(20, h); + eventSender.mouseDown(); + eventSender.mouseMoveTo(20, h); + eventSender.mouseMoveTo(100, h); + } + setTimeout(autoscrollTestPart2, 100); + } + function autoscrollTestPart2() + { + if (window.eventSender) + eventSender.mouseUp(); + t.step(() => { + assert_not_equals(window.getSelection().toString(), ""); + assert_equals(window.scrollY, originalScrollOffset); + }); + t.done(); + } + function log(msg) + { + var res = document.getElementById('res'); + res.innerHTML = res.innerHTML + msg + "<br>"; + } + + addEventListener('load', test); +</script> +<p>Test for <a href="http://bugs.webkit.org/show_bug.cgi?id=12331">bug 12331</a>.</p> +<p>To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll back up to the top.</p> +<div style="height:3000px"></div> +<input id="ta" value="select some of this text"></input> +<p>If the bug does not occur, you'll be left down here at the bottom.</p>
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/events/autoscroll-expected.png deleted file mode 100644 index eefdb91..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/events/autoscroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/events/autoscroll-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/events/autoscroll-expected.txt deleted file mode 100644 index 803c821e..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/events/autoscroll-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 2574.00 scrollHeight 3174 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x3174 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x3174 - LayoutBlockFlow {BODY} at (8,8) size 769x3150 - LayoutBlockFlow {P} at (0,0) size 769x20 - LayoutText {#text} at (0,0) size 52x19 - text run at (0,0) width 52: "Test for " - LayoutInline {A} at (0,0) size 69x19 [color=#0000EE] - LayoutText {#text} at (51,0) size 69x19 - text run at (51,0) width 69: "bug 12331" - LayoutText {#text} at (119,0) size 5x19 - text run at (119,0) width 5: "." - LayoutBlockFlow {P} at (0,36) size 769x40 - LayoutText {#text} at (0,0) size 737x39 - text run at (0,0) width 737: "To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll" - text run at (0,20) width 117: "back up to the top." - LayoutBlockFlow {DIV} at (0,92) size 769x3000 - LayoutBlockFlow (anonymous) at (0,3092) size 769x22 - LayoutTextControl {INPUT} at (0,0) size 154x22 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {P} at (0,3130) size 769x20 - LayoutText {#text} at (0,0) size 404x19 - text run at (0,0) width 404: "If the bug does not occur, you'll be left down here at the bottom." -layer at (10,3103) size 150x16 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (2,3) size 150x16 - LayoutText {#text} at (0,0) size 137x16 - text run at (0,0) width 137: "select some of this text" -selection start: position 1 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -selection end: position 15 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -scrolled to 0,2574
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/pointerevent/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/pointerevent/fast/events/autoscroll-expected.png deleted file mode 100644 index b977b3a5..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/pointerevent/fast/events/autoscroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/pointerevent/fast/events/autoscroll-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/pointerevent/fast/events/autoscroll-expected.txt deleted file mode 100644 index a9b15f9..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/pointerevent/fast/events/autoscroll-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 2574.00 scrollHeight 3174 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x3174 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x3174 - LayoutBlockFlow {BODY} at (8,8) size 769x3150 - LayoutBlockFlow {P} at (0,0) size 769x20 - LayoutText {#text} at (0,0) size 50x19 - text run at (0,0) width 50: "Test for " - LayoutInline {A} at (0,0) size 67x19 [color=#0000EE] - LayoutText {#text} at (49,0) size 67x19 - text run at (49,0) width 67: "bug 12331" - LayoutText {#text} at (115,0) size 5x19 - text run at (115,0) width 5: "." - LayoutBlockFlow {P} at (0,36) size 769x40 - LayoutText {#text} at (0,0) size 763x39 - text run at (0,0) width 763: "To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll back up to" - text run at (0,20) width 46: "the top." - LayoutBlockFlow {DIV} at (0,92) size 769x3000 - LayoutBlockFlow (anonymous) at (0,3092) size 769x22 - LayoutTextControl {INPUT} at (0,0) size 154x22 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {P} at (0,3130) size 769x20 - LayoutText {#text} at (0,0) size 387x19 - text run at (0,0) width 387: "If the bug does not occur, you'll be left down here at the bottom." -layer at (10,3103) size 150x16 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (2,3) size 150x16 - LayoutText {#text} at (0,0) size 136x16 - text run at (0,0) width 136: "select some of this text" -selection start: position 1 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -selection end: position 15 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -scrolled to 0,2574
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.png deleted file mode 100644 index b977b3a5..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.txt deleted file mode 100644 index a9b15f9..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 2574.00 scrollHeight 3174 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x3174 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x3174 - LayoutBlockFlow {BODY} at (8,8) size 769x3150 - LayoutBlockFlow {P} at (0,0) size 769x20 - LayoutText {#text} at (0,0) size 50x19 - text run at (0,0) width 50: "Test for " - LayoutInline {A} at (0,0) size 67x19 [color=#0000EE] - LayoutText {#text} at (49,0) size 67x19 - text run at (49,0) width 67: "bug 12331" - LayoutText {#text} at (115,0) size 5x19 - text run at (115,0) width 5: "." - LayoutBlockFlow {P} at (0,36) size 769x40 - LayoutText {#text} at (0,0) size 763x39 - text run at (0,0) width 763: "To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll back up to" - text run at (0,20) width 46: "the top." - LayoutBlockFlow {DIV} at (0,92) size 769x3000 - LayoutBlockFlow (anonymous) at (0,3092) size 769x22 - LayoutTextControl {INPUT} at (0,0) size 154x22 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {P} at (0,3130) size 769x20 - LayoutText {#text} at (0,0) size 387x19 - text run at (0,0) width 387: "If the bug does not occur, you'll be left down here at the bottom." -layer at (10,3103) size 150x16 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (2,3) size 150x16 - LayoutText {#text} at (0,0) size 136x16 - text run at (0,0) width 136: "select some of this text" -selection start: position 1 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -selection end: position 15 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -scrolled to 0,2574
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/events/autoscroll-expected.png deleted file mode 100644 index a53920e..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/events/autoscroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/events/autoscroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/events/autoscroll-expected.txt deleted file mode 100644 index 0eefd43..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/events/autoscroll-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 2563.00 scrollHeight 3163 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x3163 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x3163 - LayoutBlockFlow {BODY} at (8,8) size 769x3139 - LayoutBlockFlow {P} at (0,0) size 769x18 - LayoutText {#text} at (0,0) size 54x18 - text run at (0,0) width 54: "Test for " - LayoutInline {A} at (0,0) size 69x18 [color=#0000EE] - LayoutText {#text} at (53,0) size 69x18 - text run at (53,0) width 69: "bug 12331" - LayoutText {#text} at (121,0) size 5x18 - text run at (121,0) width 5: "." - LayoutBlockFlow {P} at (0,34) size 769x36 - LayoutText {#text} at (0,0) size 753x36 - text run at (0,0) width 753: "To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll" - text run at (0,18) width 119: "back up to the top." - LayoutBlockFlow {DIV} at (0,86) size 769x3000 - LayoutBlockFlow (anonymous) at (0,3086) size 769x19 - LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {P} at (0,3121) size 769x18 - LayoutText {#text} at (0,0) size 411x18 - text run at (0,0) width 411: "If the bug does not occur, you'll be left down here at the bottom." -layer at (11,3097) size 125x13 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (3,3) size 125x13 - LayoutText {#text} at (0,0) size 116x13 - text run at (0,0) width 116: "select some of this text" -selection start: position 2 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -selection end: position 18 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -scrolled to 0,2563
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mouseevent_fractional/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mouseevent_fractional/fast/events/autoscroll-expected.png deleted file mode 100644 index a53920e..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mouseevent_fractional/fast/events/autoscroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mouseevent_fractional/fast/events/autoscroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mouseevent_fractional/fast/events/autoscroll-expected.txt deleted file mode 100644 index 0eefd43..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mouseevent_fractional/fast/events/autoscroll-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 2563.00 scrollHeight 3163 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x3163 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x3163 - LayoutBlockFlow {BODY} at (8,8) size 769x3139 - LayoutBlockFlow {P} at (0,0) size 769x18 - LayoutText {#text} at (0,0) size 54x18 - text run at (0,0) width 54: "Test for " - LayoutInline {A} at (0,0) size 69x18 [color=#0000EE] - LayoutText {#text} at (53,0) size 69x18 - text run at (53,0) width 69: "bug 12331" - LayoutText {#text} at (121,0) size 5x18 - text run at (121,0) width 5: "." - LayoutBlockFlow {P} at (0,34) size 769x36 - LayoutText {#text} at (0,0) size 753x36 - text run at (0,0) width 753: "To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll" - text run at (0,18) width 119: "back up to the top." - LayoutBlockFlow {DIV} at (0,86) size 769x3000 - LayoutBlockFlow (anonymous) at (0,3086) size 769x19 - LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {P} at (0,3121) size 769x18 - LayoutText {#text} at (0,0) size 411x18 - text run at (0,0) width 411: "If the bug does not occur, you'll be left down here at the bottom." -layer at (11,3097) size 125x13 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (3,3) size 125x13 - LayoutText {#text} at (0,0) size 116x13 - text run at (0,0) width 116: "select some of this text" -selection start: position 2 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -selection end: position 18 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -scrolled to 0,2563
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/pointerevent/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/pointerevent/fast/events/autoscroll-expected.png deleted file mode 100644 index 8e080964..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/pointerevent/fast/events/autoscroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/pointerevent/fast/events/autoscroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/pointerevent/fast/events/autoscroll-expected.txt deleted file mode 100644 index 0eefd43..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/pointerevent/fast/events/autoscroll-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 2563.00 scrollHeight 3163 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x3163 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x3163 - LayoutBlockFlow {BODY} at (8,8) size 769x3139 - LayoutBlockFlow {P} at (0,0) size 769x18 - LayoutText {#text} at (0,0) size 54x18 - text run at (0,0) width 54: "Test for " - LayoutInline {A} at (0,0) size 69x18 [color=#0000EE] - LayoutText {#text} at (53,0) size 69x18 - text run at (53,0) width 69: "bug 12331" - LayoutText {#text} at (121,0) size 5x18 - text run at (121,0) width 5: "." - LayoutBlockFlow {P} at (0,34) size 769x36 - LayoutText {#text} at (0,0) size 753x36 - text run at (0,0) width 753: "To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll" - text run at (0,18) width 119: "back up to the top." - LayoutBlockFlow {DIV} at (0,86) size 769x3000 - LayoutBlockFlow (anonymous) at (0,3086) size 769x19 - LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {P} at (0,3121) size 769x18 - LayoutText {#text} at (0,0) size 411x18 - text run at (0,0) width 411: "If the bug does not occur, you'll be left down here at the bottom." -layer at (11,3097) size 125x13 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (3,3) size 125x13 - LayoutText {#text} at (0,0) size 116x13 - text run at (0,0) width 116: "select some of this text" -selection start: position 2 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -selection end: position 18 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -scrolled to 0,2563
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.png deleted file mode 100644 index 8e080964..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.txt deleted file mode 100644 index 0eefd43..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 2563.00 scrollHeight 3163 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x3163 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x3163 - LayoutBlockFlow {BODY} at (8,8) size 769x3139 - LayoutBlockFlow {P} at (0,0) size 769x18 - LayoutText {#text} at (0,0) size 54x18 - text run at (0,0) width 54: "Test for " - LayoutInline {A} at (0,0) size 69x18 [color=#0000EE] - LayoutText {#text} at (53,0) size 69x18 - text run at (53,0) width 69: "bug 12331" - LayoutText {#text} at (121,0) size 5x18 - text run at (121,0) width 5: "." - LayoutBlockFlow {P} at (0,34) size 769x36 - LayoutText {#text} at (0,0) size 753x36 - text run at (0,0) width 753: "To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll" - text run at (0,18) width 119: "back up to the top." - LayoutBlockFlow {DIV} at (0,86) size 769x3000 - LayoutBlockFlow (anonymous) at (0,3086) size 769x19 - LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {P} at (0,3121) size 769x18 - LayoutText {#text} at (0,0) size 411x18 - text run at (0,0) width 411: "If the bug does not occur, you'll be left down here at the bottom." -layer at (11,3097) size 125x13 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (3,3) size 125x13 - LayoutText {#text} at (0,0) size 116x13 - text run at (0,0) width 116: "select some of this text" -selection start: position 2 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -selection end: position 18 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -scrolled to 0,2563
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/events/autoscroll-expected.png deleted file mode 100644 index 98d2db4..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/events/autoscroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/events/autoscroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/events/autoscroll-expected.txt deleted file mode 100644 index c3d69d6..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/events/autoscroll-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 2563.00 scrollHeight 3163 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x3163 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x3163 - LayoutBlockFlow {BODY} at (8,8) size 769x3139 - LayoutBlockFlow {P} at (0,0) size 769x18 - LayoutText {#text} at (0,0) size 54x18 - text run at (0,0) width 54: "Test for " - LayoutInline {A} at (0,0) size 69x18 [color=#0000EE] - LayoutText {#text} at (53,0) size 69x18 - text run at (53,0) width 69: "bug 12331" - LayoutText {#text} at (121,0) size 5x18 - text run at (121,0) width 5: "." - LayoutBlockFlow {P} at (0,34) size 769x36 - LayoutText {#text} at (0,0) size 753x36 - text run at (0,0) width 753: "To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll" - text run at (0,18) width 119: "back up to the top." - LayoutBlockFlow {DIV} at (0,86) size 769x3000 - LayoutBlockFlow (anonymous) at (0,3086) size 769x19 - LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {P} at (0,3121) size 769x18 - LayoutText {#text} at (0,0) size 411x18 - text run at (0,0) width 411: "If the bug does not occur, you'll be left down here at the bottom." -layer at (11,3097) size 125x13 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (3,3) size 125x13 - LayoutText {#text} at (0,0) size 122x13 - text run at (0,0) width 122: "select some of this text" -selection start: position 2 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -selection end: position 17 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -scrolled to 0,2563
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/mouseevent_fractional/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/mouseevent_fractional/fast/events/autoscroll-expected.png deleted file mode 100644 index 98d2db4..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/mouseevent_fractional/fast/events/autoscroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/mouseevent_fractional/fast/events/autoscroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/mouseevent_fractional/fast/events/autoscroll-expected.txt deleted file mode 100644 index c3d69d6..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/mouseevent_fractional/fast/events/autoscroll-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 2563.00 scrollHeight 3163 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x3163 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x3163 - LayoutBlockFlow {BODY} at (8,8) size 769x3139 - LayoutBlockFlow {P} at (0,0) size 769x18 - LayoutText {#text} at (0,0) size 54x18 - text run at (0,0) width 54: "Test for " - LayoutInline {A} at (0,0) size 69x18 [color=#0000EE] - LayoutText {#text} at (53,0) size 69x18 - text run at (53,0) width 69: "bug 12331" - LayoutText {#text} at (121,0) size 5x18 - text run at (121,0) width 5: "." - LayoutBlockFlow {P} at (0,34) size 769x36 - LayoutText {#text} at (0,0) size 753x36 - text run at (0,0) width 753: "To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll" - text run at (0,18) width 119: "back up to the top." - LayoutBlockFlow {DIV} at (0,86) size 769x3000 - LayoutBlockFlow (anonymous) at (0,3086) size 769x19 - LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {P} at (0,3121) size 769x18 - LayoutText {#text} at (0,0) size 411x18 - text run at (0,0) width 411: "If the bug does not occur, you'll be left down here at the bottom." -layer at (11,3097) size 125x13 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (3,3) size 125x13 - LayoutText {#text} at (0,0) size 122x13 - text run at (0,0) width 122: "select some of this text" -selection start: position 2 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -selection end: position 17 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -scrolled to 0,2563
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/events/autoscroll-expected.png deleted file mode 100644 index 03b0287..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/events/autoscroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/events/autoscroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/events/autoscroll-expected.txt deleted file mode 100644 index 88c925d..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/events/autoscroll-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 2563.00 scrollHeight 3163 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x3163 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x3163 - LayoutBlockFlow {BODY} at (8,8) size 769x3139 - LayoutBlockFlow {P} at (0,0) size 769x18 - LayoutText {#text} at (0,0) size 54x18 - text run at (0,0) width 54: "Test for " - LayoutInline {A} at (0,0) size 69x18 [color=#0000EE] - LayoutText {#text} at (53,0) size 69x18 - text run at (53,0) width 69: "bug 12331" - LayoutText {#text} at (121,0) size 5x18 - text run at (121,0) width 5: "." - LayoutBlockFlow {P} at (0,34) size 769x36 - LayoutText {#text} at (0,0) size 753x36 - text run at (0,0) width 753: "To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll" - text run at (0,18) width 119: "back up to the top." - LayoutBlockFlow {DIV} at (0,86) size 769x3000 - LayoutBlockFlow (anonymous) at (0,3086) size 769x19 - LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {P} at (0,3121) size 769x18 - LayoutText {#text} at (0,0) size 411x18 - text run at (0,0) width 411: "If the bug does not occur, you'll be left down here at the bottom." -layer at (11,3097) size 125x13 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (3,3) size 125x13 - LayoutText {#text} at (0,0) size 123x13 - text run at (0,0) width 123: "select some of this text" -selection start: position 2 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -selection end: position 17 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -scrolled to 0,2563
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/mouseevent_fractional/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/mouseevent_fractional/fast/events/autoscroll-expected.png deleted file mode 100644 index 03b0287..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/mouseevent_fractional/fast/events/autoscroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/mouseevent_fractional/fast/events/autoscroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/mouseevent_fractional/fast/events/autoscroll-expected.txt deleted file mode 100644 index 88c925d..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/mouseevent_fractional/fast/events/autoscroll-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 2563.00 scrollHeight 3163 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x3163 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x3163 - LayoutBlockFlow {BODY} at (8,8) size 769x3139 - LayoutBlockFlow {P} at (0,0) size 769x18 - LayoutText {#text} at (0,0) size 54x18 - text run at (0,0) width 54: "Test for " - LayoutInline {A} at (0,0) size 69x18 [color=#0000EE] - LayoutText {#text} at (53,0) size 69x18 - text run at (53,0) width 69: "bug 12331" - LayoutText {#text} at (121,0) size 5x18 - text run at (121,0) width 5: "." - LayoutBlockFlow {P} at (0,34) size 769x36 - LayoutText {#text} at (0,0) size 753x36 - text run at (0,0) width 753: "To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll" - text run at (0,18) width 119: "back up to the top." - LayoutBlockFlow {DIV} at (0,86) size 769x3000 - LayoutBlockFlow (anonymous) at (0,3086) size 769x19 - LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {P} at (0,3121) size 769x18 - LayoutText {#text} at (0,0) size 411x18 - text run at (0,0) width 411: "If the bug does not occur, you'll be left down here at the bottom." -layer at (11,3097) size 125x13 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (3,3) size 125x13 - LayoutText {#text} at (0,0) size 123x13 - text run at (0,0) width 123: "select some of this text" -selection start: position 2 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -selection end: position 17 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -scrolled to 0,2563
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/pointerevent/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/pointerevent/fast/events/autoscroll-expected.png deleted file mode 100644 index d41241d1..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/pointerevent/fast/events/autoscroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/pointerevent/fast/events/autoscroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/pointerevent/fast/events/autoscroll-expected.txt deleted file mode 100644 index c3d69d6..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/pointerevent/fast/events/autoscroll-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 2563.00 scrollHeight 3163 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x3163 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x3163 - LayoutBlockFlow {BODY} at (8,8) size 769x3139 - LayoutBlockFlow {P} at (0,0) size 769x18 - LayoutText {#text} at (0,0) size 54x18 - text run at (0,0) width 54: "Test for " - LayoutInline {A} at (0,0) size 69x18 [color=#0000EE] - LayoutText {#text} at (53,0) size 69x18 - text run at (53,0) width 69: "bug 12331" - LayoutText {#text} at (121,0) size 5x18 - text run at (121,0) width 5: "." - LayoutBlockFlow {P} at (0,34) size 769x36 - LayoutText {#text} at (0,0) size 753x36 - text run at (0,0) width 753: "To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll" - text run at (0,18) width 119: "back up to the top." - LayoutBlockFlow {DIV} at (0,86) size 769x3000 - LayoutBlockFlow (anonymous) at (0,3086) size 769x19 - LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {P} at (0,3121) size 769x18 - LayoutText {#text} at (0,0) size 411x18 - text run at (0,0) width 411: "If the bug does not occur, you'll be left down here at the bottom." -layer at (11,3097) size 125x13 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (3,3) size 125x13 - LayoutText {#text} at (0,0) size 122x13 - text run at (0,0) width 122: "select some of this text" -selection start: position 2 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -selection end: position 17 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -scrolled to 0,2563
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.png deleted file mode 100644 index d41241d1..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.txt deleted file mode 100644 index c3d69d6..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 2563.00 scrollHeight 3163 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x3163 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x3163 - LayoutBlockFlow {BODY} at (8,8) size 769x3139 - LayoutBlockFlow {P} at (0,0) size 769x18 - LayoutText {#text} at (0,0) size 54x18 - text run at (0,0) width 54: "Test for " - LayoutInline {A} at (0,0) size 69x18 [color=#0000EE] - LayoutText {#text} at (53,0) size 69x18 - text run at (53,0) width 69: "bug 12331" - LayoutText {#text} at (121,0) size 5x18 - text run at (121,0) width 5: "." - LayoutBlockFlow {P} at (0,34) size 769x36 - LayoutText {#text} at (0,0) size 753x36 - text run at (0,0) width 753: "To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll" - text run at (0,18) width 119: "back up to the top." - LayoutBlockFlow {DIV} at (0,86) size 769x3000 - LayoutBlockFlow (anonymous) at (0,3086) size 769x19 - LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {P} at (0,3121) size 769x18 - LayoutText {#text} at (0,0) size 411x18 - text run at (0,0) width 411: "If the bug does not occur, you'll be left down here at the bottom." -layer at (11,3097) size 125x13 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (3,3) size 125x13 - LayoutText {#text} at (0,0) size 122x13 - text run at (0,0) width 122: "select some of this text" -selection start: position 2 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -selection end: position 17 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -scrolled to 0,2563
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/events/autoscroll-expected.png deleted file mode 100644 index d39affe..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/fast/events/autoscroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/events/autoscroll-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/events/autoscroll-expected.txt deleted file mode 100644 index ac68136..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/fast/events/autoscroll-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 2574.00 scrollHeight 3174 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x3174 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x3174 - LayoutBlockFlow {BODY} at (8,8) size 769x3150 - LayoutBlockFlow {P} at (0,0) size 769x20 - LayoutText {#text} at (0,0) size 50x19 - text run at (0,0) width 50: "Test for " - LayoutInline {A} at (0,0) size 67x19 [color=#0000EE] - LayoutText {#text} at (49,0) size 67x19 - text run at (49,0) width 67: "bug 12331" - LayoutText {#text} at (115,0) size 5x19 - text run at (115,0) width 5: "." - LayoutBlockFlow {P} at (0,36) size 769x40 - LayoutText {#text} at (0,0) size 763x39 - text run at (0,0) width 763: "To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll back up to" - text run at (0,20) width 46: "the top." - LayoutBlockFlow {DIV} at (0,92) size 769x3000 - LayoutBlockFlow (anonymous) at (0,3092) size 769x22 - LayoutTextControl {INPUT} at (0,0) size 173x22 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {P} at (0,3130) size 769x20 - LayoutText {#text} at (0,0) size 387x19 - text run at (0,0) width 387: "If the bug does not occur, you'll be left down here at the bottom." -layer at (10,3103) size 169x16 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (2,3) size 169x16 - LayoutText {#text} at (0,0) size 136x16 - text run at (0,0) width 136: "select some of this text" -selection start: position 1 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -selection end: position 15 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -scrolled to 0,2574
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/pointerevent/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/pointerevent/fast/events/autoscroll-expected.png deleted file mode 100644 index 757da13..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/pointerevent/fast/events/autoscroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/pointerevent/fast/events/autoscroll-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/pointerevent/fast/events/autoscroll-expected.txt deleted file mode 100644 index aa256c2..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/pointerevent/fast/events/autoscroll-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 2566.00 scrollHeight 3166 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x3166 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x3166 - LayoutBlockFlow {BODY} at (8,8) size 769x3142 - LayoutBlockFlow {P} at (0,0) size 769x18 - LayoutText {#text} at (0,0) size 54x17 - text run at (0,0) width 54: "Test for " - LayoutInline {A} at (0,0) size 69x17 [color=#0000EE] - LayoutText {#text} at (53,0) size 69x17 - text run at (53,0) width 69: "bug 12331" - LayoutText {#text} at (121,0) size 5x17 - text run at (121,0) width 5: "." - LayoutBlockFlow {P} at (0,34) size 769x36 - LayoutText {#text} at (0,0) size 754x35 - text run at (0,0) width 754: "To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll" - text run at (0,18) width 119: "back up to the top." - LayoutBlockFlow {DIV} at (0,86) size 769x3000 - LayoutBlockFlow (anonymous) at (0,3086) size 769x22 - LayoutTextControl {INPUT} at (0,0) size 173x22 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {P} at (0,3124) size 769x18 - LayoutText {#text} at (0,0) size 411x17 - text run at (0,0) width 411: "If the bug does not occur, you'll be left down here at the bottom." -layer at (10,3097) size 169x16 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (2,3) size 169x16 - LayoutText {#text} at (0,0) size 136x16 - text run at (0,0) width 136: "select some of this text" -selection start: position 1 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -selection end: position 15 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -scrolled to 0,2566
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.png deleted file mode 100644 index 757da13..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.txt deleted file mode 100644 index aa256c2..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/trustedeventsdefaultaction/fast/events/autoscroll-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 2566.00 scrollHeight 3166 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x3166 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x3166 - LayoutBlockFlow {BODY} at (8,8) size 769x3142 - LayoutBlockFlow {P} at (0,0) size 769x18 - LayoutText {#text} at (0,0) size 54x17 - text run at (0,0) width 54: "Test for " - LayoutInline {A} at (0,0) size 69x17 [color=#0000EE] - LayoutText {#text} at (53,0) size 69x17 - text run at (53,0) width 69: "bug 12331" - LayoutText {#text} at (121,0) size 5x17 - text run at (121,0) width 5: "." - LayoutBlockFlow {P} at (0,34) size 769x36 - LayoutText {#text} at (0,0) size 754x35 - text run at (0,0) width 754: "To test manually, scroll down until you find the input element. Select some text. If the bug occurs, the page will scroll" - text run at (0,18) width 119: "back up to the top." - LayoutBlockFlow {DIV} at (0,86) size 769x3000 - LayoutBlockFlow (anonymous) at (0,3086) size 769x22 - LayoutTextControl {INPUT} at (0,0) size 173x22 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {P} at (0,3124) size 769x18 - LayoutText {#text} at (0,0) size 411x17 - text run at (0,0) width 411: "If the bug does not occur, you'll be left down here at the bottom." -layer at (10,3097) size 169x16 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (2,3) size 169x16 - LayoutText {#text} at (0,0) size 136x16 - text run at (0,0) width 136: "select some of this text" -selection start: position 1 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -selection end: position 15 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -scrolled to 0,2566
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp b/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp index edcd08fa..9679326a 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp
@@ -353,8 +353,10 @@ v8::Local<v8::Context> context, v8::Local<v8::String> source) { if (ExecutionContext* execution_context = ToExecutionContext(context)) { + DCHECK(execution_context->IsDocument() || + execution_context->IsPaintWorkletGlobalScope()); if (ContentSecurityPolicy* policy = - ToDocument(execution_context)->GetContentSecurityPolicy()) { + execution_context->GetContentSecurityPolicy()) { v8::String::Value source_str(source); UChar snippet[ContentSecurityPolicy::kMaxSampleLength + 1]; size_t len = std::min((sizeof(snippet) / sizeof(UChar)) - 1,
diff --git a/third_party/WebKit/Source/bindings/core/v8/WorkerOrWorkletScriptController.cpp b/third_party/WebKit/Source/bindings/core/v8/WorkerOrWorkletScriptController.cpp index 9af02a4..7f8ef33 100644 --- a/third_party/WebKit/Source/bindings/core/v8/WorkerOrWorkletScriptController.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/WorkerOrWorkletScriptController.cpp
@@ -242,6 +242,13 @@ context, *world_, global_object, v8::Local<v8::Object>(), v8::Local<v8::Function>(), global_interface_template); + if (!disable_eval_pending_.IsEmpty()) { + script_state_->GetContext()->AllowCodeGenerationFromStrings(false); + script_state_->GetContext()->SetErrorMessageForCodeGenerationFromStrings( + V8String(isolate_, disable_eval_pending_)); + disable_eval_pending_ = String(); + } + return true; } @@ -260,13 +267,6 @@ ScriptState::Scope scope(script_state_.get()); - if (!disable_eval_pending_.IsEmpty()) { - script_state_->GetContext()->AllowCodeGenerationFromStrings(false); - script_state_->GetContext()->SetErrorMessageForCodeGenerationFromStrings( - V8String(isolate_, disable_eval_pending_)); - disable_eval_pending_ = String(); - } - v8::TryCatch block(isolate_); v8::Local<v8::Script> compiled_script;
diff --git a/third_party/WebKit/Source/core/frame/LocalFrameView.cpp b/third_party/WebKit/Source/core/frame/LocalFrameView.cpp index 37748c5..25a6fea 100644 --- a/third_party/WebKit/Source/core/frame/LocalFrameView.cpp +++ b/third_party/WebKit/Source/core/frame/LocalFrameView.cpp
@@ -5446,32 +5446,11 @@ bool LocalFrameView::HasVisibleSlowRepaintViewportConstrainedObjects() const { if (!ViewportConstrainedObjects()) return false; - for (const LayoutObject* layout_object : *ViewportConstrainedObjects()) { DCHECK(layout_object->IsBoxModelObject() && layout_object->HasLayer()); DCHECK(layout_object->Style()->GetPosition() == EPosition::kFixed || layout_object->Style()->GetPosition() == EPosition::kSticky); - PaintLayer* layer = ToLayoutBoxModelObject(layout_object)->Layer(); - - // Whether the Layer sticks to the viewport is a tree-depenent - // property and our viewportConstrainedObjects collection is maintained - // with only LayoutObject-level information. - if (!layer->FixedToViewport() && !layer->SticksToScroller()) - continue; - - // If the whole subtree is invisible, there's no reason to scroll on - // the main thread because we don't need to generate invalidations - // for invisible content. - if (layer->SubtreeIsInvisible()) - continue; - - // We're only smart enough to scroll viewport-constrainted objects - // in the compositor if they have their own backing or they paint - // into a grouped back (which necessarily all have the same viewport - // constraints). - CompositingState compositing_state = layer->GetCompositingState(); - if (compositing_state != kPaintsIntoOwnBacking && - compositing_state != kPaintsIntoGroupedBacking) + if (ToLayoutBoxModelObject(layout_object)->IsSlowRepaintConstrainedObject()) return true; } return false;
diff --git a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp index 07e1010..36cb4b6 100644 --- a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp
@@ -843,7 +843,8 @@ .BoundingBox() .Location()); LayoutBox* scroll_ancestor = - Layer()->AncestorOverflowLayer()->IsRootLayer() + Layer()->AncestorOverflowLayer()->IsRootLayer() && + !RuntimeEnabledFeatures::RootLayerScrollingEnabled() ? nullptr : &ToLayoutBox(Layer()->AncestorOverflowLayer()->GetLayoutObject()); @@ -1022,9 +1023,40 @@ scrollable_area->GetStickyConstraintsMap().Set(Layer(), constraints); } +bool LayoutBoxModelObject::IsSlowRepaintConstrainedObject() const { + if (!HasLayer() || (Style()->GetPosition() != EPosition::kFixed && + Style()->GetPosition() != EPosition::kSticky)) { + return false; + } + + PaintLayer* layer = Layer(); + + // Whether the Layer sticks to the viewport is a tree-depenent + // property and our viewportConstrainedObjects collection is maintained + // with only LayoutObject-level information. + if (!layer->FixedToViewport() && !layer->SticksToScroller()) + return false; + + // If the whole subtree is invisible, there's no reason to scroll on + // the main thread because we don't need to generate invalidations + // for invisible content. + if (layer->SubtreeIsInvisible()) + return false; + + // We're only smart enough to scroll viewport-constrainted objects + // in the compositor if they have their own backing or they paint + // into a grouped back (which necessarily all have the same viewport + // constraints). + return (layer->GetCompositingState() == kNotComposited); +} + FloatRect LayoutBoxModelObject::ComputeStickyConstrainingRect() const { - if (Layer()->AncestorOverflowLayer()->IsRootLayer()) - return View()->GetFrameView()->VisibleContentRect(); + if (Layer()->AncestorOverflowLayer()->IsRootLayer()) { + return View() + ->GetFrameView() + ->LayoutViewportScrollableArea() + ->VisibleContentRect(); + } LayoutBox* enclosing_clipping_box = Layer()->AncestorOverflowLayer()->GetLayoutBox();
diff --git a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h index cb5d1ebd..34a1f1c 100644 --- a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h +++ b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h
@@ -145,6 +145,7 @@ FloatRect ComputeStickyConstrainingRect() const; void UpdateStickyPositionConstraints() const; LayoutSize StickyPositionOffset() const; + bool IsSlowRepaintConstrainedObject() const; LayoutSize OffsetForInFlowPosition() const;
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp index 0cb5247..b2bb849 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp +++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
@@ -548,6 +548,7 @@ if (!frame_view->InvalidateViewportConstrainedObjects()) requires_paint_invalidation = true; } + InvalidatePaintForStickyDescendants(); } if (requires_paint_invalidation) @@ -1737,6 +1738,25 @@ } } +bool PaintLayerScrollableArea::HasNonCompositedStickyDescendants() const { + if (const PaintLayerScrollableAreaRareData* d = RareData()) { + for (const PaintLayer* sticky_layer : d->sticky_constraints_map_.Keys()) { + if (sticky_layer->GetLayoutObject().IsSlowRepaintConstrainedObject()) + return true; + } + } + return false; +} + +void PaintLayerScrollableArea::InvalidatePaintForStickyDescendants() { + if (PaintLayerScrollableAreaRareData* d = RareData()) { + for (PaintLayer* sticky_layer : d->sticky_constraints_map_.Keys()) { + sticky_layer->GetLayoutObject() + .SetShouldDoFullPaintInvalidationIncludingNonCompositingDescendants(); + } + } +} + IntSize PaintLayerScrollableArea::OffsetFromResizeCorner( const IntPoint& absolute_point) const { // Currently the resize corner is either the bottom right corner or the bottom @@ -1981,6 +2001,8 @@ if (frame->View()->GetMainThreadScrollingReasons()) return true; } + if (HasNonCompositedStickyDescendants()) + return true; return ScrollableArea::ShouldScrollOnMainThread(); }
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h index 6d1fbd3..2f9134d 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h +++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h
@@ -482,6 +482,8 @@ void InvalidateAllStickyConstraints(); void InvalidateStickyConstraintsFor(PaintLayer*, bool needs_compositing_update = true); + void InvalidatePaintForStickyDescendants(); + bool HasNonCompositedStickyDescendants() const; uint32_t GetNonCompositedMainThreadScrollingReasons() { return non_composited_main_thread_scrolling_reasons_; } @@ -546,6 +548,9 @@ ScrollingCoordinator* GetScrollingCoordinator() const; PaintLayerScrollableAreaRareData* RareData() { return rare_data_.get(); } + const PaintLayerScrollableAreaRareData* RareData() const { + return rare_data_.get(); + } PaintLayerScrollableAreaRareData& EnsureRareData() { if (!rare_data_)
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadScheduler.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadScheduler.cpp index 13145444..f7b2eda 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadScheduler.cpp +++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadScheduler.cpp
@@ -101,18 +101,57 @@ void ResourceLoadScheduler::Request(ResourceLoadSchedulerClient* client, ThrottleOption option, + ResourceLoadPriority priority, + int intra_priority, ResourceLoadScheduler::ClientId* id) { *id = GenerateClientId(); if (is_shutdown_) return; - if (!is_enabled_ || option == ThrottleOption::kCanNotBeThrottled) { + if (!Platform::Current()->IsRendererSideResourceSchedulerEnabled()) { + // Prioritization is effectively disabled as we use the constant priority. + priority = ResourceLoadPriority::kMedium; + intra_priority = 0; + } + + if (!is_enabled_ || option == ThrottleOption::kCanNotBeThrottled || + !IsThrottablePriority(priority)) { Run(*id, client); return; } - pending_request_map_.insert(*id, client); - pending_requests_.insert(ClientIdWithPriority(*id)); + pending_requests_.emplace(*id, priority, intra_priority); + pending_request_map_.insert( + *id, new ClientWithPriority(client, priority, intra_priority)); + MaybeRun(); +} + +void ResourceLoadScheduler::SetPriority(ClientId client_id, + ResourceLoadPriority priority, + int intra_priority) { + if (!Platform::Current()->IsRendererSideResourceSchedulerEnabled()) + return; + + auto client_it = pending_request_map_.find(client_id); + if (client_it == pending_request_map_.end()) + return; + + auto it = pending_requests_.find(ClientIdWithPriority( + client_id, client_it->value->priority, client_it->value->intra_priority)); + + DCHECK(it != pending_requests_.end()); + pending_requests_.erase(it); + + client_it->value->priority = priority; + client_it->value->intra_priority = intra_priority; + + if (!IsThrottablePriority(priority)) { + ResourceLoadSchedulerClient* client = client_it->value->client; + pending_request_map_.erase(client_it); + Run(client_id, client); + return; + } + pending_requests_.emplace(client_id, priority, intra_priority); MaybeRun(); } @@ -202,6 +241,16 @@ } } +bool ResourceLoadScheduler::IsThrottablePriority( + ResourceLoadPriority priority) const { + if (Platform::Current()->IsRendererSideResourceSchedulerEnabled()) { + if (priority >= ResourceLoadPriority::kMedium) + return false; + } + + return true; +} + void ResourceLoadScheduler::OnThrottlingStateChanged( WebFrameScheduler::ThrottlingState state) { switch (state) { @@ -246,7 +295,7 @@ auto found = pending_request_map_.find(id); if (found == pending_request_map_.end()) continue; // Already released. - ResourceLoadSchedulerClient* client = found->value; + ResourceLoadSchedulerClient* client = found->value->client; pending_request_map_.erase(found); Run(id, client); }
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadScheduler.h b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadScheduler.h index 4a8fe7f..c05b04af 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadScheduler.h +++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadScheduler.h
@@ -11,6 +11,7 @@ #include "platform/heap/HeapAllocator.h" #include "platform/loader/fetch/FetchContext.h" #include "platform/loader/fetch/Resource.h" +#include "platform/loader/fetch/ResourceLoaderOptions.h" #include "platform/wtf/HashSet.h" namespace blink { @@ -74,7 +75,15 @@ // ResourceLoadSchedulerClient::Run(), but it is guaranteed that ClientId is // populated before ResourceLoadSchedulerClient::Run() is called, so that the // caller can call Release() with the assigned ClientId correctly. - void Request(ResourceLoadSchedulerClient*, ThrottleOption, ClientId*); + void Request(ResourceLoadSchedulerClient*, + ThrottleOption, + ResourceLoadPriority, + int intra_priority, + ClientId*); + + // Updates the priority information of the given client. This function may + // initiate a new resource loading. + void SetPriority(ClientId, ResourceLoadPriority, int intra_priority); // ResourceLoadSchedulerClient should call this method when the loading is // finished, or canceled. This method can be called in a pre-finalization @@ -86,36 +95,52 @@ void OnNetworkQuiet(); + // Returns whether we can throttle a request with the given priority. + // This function returns false when RendererSideResourceScheduler is disabled. + bool IsThrottablePriority(ResourceLoadPriority) const; + // WebFrameScheduler::Observer overrides: void OnThrottlingStateChanged(WebFrameScheduler::ThrottlingState) override; private: class ClientIdWithPriority { public: + struct Compare { + bool operator()(const ClientIdWithPriority& x, + const ClientIdWithPriority& y) const { + if (x.priority != y.priority) + return x.priority > y.priority; + if (x.intra_priority != y.intra_priority) + return x.intra_priority > y.intra_priority; + return x.client_id < y.client_id; + } + }; + ClientIdWithPriority(ClientId client_id, WebURLRequest::Priority priority, int intra_priority) : client_id(client_id), priority(priority), intra_priority(intra_priority) {} - explicit ClientIdWithPriority(ClientId client_id) - : ClientIdWithPriority(client_id, - WebURLRequest::Priority::kUnresolved, - 0) {} - - bool operator<(const ClientIdWithPriority& other) const { - if (priority != other.priority) - return priority < other.priority; - if (intra_priority != other.intra_priority) - return intra_priority < other.intra_priority; - return client_id < other.client_id; - } const ClientId client_id; const WebURLRequest::Priority priority; const int intra_priority; }; + struct ClientWithPriority : public GarbageCollected<ClientWithPriority> { + ClientWithPriority(ResourceLoadSchedulerClient* client, + ResourceLoadPriority priority, + int intra_priority) + : client(client), priority(priority), intra_priority(intra_priority) {} + + void Trace(blink::Visitor* visitor) { visitor->Trace(client); } + + Member<ResourceLoadSchedulerClient> client; + ResourceLoadPriority priority; + int intra_priority; + }; + ResourceLoadScheduler(FetchContext*); // Generates the next ClientId. @@ -164,10 +189,10 @@ ThrottlingHistory throttling_history_ = ThrottlingHistory::kInitial; // Holds clients that haven't been granted, and are waiting for a grant. - HeapHashMap<ClientId, Member<ResourceLoadSchedulerClient>> - pending_request_map_; + HeapHashMap<ClientId, Member<ClientWithPriority>> pending_request_map_; // We use std::set here because WTF doesn't have its counterpart. - std::set<ClientIdWithPriority> pending_requests_; + std::set<ClientIdWithPriority, ClientIdWithPriority::Compare> + pending_requests_; // Holds FetchContext reference to contact WebFrameScheduler. Member<FetchContext> context_;
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadSchedulerTest.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadSchedulerTest.cpp index ba06ef44..0ec38a05 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadSchedulerTest.cpp +++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadSchedulerTest.cpp
@@ -6,6 +6,7 @@ #include "platform/loader/testing/MockFetchContext.h" #include "platform/runtime_enabled_features.h" +#include "platform/testing/TestingPlatformSupport.h" #include "testing/gtest/include/gtest/gtest.h" namespace blink { @@ -34,6 +35,7 @@ class ResourceLoadSchedulerTest : public ::testing::Test { public: + using ThrottleOption = ResourceLoadScheduler::ThrottleOption; void SetUp() override { DCHECK(RuntimeEnabledFeatures::ResourceLoadSchedulerEnabled()); scheduler_ = ResourceLoadScheduler::Create( @@ -50,12 +52,45 @@ Persistent<ResourceLoadScheduler> scheduler_; }; +class RendererSideResourceSchedulerTest : public ::testing::Test { + public: + using ThrottleOption = ResourceLoadScheduler::ThrottleOption; + class TestingPlatformSupport : public ::blink::TestingPlatformSupport { + public: + bool IsRendererSideResourceSchedulerEnabled() const override { + return true; + } + }; + + void SetUp() override { + DCHECK(RuntimeEnabledFeatures::ResourceLoadSchedulerEnabled()); + scheduler_ = ResourceLoadScheduler::Create( + MockFetchContext::Create(MockFetchContext::kShouldNotLoadNewResource)); + scheduler()->SetOutstandingLimitForTesting(1); + } + void TearDown() override { scheduler()->Shutdown(); } + + ResourceRequest CreateRequest(ResourceLoadPriority priority) const { + ResourceRequest request(KURL("http://www.example.com/")); + request.SetPriority(priority); + return request; + } + + ResourceLoadScheduler* scheduler() { return scheduler_; } + + private: + ScopedTestingPlatformSupport<TestingPlatformSupport> + testing_platform_support_; + Persistent<ResourceLoadScheduler> scheduler_; +}; + TEST_F(ResourceLoadSchedulerTest, Bypass) { // A request that disallows throttling should be ran synchronously. MockClient* client1 = new MockClient; ResourceLoadScheduler::ClientId id1 = ResourceLoadScheduler::kInvalidClientId; - scheduler()->Request( - client1, ResourceLoadScheduler::ThrottleOption::kCanNotBeThrottled, &id1); + scheduler()->Request(client1, ThrottleOption::kCanNotBeThrottled, + ResourceLoadPriority::kMedium, 0 /* intra_priority */, + &id1); EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id1); EXPECT_TRUE(client1->WasRan()); @@ -63,8 +98,9 @@ // the outstanding number reaches to the limit. MockClient* client2 = new MockClient; ResourceLoadScheduler::ClientId id2 = ResourceLoadScheduler::kInvalidClientId; - scheduler()->Request( - client2, ResourceLoadScheduler::ThrottleOption::kCanNotBeThrottled, &id2); + scheduler()->Request(client2, ThrottleOption::kCanNotBeThrottled, + ResourceLoadPriority::kMedium, 0 /* intra_priority */, + &id2); EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id2); EXPECT_TRUE(client2->WasRan()); @@ -92,31 +128,35 @@ // The first request should be ran synchronously. MockClient* client1 = new MockClient; ResourceLoadScheduler::ClientId id1 = ResourceLoadScheduler::kInvalidClientId; - scheduler()->Request( - client1, ResourceLoadScheduler::ThrottleOption::kCanBeThrottled, &id1); + scheduler()->Request(client1, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kMedium, 0 /* intra_priority */, + &id1); EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id1); EXPECT_TRUE(client1->WasRan()); // Another request should be throttled until the first request calls Release. MockClient* client2 = new MockClient; ResourceLoadScheduler::ClientId id2 = ResourceLoadScheduler::kInvalidClientId; - scheduler()->Request( - client2, ResourceLoadScheduler::ThrottleOption::kCanBeThrottled, &id2); + scheduler()->Request(client2, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kMedium, 0 /* intra_priority */, + &id2); EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id2); EXPECT_FALSE(client2->WasRan()); // Two more requests. MockClient* client3 = new MockClient; ResourceLoadScheduler::ClientId id3 = ResourceLoadScheduler::kInvalidClientId; - scheduler()->Request( - client3, ResourceLoadScheduler::ThrottleOption::kCanBeThrottled, &id3); + scheduler()->Request(client3, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kMedium, 0 /* intra_priority */, + &id3); EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id3); EXPECT_FALSE(client3->WasRan()); MockClient* client4 = new MockClient; ResourceLoadScheduler::ClientId id4 = ResourceLoadScheduler::kInvalidClientId; - scheduler()->Request( - client4, ResourceLoadScheduler::ThrottleOption::kCanBeThrottled, &id4); + scheduler()->Request(client4, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kMedium, 0 /* intra_priority */, + &id4); EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id4); EXPECT_FALSE(client4->WasRan()); @@ -143,22 +183,25 @@ // Push three requests. MockClient* client1 = new MockClient; ResourceLoadScheduler::ClientId id1 = ResourceLoadScheduler::kInvalidClientId; - scheduler()->Request( - client1, ResourceLoadScheduler::ThrottleOption::kCanBeThrottled, &id1); + scheduler()->Request(client1, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kMedium, 0 /* intra_priority */, + &id1); EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id1); EXPECT_TRUE(client1->WasRan()); MockClient* client2 = new MockClient; ResourceLoadScheduler::ClientId id2 = ResourceLoadScheduler::kInvalidClientId; - scheduler()->Request( - client2, ResourceLoadScheduler::ThrottleOption::kCanBeThrottled, &id2); + scheduler()->Request(client2, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kMedium, 0 /* intra_priority */, + &id2); EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id2); EXPECT_FALSE(client2->WasRan()); MockClient* client3 = new MockClient; ResourceLoadScheduler::ClientId id3 = ResourceLoadScheduler::kInvalidClientId; - scheduler()->Request( - client3, ResourceLoadScheduler::ThrottleOption::kCanBeThrottled, &id3); + scheduler()->Request(client3, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kMedium, 0 /* intra_priority */, + &id3); EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id3); EXPECT_FALSE(client3->WasRan()); @@ -180,22 +223,25 @@ // Push three requests. MockClient* client1 = new MockClient; ResourceLoadScheduler::ClientId id1 = ResourceLoadScheduler::kInvalidClientId; - scheduler()->Request( - client1, ResourceLoadScheduler::ThrottleOption::kCanBeThrottled, &id1); + scheduler()->Request(client1, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kMedium, 0 /* intra_priority */, + &id1); EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id1); EXPECT_TRUE(client1->WasRan()); MockClient* client2 = new MockClient; ResourceLoadScheduler::ClientId id2 = ResourceLoadScheduler::kInvalidClientId; - scheduler()->Request( - client2, ResourceLoadScheduler::ThrottleOption::kCanBeThrottled, &id2); + scheduler()->Request(client2, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kMedium, 0 /* intra_priority */, + &id2); EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id2); EXPECT_FALSE(client2->WasRan()); MockClient* client3 = new MockClient; ResourceLoadScheduler::ClientId id3 = ResourceLoadScheduler::kInvalidClientId; - scheduler()->Request( - client3, ResourceLoadScheduler::ThrottleOption::kCanBeThrottled, &id3); + scheduler()->Request(client3, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kMedium, 0 /* intra_priority */, + &id3); EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id3); EXPECT_FALSE(client3->WasRan()); @@ -217,5 +263,188 @@ EXPECT_TRUE(scheduler()->Release( id2, ResourceLoadScheduler::ReleaseOption::kReleaseOnly)); } + +TEST_F(ResourceLoadSchedulerTest, PriotrityIsNotConsidered) { + // Push three requests. + MockClient* client1 = new MockClient; + + scheduler()->SetOutstandingLimitForTesting(0); + + ResourceLoadScheduler::ClientId id1 = ResourceLoadScheduler::kInvalidClientId; + scheduler()->Request(client1, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kLow, 0 /* intra_priority */, + &id1); + EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id1); + + MockClient* client2 = new MockClient; + ResourceLoadScheduler::ClientId id2 = ResourceLoadScheduler::kInvalidClientId; + scheduler()->Request(client2, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kMedium, 0 /* intra_priority */, + &id2); + EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id2); + + MockClient* client3 = new MockClient; + ResourceLoadScheduler::ClientId id3 = ResourceLoadScheduler::kInvalidClientId; + scheduler()->Request(client3, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kHigh, 0 /* intra_priority */, + &id3); + EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id3); + + EXPECT_FALSE(client1->WasRan()); + EXPECT_FALSE(client2->WasRan()); + EXPECT_FALSE(client3->WasRan()); + + scheduler()->SetOutstandingLimitForTesting(1); + + EXPECT_TRUE(client1->WasRan()); + EXPECT_FALSE(client2->WasRan()); + EXPECT_FALSE(client3->WasRan()); + + scheduler()->SetOutstandingLimitForTesting(2); + + EXPECT_TRUE(client1->WasRan()); + EXPECT_TRUE(client2->WasRan()); + EXPECT_FALSE(client3->WasRan()); + + // Release all. + EXPECT_TRUE(scheduler()->Release( + id3, ResourceLoadScheduler::ReleaseOption::kReleaseOnly)); + EXPECT_TRUE(scheduler()->Release( + id2, ResourceLoadScheduler::ReleaseOption::kReleaseOnly)); + EXPECT_TRUE(scheduler()->Release( + id1, ResourceLoadScheduler::ReleaseOption::kReleaseOnly)); +} + +TEST_F(RendererSideResourceSchedulerTest, PriotrityIsConsidered) { + // Push three requests. + MockClient* client1 = new MockClient; + + scheduler()->SetOutstandingLimitForTesting(0); + + ResourceLoadScheduler::ClientId id1 = ResourceLoadScheduler::kInvalidClientId; + scheduler()->Request(client1, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kLowest, 10 /* intra_priority */, + &id1); + EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id1); + + MockClient* client2 = new MockClient; + ResourceLoadScheduler::ClientId id2 = ResourceLoadScheduler::kInvalidClientId; + scheduler()->Request(client2, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kLow, 1 /* intra_priority */, + &id2); + EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id2); + + MockClient* client3 = new MockClient; + ResourceLoadScheduler::ClientId id3 = ResourceLoadScheduler::kInvalidClientId; + scheduler()->Request(client3, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kLow, 3 /* intra_priority */, + &id3); + EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id3); + + MockClient* client4 = new MockClient; + ResourceLoadScheduler::ClientId id4 = ResourceLoadScheduler::kInvalidClientId; + scheduler()->Request(client4, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kHigh, 0 /* intra_priority */, + &id4); + EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id4); + + EXPECT_FALSE(client1->WasRan()); + EXPECT_FALSE(client2->WasRan()); + EXPECT_FALSE(client3->WasRan()); + EXPECT_TRUE(client4->WasRan()); + + scheduler()->SetOutstandingLimitForTesting(2); + + EXPECT_FALSE(client1->WasRan()); + EXPECT_FALSE(client2->WasRan()); + EXPECT_TRUE(client3->WasRan()); + EXPECT_TRUE(client4->WasRan()); + + scheduler()->SetOutstandingLimitForTesting(3); + + EXPECT_FALSE(client1->WasRan()); + EXPECT_TRUE(client2->WasRan()); + EXPECT_TRUE(client3->WasRan()); + EXPECT_TRUE(client4->WasRan()); + + // Release all. + EXPECT_TRUE(scheduler()->Release( + id4, ResourceLoadScheduler::ReleaseOption::kReleaseOnly)); + EXPECT_TRUE(scheduler()->Release( + id3, ResourceLoadScheduler::ReleaseOption::kReleaseOnly)); + EXPECT_TRUE(scheduler()->Release( + id2, ResourceLoadScheduler::ReleaseOption::kReleaseOnly)); + EXPECT_TRUE(scheduler()->Release( + id1, ResourceLoadScheduler::ReleaseOption::kReleaseOnly)); +} + +TEST_F(RendererSideResourceSchedulerTest, IsThrottablePriority) { + EXPECT_TRUE( + scheduler()->IsThrottablePriority(ResourceLoadPriority::kVeryLow)); + EXPECT_TRUE(scheduler()->IsThrottablePriority(ResourceLoadPriority::kLow)); + EXPECT_FALSE( + scheduler()->IsThrottablePriority(ResourceLoadPriority::kMedium)); + EXPECT_FALSE(scheduler()->IsThrottablePriority(ResourceLoadPriority::kHigh)); + EXPECT_FALSE( + scheduler()->IsThrottablePriority(ResourceLoadPriority::kVeryHigh)); +} + +TEST_F(RendererSideResourceSchedulerTest, SetPriority) { + // Push three requests. + MockClient* client1 = new MockClient; + + scheduler()->SetOutstandingLimitForTesting(0); + + ResourceLoadScheduler::ClientId id1 = ResourceLoadScheduler::kInvalidClientId; + scheduler()->Request(client1, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kLowest, 0 /* intra_priority */, + &id1); + EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id1); + + MockClient* client2 = new MockClient; + ResourceLoadScheduler::ClientId id2 = ResourceLoadScheduler::kInvalidClientId; + scheduler()->Request(client2, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kLow, 5 /* intra_priority */, + &id2); + EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id2); + + MockClient* client3 = new MockClient; + ResourceLoadScheduler::ClientId id3 = ResourceLoadScheduler::kInvalidClientId; + scheduler()->Request(client3, ThrottleOption::kCanBeThrottled, + ResourceLoadPriority::kLow, 10 /* intra_priority */, + &id3); + EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id3); + + EXPECT_FALSE(client1->WasRan()); + EXPECT_FALSE(client2->WasRan()); + EXPECT_FALSE(client3->WasRan()); + + scheduler()->SetPriority(id1, ResourceLoadPriority::kHigh, 0); + + EXPECT_TRUE(client1->WasRan()); + EXPECT_FALSE(client2->WasRan()); + EXPECT_FALSE(client3->WasRan()); + + scheduler()->SetPriority(id3, ResourceLoadPriority::kLow, 2); + + EXPECT_TRUE(client1->WasRan()); + EXPECT_FALSE(client2->WasRan()); + EXPECT_FALSE(client3->WasRan()); + + scheduler()->SetOutstandingLimitForTesting(2); + + EXPECT_TRUE(client1->WasRan()); + EXPECT_TRUE(client2->WasRan()); + EXPECT_FALSE(client3->WasRan()); + + // Release all. + EXPECT_TRUE(scheduler()->Release( + id3, ResourceLoadScheduler::ReleaseOption::kReleaseOnly)); + EXPECT_TRUE(scheduler()->Release( + id2, ResourceLoadScheduler::ReleaseOption::kReleaseOnly)); + EXPECT_TRUE(scheduler()->Release( + id1, ResourceLoadScheduler::ReleaseOption::kReleaseOnly)); +} + } // namespace } // namespace blink
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoader.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoader.cpp index d46eb27..636d65d 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoader.cpp +++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoader.cpp
@@ -102,17 +102,19 @@ ActivateCacheAwareLoadingIfNeeded(request); loader_ = Context().CreateURLLoader(request, GetTaskRunnerFor(request, Context())); + DCHECK_EQ(ResourceLoadScheduler::kInvalidClientId, scheduler_client_id_); + auto throttle_option = ResourceLoadScheduler::ThrottleOption::kCanBeThrottled; // Synchronous requests should not work with a throttling. Also, tentatively // disables throttling for fetch requests that could keep on holding an active // connection until data is read by JavaScript. - ResourceLoadScheduler::ThrottleOption option = - (resource_->Options().synchronous_policy == kRequestSynchronously || - request.GetRequestContext() == WebURLRequest::kRequestContextFetch) - ? ResourceLoadScheduler::ThrottleOption::kCanNotBeThrottled - : ResourceLoadScheduler::ThrottleOption::kCanBeThrottled; - DCHECK_EQ(ResourceLoadScheduler::kInvalidClientId, scheduler_client_id_); - scheduler_->Request(this, option, &scheduler_client_id_); + if (resource_->Options().synchronous_policy == kRequestSynchronously || + request.GetRequestContext() == WebURLRequest::kRequestContextFetch) { + throttle_option = ResourceLoadScheduler::ThrottleOption::kCanNotBeThrottled; + } + + scheduler_->Request(this, throttle_option, request.Priority(), + request.IntraPriorityValue(), &scheduler_client_id_); } void ResourceLoader::Run() { @@ -176,6 +178,8 @@ static_cast<WebURLRequest::Priority>(load_priority), intra_priority_value); } + scheduler_->SetPriority(scheduler_client_id_, load_priority, + intra_priority_value); } void ResourceLoader::ScheduleCancel() {
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceRequest.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceRequest.cpp index 8fd3cc55..a8987e4 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/ResourceRequest.cpp +++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceRequest.cpp
@@ -351,6 +351,10 @@ return priority_; } +int ResourceRequest::IntraPriorityValue() const { + return intra_priority_value_; +} + void ResourceRequest::SetPriority(ResourceLoadPriority priority, int intra_priority_value) { priority_ = priority;
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceRequest.h b/third_party/WebKit/Source/platform/loader/fetch/ResourceRequest.h index a93c720e..f46d60a8 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/ResourceRequest.h +++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceRequest.h
@@ -178,7 +178,9 @@ bool AllowStoredCredentials() const; void SetAllowStoredCredentials(bool allow_credentials); + // TODO(yhirano): Describe what Priority and IntraPriorityValue are. ResourceLoadPriority Priority() const; + int IntraPriorityValue() const; void SetPriority(ResourceLoadPriority, int intra_priority_value = 0); bool IsConditional() const;
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 2fede9d..1c58782 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -29716,7 +29716,11 @@ <int value="487" label="682747f8ba621b87cdd3bc295ed5cabce722a1c0c0363d1d68b38928d2787f1e"/> <int value="488" - label="682747f8ba621b87cdd3bc295ed5cabce722a1c0c0363d1d68b38928d2787f1e"/> + label="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"/> + <int value="489" + label="282fb5cfbaf01518d9704de7884d7a25ff01cf882e994290d5995d5eb6c44988"/> + <int value="490" + label="fd371bea9755ff60c8828c849b8e5215de532d61b009855fa0ad630d90eef82e"/> </enum> <enum name="Network3GGobiError">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 0d6952c1..c57454a 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -45733,7 +45733,7 @@ </summary> </histogram> -<histogram name="Net.RequestTime2Success.MainFrame"> +<histogram name="Net.RequestTime2Success.MainFrame" units="ms"> <owner>csharrison@chromium.org</owner> <summary> The amount of time between request initiation and request completion for @@ -45741,7 +45741,7 @@ </summary> </histogram> -<histogram name="Net.RequestTime2Success.Subresource"> +<histogram name="Net.RequestTime2Success.Subresource" units="ms"> <owner>csharrison@chromium.org</owner> <summary> The amount of time between request initiation and request completion for
diff --git a/ui/gfx/presentation_feedback.h b/ui/gfx/presentation_feedback.h index a587f85..6e6cfa6 100644 --- a/ui/gfx/presentation_feedback.h +++ b/ui/gfx/presentation_feedback.h
@@ -11,26 +11,6 @@ namespace gfx { -// Bitmask of flags in |PresentationCallback|. -enum class PresentationFlags { - // The presentation was synchronized to VSYNC. - kVSync = 1 << 0, - - // The presentation |timestamp| is converted from hardware clock by driver. - // Sampling a clock in user space is not acceptable for this flag. - kHWClock = 1 << 1, - - // The display hardware signalled that it started using the new content. The - // opposite of this is e.g. a timer being used to guess when the display - // hardware has switched to the new image content. - kHWCompletion = 1 << 2, - - // The presentation of this update was done zero-copy. Possible zero-copy - // cases include direct scanout of a fullscreen surface and a surface on a - // hardware overlay. - kZeroCopy = 1 << 3, -}; - // The feedback for gl::GLSurface methods |SwapBuffers|, |SwapBuffersAsync|, // |SwapBuffersWithBounds|, |PostSubBuffer|, |PostSubBufferAsync|, // |CommitOverlayPlanes|,|CommitOverlayPlanesAsync|, etc. @@ -48,8 +28,26 @@ // An estimated interval from the |timestamp| to the next refresh. base::TimeDelta interval; - // A combination of |PresentationFlags|. It indicates the kind of the - // |timestamp|. + enum Flags { + // The presentation was synchronized to VSYNC. + kVSync = 1 << 0, + + // The presentation |timestamp| is converted from hardware clock by driver. + // Sampling a clock in user space is not acceptable for this flag. + kHWClock = 1 << 1, + + // The display hardware signalled that it started using the new content. The + // opposite of this is e.g. a timer being used to guess when the display + // hardware has switched to the new image content. + kHWCompletion = 1 << 2, + + // The presentation of this update was done zero-copy. Possible zero-copy + // cases include direct scanout of a fullscreen surface and a surface on a + // hardware overlay. + kZeroCopy = 1 << 3, + }; + + // A combination of Flags. It indicates the kind of the |timestamp|. uint32_t flags = 0; };