Commit b11dca3e authored by Eitan Isaacson's avatar Eitan Isaacson
Browse files

Bug 1744315 - P3: Do explore by touch via DOM event. r=Jamie,botond

parent 70cf770e
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -38,8 +38,6 @@ class AccessibleWrap : public LocalAccessible {

  virtual void PivotTo(int32_t aGranularity, bool aForward, bool aInclusive);

  virtual void ExploreByTouch(float aX, float aY);

  virtual void NavigateText(int32_t aGranularity, int32_t aStartOffset,
                            int32_t aEndOffset, bool aForward, bool aSelect);

@@ -52,6 +50,8 @@ class AccessibleWrap : public LocalAccessible {
  MOZ_CAN_RUN_SCRIPT_BOUNDARY
  virtual void Paste();

  void ExploreByTouch(float aX, float aY);

  mozilla::java::GeckoBundle::LocalRef ToBundle(bool aSmall = false);

  mozilla::java::GeckoBundle::LocalRef ToBundle(
+0 −5
Original line number Diff line number Diff line
@@ -112,11 +112,6 @@ void RemoteAccessibleWrap::PivotTo(int32_t aGranularity, bool aForward,
      Proxy()->ID(), aGranularity, aForward, aInclusive);
}

void RemoteAccessibleWrap::ExploreByTouch(float aX, float aY) {
  Unused << Proxy()->Document()->GetPlatformExtension()->SendExploreByTouch(
      Proxy()->ID(), aX, aY);
}

void RemoteAccessibleWrap::NavigateText(int32_t aGranularity,
                                        int32_t aStartOffset,
                                        int32_t aEndOffset, bool aForward,
+0 −2
Original line number Diff line number Diff line
@@ -74,8 +74,6 @@ class RemoteAccessibleWrap : public AccessibleWrap {

  virtual void Paste() override;

  virtual void ExploreByTouch(float aX, float aY) override;

  virtual void WrapperDOMNodeID(nsString& aDOMNodeID) override;

 private:
+54 −0
Original line number Diff line number Diff line
@@ -12,9 +12,13 @@
#include "RemoteAccessibleWrap.h"
#include "SessionAccessibility.h"
#include "mozilla/PresShell.h"
#include "mozilla/dom/EventTarget.h"
#include "mozilla/dom/Event.h"
#include "mozilla/dom/MouseEvent.h"

using namespace mozilla;
using namespace mozilla::a11y;
using namespace mozilla::dom;

RootAccessibleWrap::RootAccessibleWrap(dom::Document* aDoc,
                                       PresShell* aPresShell)
@@ -96,3 +100,53 @@ AccessibleWrap* RootAccessibleWrap::FindAccessibleById(DocAccessibleWrap* aDoc,

  return acc;
}

nsresult RootAccessibleWrap::AddEventListeners() {
  nsPIDOMWindowOuter* window = mDocumentNode->GetWindow();
  nsCOMPtr<EventTarget> nstarget = window ? window->GetParentTarget() : nullptr;

  if (nstarget) {
    nstarget->AddEventListener(u"MozMouseExploreByTouch"_ns, this, false, true);
  }

  return RootAccessible::AddEventListeners();
}

nsresult RootAccessibleWrap::RemoveEventListeners() {
  nsPIDOMWindowOuter* window = mDocumentNode->GetWindow();
  nsCOMPtr<EventTarget> nstarget = window ? window->GetParentTarget() : nullptr;
  if (nstarget) {
    nstarget->RemoveEventListener(u"MozMouseExploreByTouch"_ns, this, true);
  }

  return RootAccessible::RemoveEventListeners();
}

////////////////////////////////////////////////////////////////////////////////
// nsIDOMEventListener

NS_IMETHODIMP
RootAccessibleWrap::HandleEvent(Event* aDOMEvent) {
  WidgetMouseEvent* widgetEvent = aDOMEvent->WidgetEventPtr()->AsMouseEvent();
  if (widgetEvent && widgetEvent->mMessage == eMouseExploreByTouch) {
    if (HasShutdown()) {
      return NS_OK;
    }

    MouseEvent* mouseEvent = aDOMEvent->AsMouseEvent();
    if (mouseEvent) {
      nsPresContext* pc = PresContext();

      int32_t x =
          pc->CSSPixelsToDevPixels(mouseEvent->ScreenX(CallerType::System));
      int32_t y =
          pc->CSSPixelsToDevPixels(mouseEvent->ScreenY(CallerType::System));

      ExploreByTouch(x, y);
    }

    return NS_OK;
  }

  return RootAccessible::HandleEvent(aDOMEvent);
}
+7 −0
Original line number Diff line number Diff line
@@ -21,6 +21,9 @@ class RootAccessibleWrap : public RootAccessible {
  RootAccessibleWrap(dom::Document* aDocument, PresShell* aPresShell);
  virtual ~RootAccessibleWrap();

  // nsIDOMEventListener
  NS_DECL_NSIDOMEVENTLISTENER

  AccessibleWrap* GetContentAccessible();

  AccessibleWrap* FindAccessibleById(int32_t aID);
@@ -31,6 +34,10 @@ class RootAccessibleWrap : public RootAccessible {
  // Recursively searches for the accessible ID within the proxy document tree.
  AccessibleWrap* FindAccessibleById(DocRemoteAccessibleWrap* aDocument,
                                     int32_t aID);

 protected:
  virtual nsresult AddEventListeners() override;
  virtual nsresult RemoveEventListeners() override;
};

}  // namespace a11y
Loading