Backed out 5 changesets (bug 1172516, bug 1172525, bug 1172523) for e10s test_selectioncarets2.py failures.
authorRyan VanderMeulen <ryanvm@gmail.com>
Thu, 11 Jun 2015 14:01:50 -0400
changeset 267921 8376812621b2732e6014d7a90929ff81cb341eff
parent 267920 85ca98c22bdc7216afbe6b20d50c129622f3c590
child 267922 182ac56399c47c0b5df657596db53064b107594d
push id8157
push userjlund@mozilla.com
push dateMon, 29 Jun 2015 20:36:23 +0000
treeherdermozilla-aurora@d480e05bd276 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1172516, 1172525, 1172523
milestone41.0a1
backs out65d9144969e49e071f3695995a8561b2cc419c01
3368f2dc0ee6899122857a76e86d00ddd9d6966a
d6096f9659f7f5d6c7f961d2d8362fbee6ecad56
cda3d99ef134446dfd0a5117f5cb413f008eb2a4
a411d320bdbad37da10af7142387c77361f47ed6
Backed out 5 changesets (bug 1172516, bug 1172525, bug 1172523) for e10s test_selectioncarets2.py failures. Backed out changeset 65d9144969e4 (bug 1172516) Backed out changeset 3368f2dc0ee6 (bug 1172523) Backed out changeset d6096f9659f7 (bug 1172523) Backed out changeset cda3d99ef134 (bug 1172523) Backed out changeset a411d320bdba (bug 1172525) CLOSED TREE
accessible/atk/AccessibleWrap.cpp
accessible/atk/AccessibleWrap.h
accessible/atk/nsMai.h
accessible/base/AccEvent.h
accessible/base/EventQueue.cpp
accessible/base/EventQueue.h
accessible/base/Platform.h
accessible/generic/Accessible.cpp
accessible/generic/DocAccessible.h
accessible/ipc/DocAccessibleParent.cpp
accessible/ipc/DocAccessibleParent.h
accessible/ipc/PDocAccessible.ipdl
accessible/mac/Platform.mm
accessible/other/Platform.cpp
accessible/windows/msaa/Platform.cpp
--- a/accessible/atk/AccessibleWrap.cpp
+++ b/accessible/atk/AccessibleWrap.cpp
@@ -29,17 +29,17 @@
 #include "mozilla/ArrayUtils.h"
 #include "nsXPCOMStrings.h"
 #include "nsComponentManagerUtils.h"
 #include "nsIPersistentProperties2.h"
 
 using namespace mozilla;
 using namespace mozilla::a11y;
 
-MaiAtkObject::EAvailableAtkSignals MaiAtkObject::gAvailableAtkSignals =
+AccessibleWrap::EAvailableAtkSignals AccessibleWrap::gAvailableAtkSignals =
   eUnknown;
 
 //defined in ApplicationAccessibleWrap.cpp
 extern "C" GType g_atk_hyperlink_impl_type;
 
 /* MaiAtkObject */
 
 enum {
@@ -1160,28 +1160,17 @@ AccessibleWrap::HandleAccEvent(AccEvent*
         AccStateChangeEvent* event = downcast_accEvent(aEvent);
         MAI_ATK_OBJECT(atkObj)->FireStateChangeEvent(event->GetState(),
                                                      event->IsStateEnabled());
         break;
       }
 
     case nsIAccessibleEvent::EVENT_TEXT_REMOVED:
     case nsIAccessibleEvent::EVENT_TEXT_INSERTED:
-      {
-        AccTextChangeEvent* event = downcast_accEvent(aEvent);
-        NS_ENSURE_TRUE(event, NS_ERROR_FAILURE);
-
-        MAI_ATK_OBJECT(atkObj)-> FireTextChangeEvent(event->ModifiedText(),
-                                                     event->GetStartOffset(),
-                                                     event->GetLength(),
-                                                     event->IsTextInserted(),
-                                                     event->IsFromUserInput());
-
-        return NS_OK;
-      }
+        return FireAtkTextChangedEvent(aEvent, atkObj);
 
     case nsIAccessibleEvent::EVENT_FOCUS:
       {
         a11y::RootAccessible* rootAccWrap = accWrap->RootAccessible();
         if (rootAccWrap && rootAccWrap->mActivated) {
             atk_focus_tracker_notify(atkObj);
             // Fire state change event for focus
             atk_object_notify_state_change(atkObj, ATK_STATE_FOCUSED, true);
@@ -1457,63 +1446,65 @@ MaiAtkObject::FireStateChangeEvent(uint6
             // Fire state change for first state if there is one to map
             atk_object_notify_state_change(&parent,
                                            gAtkStateMap[stateIndex].atkState,
                                            aEnabled);
         }
     }
 }
 
-void
-a11y::ProxyTextChangeEvent(ProxyAccessible* aTarget, const nsString& aStr,
-                           int32_t aStart, uint32_t aLen, bool aIsInsert,
-                           bool aFromUser)
-{
-  MaiAtkObject* atkObj = MAI_ATK_OBJECT(GetWrapperFor(aTarget));
-  atkObj->FireTextChangeEvent(aStr, aStart, aLen, aIsInsert, aFromUser);
-}
-
 #define OLD_TEXT_INSERTED "text_changed::insert"
 #define OLD_TEXT_REMOVED "text_changed::delete"
 static const char* oldTextChangeStrings[2][2] = {
   { OLD_TEXT_REMOVED NON_USER_EVENT, OLD_TEXT_INSERTED NON_USER_EVENT },
   { OLD_TEXT_REMOVED, OLD_TEXT_INSERTED }
 };
 
 #define TEXT_INSERTED "text-insert"
 #define TEXT_REMOVED "text-remove"
 #define NON_USER_DETAIL "::system"
 static const char* textChangedStrings[2][2] = {
   { TEXT_REMOVED NON_USER_DETAIL, TEXT_INSERTED NON_USER_DETAIL },
   { TEXT_REMOVED, TEXT_INSERTED}
 };
 
-void
-MaiAtkObject::FireTextChangeEvent(const nsString& aStr, int32_t aStart,
-                                  uint32_t aLen, bool aIsInsert,
-                                  bool aFromUser)
+nsresult
+AccessibleWrap::FireAtkTextChangedEvent(AccEvent* aEvent,
+                                        AtkObject* aObject)
 {
+    AccTextChangeEvent* event = downcast_accEvent(aEvent);
+    NS_ENSURE_TRUE(event, NS_ERROR_FAILURE);
+
+    int32_t start = event->GetStartOffset();
+    uint32_t length = event->GetLength();
+    bool isInserted = event->IsTextInserted();
+    bool isFromUserInput = aEvent->IsFromUserInput();
+
   if (gAvailableAtkSignals == eUnknown)
     gAvailableAtkSignals =
-      g_signal_lookup("text-insert", G_OBJECT_TYPE(this)) ?
+      g_signal_lookup("text-insert", G_OBJECT_TYPE(aObject)) ?
         eHaveNewAtkTextSignals : eNoNewAtkSignals;
 
   if (gAvailableAtkSignals == eNoNewAtkSignals) {
     // XXX remove this code and the gHaveNewTextSignals check when we can
     // stop supporting old atk since it doesn't really work anyway
     // see bug 619002
     const char* signal_name =
-      oldTextChangeStrings[aFromUser][aIsInsert];
-    g_signal_emit_by_name(this, signal_name, aStart, aLen);
+      oldTextChangeStrings[isFromUserInput][isInserted];
+    g_signal_emit_by_name(aObject, signal_name, start, length);
   } else {
+    nsAutoString text;
+    event->GetModifiedText(text);
     const char* signal_name =
-      textChangedStrings[aFromUser][aIsInsert];
-    g_signal_emit_by_name(this, signal_name, aStart, aLen,
-                          NS_ConvertUTF16toUTF8(aStr).get());
+      textChangedStrings[isFromUserInput][isInserted];
+    g_signal_emit_by_name(aObject, signal_name, start, length,
+                          NS_ConvertUTF16toUTF8(text).get());
   }
+
+  return NS_OK;
 }
 
 #define ADD_EVENT "children_changed::add"
 #define HIDE_EVENT "children_changed::remove"
 
 static const char *kMutationStrings[2][2] = {
   { HIDE_EVENT NON_USER_EVENT, ADD_EVENT NON_USER_EVENT },
   { HIDE_EVENT, ADD_EVENT },
--- a/accessible/atk/AccessibleWrap.h
+++ b/accessible/atk/AccessibleWrap.h
@@ -74,15 +74,29 @@ protected:
   nsresult FireAtkStateChangeEvent(AccEvent* aEvent, AtkObject *aObject);
   nsresult FireAtkTextChangedEvent(AccEvent* aEvent, AtkObject *aObject);
   nsresult FireAtkShowHideEvent(AccEvent* aEvent, AtkObject *aObject,
                                 bool aIsAdded);
 
   AtkObject *mAtkObject;
 
 private:
+
+  /*
+   * do we have text-remove and text-insert signals if not we need to use
+   * text-changed see AccessibleWrap::FireAtkTextChangedEvent() and
+   * bug 619002
+   */
+  enum EAvailableAtkSignals {
+    eUnknown,
+    eHaveNewAtkTextSignals,
+    eNoNewAtkSignals
+  };
+
+  static EAvailableAtkSignals gAvailableAtkSignals;
+
   uint16_t CreateMaiInterfaces();
 };
 
 } // namespace a11y
 } // namespace mozilla
 
 #endif /* __NS_ACCESSIBLE_WRAP_H__ */
--- a/accessible/atk/nsMai.h
+++ b/accessible/atk/nsMai.h
@@ -76,31 +76,11 @@ struct MaiAtkObject
    * Shutdown this AtkObject.
    */
   void Shutdown();
 
   /*
    * Notify atk of a state change on this AtkObject.
    */
   void FireStateChangeEvent(uint64_t aState, bool aEnabled);
-
-  /*
-   * Notify ATK of a text change within this ATK object.
-   */
-  void FireTextChangeEvent(const nsString& aStr, int32_t aStart, uint32_t aLen,
-                           bool aIsInsert, bool aIsFromUser);
-
-private:
-  /*
-   * do we have text-remove and text-insert signals if not we need to use
-   * text-changed see AccessibleWrap::FireAtkTextChangedEvent() and
-   * bug 619002
-   */
-  enum EAvailableAtkSignals {
-    eUnknown,
-    eHaveNewAtkTextSignals,
-    eNoNewAtkSignals
-  };
-
-  static EAvailableAtkSignals gAvailableAtkSignals;
 };
 
 #endif /* __NS_MAI_H__ */
--- a/accessible/base/AccEvent.h
+++ b/accessible/base/AccEvent.h
@@ -189,17 +189,16 @@ public:
   }
 
   // AccTextChangeEvent
   int32_t GetStartOffset() const { return mStart; }
   uint32_t GetLength() const { return mModifiedText.Length(); }
   bool IsTextInserted() const { return mIsInserted; }
   void GetModifiedText(nsAString& aModifiedText)
     { aModifiedText = mModifiedText; }
-  const nsString& ModifiedText() const { return mModifiedText; }
 
 private:
   int32_t mStart;
   bool mIsInserted;
   nsString mModifiedText;
 
   friend class EventQueue;
   friend class AccReorderEvent;
--- a/accessible/base/EventQueue.cpp
+++ b/accessible/base/EventQueue.cpp
@@ -475,16 +475,54 @@ EventQueue::CreateTextChangeEventFor(Acc
   if (text.IsEmpty())
     return;
 
   aEvent->mTextChangeEvent =
     new AccTextChangeEvent(textAccessible, offset, text, aEvent->IsShow(),
                            aEvent->mIsFromUserInput ? eFromUserInput : eNoUserInput);
 }
 
+void
+EventQueue::SendIPCEvent(AccEvent* aEvent) const
+{
+  DocAccessibleChild* ipcDoc = mDocument->IPCDoc();
+  uint64_t id = aEvent->GetAccessible()->IsDoc() ? 0 :
+    reinterpret_cast<uintptr_t>(aEvent->GetAccessible());
+
+  switch(aEvent->GetEventType()) {
+    case nsIAccessibleEvent::EVENT_SHOW:
+      ipcDoc->ShowEvent(downcast_accEvent(aEvent));
+      break;
+
+    case nsIAccessibleEvent::EVENT_HIDE:
+      ipcDoc->SendHideEvent(id);
+      break;
+
+    case nsIAccessibleEvent::EVENT_REORDER:
+      // reorder events on the application acc aren't necessary to tell the parent
+      // about new top level documents.
+      if (!aEvent->GetAccessible()->IsApplication())
+        ipcDoc->SendEvent(id, aEvent->GetEventType());
+      break;
+    case nsIAccessibleEvent::EVENT_STATE_CHANGE: {
+      AccStateChangeEvent* event = downcast_accEvent(aEvent);
+      ipcDoc->SendStateChangeEvent(id, event->GetState(),
+                                   event->IsStateEnabled());
+      break;
+    }
+    case nsIAccessibleEvent::EVENT_TEXT_CARET_MOVED: {
+                                                       AccCaretMoveEvent* event = downcast_accEvent(aEvent);
+                                                       ipcDoc->SendEvent(id, event->GetCaretOffset());
+                                                       break;
+                                                     }
+    default:
+      ipcDoc->SendEvent(id, aEvent->GetEventType());
+  }
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // EventQueue: event queue
 
 void
 EventQueue::ProcessEventQueue()
 {
   // Process only currently queued events.
   nsTArray<nsRefPtr<AccEvent> > events;
@@ -551,10 +589,13 @@ EventQueue::ProcessEventQueue()
       }
     }
 
     if (event->mEventType == nsIAccessibleEvent::EVENT_HIDE)
       mDocument->ShutdownChildrenInSubtree(event->mAccessible);
 
     if (!mDocument)
       return;
+
+    if (IPCAccessibilityActive())
+      SendIPCEvent(event);
   }
 }
--- a/accessible/base/EventQueue.h
+++ b/accessible/base/EventQueue.h
@@ -49,16 +49,21 @@ private:
   /**
    * Coalesce two selection change events within the same select control.
    */
   void CoalesceSelChangeEvents(AccSelChangeEvent* aTailEvent,
                                AccSelChangeEvent* aThisEvent,
                                uint32_t aThisIndex);
 
   /**
+   * Notify the parent process of events being fired by this event queue.
+   */
+  void SendIPCEvent(AccEvent* aEvent) const;
+
+  /**
    * Coalesce text change events caused by sibling hide events.
    */
   void CoalesceTextChangeEventsFor(AccHideEvent* aTailEvent,
                                    AccHideEvent* aThisEvent);
   void CoalesceTextChangeEventsFor(AccShowEvent* aTailEvent,
                                    AccShowEvent* aThisEvent);
 
   /**
--- a/accessible/base/Platform.h
+++ b/accessible/base/Platform.h
@@ -1,18 +1,16 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim: set ts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include <stdint.h>
 
-class nsString;
-
 namespace mozilla {
 namespace a11y {
 
 class ProxyAccessible;
 
 enum EPlatformDisabledState {
   ePlatformIsForceEnabled = -1,
   ePlatformIsEnabled = 0,
@@ -67,14 +65,11 @@ void ProxyDestroyed(ProxyAccessible*);
 
 /**
  * Callied when an event is fired on a proxied accessible.
  */
 void ProxyEvent(ProxyAccessible* aTarget, uint32_t aEventType);
 void ProxyStateChangeEvent(ProxyAccessible* aTarget, uint64_t aState,
                            bool aEnabled);
 void ProxyCaretMoveEvent(ProxyAccessible* aTarget, int32_t aOffset);
-void ProxyTextChangeEvent(ProxyAccessible* aTarget, const nsString& aStr,
-                          int32_t aStart, uint32_t aLen, bool aIsInsert,
-                          bool aFromUser);
 } // namespace a11y
 } // namespace mozilla
 
--- a/accessible/generic/Accessible.cpp
+++ b/accessible/generic/Accessible.cpp
@@ -10,17 +10,16 @@
 #include "AccCollector.h"
 #include "AccGroupInfo.h"
 #include "AccIterator.h"
 #include "nsAccUtils.h"
 #include "nsAccessibilityService.h"
 #include "ApplicationAccessible.h"
 #include "nsEventShell.h"
 #include "nsTextEquivUtils.h"
-#include "DocAccessibleChild.h"
 #include "Relation.h"
 #include "Role.h"
 #include "RootAccessible.h"
 #include "States.h"
 #include "StyleInfo.h"
 #include "TableAccessible.h"
 #include "TableCellAccessible.h"
 #include "TreeWalker.h"
@@ -829,62 +828,16 @@ Accessible::XULElmName(DocAccessible* aD
   }
 }
 
 nsresult
 Accessible::HandleAccEvent(AccEvent* aEvent)
 {
   NS_ENSURE_ARG_POINTER(aEvent);
 
-  if (IPCAccessibilityActive() && Document()) {
-    DocAccessibleChild* ipcDoc = mDoc->IPCDoc();
-    uint64_t id = aEvent->GetAccessible()->IsDoc() ? 0 :
-      reinterpret_cast<uintptr_t>(aEvent->GetAccessible());
-
-    switch(aEvent->GetEventType()) {
-      case nsIAccessibleEvent::EVENT_SHOW:
-        ipcDoc->ShowEvent(downcast_accEvent(aEvent));
-        break;
-
-      case nsIAccessibleEvent::EVENT_HIDE:
-        ipcDoc->SendHideEvent(id);
-        break;
-
-      case nsIAccessibleEvent::EVENT_REORDER:
-        // reorder events on the application acc aren't necessary to tell the parent
-        // about new top level documents.
-        if (!aEvent->GetAccessible()->IsApplication())
-          ipcDoc->SendEvent(id, aEvent->GetEventType());
-        break;
-      case nsIAccessibleEvent::EVENT_STATE_CHANGE: {
-                                                     AccStateChangeEvent* event = downcast_accEvent(aEvent);
-                                                     ipcDoc->SendStateChangeEvent(id, event->GetState(),
-                                                                                  event->IsStateEnabled());
-                                                     break;
-                                                   }
-      case nsIAccessibleEvent::EVENT_TEXT_CARET_MOVED: {
-        AccCaretMoveEvent* event = downcast_accEvent(aEvent);
-        ipcDoc->SendCaretMoveEvent(id, event->GetCaretOffset());
-        break;
-                                                       }
-      case nsIAccessibleEvent::EVENT_TEXT_INSERTED:
-      case nsIAccessibleEvent::EVENT_TEXT_REMOVED: {
-        AccTextChangeEvent* event = downcast_accEvent(aEvent);
-        ipcDoc->SendTextChangeEvent(id, event->ModifiedText(),
-                                    event->GetStartOffset(),
-                                    event->GetLength(),
-                                    event->IsTextInserted(),
-                                    event->IsFromUserInput());
-        break;
-                                                   }
-      default:
-                                                       ipcDoc->SendEvent(id, aEvent->GetEventType());
-    }
-  }
-
   nsCOMPtr<nsIObserverService> obsService = services::GetObserverService();
   NS_ENSURE_TRUE(obsService, NS_ERROR_FAILURE);
 
   nsCOMPtr<nsISimpleEnumerator> observers;
   obsService->EnumerateObservers(NS_ACCESSIBLE_EVENT_TOPIC,
                                  getter_AddRefs(observers));
 
   NS_ENSURE_STATE(observers);
--- a/accessible/generic/DocAccessible.h
+++ b/accessible/generic/DocAccessible.h
@@ -331,22 +331,16 @@ public:
    */
   void UpdateText(nsIContent* aTextNode);
 
   /**
    * Recreate an accessible, results in hide/show events pair.
    */
   void RecreateAccessible(nsIContent* aContent);
 
-  /**
-   * If this document is in a content process return the object responsible for
-   * communicating with the main process for it.
-   */
-  DocAccessibleChild* IPCDoc() const { return mIPCDoc; }
-
 protected:
   virtual ~DocAccessible();
 
   void LastRelease();
 
   // Accessible
   virtual void CacheChildren() override;
 
@@ -520,16 +514,22 @@ protected:
    *
    * Rules: The root chrome document accessible is never an event target
    * (for example, Firefox UI window). If the sub document is loaded within its
    * parent document then the parent document is a target only (aka events
    * coalescence).
    */
   bool IsLoadEventTarget() const;
 
+  /**
+   * If this document is in a content process return the object responsible for
+   * communicating with the main process for it.
+   */
+  DocAccessibleChild* IPCDoc() const { return mIPCDoc; }
+
   /*
    * Set the object responsible for communicating with the main process on
    * behalf of this document.
    */
   void SetIPCDoc(DocAccessibleChild* aIPCDoc) { mIPCDoc = aIPCDoc; }
 
   friend class DocAccessibleChild;
 
--- a/accessible/ipc/DocAccessibleParent.cpp
+++ b/accessible/ipc/DocAccessibleParent.cpp
@@ -147,33 +147,16 @@ DocAccessibleParent::RecvCaretMoveEvent(
   if (!proxy)
     return false;
 
   ProxyCaretMoveEvent(proxy, aOffset);
   return true;
 }
 
 bool
-DocAccessibleParent::RecvTextChangeEvent(const uint64_t& aID,
-                                         const nsString& aStr,
-                                         const int32_t& aStart,
-                                         const uint32_t& aLen,
-                                         const bool& aIsInsert,
-                                         const bool& aFromUser)
-{
-  ProxyAccessible* target = GetAccessible(aID);
-  if (!target)
-  return false;
-
-  ProxyTextChangeEvent(target, aStr, aStart, aLen, aIsInsert, aFromUser);
-
-  return true;
-}
-
-bool
 DocAccessibleParent::RecvBindChildDoc(PDocAccessibleParent* aChildDoc, const uint64_t& aID)
 {
   auto childDoc = static_cast<DocAccessibleParent*>(aChildDoc);
   DebugOnly<bool> result = AddChildDoc(childDoc, aID, false);
   MOZ_ASSERT(result);
   return true;
 }
 
--- a/accessible/ipc/DocAccessibleParent.h
+++ b/accessible/ipc/DocAccessibleParent.h
@@ -46,21 +46,16 @@ public:
   virtual bool RecvHideEvent(const uint64_t& aRootID) override;
   virtual bool RecvStateChangeEvent(const uint64_t& aID,
                                     const uint64_t& aState,
                                     const bool& aEnabled) override final;
 
   virtual bool RecvCaretMoveEvent(const uint64_t& aID, const int32_t& aOffset)
     override final;
 
-  virtual bool RecvTextChangeEvent(const uint64_t& aID, const nsString& aStr,
-                                   const int32_t& aStart, const uint32_t& aLen,
-                                   const bool& aIsInsert,
-                                   const bool& aFromUser) override;
-
   virtual bool RecvBindChildDoc(PDocAccessibleParent* aChildDoc, const uint64_t& aID) override;
   void Unbind()
   {
     mParent = nullptr;
     ParentDoc()->mChildDocs.RemoveElement(this);
     mParentDoc = nullptr;
   }
 
--- a/accessible/ipc/PDocAccessible.ipdl
+++ b/accessible/ipc/PDocAccessible.ipdl
@@ -54,18 +54,16 @@ parent:
    * Notify the parent process the document in the child process is firing an
    * event.
    */
   Event(uint64_t aID, uint32_t type);
   ShowEvent(ShowEventData data);
   HideEvent(uint64_t aRootID);
   StateChangeEvent(uint64_t aID, uint64_t aState, bool aEnabled);
   CaretMoveEvent(uint64_t aID, int32_t aOffset);
-  TextChangeEvent(uint64_t aID, nsString aStr, int32_t aStart, uint32_t aLen,
-                  bool aIsInsert, bool aFromUser);
 
   /*
    * Tell the parent document to bind the existing document as a new child
    * document.
    */
   BindChildDoc(PDocAccessible aChildDoc, uint64_t aID);
 
 child:
--- a/accessible/mac/Platform.mm
+++ b/accessible/mac/Platform.mm
@@ -78,21 +78,16 @@ ProxyStateChangeEvent(ProxyAccessible* a
 void
 ProxyCaretMoveEvent(ProxyAccessible* aTarget, int32_t aOffset)
 {
   mozAccessible* wrapper = GetNativeFromProxy(aTarget);
   if (wrapper)
     [wrapper selectedTextDidChange];
 }
 
-void
-ProxyTextChangeEvent(ProxyAccessible*, const nsString&, int32_t, uint32_t,
-                     bool, bool)
-{
-}
 } // namespace a11y
 } // namespace mozilla
 
 @interface GeckoNSApplication(a11y)
 -(void)accessibilitySetValue:(id)value forAttribute:(NSString*)attribute;
 @end
 
 @implementation GeckoNSApplication(a11y)
--- a/accessible/other/Platform.cpp
+++ b/accessible/other/Platform.cpp
@@ -38,14 +38,8 @@ void
 a11y::ProxyStateChangeEvent(ProxyAccessible*, uint64_t, bool)
 {
 }
 
 void
 a11y::ProxyCaretMoveEvent(ProxyAccessible* aTarget, int32_t aOffset)
 {
 }
-
-void
-a11y::ProxyTextChangeEvent(ProxyAccessible*, const nsString&, int32_t, uint32_t,
-                     bool, bool)
-{
-}
--- a/accessible/windows/msaa/Platform.cpp
+++ b/accessible/windows/msaa/Platform.cpp
@@ -63,14 +63,8 @@ void
 a11y::ProxyStateChangeEvent(ProxyAccessible*, uint64_t, bool)
 {
 }
 
 void
 a11y::ProxyCaretMoveEvent(ProxyAccessible* aTarget, int32_t aOffset)
 {
 }
-
-void
-a11y::ProxyTextChangeEvent(ProxyAccessible*, const nsString&, int32_t, uint32_t,
-                     bool, bool)
-{
-}