From 621f69c2c12cab6b04e7ef9721d8feb2ca8e4223 Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Wed, 24 Aug 2011 15:49:25 -0400 Subject: [PATCH] Bug 659350 part 3. Add nsITouchEventReceiver for elements. r=smaug --- content/base/src/nsGenericElement.cpp | 13 ++++++++++ content/base/src/nsGenericElement.h | 25 +++++++++++++++++-- content/html/content/test/test_bug389797.html | 3 ++- dom/base/nsDOMClassInfo.cpp | 22 +++++++++++----- 4 files changed, 54 insertions(+), 9 deletions(-) diff --git a/content/base/src/nsGenericElement.cpp b/content/base/src/nsGenericElement.cpp index 74dc85e9bd35..83cad60ee181 100644 --- a/content/base/src/nsGenericElement.cpp +++ b/content/base/src/nsGenericElement.cpp @@ -2149,6 +2149,17 @@ nsNodeSelectorTearoff::QuerySelectorAll(const nsAString& aSelector, return nsGenericElement::doQuerySelectorAll(mNode, aSelector, aReturn); } +//---------------------------------------------------------------------- + +NS_IMPL_CYCLE_COLLECTION_1(nsTouchEventReceiverTearoff, mElement) + +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsTouchEventReceiverTearoff) + NS_INTERFACE_MAP_ENTRY(nsITouchEventReceiver) +NS_INTERFACE_MAP_END_AGGREGATED(mElement) + +NS_IMPL_CYCLE_COLLECTING_ADDREF(nsTouchEventReceiverTearoff) +NS_IMPL_CYCLE_COLLECTING_RELEASE(nsTouchEventReceiverTearoff) + //---------------------------------------------------------------------- nsGenericElement::nsDOMSlots::nsDOMSlots() : nsINode::nsSlots(), @@ -4265,6 +4276,8 @@ NS_INTERFACE_MAP_BEGIN(nsGenericElement) new nsNodeSelectorTearoff(this)) NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOMXPathNSResolver, new nsNode3Tearoff(this)) + NS_INTERFACE_MAP_ENTRY_TEAROFF(nsITouchEventReceiver, + new nsTouchEventReceiverTearoff(this)) // nsNodeSH::PreCreate() depends on the identity pointer being the // same as nsINode (which nsIContent inherits), so if you change the // below line, make sure nsNodeSH::PreCreate() still does the right diff --git a/content/base/src/nsGenericElement.h b/content/base/src/nsGenericElement.h index f78e488bd7ff..8e6c0b829be9 100644 --- a/content/base/src/nsGenericElement.h +++ b/content/base/src/nsGenericElement.h @@ -64,6 +64,7 @@ #include "nsIDOMDOMStringMap.h" #include "nsContentList.h" #include "nsDOMClassInfoID.h" // DOMCI_DATA +#include "nsIDOMTouchEvent.h" #ifdef MOZ_SMIL #include "nsISMILAttr.h" @@ -199,8 +200,6 @@ private: nsCOMPtr mNode; }; -#define NS_EVENT_TEAROFF_CACHE_SIZE 4 - /** * A tearoff class for nsGenericElement to implement NodeSelector */ @@ -226,6 +225,7 @@ private: // Forward declare to allow being a friend class nsNSElementTearoff; +class nsTouchEventReceiverTearoff; /** * A generic base class for DOM elements, implementing many nsIContent, @@ -238,6 +238,7 @@ public: virtual ~nsGenericElement(); friend class nsNSElementTearoff; + friend class nsTouchEventReceiverTearoff; NS_DECL_CYCLE_COLLECTING_ISUPPORTS @@ -1057,6 +1058,26 @@ private: nsRefPtr mContent; }; +/** + * Tearoff class to implement nsITouchEventReceiver + */ +class nsTouchEventReceiverTearoff : public nsITouchEventReceiver +{ +public: + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + + NS_DECL_NSITOUCHEVENTRECEIVER + + NS_DECL_CYCLE_COLLECTION_CLASS(nsTouchEventReceiverTearoff) + + nsTouchEventReceiverTearoff(nsGenericElement *aElement) : mElement(aElement) + { + } + +private: + nsRefPtr mElement; +}; + #define NS_ELEMENT_INTERFACE_TABLE_TO_MAP_SEGUE \ rv = nsGenericElement::QueryInterface(aIID, aInstancePtr); \ if (NS_SUCCEEDED(rv)) \ diff --git a/content/html/content/test/test_bug389797.html b/content/html/content/test/test_bug389797.html index e54edbed48ff..051ae8912291 100644 --- a/content/html/content/test/test_bug389797.html +++ b/content/html/content/test/test_bug389797.html @@ -35,7 +35,8 @@ function HTML_TAG(aTagName, aImplClass) { "nsIDOMEventTarget", "nsIDOMNSHTMLElement", "nsIDOMElementCSSInlineStyle", - "nsIDOMNodeSelector" ]; + "nsIDOMNodeSelector", + "nsITouchEventReceiver" ]; // Some interfaces don't appear in classinfo because other interfaces that // inherit from them do. diff --git a/dom/base/nsDOMClassInfo.cpp b/dom/base/nsDOMClassInfo.cpp index 8a32ab0bfce6..bbacf8d7a680 100644 --- a/dom/base/nsDOMClassInfo.cpp +++ b/dom/base/nsDOMClassInfo.cpp @@ -2210,7 +2210,9 @@ nsDOMClassInfo::RegisterExternalClasses() DOM_CLASSINFO_MAP_ENTRY(nsIDOMElementCSSInlineStyle) \ DOM_CLASSINFO_MAP_ENTRY(nsIDOMEventTarget) \ DOM_CLASSINFO_MAP_ENTRY(nsIDOMNSElement) \ - DOM_CLASSINFO_MAP_ENTRY(nsIDOMNodeSelector) + DOM_CLASSINFO_MAP_ENTRY(nsIDOMNodeSelector) \ + DOM_CLASSINFO_MAP_CONDITIONAL_ENTRY(nsITouchEventReceiver, \ + nsDOMTouchEvent::PrefEnabled()) #define DOM_CLASSINFO_EVENT_MAP_ENTRIES \ DOM_CLASSINFO_MAP_ENTRY(nsIDOMEvent) \ @@ -2384,6 +2386,8 @@ nsDOMClassInfo::Init() DOM_CLASSINFO_MAP_ENTRY(nsIDOMNSElement) DOM_CLASSINFO_MAP_ENTRY(nsIDOMEventTarget) DOM_CLASSINFO_MAP_ENTRY(nsIDOMNodeSelector) + DOM_CLASSINFO_MAP_CONDITIONAL_ENTRY(nsITouchEventReceiver, + nsDOMTouchEvent::PrefEnabled()) DOM_CLASSINFO_MAP_END DOM_CLASSINFO_MAP_BEGIN(Attr, nsIDOMAttr) @@ -2915,6 +2919,8 @@ nsDOMClassInfo::Init() DOM_CLASSINFO_MAP_ENTRY(nsIDOMNSElement) DOM_CLASSINFO_MAP_ENTRY(nsIDOMElementCSSInlineStyle) DOM_CLASSINFO_MAP_ENTRY(nsIDOMNodeSelector) + DOM_CLASSINFO_MAP_CONDITIONAL_ENTRY(nsITouchEventReceiver, + nsDOMTouchEvent::PrefEnabled()) DOM_CLASSINFO_MAP_END DOM_CLASSINFO_MAP_BEGIN(XULCommandDispatcher, nsIDOMXULCommandDispatcher) @@ -3019,11 +3025,13 @@ nsDOMClassInfo::Init() DOM_CLASSINFO_EVENT_MAP_ENTRIES DOM_CLASSINFO_MAP_END -#define DOM_CLASSINFO_SVG_ELEMENT_MAP_ENTRIES \ - DOM_CLASSINFO_MAP_ENTRY(nsIDOMEventTarget) \ - DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGElement) \ - DOM_CLASSINFO_MAP_ENTRY(nsIDOMNSElement) \ - DOM_CLASSINFO_MAP_ENTRY(nsIDOMNodeSelector) +#define DOM_CLASSINFO_SVG_ELEMENT_MAP_ENTRIES \ + DOM_CLASSINFO_MAP_ENTRY(nsIDOMEventTarget) \ + DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGElement) \ + DOM_CLASSINFO_MAP_ENTRY(nsIDOMNSElement) \ + DOM_CLASSINFO_MAP_ENTRY(nsIDOMNodeSelector) \ + DOM_CLASSINFO_MAP_CONDITIONAL_ENTRY(nsITouchEventReceiver, \ + nsDOMTouchEvent::PrefEnabled()) #define DOM_CLASSINFO_SVG_GRAPHIC_ELEMENT_MAP_ENTRIES \ DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGLocatable) \ @@ -3958,6 +3966,8 @@ nsDOMClassInfo::Init() DOM_CLASSINFO_MAP_ENTRY(nsIDOMNSElement) DOM_CLASSINFO_MAP_ENTRY(nsIDOMEventTarget) DOM_CLASSINFO_MAP_ENTRY(nsIDOMNodeSelector) + DOM_CLASSINFO_MAP_CONDITIONAL_ENTRY(nsITouchEventReceiver, + nsDOMTouchEvent::PrefEnabled()) DOM_CLASSINFO_MAP_END DOM_CLASSINFO_MAP_BEGIN(WebGLRenderingContext, nsIDOMWebGLRenderingContext)