--- a/layout/base/AccessibleCaretManager.cpp
+++ b/layout/base/AccessibleCaretManager.cpp
@@ -73,18 +73,16 @@ std::ostream& operator<<(std::ostream& a
/* static */ bool
AccessibleCaretManager::sSelectionBarEnabled = false;
/* static */ bool
AccessibleCaretManager::sCaretShownWhenLongTappingOnEmptyContent = false;
/* static */ bool
AccessibleCaretManager::sCaretsAlwaysTilt = false;
/* static */ bool
-AccessibleCaretManager::sCaretsAlwaysShowWhenScrolling = true;
-/* static */ bool
AccessibleCaretManager::sCaretsScriptUpdates = false;
/* static */ bool
AccessibleCaretManager::sCaretsAllowDraggingAcrossOtherCaret = true;
/* static */ bool
AccessibleCaretManager::sHapticFeedback = false;
/* static */ bool
AccessibleCaretManager::sExtendSelectionForPhoneNumber = false;
/* static */ bool
@@ -103,18 +101,16 @@ AccessibleCaretManager::AccessibleCaretM
static bool addedPrefs = false;
if (!addedPrefs) {
Preferences::AddBoolVarCache(&sSelectionBarEnabled,
"layout.accessiblecaret.bar.enabled");
Preferences::AddBoolVarCache(&sCaretShownWhenLongTappingOnEmptyContent,
"layout.accessiblecaret.caret_shown_when_long_tapping_on_empty_content");
Preferences::AddBoolVarCache(&sCaretsAlwaysTilt,
"layout.accessiblecaret.always_tilt");
- Preferences::AddBoolVarCache(&sCaretsAlwaysShowWhenScrolling,
- "layout.accessiblecaret.always_show_when_scrolling", true);
Preferences::AddBoolVarCache(&sCaretsScriptUpdates,
"layout.accessiblecaret.allow_script_change_updates");
Preferences::AddBoolVarCache(&sCaretsAllowDraggingAcrossOtherCaret,
"layout.accessiblecaret.allow_dragging_across_other_caret", true);
Preferences::AddBoolVarCache(&sHapticFeedback,
"layout.accessiblecaret.hapticfeedback");
Preferences::AddBoolVarCache(&sExtendSelectionForPhoneNumber,
"layout.accessiblecaret.extend_selection_for_phone_number");
@@ -647,47 +643,32 @@ AccessibleCaretManager::SelectWordOrShor
void
AccessibleCaretManager::OnScrollStart()
{
AC_LOG("%s", __FUNCTION__);
mIsScrollStarted = true;
- if (!sCaretsAlwaysShowWhenScrolling) {
- // Backup the appearance so that we can restore them after the scrolling
- // ends.
- mFirstCaretAppearanceOnScrollStart = mFirstCaret->GetAppearance();
- mSecondCaretAppearanceOnScrollStart = mSecondCaret->GetAppearance();
- HideCarets();
- return;
- }
-
if (mFirstCaret->IsLogicallyVisible() || mSecondCaret->IsLogicallyVisible()) {
// Dispatch the event only if one of the carets is logically visible like in
// HideCarets().
DispatchCaretStateChangedEvent(CaretChangedReason::Scroll);
}
}
void
AccessibleCaretManager::OnScrollEnd()
{
if (mLastUpdateCaretMode != GetCaretMode()) {
return;
}
mIsScrollStarted = false;
- if (!sCaretsAlwaysShowWhenScrolling) {
- // Restore the appearance which is saved before the scrolling is started.
- mFirstCaret->SetAppearance(mFirstCaretAppearanceOnScrollStart);
- mSecondCaret->SetAppearance(mSecondCaretAppearanceOnScrollStart);
- }
-
if (GetCaretMode() == CaretMode::Cursor) {
if (!mFirstCaret->IsLogicallyVisible()) {
// If the caret is hidden (Appearance::None) due to blur, no
// need to update it.
return;
}
}
--- a/layout/base/gtest/TestAccessibleCaretManager.cpp
+++ b/layout/base/gtest/TestAccessibleCaretManager.cpp
@@ -56,17 +56,16 @@ public:
class MockAccessibleCaretManager : public AccessibleCaretManager
{
public:
using CaretMode = AccessibleCaretManager::CaretMode;
using AccessibleCaretManager::UpdateCarets;
using AccessibleCaretManager::HideCarets;
using AccessibleCaretManager::sCaretShownWhenLongTappingOnEmptyContent;
using AccessibleCaretManager::sCaretsAlwaysTilt;
- using AccessibleCaretManager::sCaretsAlwaysShowWhenScrolling;
MockAccessibleCaretManager()
: AccessibleCaretManager(nullptr)
{
mFirstCaret = MakeUnique<MockAccessibleCaret>();
mSecondCaret = MakeUnique<MockAccessibleCaret>();
}
@@ -349,86 +348,91 @@ TEST_F(AccessibleCaretManagerTester, Tes
mManager.OnScrollPositionChanged();
EXPECT_EQ(FirstCaretAppearance(), Appearance::None);
}
TEST_F(AccessibleCaretManagerTester, TestScrollInSelectionMode)
MOZ_CAN_RUN_SCRIPT
{
- // Simulate caret hiding when scrolling.
- AutoRestore<bool> savesCaretsAlwaysShowWhenScrolling(
- MockAccessibleCaretManager::sCaretsAlwaysShowWhenScrolling);
- MockAccessibleCaretManager::sCaretsAlwaysShowWhenScrolling = false;
-
EXPECT_CALL(mManager, GetCaretMode())
.WillRepeatedly(Return(CaretMode::Selection));
MockFunction<void(std::string aCheckPointName)> check;
{
InSequence dummy;
// Initially, first caret is out of scrollport, and second caret is visible.
EXPECT_CALL(mManager.FirstCaret(), SetPosition(_, _))
.WillOnce(Return(PositionChangedResult::Invisible));
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
CaretChangedReason::Updateposition));
EXPECT_CALL(check, Call("updatecarets"));
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
- CaretChangedReason::Visibilitychange));
+ CaretChangedReason::Scroll));
EXPECT_CALL(check, Call("scrollstart1"));
+ EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
+ CaretChangedReason::Updateposition));
+ EXPECT_CALL(check, Call("reflow1"));
+
// After scroll ended, first caret is visible and second caret is out of
// scroll port.
EXPECT_CALL(mManager.SecondCaret(), SetPosition(_, _))
.WillOnce(Return(PositionChangedResult::Invisible));
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
CaretChangedReason::Updateposition));
EXPECT_CALL(check, Call("scrollend1"));
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
- CaretChangedReason::Visibilitychange));
+ CaretChangedReason::Scroll));
EXPECT_CALL(check, Call("scrollstart2"));
+ EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
+ CaretChangedReason::Updateposition));
+ EXPECT_CALL(check, Call("reflow2"));
+
// After the scroll ended, both carets are visible.
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
CaretChangedReason::Updateposition));
EXPECT_CALL(check, Call("scrollend2"));
}
mManager.UpdateCarets();
EXPECT_EQ(FirstCaretAppearance(), Appearance::NormalNotShown);
EXPECT_EQ(SecondCaretAppearance(), Appearance::Normal);
check.Call("updatecarets");
mManager.OnScrollStart();
- EXPECT_EQ(FirstCaretAppearance(), Appearance::None);
- EXPECT_EQ(SecondCaretAppearance(), Appearance::None);
+ EXPECT_EQ(FirstCaretAppearance(), Appearance::NormalNotShown);
+ EXPECT_EQ(SecondCaretAppearance(), Appearance::Normal);
check.Call("scrollstart1");
mManager.OnReflow();
- EXPECT_EQ(FirstCaretAppearance(), Appearance::None);
- EXPECT_EQ(SecondCaretAppearance(), Appearance::None);
+ EXPECT_EQ(FirstCaretAppearance(), Appearance::NormalNotShown);
+ EXPECT_EQ(SecondCaretAppearance(), Appearance::Normal);
+ check.Call("reflow1");
mManager.OnScrollEnd();
EXPECT_EQ(FirstCaretAppearance(), Appearance::Normal);
EXPECT_EQ(SecondCaretAppearance(), Appearance::NormalNotShown);
check.Call("scrollend1");
mManager.OnScrollStart();
- EXPECT_EQ(FirstCaretAppearance(), Appearance::None);
- EXPECT_EQ(SecondCaretAppearance(), Appearance::None);
+ EXPECT_EQ(FirstCaretAppearance(), Appearance::Normal);
+ EXPECT_EQ(SecondCaretAppearance(), Appearance::NormalNotShown);
check.Call("scrollstart2");
mManager.OnReflow();
- EXPECT_EQ(FirstCaretAppearance(), Appearance::None);
- EXPECT_EQ(SecondCaretAppearance(), Appearance::None);
+ EXPECT_EQ(FirstCaretAppearance(), Appearance::Normal);
+ EXPECT_EQ(SecondCaretAppearance(), Appearance::NormalNotShown);
+ check.Call("reflow2");
mManager.OnScrollEnd();
EXPECT_EQ(FirstCaretAppearance(), Appearance::Normal);
EXPECT_EQ(SecondCaretAppearance(), Appearance::Normal);
check.Call("scrollend2");
}
TEST_F(AccessibleCaretManagerTester,
@@ -536,87 +540,77 @@ MOZ_CAN_RUN_SCRIPT
EXPECT_EQ(FirstCaretAppearance(), Appearance::Left);
EXPECT_EQ(SecondCaretAppearance(), Appearance::Right);
check.Call("scrollend2");
}
TEST_F(AccessibleCaretManagerTester, TestScrollInCursorModeWhenLogicallyVisible)
MOZ_CAN_RUN_SCRIPT
{
- // Simulate caret hiding when scrolling.
- AutoRestore<bool> savesCaretsAlwaysShowWhenScrolling(
- MockAccessibleCaretManager::sCaretsAlwaysShowWhenScrolling);
- MockAccessibleCaretManager::sCaretsAlwaysShowWhenScrolling = false;
-
EXPECT_CALL(mManager, GetCaretMode())
.WillRepeatedly(Return(CaretMode::Cursor));
EXPECT_CALL(mManager, HasNonEmptyTextContent(_))
.WillRepeatedly(Return(true));
MockFunction<void(std::string aCheckPointName)> check;
{
InSequence dummy;
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
CaretChangedReason::Updateposition)).Times(1);
EXPECT_CALL(check, Call("updatecarets"));
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
- CaretChangedReason::Visibilitychange)).Times(1);
+ CaretChangedReason::Scroll)).Times(1);
EXPECT_CALL(check, Call("scrollstart1"));
// After scroll ended, the caret is out of scroll port.
EXPECT_CALL(mManager.FirstCaret(), SetPosition(_, _))
.WillRepeatedly(Return(PositionChangedResult::Invisible));
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
CaretChangedReason::Updateposition)).Times(1);
EXPECT_CALL(check, Call("scrollend1"));
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
- CaretChangedReason::Visibilitychange)).Times(1);
+ CaretChangedReason::Scroll)).Times(1);
EXPECT_CALL(check, Call("scrollstart2"));
// After scroll ended, the caret is visible again.
EXPECT_CALL(mManager.FirstCaret(), SetPosition(_, _))
.WillRepeatedly(Return(PositionChangedResult::Changed));
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
CaretChangedReason::Updateposition)).Times(1);
EXPECT_CALL(check, Call("scrollend2"));
}
mManager.UpdateCarets();
EXPECT_EQ(FirstCaretAppearance(), Appearance::Normal);
check.Call("updatecarets");
mManager.OnScrollStart();
- EXPECT_EQ(FirstCaretAppearance(), Appearance::None);
+ EXPECT_EQ(FirstCaretAppearance(), Appearance::Normal);
check.Call("scrollstart1");
mManager.OnScrollEnd();
EXPECT_EQ(FirstCaretAppearance(), Appearance::NormalNotShown);
check.Call("scrollend1");
mManager.OnScrollStart();
- EXPECT_EQ(FirstCaretAppearance(), Appearance::None);
+ EXPECT_EQ(FirstCaretAppearance(), Appearance::NormalNotShown);
check.Call("scrollstart2");
mManager.OnScrollEnd();
EXPECT_EQ(FirstCaretAppearance(), Appearance::Normal);
check.Call("scrollend2");
}
TEST_F(AccessibleCaretManagerTester, TestScrollInCursorModeWhenHidden)
MOZ_CAN_RUN_SCRIPT
{
- // Simulate caret hiding when scrolling.
- AutoRestore<bool> savesCaretsAlwaysShowWhenScrolling(
- MockAccessibleCaretManager::sCaretsAlwaysShowWhenScrolling);
- MockAccessibleCaretManager::sCaretsAlwaysShowWhenScrolling = false;
-
EXPECT_CALL(mManager, GetCaretMode())
.WillRepeatedly(Return(CaretMode::Cursor));
EXPECT_CALL(mManager, HasNonEmptyTextContent(_))
.WillRepeatedly(Return(true));
MockFunction<void(std::string aCheckPointName)> check;
{
@@ -662,55 +656,50 @@ MOZ_CAN_RUN_SCRIPT
mManager.OnScrollEnd();
EXPECT_EQ(FirstCaretAppearance(), Appearance::None);
check.Call("scrollend2");
}
TEST_F(AccessibleCaretManagerTester, TestScrollInCursorModeOnEmptyContent)
MOZ_CAN_RUN_SCRIPT
{
- // Simulate caret hiding when scrolling.
- AutoRestore<bool> savesCaretsAlwaysShowWhenScrolling(
- MockAccessibleCaretManager::sCaretsAlwaysShowWhenScrolling);
- MockAccessibleCaretManager::sCaretsAlwaysShowWhenScrolling = false;
-
EXPECT_CALL(mManager, GetCaretMode())
.WillRepeatedly(Return(CaretMode::Cursor));
EXPECT_CALL(mManager, HasNonEmptyTextContent(_))
.WillRepeatedly(Return(false));
MockFunction<void(std::string aCheckPointName)> check;
{
InSequence dummy;
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
CaretChangedReason::Updateposition));
EXPECT_CALL(check, Call("updatecarets"));
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
- CaretChangedReason::Visibilitychange));
+ CaretChangedReason::Scroll));
EXPECT_CALL(check, Call("scrollstart1"));
EXPECT_CALL(mManager.FirstCaret(), SetPosition(_, _))
.WillOnce(Return(PositionChangedResult::Invisible));
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
CaretChangedReason::Updateposition));
EXPECT_CALL(check, Call("scrollend1"));
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
- CaretChangedReason::Visibilitychange));
+ CaretChangedReason::Scroll));
EXPECT_CALL(check, Call("scrollstart2"));
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
CaretChangedReason::Updateposition));
EXPECT_CALL(check, Call("scrollend2"));
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
- CaretChangedReason::Visibilitychange));
+ CaretChangedReason::Scroll));
EXPECT_CALL(check, Call("scrollstart3"));
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
CaretChangedReason::Updateposition));
EXPECT_CALL(check, Call("scrollend3"));
}
// Simulate a single tap on an empty content.