Bug 991899 part 1 - Add unprefixed API for PointerLock. r?smaug
MozReview-Commit-ID: 3af2D9IWI1Q
--- a/dom/base/Element.cpp
+++ b/dom/base/Element.cpp
@@ -3279,17 +3279,17 @@ Element::RequestFullscreen(JSContext* aC
}
}
}
OwnerDoc()->AsyncRequestFullScreen(Move(request));
}
void
-Element::MozRequestPointerLock()
+Element::RequestPointerLock()
{
OwnerDoc()->RequestPointerLock(this);
}
void
Element::GetGridFragments(nsTArray<RefPtr<Grid>>& aResult)
{
nsGridContainerFrame* frame =
--- a/dom/base/Element.h
+++ b/dom/base/Element.h
@@ -745,17 +745,17 @@ public:
if (nsIPresShell::GetCapturingContent() == this) {
nsIPresShell::SetCapturingContent(nullptr, 0);
}
}
// aCx == nullptr is allowed only if aOptions.isNullOrUndefined()
void RequestFullscreen(JSContext* aCx, JS::Handle<JS::Value> aOptions,
ErrorResult& aError);
- void MozRequestPointerLock();
+ void RequestPointerLock();
Attr* GetAttributeNode(const nsAString& aName);
already_AddRefed<Attr> SetAttributeNode(Attr& aNewAttr,
ErrorResult& aError);
already_AddRefed<Attr> RemoveAttributeNode(Attr& aOldAttr,
ErrorResult& aError);
Attr* GetAttributeNodeNS(const nsAString& aNamespaceURI,
const nsAString& aLocalName);
already_AddRefed<Attr> SetAttributeNodeNS(Attr& aNewAttr,
@@ -1856,17 +1856,17 @@ NS_IMETHOD ReleaseCapture(void) final ov
NS_IMETHOD MozRequestFullScreen(void) final override \
{ \
mozilla::ErrorResult rv; \
Element::RequestFullscreen(nullptr, JS::UndefinedHandleValue, rv); \
return rv.StealNSResult(); \
} \
NS_IMETHOD MozRequestPointerLock(void) final override \
{ \
- Element::MozRequestPointerLock(); \
+ Element::RequestPointerLock(); \
return NS_OK; \
} \
using nsINode::QuerySelector; \
NS_IMETHOD QuerySelector(const nsAString& aSelector, \
nsIDOMElement **aReturn) final override \
{ \
return nsINode::QuerySelector(aSelector, aReturn); \
} \
--- a/dom/base/nsDocument.cpp
+++ b/dom/base/nsDocument.cpp
@@ -9408,17 +9408,17 @@ nsDocument::OnPageHide(bool aPersisted,
// We do not stop the animations (bug 1024343)
// when the page is refreshing while being dragged out
nsDocShell* docShell = mDocumentContainer.get();
if (aPersisted && !(docShell && docShell->InFrameSwap())) {
SetImagesNeedAnimating(false);
}
- MozExitPointerLock();
+ ExitPointerLock();
// Now send out a PageHide event.
nsCOMPtr<EventTarget> target = aDispatchStartTarget;
if (!target) {
target = do_QueryInterface(GetWindow());
}
// Dispatch observer notification to notify observers page is hidden.
@@ -12245,32 +12245,32 @@ static void
DispatchPointerLockChange(nsIDocument* aTarget)
{
if (!aTarget) {
return;
}
RefPtr<AsyncEventDispatcher> asyncDispatcher =
new AsyncEventDispatcher(aTarget,
- NS_LITERAL_STRING("mozpointerlockchange"),
+ NS_LITERAL_STRING("pointerlockchange"),
true,
false);
asyncDispatcher->PostDOMEvent();
}
static void
DispatchPointerLockError(nsIDocument* aTarget, const char* aMessage)
{
if (!aTarget) {
return;
}
RefPtr<AsyncEventDispatcher> asyncDispatcher =
new AsyncEventDispatcher(aTarget,
- NS_LITERAL_STRING("mozpointerlockerror"),
+ NS_LITERAL_STRING("pointerlockerror"),
true,
false);
asyncDispatcher->PostDOMEvent();
nsContentUtils::ReportToConsole(nsIScriptError::warningFlag,
NS_LITERAL_CSTRING("DOM"), aTarget,
nsContentUtils::eDOM_PROPERTIES,
aMessage);
}
@@ -12526,31 +12526,31 @@ void
nsIDocument::UnlockPointer(nsIDocument* aDoc)
{
nsDocument::UnlockPointer(aDoc);
}
NS_IMETHODIMP
nsDocument::MozExitPointerLock()
{
- nsIDocument::MozExitPointerLock();
+ nsIDocument::ExitPointerLock();
return NS_OK;
}
NS_IMETHODIMP
nsDocument::GetMozPointerLockElement(nsIDOMElement** aPointerLockedElement)
{
- Element* el = nsIDocument::GetMozPointerLockElement();
+ Element* el = nsIDocument::GetPointerLockElement();
nsCOMPtr<nsIDOMElement> retval = do_QueryInterface(el);
retval.forget(aPointerLockedElement);
return NS_OK;
}
Element*
-nsIDocument::GetMozPointerLockElement()
+nsIDocument::GetPointerLockElement()
{
nsCOMPtr<Element> pointerLockedElement =
do_QueryReferent(EventStateManager::sPointerLockedElement);
if (!pointerLockedElement) {
return nullptr;
}
// Make sure pointer locked element is in the same document.
--- a/dom/base/nsGkAtomList.h
+++ b/dom/base/nsGkAtomList.h
@@ -872,16 +872,18 @@ GK_ATOM(onpageshow, "onpageshow")
GK_ATOM(onpaint, "onpaint")
GK_ATOM(onpairingaborted, "onpairingaborted")
GK_ATOM(onpairingconfirmationreq, "onpairingconfirmationreq")
GK_ATOM(onpairingconsentreq, "onpairingconsentreq")
GK_ATOM(onpaste, "onpaste")
GK_ATOM(onpendingchange, "onpendingchange")
GK_ATOM(onpichange, "onpichange")
GK_ATOM(onpicture, "onpicture")
+GK_ATOM(onpointerlockchange, "onpointerlockchange")
+GK_ATOM(onpointerlockerror, "onpointerlockerror")
GK_ATOM(onpopuphidden, "onpopuphidden")
GK_ATOM(onpopuphiding, "onpopuphiding")
GK_ATOM(onpopupshowing, "onpopupshowing")
GK_ATOM(onpopupshown, "onpopupshown")
GK_ATOM(onposter, "onposter")
GK_ATOM(onpreviewstatechange, "onpreviewstatechange")
GK_ATOM(onpullphonebookreq, "onpullphonebookreq")
GK_ATOM(onpullvcardentryreq, "onpullvcardentryreq")
@@ -991,16 +993,18 @@ GK_ATOM(persist, "persist")
GK_ATOM(phase, "phase")
GK_ATOM(picture, "picture")
GK_ATOM(ping, "ping")
GK_ATOM(pinned,"pinned")
GK_ATOM(placeholder, "placeholder")
GK_ATOM(plaintext, "plaintext")
GK_ATOM(playbackrate, "playbackrate")
GK_ATOM(pointSize, "point-size")
+GK_ATOM(pointerlockchange, "pointerlockchange")
+GK_ATOM(pointerlockerror, "pointerlockerror")
GK_ATOM(poly, "poly")
GK_ATOM(polygon, "polygon")
GK_ATOM(popup, "popup")
GK_ATOM(popupalign, "popupalign")
GK_ATOM(popupanchor, "popupanchor")
GK_ATOM(popupgroup, "popupgroup")
GK_ATOM(popuphidden, "popuphidden")
GK_ATOM(popuphiding, "popuphiding")
--- a/dom/base/nsIDocument.h
+++ b/dom/base/nsIDocument.h
@@ -2599,18 +2599,18 @@ public:
// Not const because all the full-screen goop is not const
virtual bool FullscreenEnabled() = 0;
virtual Element* GetFullscreenElement() = 0;
bool Fullscreen()
{
return !!GetFullscreenElement();
}
void ExitFullscreen();
- Element* GetMozPointerLockElement();
- void MozExitPointerLock()
+ Element* GetPointerLockElement();
+ void ExitPointerLock()
{
UnlockPointer(this);
}
bool Hidden() const
{
return mVisibilityState != mozilla::dom::VisibilityState::Visible;
}
bool MozHidden() const
--- a/dom/events/EventListenerManager.cpp
+++ b/dom/events/EventListenerManager.cpp
@@ -1144,16 +1144,20 @@ EventListenerManager::GetLegacyEventMess
}
}
switch (aEventMessage) {
case eFullscreenChange:
return eMozFullscreenChange;
case eFullscreenError:
return eMozFullscreenError;
+ case ePointerLockChange:
+ return eMozPointerLockChange;
+ case ePointerLockError:
+ return eMozPointerLockError;
default:
return aEventMessage;
}
}
/**
* Causes a check for event listeners and processing by them if they exist.
* @param an event listener
--- a/dom/events/EventNameList.h
+++ b/dom/events/EventNameList.h
@@ -318,20 +318,28 @@ EVENT(mozfullscreenchange,
eMozFullscreenChange,
EventNameType_HTML,
eBasicEventClass)
EVENT(mozfullscreenerror,
eMozFullscreenError,
EventNameType_HTML,
eBasicEventClass)
EVENT(mozpointerlockchange,
+ eMozPointerLockChange,
+ EventNameType_HTML,
+ eBasicEventClass)
+EVENT(mozpointerlockerror,
+ eMozPointerLockError,
+ EventNameType_HTML,
+ eBasicEventClass)
+EVENT(pointerlockchange,
ePointerLockChange,
EventNameType_HTML,
eBasicEventClass)
-EVENT(mozpointerlockerror,
+EVENT(pointerlockerror,
ePointerLockError,
EventNameType_HTML,
eBasicEventClass)
EVENT(pointerdown,
ePointerDown,
EventNameType_All,
ePointerEventClass)
EVENT(pointermove,
--- a/dom/webidl/Document.webidl
+++ b/dom/webidl/Document.webidl
@@ -248,20 +248,29 @@ partial interface Document {
// Events handlers
[Func="nsDocument::IsUnprefixedFullscreenEnabled"]
attribute EventHandler onfullscreenchange;
[Func="nsDocument::IsUnprefixedFullscreenEnabled"]
attribute EventHandler onfullscreenerror;
};
-// http://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html#extensions-to-the-document-interface
+// https://w3c.github.io/pointerlock/#extensions-to-the-document-interface
+// https://w3c.github.io/pointerlock/#extensions-to-the-documentorshadowroot-mixin
partial interface Document {
- readonly attribute Element? mozPointerLockElement;
- void mozExitPointerLock ();
+ readonly attribute Element? pointerLockElement;
+ [BinaryName="pointerLockElement"]
+ readonly attribute Element? mozPointerLockElement;
+ void exitPointerLock();
+ [BinaryName="exitPointerLock"]
+ void mozExitPointerLock();
+
+ // Event handlers
+ attribute EventHandler onpointerlockchange;
+ attribute EventHandler onpointerlockerror;
};
//http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/index.html#dfn-document-register
partial interface Document {
// this is deprecated from CustomElements v0
[Throws, Func="CustomElementsRegistry::IsCustomElementsEnabled"]
object registerElement(DOMString name, optional ElementRegistrationOptions options);
};
--- a/dom/webidl/Element.webidl
+++ b/dom/webidl/Element.webidl
@@ -125,25 +125,16 @@ interface Element : Node {
/**
* If this element has captured the mouse, release the capture. If another
* element has captured the mouse, this method has no effect.
*/
void releaseCapture();
// Mozilla extensions
- /**
- * Requests that this element be made the pointer-locked element, as per the DOM
- * pointer lock api.
- *
- * @see <http://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html>
- */
- [UnsafeInPrerendering]
- void mozRequestPointerLock();
-
// Obsolete methods.
Attr? getAttributeNode(DOMString name);
[Throws]
Attr? setAttributeNode(Attr newAttr);
[Throws]
Attr? removeAttributeNode(Attr oldAttr);
Attr? getAttributeNodeNS(DOMString? namespaceURI, DOMString localName);
[Throws]
@@ -269,8 +260,16 @@ partial interface Element {
* The options parameter is non-standard. In Gecko, it can be:
* a RequestFullscreenOptions object
*/
[Throws, UnsafeInPrerendering, Func="nsDocument::IsUnprefixedFullscreenEnabled"]
void requestFullscreen(optional any options);
[Throws, UnsafeInPrerendering, BinaryName="requestFullscreen"]
void mozRequestFullScreen(optional any options);
};
+
+// https://w3c.github.io/pointerlock/#extensions-to-the-element-interface
+partial interface Element {
+ [UnsafeInPrerendering]
+ void requestPointerLock();
+ [UnsafeInPrerendering, BinaryName="requestPointerLock"]
+ void mozRequestPointerLock();
+};
--- a/widget/EventMessageList.h
+++ b/widget/EventMessageList.h
@@ -383,16 +383,18 @@ NS_EVENT_MESSAGE(eMozFullscreenError)
NS_EVENT_MESSAGE(eTouchStart)
NS_EVENT_MESSAGE(eTouchMove)
NS_EVENT_MESSAGE(eTouchEnd)
NS_EVENT_MESSAGE(eTouchCancel)
// Pointerlock DOM API
NS_EVENT_MESSAGE(ePointerLockChange)
NS_EVENT_MESSAGE(ePointerLockError)
+NS_EVENT_MESSAGE(eMozPointerLockChange)
+NS_EVENT_MESSAGE(eMozPointerLockError)
// eWheel is the event message of DOM wheel event.
NS_EVENT_MESSAGE(eWheel)
// eWheelOperationStart may be dispatched when user starts to operate mouse
// wheel. This won't be fired on some platforms which don't have corresponding
// native event.
NS_EVENT_MESSAGE(eWheelOperationStart)
// eWheelOperationEnd may be dispatched when user ends or cancels operating