Skip to content

Commit

Permalink
Backed out changeset bc3e37b63def (bug 1246918) for fix frequent andr…
Browse files Browse the repository at this point in the history
…oid c1 test failures
  • Loading branch information
BavarianTomcat committed Feb 17, 2016
1 parent c16f329 commit 980ab5e
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 166 deletions.
43 changes: 12 additions & 31 deletions layout/base/AccessibleCaretManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ AccessibleCaretManager::UpdateCarets(UpdateCaretsHint aHint)
UpdateCaretsForCursorMode(aHint);
break;
case CaretMode::Selection:
UpdateCaretsForSelectionMode(aHint);
UpdateCaretsForSelectionMode();
break;
}
}
Expand Down Expand Up @@ -316,7 +316,7 @@ AccessibleCaretManager::UpdateCaretsForCursorMode(UpdateCaretsHint aHint)
}

void
AccessibleCaretManager::UpdateCaretsForSelectionMode(UpdateCaretsHint aHint)
AccessibleCaretManager::UpdateCaretsForSelectionMode()
{
AC_LOG("%s: selection: %p", __FUNCTION__, GetSelection());

Expand All @@ -332,8 +332,8 @@ AccessibleCaretManager::UpdateCaretsForSelectionMode(UpdateCaretsHint aHint)
return;
}

auto updateSingleCaret = [aHint](AccessibleCaret* aCaret, nsIFrame* aFrame,
int32_t aOffset) -> PositionChangedResult
auto updateSingleCaret = [](AccessibleCaret* aCaret, nsIFrame* aFrame,
int32_t aOffset) -> PositionChangedResult
{
PositionChangedResult result = aCaret->SetPosition(aFrame, aOffset);
aCaret->SetSelectionBarEnabled(sSelectionBarEnabled);
Expand All @@ -344,16 +344,7 @@ AccessibleCaretManager::UpdateCaretsForSelectionMode(UpdateCaretsHint aHint)
break;

case PositionChangedResult::Changed:
switch (aHint) {
case UpdateCaretsHint::Default:
aCaret->SetAppearance(Appearance::Normal);
break;

case UpdateCaretsHint::RespectOldAppearance:
// Do nothing to preserve the appearance of the caret set by the
// caller.
break;
}
aCaret->SetAppearance(Appearance::Normal);
break;

case PositionChangedResult::Invisible:
Expand All @@ -374,11 +365,7 @@ AccessibleCaretManager::UpdateCaretsForSelectionMode(UpdateCaretsHint aHint)
FlushLayout();
}

if (aHint == UpdateCaretsHint::Default) {
// Only check for tilt carets with default update hint. Otherwise we might
// override the appearance set by the caller.
UpdateCaretsForTilt();
}
UpdateCaretsForTilt();

if (!mActiveCaret) {
DispatchCaretStateChangedEvent(CaretChangedReason::Updateposition);
Expand Down Expand Up @@ -573,8 +560,9 @@ AccessibleCaretManager::OnScrollStart()
{
AC_LOG("%s", __FUNCTION__);

mFirstCaretAppearanceOnScrollStart = mFirstCaret->GetAppearance();
mSecondCaretAppearanceOnScrollStart = mSecondCaret->GetAppearance();
if (GetCaretMode() == CaretMode::Cursor) {
mFirstCaretAppearanceOnScrollStart = mFirstCaret->GetAppearance();
}

// Hide the carets. (Extended visibility makes them "NormalNotShown").
if (sCaretsExtendedVisibility) {
Expand All @@ -591,18 +579,11 @@ AccessibleCaretManager::OnScrollEnd()
return;
}

mFirstCaret->SetAppearance(mFirstCaretAppearanceOnScrollStart);
mSecondCaret->SetAppearance(mSecondCaretAppearanceOnScrollStart);

// Flush layout to make the carets intersection correct since we turn the
// appearance of the carets from None or NormalNotShown into something
// visible.
FlushLayout();

if (GetCaretMode() == CaretMode::Cursor) {
mFirstCaret->SetAppearance(mFirstCaretAppearanceOnScrollStart);
if (!mFirstCaret->IsLogicallyVisible()) {
// If the caret is hidden (Appearance::None) due to timeout or blur, no
// need to update it.
// If the caret is hide (Appearance::None) due to timeout or blur, no need
// to update it.
return;
}
}
Expand Down
10 changes: 4 additions & 6 deletions layout/base/AccessibleCaretManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ class AccessibleCaretManager
void DoNotShowCarets();

void UpdateCaretsForCursorMode(UpdateCaretsHint aHint);
void UpdateCaretsForSelectionMode(UpdateCaretsHint aHint);
void UpdateCaretsForSelectionMode();

// Provide haptic / touch feedback, primarily for select on longpress.
void ProvideHapticFeedback();
Expand Down Expand Up @@ -234,12 +234,10 @@ class AccessibleCaretManager
// The caret mode since last update carets.
CaretMode mLastUpdateCaretMode = CaretMode::None;

// Store the appearance of the carets when calling OnScrollStart() so that it
// can be restored in OnScrollEnd().
// Store the appearance of the first caret when calling OnScrollStart so that
// it can be restored in OnScrollEnd.
AccessibleCaret::Appearance mFirstCaretAppearanceOnScrollStart =
AccessibleCaret::Appearance::None;
AccessibleCaret::Appearance mSecondCaretAppearanceOnScrollStart =
AccessibleCaret::Appearance::None;

static const int32_t kAutoScrollTimerDelay = 30;

Expand All @@ -260,7 +258,7 @@ class AccessibleCaretManager
static bool sCaretShownWhenLongTappingOnEmptyContent;

// Android specific visibility extensions correct compatibility issues
// with ActionBar visibility during page scroll.
// with caret-drag and ActionBar visibility during page scroll.
static bool sCaretsExtendedVisibility;

// By default, javascript content selection changes closes AccessibleCarets and
Expand Down
140 changes: 13 additions & 127 deletions layout/base/gtest/TestAccessibleCaretManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ class AccessibleCaretManagerTester : public ::testing::Test
using AccessibleCaretManager::UpdateCarets;
using AccessibleCaretManager::HideCarets;
using AccessibleCaretManager::sCaretShownWhenLongTappingOnEmptyContent;
using AccessibleCaretManager::sCaretsExtendedVisibility;

MockAccessibleCaretManager()
: AccessibleCaretManager(nullptr)
Expand Down Expand Up @@ -345,33 +344,27 @@ TEST_F(AccessibleCaretManagerTester, TestScrollInSelectionMode)

// Initially, first caret is out of scrollport, and second caret is visible.
EXPECT_CALL(mManager.FirstCaret(), SetPosition(_, _))
.WillOnce(Return(PositionChangedResult::Invisible));
.WillRepeatedly(Return(PositionChangedResult::Invisible));
EXPECT_CALL(mManager.SecondCaret(), SetPosition(_, _))
.WillRepeatedly(Return(PositionChangedResult::Changed));

EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
CaretChangedReason::Updateposition));
CaretChangedReason::Updateposition)).Times(1);
EXPECT_CALL(check, Call("updatecarets"));

EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
CaretChangedReason::Visibilitychange));
EXPECT_CALL(check, Call("scrollstart1"));
CaretChangedReason::Visibilitychange)).Times(1);
EXPECT_CALL(check, Call("scrollstart"));

// After scroll ended, first caret is visible and second caret is out of
// scroll port.
EXPECT_CALL(mManager.FirstCaret(), SetPosition(_, _))
.WillRepeatedly(Return(PositionChangedResult::Changed));
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));
EXPECT_CALL(check, Call("scrollstart2"));
.WillRepeatedly(Return(PositionChangedResult::Invisible));

// After the scroll ended, both carets are visible.
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
CaretChangedReason::Updateposition));
EXPECT_CALL(check, Call("scrollend2"));
CaretChangedReason::Updateposition)).Times(1);
}

mManager.UpdateCarets();
Expand All @@ -382,119 +375,11 @@ TEST_F(AccessibleCaretManagerTester, TestScrollInSelectionMode)
mManager.OnScrollStart();
EXPECT_EQ(FirstCaretAppearance(), Appearance::None);
EXPECT_EQ(SecondCaretAppearance(), Appearance::None);
check.Call("scrollstart1");

mManager.OnReflow();
EXPECT_EQ(FirstCaretAppearance(), Appearance::None);
EXPECT_EQ(SecondCaretAppearance(), Appearance::None);

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);
check.Call("scrollstart2");

mManager.OnReflow();
EXPECT_EQ(FirstCaretAppearance(), Appearance::None);
EXPECT_EQ(SecondCaretAppearance(), Appearance::None);

mManager.OnScrollEnd();
EXPECT_EQ(FirstCaretAppearance(), Appearance::Normal);
EXPECT_EQ(SecondCaretAppearance(), Appearance::Normal);
check.Call("scrollend2");
}

TEST_F(AccessibleCaretManagerTester,
TestScrollInSelectionModeWithExtendedVisibility)
{
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));
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));
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"));
}

AutoRestore<bool> savePref(
MockAccessibleCaretManager::sCaretsExtendedVisibility);
MockAccessibleCaretManager::sCaretsExtendedVisibility = true;

mManager.UpdateCarets();
EXPECT_EQ(FirstCaretAppearance(), Appearance::NormalNotShown);
EXPECT_EQ(SecondCaretAppearance(), Appearance::Normal);
check.Call("updatecarets");

mManager.OnScrollStart();
EXPECT_EQ(FirstCaretAppearance(), Appearance::NormalNotShown);
EXPECT_EQ(SecondCaretAppearance(), Appearance::NormalNotShown);
check.Call("scrollstart1");

mManager.OnReflow();
EXPECT_EQ(FirstCaretAppearance(), Appearance::NormalNotShown);
EXPECT_EQ(SecondCaretAppearance(), Appearance::NormalNotShown);
check.Call("reflow1");
check.Call("scrollstart");

mManager.OnScrollEnd();
EXPECT_EQ(FirstCaretAppearance(), Appearance::Normal);
EXPECT_EQ(SecondCaretAppearance(), Appearance::NormalNotShown);
check.Call("scrollend1");

mManager.OnScrollStart();
EXPECT_EQ(FirstCaretAppearance(), Appearance::NormalNotShown);
EXPECT_EQ(SecondCaretAppearance(), Appearance::NormalNotShown);
check.Call("scrollstart2");

mManager.OnReflow();
EXPECT_EQ(FirstCaretAppearance(), Appearance::NormalNotShown);
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, TestScrollInCursorModeWhenLogicallyVisible)
Expand Down Expand Up @@ -652,7 +537,7 @@ TEST_F(AccessibleCaretManagerTester, TestScrollInCursorModeOnEmptyContent)
EXPECT_CALL(mManager, DispatchCaretStateChangedEvent(
CaretChangedReason::Updateposition));
EXPECT_CALL(check, Call("scrollend3"));
}
}

// Simulate a single tap on an empty content.
mManager.UpdateCarets();
Expand Down Expand Up @@ -681,6 +566,7 @@ TEST_F(AccessibleCaretManagerTester, TestScrollInCursorModeOnEmptyContent)
check.Call("scrollend3");
}


TEST_F(AccessibleCaretManagerTester,
TestScrollInCursorModeOnEmptyContentWithSpecialPreference)
{
Expand Down
4 changes: 2 additions & 2 deletions mobile/android/app/mobile.js
Original file line number Diff line number Diff line change
Expand Up @@ -955,8 +955,8 @@ pref("layout.accessiblecaret.timeout_ms", 0);
pref("layout.accessiblecaret.use_long_tap_injector", false);

// AccessibleCarets behaviour is extended to support Android specific
// requirements to hide carets while maintaining ActionBar visiblity during page
// scroll.
// requirements during caret-drag, tapping into empty inputs, and to
// hide carets while maintaining ActionBar visiblity during page scroll.
pref("layout.accessiblecaret.extendedvisibility", true);

// Selection change notifications generated by Javascript changes
Expand Down

0 comments on commit 980ab5e

Please sign in to comment.