Bug 1082839 - WebIDL for WindowRoot, r=peterv
--- a/dom/base/nsWindowRoot.cpp
+++ b/dom/base/nsWindowRoot.cpp
@@ -1,44 +1,44 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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 "mozilla/BasicEvents.h"
#include "mozilla/EventDispatcher.h"
#include "mozilla/EventListenerManager.h"
+#include "mozilla/dom/WindowRootBinding.h"
#include "nsCOMPtr.h"
#include "nsWindowRoot.h"
#include "nsPIDOMWindow.h"
#include "nsPresContext.h"
#include "nsLayoutCID.h"
#include "nsContentCID.h"
#include "nsString.h"
#include "nsGlobalWindow.h"
#include "nsFocusManager.h"
#include "nsIContent.h"
#include "nsIDOMHTMLInputElement.h"
#include "nsIDOMHTMLTextAreaElement.h"
#include "nsIControllers.h"
#include "nsIController.h"
-
+#include "xpcpublic.h"
#include "nsCycleCollectionParticipant.h"
#ifdef MOZ_XUL
#include "nsIDOMXULElement.h"
#endif
using namespace mozilla;
using namespace mozilla::dom;
nsWindowRoot::nsWindowRoot(nsPIDOMWindow* aWindow)
{
mWindow = aWindow;
- SetIsNotDOMBinding();
}
nsWindowRoot::~nsWindowRoot()
{
if (mListenerManager) {
mListenerManager->Disconnect();
}
}
@@ -288,16 +288,28 @@ nsWindowRoot::GetPopupNode()
}
void
nsWindowRoot::SetPopupNode(nsIDOMNode* aNode)
{
mPopupNode = aNode;
}
+nsIGlobalObject*
+nsWindowRoot::GetParentObject()
+{
+ return xpc::NativeGlobal(xpc::PrivilegedJunkScope());
+}
+
+JSObject*
+nsWindowRoot::WrapObject(JSContext* aCx)
+{
+ return mozilla::dom::WindowRootBinding::Wrap(aCx, this);
+}
+
///////////////////////////////////////////////////////////////////////////////////
already_AddRefed<EventTarget>
NS_NewWindowRoot(nsPIDOMWindow* aWindow)
{
nsCOMPtr<EventTarget> result = new nsWindowRoot(aWindow);
return result.forget();
}
--- a/dom/base/nsWindowRoot.h
+++ b/dom/base/nsWindowRoot.h
@@ -5,16 +5,17 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef nsWindowRoot_h__
#define nsWindowRoot_h__
class nsPIDOMWindow;
class nsIDOMEventListener;
class nsIDOMEvent;
+class nsIGlobalObject;
namespace mozilla {
class EventChainPostVisitor;
class EventChainPreVisitor;
} // namespace mozilla
#include "mozilla/Attributes.h"
#include "mozilla/EventListenerManager.h"
@@ -56,20 +57,19 @@ public:
virtual void SetParentTarget(mozilla::dom::EventTarget* aTarget) MOZ_OVERRIDE
{
mParent = aTarget;
}
virtual mozilla::dom::EventTarget* GetParentTarget() MOZ_OVERRIDE { return mParent; }
virtual nsIDOMWindow* GetOwnerGlobal() MOZ_OVERRIDE;
- virtual JSObject* WrapObject(JSContext* cx) MOZ_OVERRIDE
- {
- MOZ_CRASH("nsWindowRoot doesn't use DOM bindings!");
- }
+ nsIGlobalObject* GetParentObject();
+
+ virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(nsWindowRoot,
nsIDOMEventTarget)
protected:
virtual ~nsWindowRoot();
// Members
--- a/dom/bindings/Bindings.conf
+++ b/dom/bindings/Bindings.conf
@@ -1470,16 +1470,20 @@ DOMInterfaces = {
'concrete': False
},
{
# We need a worker descriptor for WindowProxy because EventTarget exists in
# workers. But it's an external interface, so it'll just map to JSObject*.
'workers': True
}],
+'WindowRoot': {
+ 'nativeType': 'nsWindowRoot'
+},
+
'Worker': {
'headerFile': 'mozilla/dom/WorkerPrivate.h',
'nativeType': 'mozilla::dom::workers::WorkerPrivate',
'implicitJSContext': [
'terminate',
],
},
new file mode 100644
--- /dev/null
+++ b/dom/webidl/WindowRoot.webidl
@@ -0,0 +1,9 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* 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/.
+ */
+
+[ChromeOnly]
+interface WindowRoot : EventTarget {
+};
--- a/dom/webidl/moz.build
+++ b/dom/webidl/moz.build
@@ -519,16 +519,17 @@ WEBIDL_FILES = [
'VTTRegion.webidl',
'WaveShaperNode.webidl',
'WebComponents.webidl',
'WebGL2RenderingContext.webidl',
'WebGLRenderingContext.webidl',
'WebSocket.webidl',
'WheelEvent.webidl',
'WifiOptions.webidl',
+ 'WindowRoot.webidl',
'Worker.webidl',
'WorkerGlobalScope.webidl',
'WorkerLocation.webidl',
'WorkerNavigator.webidl',
'XMLDocument.webidl',
'XMLHttpRequest.webidl',
'XMLHttpRequestEventTarget.webidl',
'XMLHttpRequestUpload.webidl',