mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-25 05:41:12 +00:00
Bug 1256339 - Collapse the different Handle*Tap functions in GeckoContentController into a single API. r=botond
This is just a refactoring, no functional changes intended. MozReview-Commit-ID: GRJxVpNAlHC
This commit is contained in:
parent
f754b752be
commit
4152d69a8e
@ -138,6 +138,7 @@ using namespace mozilla::layout;
|
||||
using namespace mozilla::docshell;
|
||||
using namespace mozilla::widget;
|
||||
using namespace mozilla::jsipc;
|
||||
using mozilla::layers::GeckoContentController;
|
||||
|
||||
NS_IMPL_ISUPPORTS(ContentListener, nsIDOMEventListener)
|
||||
|
||||
@ -1784,27 +1785,34 @@ TabChild::HandleDoubleTap(const CSSPoint& aPoint, const Modifiers& aModifiers,
|
||||
}
|
||||
|
||||
void
|
||||
TabChild::HandleSingleTap(const CSSPoint& aPoint,
|
||||
const Modifiers& aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
bool aCallTakeFocusForClickFromTap)
|
||||
TabChild::HandleTap(GeckoContentController::TapType aType,
|
||||
const CSSPoint& aPoint, const Modifiers& aModifiers,
|
||||
const ScrollableLayerGuid& aGuid, const uint64_t& aInputBlockId,
|
||||
bool aCallTakeFocusForClickFromTap)
|
||||
{
|
||||
if (aCallTakeFocusForClickFromTap && mRemoteFrame) {
|
||||
mRemoteFrame->SendTakeFocusForClickFromTap();
|
||||
}
|
||||
if (mGlobal && mTabChildGlobal) {
|
||||
mAPZEventState->ProcessSingleTap(aPoint, aModifiers, aGuid);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
TabChild::HandleLongTap(const CSSPoint& aPoint, const Modifiers& aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
const uint64_t& aInputBlockId)
|
||||
{
|
||||
if (mGlobal && mTabChildGlobal) {
|
||||
mAPZEventState->ProcessLongTap(GetPresShell(), aPoint, aModifiers, aGuid,
|
||||
aInputBlockId);
|
||||
switch (aType) {
|
||||
case GeckoContentController::TapType::eSingleTap:
|
||||
if (aCallTakeFocusForClickFromTap && mRemoteFrame) {
|
||||
mRemoteFrame->SendTakeFocusForClickFromTap();
|
||||
}
|
||||
if (mGlobal && mTabChildGlobal) {
|
||||
mAPZEventState->ProcessSingleTap(aPoint, aModifiers, aGuid);
|
||||
}
|
||||
break;
|
||||
case GeckoContentController::TapType::eDoubleTap:
|
||||
HandleDoubleTap(aPoint, aModifiers, aGuid);
|
||||
break;
|
||||
case GeckoContentController::TapType::eLongTap:
|
||||
if (mGlobal && mTabChildGlobal) {
|
||||
mAPZEventState->ProcessLongTap(GetPresShell(), aPoint, aModifiers, aGuid,
|
||||
aInputBlockId);
|
||||
}
|
||||
break;
|
||||
case GeckoContentController::TapType::eSentinel:
|
||||
// Should never happen, but we need to handle this case to make the compiler
|
||||
// happy.
|
||||
MOZ_ASSERT(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -624,17 +624,12 @@ public:
|
||||
bool aPreventDefault) const;
|
||||
void SetTargetAPZC(uint64_t aInputBlockId,
|
||||
const nsTArray<ScrollableLayerGuid>& aTargets) const;
|
||||
void HandleDoubleTap(const CSSPoint& aPoint,
|
||||
const Modifiers& aModifiers,
|
||||
const mozilla::layers::ScrollableLayerGuid& aGuid);
|
||||
void HandleSingleTap(const CSSPoint& aPoint,
|
||||
const Modifiers& aModifiers,
|
||||
const mozilla::layers::ScrollableLayerGuid& aGuid,
|
||||
bool aCallTakeFocusForClickFromTap);
|
||||
void HandleLongTap(const CSSPoint& aPoint,
|
||||
const Modifiers& aModifiers,
|
||||
const mozilla::layers::ScrollableLayerGuid& aGuid,
|
||||
const uint64_t& aInputBlockId);
|
||||
void HandleTap(layers::GeckoContentController::TapType aType,
|
||||
const CSSPoint& aPoint,
|
||||
const Modifiers& aModifiers,
|
||||
const mozilla::layers::ScrollableLayerGuid& aGuid,
|
||||
const uint64_t& aInputBlockId,
|
||||
bool aCallTakeFocusForClickFromTap);
|
||||
void SetAllowedTouchBehavior(uint64_t aInputBlockId,
|
||||
const nsTArray<TouchBehaviorFlags>& aFlags) const;
|
||||
|
||||
@ -689,6 +684,9 @@ protected:
|
||||
#endif
|
||||
|
||||
private:
|
||||
void HandleDoubleTap(const CSSPoint& aPoint, const Modifiers& aModifiers,
|
||||
const ScrollableLayerGuid& aGuid);
|
||||
|
||||
// Notify others that our TabContext has been updated. (At the moment, this
|
||||
// sets the appropriate origin attributes on our docshell.)
|
||||
//
|
||||
|
@ -1170,6 +1170,16 @@ struct ParamTraits<mozilla::gfx::FilterDescription>
|
||||
}
|
||||
};
|
||||
|
||||
typedef mozilla::layers::GeckoContentController::TapType TapType;
|
||||
|
||||
template <>
|
||||
struct ParamTraits<TapType>
|
||||
: public ContiguousEnumSerializer<
|
||||
TapType,
|
||||
TapType::eSingleTap,
|
||||
TapType::eSentinel>
|
||||
{};
|
||||
|
||||
typedef mozilla::layers::GeckoContentController::APZStateChange APZStateChange;
|
||||
|
||||
template <>
|
||||
|
@ -38,32 +38,26 @@ public:
|
||||
virtual void RequestContentRepaint(const FrameMetrics& aFrameMetrics) = 0;
|
||||
|
||||
/**
|
||||
* Requests handling of a double tap. |aPoint| is in CSS pixels, relative to
|
||||
* the current scroll offset. This should eventually round-trip back to
|
||||
* AsyncPanZoomController::ZoomToRect with the dimensions that we want to zoom
|
||||
* to.
|
||||
* Different types of tap-related events that can be sent in
|
||||
* the HandleTap function. The names should be relatively self-explanatory.
|
||||
*/
|
||||
virtual void HandleDoubleTap(const CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid) = 0;
|
||||
enum class TapType {
|
||||
eSingleTap,
|
||||
eDoubleTap,
|
||||
eLongTap,
|
||||
|
||||
eSentinel,
|
||||
};
|
||||
|
||||
/**
|
||||
* Requests handling a single tap. |aPoint| is in CSS pixels, relative to the
|
||||
* current scroll offset. This should simulate and send to content a mouse
|
||||
* button down, then mouse button up at |aPoint|.
|
||||
*/
|
||||
virtual void HandleSingleTap(const CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid) = 0;
|
||||
|
||||
/**
|
||||
* Requests handling a long tap. |aPoint| is in CSS pixels, relative to the
|
||||
* Requests handling of a tap event. |aPoint| is in CSS pixels, relative to the
|
||||
* current scroll offset.
|
||||
*/
|
||||
virtual void HandleLongTap(const CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
uint64_t aInputBlockId) = 0;
|
||||
virtual void HandleTap(TapType aType,
|
||||
const CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
uint64_t aInputBlockId) = 0;
|
||||
|
||||
/**
|
||||
* Schedules a runnable to run on the controller/UI thread at some time
|
||||
|
@ -99,6 +99,7 @@ namespace layers {
|
||||
|
||||
typedef mozilla::layers::AllowedTouchBehavior AllowedTouchBehavior;
|
||||
typedef GeckoContentController::APZStateChange APZStateChange;
|
||||
typedef GeckoContentController::TapType TapType;
|
||||
typedef mozilla::gfx::Point Point;
|
||||
typedef mozilla::gfx::Matrix4x4 Matrix4x4;
|
||||
using mozilla::gfx::PointTyped;
|
||||
@ -1995,7 +1996,7 @@ nsEventStatus AsyncPanZoomController::OnLongPress(const TapGestureInput& aEvent)
|
||||
return nsEventStatus_eIgnore;
|
||||
}
|
||||
uint64_t blockId = GetInputQueue()->InjectNewTouchBlock(this);
|
||||
controller->HandleLongTap(geckoScreenPoint, aEvent.modifiers, GetGuid(), blockId);
|
||||
controller->HandleTap(TapType::eLongTap, geckoScreenPoint, aEvent.modifiers, GetGuid(), blockId);
|
||||
return nsEventStatus_eConsumeNoDefault;
|
||||
}
|
||||
}
|
||||
@ -2029,16 +2030,17 @@ nsEventStatus AsyncPanZoomController::GenerateSingleTap(const ScreenIntPoint& aP
|
||||
touch->SetSingleTapOccurred();
|
||||
}
|
||||
// Because this may be being running as part of APZCTreeManager::ReceiveInputEvent,
|
||||
// calling controller->HandleSingleTap directly might mean that content receives
|
||||
// calling controller->HandleTap directly might mean that content receives
|
||||
// the single tap message before the corresponding touch-up. To avoid that we
|
||||
// schedule the singletap message to run on the next spin of the event loop.
|
||||
// See bug 965381 for the issue this was causing.
|
||||
RefPtr<Runnable> runnable =
|
||||
NewRunnableMethod<CSSPoint,
|
||||
mozilla::Modifiers,
|
||||
ScrollableLayerGuid>(controller, &GeckoContentController::HandleSingleTap,
|
||||
geckoScreenPoint, aModifiers,
|
||||
GetGuid());
|
||||
NewRunnableMethod<TapType, CSSPoint, mozilla::Modifiers,
|
||||
ScrollableLayerGuid, uint64_t>(controller,
|
||||
&GeckoContentController::HandleTap,
|
||||
TapType::eSingleTap, geckoScreenPoint,
|
||||
aModifiers, GetGuid(),
|
||||
touch ? touch->GetBlockId() : 0);
|
||||
|
||||
controller->PostDelayedTask(runnable.forget(), 0);
|
||||
return nsEventStatus_eConsumeNoDefault;
|
||||
@ -2076,7 +2078,8 @@ nsEventStatus AsyncPanZoomController::OnDoubleTap(const TapGestureInput& aEvent)
|
||||
if (mZoomConstraints.mAllowDoubleTapZoom && CurrentTouchBlock()->TouchActionAllowsDoubleTapZoom()) {
|
||||
CSSPoint geckoScreenPoint;
|
||||
if (ConvertToGecko(aEvent.mPoint, &geckoScreenPoint)) {
|
||||
controller->HandleDoubleTap(geckoScreenPoint, aEvent.modifiers, GetGuid());
|
||||
controller->HandleTap(TapType::eDoubleTap, geckoScreenPoint,
|
||||
aEvent.modifiers, GetGuid(), CurrentTouchBlock()->GetBlockId());
|
||||
}
|
||||
}
|
||||
return nsEventStatus_eConsumeNoDefault;
|
||||
|
@ -40,6 +40,7 @@ using ::testing::AtLeast;
|
||||
using ::testing::AtMost;
|
||||
using ::testing::MockFunction;
|
||||
using ::testing::InSequence;
|
||||
typedef mozilla::layers::GeckoContentController::TapType TapType;
|
||||
|
||||
template<class T>
|
||||
class ScopedGfxPref {
|
||||
@ -76,9 +77,7 @@ public:
|
||||
MOCK_METHOD1(RequestContentRepaint, void(const FrameMetrics&));
|
||||
MOCK_METHOD2(RequestFlingSnap, void(const FrameMetrics::ViewID& aScrollId, const mozilla::CSSPoint& aDestination));
|
||||
MOCK_METHOD2(AcknowledgeScrollUpdate, void(const FrameMetrics::ViewID&, const uint32_t& aScrollGeneration));
|
||||
MOCK_METHOD3(HandleDoubleTap, void(const CSSPoint&, Modifiers, const ScrollableLayerGuid&));
|
||||
MOCK_METHOD3(HandleSingleTap, void(const CSSPoint&, Modifiers, const ScrollableLayerGuid&));
|
||||
MOCK_METHOD4(HandleLongTap, void(const CSSPoint&, Modifiers, const ScrollableLayerGuid&, uint64_t));
|
||||
MOCK_METHOD5(HandleTap, void(TapType, const CSSPoint&, Modifiers, const ScrollableLayerGuid&, uint64_t));
|
||||
// Can't use the macros with already_AddRefed :(
|
||||
void PostDelayedTask(already_AddRefed<Runnable> aTask, int aDelayMs) {
|
||||
RefPtr<Runnable> task = aTask;
|
||||
|
@ -170,16 +170,16 @@ TEST_F(APZEventRegionsTester, HitRegionImmediateResponse) {
|
||||
MockFunction<void(std::string checkPointName)> check;
|
||||
{
|
||||
InSequence s;
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(_, _, left->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, _, _, left->GetGuid(), _)).Times(1);
|
||||
EXPECT_CALL(check, Call("Tapped on left"));
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(_, _, bottom->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, _, _, bottom->GetGuid(), _)).Times(1);
|
||||
EXPECT_CALL(check, Call("Tapped on bottom"));
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(_, _, root->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, _, _, root->GetGuid(), _)).Times(1);
|
||||
EXPECT_CALL(check, Call("Tapped on root"));
|
||||
EXPECT_CALL(check, Call("Tap pending on d-t-c region"));
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(_, _, bottom->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, _, _, bottom->GetGuid(), _)).Times(1);
|
||||
EXPECT_CALL(check, Call("Tapped on bottom again"));
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(_, _, left->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, _, _, left->GetGuid(), _)).Times(1);
|
||||
EXPECT_CALL(check, Call("Tapped on left this time"));
|
||||
}
|
||||
|
||||
@ -221,7 +221,7 @@ TEST_F(APZEventRegionsTester, HitRegionAccumulatesChildren) {
|
||||
// parent layer's hit region. Verify that it comes out of the APZC's
|
||||
// content controller, which indicates the input events got routed correctly
|
||||
// to the APZC.
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(_, _, rootApzc->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, _, _, rootApzc->GetGuid(), _)).Times(1);
|
||||
Tap(manager, ScreenIntPoint(10, 160), TimeDuration::FromMilliseconds(100));
|
||||
}
|
||||
|
||||
@ -264,7 +264,7 @@ TEST_F(APZEventRegionsTester, Bug1117712) {
|
||||
Tap(manager, ScreenIntPoint(55, 5), TimeDuration::FromMilliseconds(100), nullptr, &inputBlockId);
|
||||
// But now we tell the APZ that really it hit layers[2], and expect the tap
|
||||
// to be delivered at the correct coordinates.
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(CSSPoint(55, 5), 0, apzc2->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, CSSPoint(55, 5), 0, apzc2->GetGuid(), _)).Times(1);
|
||||
|
||||
nsTArray<ScrollableLayerGuid> targets;
|
||||
targets.AppendElement(apzc2->GetGuid());
|
||||
|
@ -207,9 +207,9 @@ protected:
|
||||
AsyncTransform viewTransformOut;
|
||||
apzc->SampleContentTransformForFrame(&viewTransformOut, pointOut, TimeDuration::FromMilliseconds(timeDelta));
|
||||
|
||||
// Deliver a tap to abort the fling. Ensure that we get a HandleSingleTap
|
||||
// Deliver a tap to abort the fling. Ensure that we get a SingleTap
|
||||
// call out of it if and only if the fling is slow.
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(_, 0, apzc->GetGuid())).Times(tapCallsExpected);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, _, 0, apzc->GetGuid(), _)).Times(tapCallsExpected);
|
||||
Tap(apzc, ScreenIntPoint(10, 10), 0);
|
||||
while (mcc->RunThroughDelayedTasks());
|
||||
|
||||
@ -300,7 +300,7 @@ TEST_F(APZCGestureDetectorTester, ShortPress) {
|
||||
// touchup is fully processed. The ordering here is important.
|
||||
EXPECT_CALL(check, Call("pre-tap"));
|
||||
EXPECT_CALL(check, Call("post-tap"));
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(CSSPoint(10, 10), 0, apzc->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, CSSPoint(10, 10), 0, apzc->GetGuid(), _)).Times(1);
|
||||
}
|
||||
|
||||
check.Call("pre-tap");
|
||||
@ -320,7 +320,7 @@ TEST_F(APZCGestureDetectorTester, MediumPress) {
|
||||
// touchup is fully processed. The ordering here is important.
|
||||
EXPECT_CALL(check, Call("pre-tap"));
|
||||
EXPECT_CALL(check, Call("post-tap"));
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(CSSPoint(10, 10), 0, apzc->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, CSSPoint(10, 10), 0, apzc->GetGuid(), _)).Times(1);
|
||||
}
|
||||
|
||||
check.Call("pre-tap");
|
||||
@ -356,11 +356,11 @@ protected:
|
||||
|
||||
EXPECT_CALL(check, Call("preHandleLongTap"));
|
||||
blockId++;
|
||||
EXPECT_CALL(*mcc, HandleLongTap(CSSPoint(10, 10), 0, apzc->GetGuid(), blockId)).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eLongTap, CSSPoint(10, 10), 0, apzc->GetGuid(), blockId)).Times(1);
|
||||
EXPECT_CALL(check, Call("postHandleLongTap"));
|
||||
|
||||
EXPECT_CALL(check, Call("preHandleSingleTap"));
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(CSSPoint(10, 10), 0, apzc->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, CSSPoint(10, 10), 0, apzc->GetGuid(), _)).Times(1);
|
||||
EXPECT_CALL(check, Call("postHandleSingleTap"));
|
||||
}
|
||||
|
||||
@ -417,7 +417,7 @@ protected:
|
||||
|
||||
EXPECT_CALL(check, Call("preHandleLongTap"));
|
||||
blockId++;
|
||||
EXPECT_CALL(*mcc, HandleLongTap(CSSPoint(touchX, touchStartY), 0, apzc->GetGuid(), blockId)).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eLongTap, CSSPoint(touchX, touchStartY), 0, apzc->GetGuid(), blockId)).Times(1);
|
||||
EXPECT_CALL(check, Call("postHandleLongTap"));
|
||||
}
|
||||
|
||||
@ -439,7 +439,7 @@ protected:
|
||||
status = apzc->ReceiveInputEvent(mti, nullptr);
|
||||
EXPECT_EQ(nsEventStatus_eConsumeDoDefault, status);
|
||||
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(CSSPoint(touchX, touchEndY), 0, apzc->GetGuid())).Times(0);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, CSSPoint(touchX, touchEndY), 0, apzc->GetGuid(), _)).Times(0);
|
||||
status = TouchUp(apzc, ScreenIntPoint(touchX, touchEndY), mcc->Time());
|
||||
EXPECT_EQ(nsEventStatus_eConsumeDoDefault, status);
|
||||
|
||||
@ -482,8 +482,8 @@ TEST_F(APZCGestureDetectorTester, DoubleTap) {
|
||||
MakeApzcWaitForMainThread();
|
||||
MakeApzcZoomable();
|
||||
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(CSSPoint(10, 10), 0, apzc->GetGuid())).Times(0);
|
||||
EXPECT_CALL(*mcc, HandleDoubleTap(CSSPoint(10, 10), 0, apzc->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, CSSPoint(10, 10), 0, apzc->GetGuid(), _)).Times(0);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eDoubleTap, CSSPoint(10, 10), 0, apzc->GetGuid(), _)).Times(1);
|
||||
|
||||
uint64_t blockIds[2];
|
||||
DoubleTapAndCheckStatus(apzc, ScreenIntPoint(10, 10), &blockIds);
|
||||
@ -499,8 +499,8 @@ TEST_F(APZCGestureDetectorTester, DoubleTapNotZoomable) {
|
||||
MakeApzcWaitForMainThread();
|
||||
MakeApzcUnzoomable();
|
||||
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(CSSPoint(10, 10), 0, apzc->GetGuid())).Times(2);
|
||||
EXPECT_CALL(*mcc, HandleDoubleTap(CSSPoint(10, 10), 0, apzc->GetGuid())).Times(0);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, CSSPoint(10, 10), 0, apzc->GetGuid(), _)).Times(2);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eDoubleTap, CSSPoint(10, 10), 0, apzc->GetGuid(), _)).Times(0);
|
||||
|
||||
uint64_t blockIds[2];
|
||||
DoubleTapAndCheckStatus(apzc, ScreenIntPoint(10, 10), &blockIds);
|
||||
@ -516,8 +516,8 @@ TEST_F(APZCGestureDetectorTester, DoubleTapPreventDefaultFirstOnly) {
|
||||
MakeApzcWaitForMainThread();
|
||||
MakeApzcZoomable();
|
||||
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(CSSPoint(10, 10), 0, apzc->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleDoubleTap(CSSPoint(10, 10), 0, apzc->GetGuid())).Times(0);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, CSSPoint(10, 10), 0, apzc->GetGuid(), _)).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eDoubleTap, CSSPoint(10, 10), 0, apzc->GetGuid(), _)).Times(0);
|
||||
|
||||
uint64_t blockIds[2];
|
||||
DoubleTapAndCheckStatus(apzc, ScreenIntPoint(10, 10), &blockIds);
|
||||
@ -533,8 +533,8 @@ TEST_F(APZCGestureDetectorTester, DoubleTapPreventDefaultBoth) {
|
||||
MakeApzcWaitForMainThread();
|
||||
MakeApzcZoomable();
|
||||
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(CSSPoint(10, 10), 0, apzc->GetGuid())).Times(0);
|
||||
EXPECT_CALL(*mcc, HandleDoubleTap(CSSPoint(10, 10), 0, apzc->GetGuid())).Times(0);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, CSSPoint(10, 10), 0, apzc->GetGuid(), _)).Times(0);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eDoubleTap, CSSPoint(10, 10), 0, apzc->GetGuid(), _)).Times(0);
|
||||
|
||||
uint64_t blockIds[2];
|
||||
DoubleTapAndCheckStatus(apzc, ScreenIntPoint(10, 10), &blockIds);
|
||||
@ -551,7 +551,7 @@ TEST_F(APZCGestureDetectorTester, DoubleTapPreventDefaultBoth) {
|
||||
TEST_F(APZCGestureDetectorTester, TapFollowedByPinch) {
|
||||
MakeApzcZoomable();
|
||||
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(CSSPoint(10, 10), 0, apzc->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, CSSPoint(10, 10), 0, apzc->GetGuid(), _)).Times(1);
|
||||
|
||||
Tap(apzc, ScreenIntPoint(10, 10), TimeDuration::FromMilliseconds(100));
|
||||
|
||||
@ -573,7 +573,7 @@ TEST_F(APZCGestureDetectorTester, TapFollowedByPinch) {
|
||||
TEST_F(APZCGestureDetectorTester, TapFollowedByMultipleTouches) {
|
||||
MakeApzcZoomable();
|
||||
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(CSSPoint(10, 10), 0, apzc->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, CSSPoint(10, 10), 0, apzc->GetGuid(), _)).Times(1);
|
||||
|
||||
Tap(apzc, ScreenIntPoint(10, 10), TimeDuration::FromMilliseconds(100));
|
||||
|
||||
@ -600,7 +600,7 @@ TEST_F(APZCGestureDetectorTester, LongPressInterruptedByWheel) {
|
||||
// Since the wheel block interrupted the long-press, we don't expect
|
||||
// any long-press notifications. However, this also shouldn't crash, which
|
||||
// is what it used to do.
|
||||
EXPECT_CALL(*mcc, HandleLongTap(_, _, _, _)).Times(0);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eLongTap, _, _, _, _)).Times(0);
|
||||
|
||||
uint64_t touchBlockId = 0;
|
||||
uint64_t wheelBlockId = 0;
|
||||
@ -615,7 +615,7 @@ TEST_F(APZCGestureDetectorTester, TapTimeoutInterruptedByWheel) {
|
||||
// In this test, even though the wheel block comes right after the tap, the
|
||||
// tap should still be dispatched because it completes fully before the wheel
|
||||
// block arrived.
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(CSSPoint(10, 10), 0, apzc->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, CSSPoint(10, 10), 0, apzc->GetGuid(), _)).Times(1);
|
||||
|
||||
// We make the APZC zoomable so the gesture detector needs to wait to
|
||||
// distinguish between tap and double-tap. During that timeout is when we
|
||||
|
@ -509,9 +509,9 @@ TEST_F(APZHitTestingTester, Bug1148350) {
|
||||
MockFunction<void(std::string checkPointName)> check;
|
||||
{
|
||||
InSequence s;
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(CSSPoint(100, 100), 0, ApzcOf(layers[1])->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, CSSPoint(100, 100), 0, ApzcOf(layers[1])->GetGuid(), _)).Times(1);
|
||||
EXPECT_CALL(check, Call("Tapped without transform"));
|
||||
EXPECT_CALL(*mcc, HandleSingleTap(CSSPoint(100, 100), 0, ApzcOf(layers[1])->GetGuid())).Times(1);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eSingleTap, CSSPoint(100, 100), 0, ApzcOf(layers[1])->GetGuid(), _)).Times(1);
|
||||
EXPECT_CALL(check, Call("Tapped with interleaved transform"));
|
||||
}
|
||||
|
||||
|
@ -91,7 +91,7 @@ TEST_F(APZCTreeManagerTester, Bug1194876) {
|
||||
// We want to ensure that ApzcOf(layers[0]) has had its state cleared, because
|
||||
// otherwise it will do things like dispatch spurious long-tap events.
|
||||
|
||||
EXPECT_CALL(*mcc, HandleLongTap(_, _, _, _)).Times(0);
|
||||
EXPECT_CALL(*mcc, HandleTap(TapType::eLongTap, _, _, _, _)).Times(0);
|
||||
}
|
||||
|
||||
TEST_F(APZCTreeManagerTester, Bug1198900) {
|
||||
|
@ -118,15 +118,7 @@ ChromeProcessController::HandleDoubleTap(const mozilla::CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid)
|
||||
{
|
||||
if (MessageLoop::current() != mUILoop) {
|
||||
mUILoop->PostTask(NewRunnableMethod
|
||||
<CSSPoint,
|
||||
Modifiers,
|
||||
ScrollableLayerGuid>(this,
|
||||
&ChromeProcessController::HandleDoubleTap,
|
||||
aPoint, aModifiers, aGuid));
|
||||
return;
|
||||
}
|
||||
MOZ_ASSERT(MessageLoop::current() == mUILoop);
|
||||
|
||||
nsCOMPtr<nsIDocument> document = GetRootContentDocument(aGuid.mScrollId);
|
||||
if (!document.get()) {
|
||||
@ -154,40 +146,36 @@ ChromeProcessController::HandleDoubleTap(const mozilla::CSSPoint& aPoint,
|
||||
}
|
||||
|
||||
void
|
||||
ChromeProcessController::HandleSingleTap(const CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid)
|
||||
ChromeProcessController::HandleTap(TapType aType,
|
||||
const mozilla::CSSPoint& aPoint, Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
uint64_t aInputBlockId)
|
||||
{
|
||||
if (MessageLoop::current() != mUILoop) {
|
||||
mUILoop->PostTask(NewRunnableMethod
|
||||
<CSSPoint,
|
||||
Modifiers,
|
||||
ScrollableLayerGuid>(this,
|
||||
&ChromeProcessController::HandleSingleTap,
|
||||
aPoint, aModifiers, aGuid));
|
||||
mUILoop->PostTask(NewRunnableMethod<TapType, mozilla::CSSPoint, Modifiers,
|
||||
ScrollableLayerGuid, uint64_t>(this,
|
||||
&ChromeProcessController::HandleTap,
|
||||
aType, aPoint, aModifiers, aGuid, aInputBlockId));
|
||||
return;
|
||||
}
|
||||
|
||||
mAPZEventState->ProcessSingleTap(aPoint, aModifiers, aGuid);
|
||||
}
|
||||
|
||||
void
|
||||
ChromeProcessController::HandleLongTap(const mozilla::CSSPoint& aPoint, Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
uint64_t aInputBlockId)
|
||||
{
|
||||
if (MessageLoop::current() != mUILoop) {
|
||||
mUILoop->PostTask(NewRunnableMethod
|
||||
<mozilla::CSSPoint,
|
||||
Modifiers,
|
||||
ScrollableLayerGuid,
|
||||
uint64_t>(this, &ChromeProcessController::HandleLongTap,
|
||||
aPoint, aModifiers, aGuid, aInputBlockId));
|
||||
return;
|
||||
switch (aType) {
|
||||
case TapType::eSingleTap:
|
||||
mAPZEventState->ProcessSingleTap(aPoint, aModifiers, aGuid);
|
||||
break;
|
||||
case TapType::eDoubleTap:
|
||||
HandleDoubleTap(aPoint, aModifiers, aGuid);
|
||||
break;
|
||||
case TapType::eLongTap:
|
||||
mAPZEventState->ProcessLongTap(GetPresShell(), aPoint, aModifiers, aGuid,
|
||||
aInputBlockId);
|
||||
break;
|
||||
case TapType::eSentinel:
|
||||
// Should never happen, but we need to handle this case branch for the
|
||||
// compiler to be happy.
|
||||
MOZ_ASSERT(false);
|
||||
break;
|
||||
}
|
||||
|
||||
mAPZEventState->ProcessLongTap(GetPresShell(), aPoint, aModifiers, aGuid,
|
||||
aInputBlockId);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -40,13 +40,10 @@ public:
|
||||
// GeckoContentController interface
|
||||
virtual void RequestContentRepaint(const FrameMetrics& aFrameMetrics) override;
|
||||
virtual void PostDelayedTask(already_AddRefed<Runnable> aTask, int aDelayMs) override;
|
||||
virtual void HandleDoubleTap(const mozilla::CSSPoint& aPoint, Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid) override;
|
||||
virtual void HandleSingleTap(const mozilla::CSSPoint& aPoint, Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid) override;
|
||||
virtual void HandleLongTap(const mozilla::CSSPoint& aPoint, Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
uint64_t aInputBlockId) override;
|
||||
virtual void HandleTap(TapType aType,
|
||||
const mozilla::CSSPoint& aPoint, Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
uint64_t aInputBlockId) override;
|
||||
virtual void NotifyAPZStateChange(const ScrollableLayerGuid& aGuid,
|
||||
APZStateChange aChange,
|
||||
int aArg) override;
|
||||
@ -63,6 +60,8 @@ private:
|
||||
nsIPresShell* GetPresShell() const;
|
||||
nsIDocument* GetRootDocument() const;
|
||||
nsIDocument* GetRootContentDocument(const FrameMetrics::ViewID& aScrollId) const;
|
||||
void HandleDoubleTap(const mozilla::CSSPoint& aPoint, Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid);
|
||||
};
|
||||
|
||||
} // namespace layers
|
||||
|
@ -100,32 +100,15 @@ APZChild::RecvUpdateFrame(const FrameMetrics& aFrameMetrics)
|
||||
}
|
||||
|
||||
bool
|
||||
APZChild::RecvHandleDoubleTap(const CSSPoint& aPoint,
|
||||
const Modifiers& aModifiers,
|
||||
const ScrollableLayerGuid& aGuid)
|
||||
APZChild::RecvHandleTap(const TapType& aType,
|
||||
const CSSPoint& aPoint,
|
||||
const Modifiers& aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
const uint64_t& aInputBlockId,
|
||||
const bool& aCallTakeFocusForClickFromTap)
|
||||
{
|
||||
mBrowser->HandleDoubleTap(aPoint, aModifiers, aGuid);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
APZChild::RecvHandleSingleTap(const CSSPoint& aPoint,
|
||||
const Modifiers& aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
const bool& aCallTakeFocusForClickFromTap)
|
||||
{
|
||||
mBrowser->HandleSingleTap(aPoint, aModifiers, aGuid,
|
||||
aCallTakeFocusForClickFromTap);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
APZChild::RecvHandleLongTap(const CSSPoint& aPoint,
|
||||
const Modifiers& aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
const uint64_t& aInputBlockId)
|
||||
{
|
||||
mBrowser->HandleLongTap(aPoint, aModifiers, aGuid, aInputBlockId);
|
||||
mBrowser->HandleTap(aType, aPoint, aModifiers, aGuid,
|
||||
aInputBlockId, aCallTakeFocusForClickFromTap);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -28,19 +28,12 @@ public:
|
||||
|
||||
virtual bool RecvUpdateFrame(const FrameMetrics& frame) override;
|
||||
|
||||
virtual bool RecvHandleDoubleTap(const CSSPoint& aPoint,
|
||||
const Modifiers& aModifiers,
|
||||
const ScrollableLayerGuid& aGuid) override;
|
||||
|
||||
virtual bool RecvHandleSingleTap(const CSSPoint& aPoint,
|
||||
const Modifiers& aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
const bool& aCallTakeFocusForClickFromTap) override;
|
||||
|
||||
virtual bool RecvHandleLongTap(const CSSPoint& aPoint,
|
||||
const Modifiers& aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
const uint64_t& aInputBlockId) override;
|
||||
virtual bool RecvHandleTap(const TapType& aType,
|
||||
const CSSPoint& aPoint,
|
||||
const Modifiers& aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
const uint64_t& aInputBlockId,
|
||||
const bool& aCallTakeFocusForClickFromTap) override;
|
||||
|
||||
virtual bool RecvNotifyAPZStateChange(const ViewID& aViewId,
|
||||
const APZStateChange& aChange,
|
||||
|
@ -16,6 +16,7 @@ using struct mozilla::layers::ScrollableLayerGuid from "FrameMetrics.h";
|
||||
using mozilla::layers::FrameMetrics::ViewID from "FrameMetrics.h";
|
||||
using mozilla::layers::MaybeZoomConstraints from "FrameMetrics.h";
|
||||
using mozilla::layers::TouchBehaviorFlags from "mozilla/layers/APZUtils.h";
|
||||
using mozilla::layers::GeckoContentController::TapType from "mozilla/layers/GeckoContentController.h";
|
||||
using mozilla::layers::GeckoContentController::APZStateChange from "mozilla/layers/GeckoContentController.h";
|
||||
using mozilla::dom::TabId from "mozilla/dom/ipc/IdType.h";
|
||||
using mozilla::dom::ContentParentId from "mozilla/dom/ipc/IdType.h";
|
||||
@ -91,9 +92,12 @@ child:
|
||||
// The following methods correspond to functions on the GeckoContentController
|
||||
// interface in gfx/layers/apz/public/GeckoContentController.h. Refer to documentation
|
||||
// in that file for these functions.
|
||||
async HandleDoubleTap(CSSPoint aPoint, Modifiers aModifiers, ScrollableLayerGuid aGuid);
|
||||
async HandleSingleTap(CSSPoint aPoint, Modifiers aModifiers, ScrollableLayerGuid aGuid, bool aCallTakeFocusForClickFromTap);
|
||||
async HandleLongTap(CSSPoint point, Modifiers aModifiers, ScrollableLayerGuid aGuid, uint64_t aInputBlockId);
|
||||
// The aCallTakeFocusForClickFromTap argument is used for eSingleTap types,
|
||||
// to request that the child take focus before dispatching the mouse events
|
||||
// for the tap (otherwise the resulting focus behaviour is incorrect).
|
||||
async HandleTap(TapType aType, CSSPoint point, Modifiers aModifiers,
|
||||
ScrollableLayerGuid aGuid, uint64_t aInputBlockId,
|
||||
bool aCallTakeFocusForClickFromTap);
|
||||
async NotifyAPZStateChange(ViewID aViewId, APZStateChange aChange, int aArg);
|
||||
async NotifyFlushComplete();
|
||||
|
||||
|
@ -53,80 +53,37 @@ RemoteContentController::RequestContentRepaint(const FrameMetrics& aFrameMetrics
|
||||
}
|
||||
|
||||
void
|
||||
RemoteContentController::HandleDoubleTap(const CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid)
|
||||
RemoteContentController::HandleTap(TapType aTapType,
|
||||
const CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
uint64_t aInputBlockId)
|
||||
{
|
||||
if (MessageLoop::current() != mUILoop) {
|
||||
// We have to send this message from the "UI thread" (main
|
||||
// thread).
|
||||
mUILoop->PostTask(NewRunnableMethod<CSSPoint,
|
||||
Modifiers,
|
||||
ScrollableLayerGuid>(this,
|
||||
&RemoteContentController::HandleDoubleTap,
|
||||
aPoint, aModifiers, aGuid));
|
||||
return;
|
||||
}
|
||||
if (CanSend()) {
|
||||
Unused << SendHandleDoubleTap(mBrowserParent->AdjustTapToChildWidget(aPoint),
|
||||
aModifiers, aGuid);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
RemoteContentController::HandleSingleTap(const CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid)
|
||||
{
|
||||
if (MessageLoop::current() != mUILoop) {
|
||||
// We have to send this message from the "UI thread" (main
|
||||
// thread).
|
||||
mUILoop->PostTask(NewRunnableMethod<CSSPoint,
|
||||
Modifiers,
|
||||
ScrollableLayerGuid>(this,
|
||||
&RemoteContentController::HandleSingleTap,
|
||||
aPoint, aModifiers, aGuid));
|
||||
mUILoop->PostTask(NewRunnableMethod<TapType, CSSPoint, Modifiers,
|
||||
ScrollableLayerGuid, uint64_t>(this,
|
||||
&RemoteContentController::HandleTap,
|
||||
aTapType, aPoint, aModifiers, aGuid,
|
||||
aInputBlockId));
|
||||
return;
|
||||
}
|
||||
|
||||
bool callTakeFocusForClickFromTap;
|
||||
layout::RenderFrameParent* frame;
|
||||
if (mBrowserParent && (frame = mBrowserParent->GetRenderFrame()) &&
|
||||
mLayersId == frame->GetLayersId()) {
|
||||
// Avoid going over IPC and back for calling TakeFocusForClickFromTap,
|
||||
// since the right RenderFrameParent is living in this process.
|
||||
frame->TakeFocusForClickFromTap();
|
||||
callTakeFocusForClickFromTap = false;
|
||||
} else {
|
||||
callTakeFocusForClickFromTap = true;
|
||||
bool callTakeFocusForClickFromTap = (aTapType == TapType::eSingleTap);
|
||||
if (callTakeFocusForClickFromTap && mBrowserParent) {
|
||||
layout::RenderFrameParent* frame = mBrowserParent->GetRenderFrame();
|
||||
if (frame && mLayersId == frame->GetLayersId()) {
|
||||
// Avoid going over IPC and back for calling TakeFocusForClickFromTap,
|
||||
// since the right RenderFrameParent is living in this process.
|
||||
frame->TakeFocusForClickFromTap();
|
||||
callTakeFocusForClickFromTap = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (CanSend()) {
|
||||
Unused << SendHandleSingleTap(mBrowserParent->AdjustTapToChildWidget(aPoint),
|
||||
aModifiers, aGuid, callTakeFocusForClickFromTap);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
RemoteContentController::HandleLongTap(const CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
uint64_t aInputBlockId)
|
||||
{
|
||||
if (MessageLoop::current() != mUILoop) {
|
||||
// We have to send this message from the "UI thread" (main
|
||||
// thread).
|
||||
mUILoop->PostTask(NewRunnableMethod<CSSPoint,
|
||||
Modifiers,
|
||||
ScrollableLayerGuid,
|
||||
uint64_t>(this,
|
||||
&RemoteContentController::HandleLongTap,
|
||||
aPoint, aModifiers, aGuid, aInputBlockId));
|
||||
return;
|
||||
}
|
||||
if (CanSend()) {
|
||||
Unused << SendHandleLongTap(mBrowserParent->AdjustTapToChildWidget(aPoint),
|
||||
aModifiers, aGuid, aInputBlockId);
|
||||
Unused << SendHandleTap(aTapType, mBrowserParent->AdjustTapToChildWidget(aPoint),
|
||||
aModifiers, aGuid, aInputBlockId, callTakeFocusForClickFromTap);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -31,6 +31,7 @@ class APZCTreeManager;
|
||||
class RemoteContentController : public GeckoContentController
|
||||
, public PAPZParent
|
||||
{
|
||||
using GeckoContentController::TapType;
|
||||
using GeckoContentController::APZStateChange;
|
||||
|
||||
public:
|
||||
@ -42,18 +43,11 @@ public:
|
||||
// Needs to be called on the main thread.
|
||||
virtual void RequestContentRepaint(const FrameMetrics& aFrameMetrics) override;
|
||||
|
||||
virtual void HandleDoubleTap(const CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid) override;
|
||||
|
||||
virtual void HandleSingleTap(const CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid) override;
|
||||
|
||||
virtual void HandleLongTap(const CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
uint64_t aInputBlockId) override;
|
||||
virtual void HandleTap(TapType aTapType,
|
||||
const CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
uint64_t aInputBlockId) override;
|
||||
|
||||
virtual void PostDelayedTask(already_AddRefed<Runnable> aTask, int aDelayMs) override;
|
||||
|
||||
|
@ -44,16 +44,17 @@ AndroidContentController::NotifyDefaultPrevented(APZCTreeManager* aManager,
|
||||
}
|
||||
|
||||
void
|
||||
AndroidContentController::HandleSingleTap(const CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid)
|
||||
AndroidContentController::HandleTap(TapType aType, const CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid,
|
||||
uint64_t aInputBlockId)
|
||||
{
|
||||
// This function will get invoked first on the Java UI thread, and then
|
||||
// again on the main thread (because of the code in ChromeProcessController::
|
||||
// HandleSingleTap). We want to post the SingleTap message once; it can be
|
||||
// HandleTap). We want to post the SingleTap message once; it can be
|
||||
// done from either thread but we need access to the callback transform
|
||||
// so we do it from the main thread.
|
||||
if (NS_IsMainThread()) {
|
||||
if (NS_IsMainThread() && aType == TapType::eSingleTap) {
|
||||
CSSPoint point = mozilla::layers::APZCCallbackHelper::ApplyCallbackTransform(aPoint, aGuid);
|
||||
|
||||
nsIContent* content = nsLayoutUtils::FindContentFor(aGuid.mScrollId);
|
||||
@ -83,7 +84,7 @@ AndroidContentController::HandleSingleTap(const CSSPoint& aPoint,
|
||||
});
|
||||
}
|
||||
|
||||
ChromeProcessController::HandleSingleTap(aPoint, aModifiers, aGuid);
|
||||
ChromeProcessController::HandleTap(aType, aPoint, aModifiers, aGuid, aInputBlockId);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -34,9 +34,8 @@ public:
|
||||
|
||||
// ChromeProcessController methods
|
||||
virtual void Destroy() override;
|
||||
void HandleSingleTap(const CSSPoint& aPoint,
|
||||
Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid) override;
|
||||
void HandleTap(TapType aType, const CSSPoint& aPoint, Modifiers aModifiers,
|
||||
const ScrollableLayerGuid& aGuid, uint64_t aInputBlockId) override;
|
||||
void PostDelayedTask(already_AddRefed<Runnable> aTask, int aDelayMs) override;
|
||||
void UpdateOverscrollVelocity(const float aX, const float aY) override;
|
||||
void UpdateOverscrollOffset(const float aX, const float aY) override;
|
||||
|
Loading…
Reference in New Issue
Block a user