mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-13 03:24:26 +00:00
DOM fixes for bug 20721, r=vidur
This commit is contained in:
parent
7e740cf4c6
commit
37085fc3fd
@ -36,6 +36,7 @@ class nsIDOMScreen;
|
||||
class nsIDOMHistory;
|
||||
class nsIDOMWindowCollection;
|
||||
class nsIDOMEvent;
|
||||
class nsISidebar;
|
||||
class nsIDOMWindow;
|
||||
class nsIControllers;
|
||||
|
||||
@ -65,6 +66,8 @@ public:
|
||||
|
||||
NS_IMETHOD GetContent(nsIDOMWindow** aContent)=0;
|
||||
|
||||
NS_IMETHOD GetSidebar(nsISidebar** aSidebar)=0;
|
||||
|
||||
NS_IMETHOD GetMenubar(nsIDOMBarProp** aMenubar)=0;
|
||||
|
||||
NS_IMETHOD GetToolbar(nsIDOMBarProp** aToolbar)=0;
|
||||
@ -209,6 +212,7 @@ public:
|
||||
NS_IMETHOD GetParent(nsIDOMWindow** aParent); \
|
||||
NS_IMETHOD GetTop(nsIDOMWindow** aTop); \
|
||||
NS_IMETHOD GetContent(nsIDOMWindow** aContent); \
|
||||
NS_IMETHOD GetSidebar(nsISidebar** aSidebar); \
|
||||
NS_IMETHOD GetMenubar(nsIDOMBarProp** aMenubar); \
|
||||
NS_IMETHOD GetToolbar(nsIDOMBarProp** aToolbar); \
|
||||
NS_IMETHOD GetLocationbar(nsIDOMBarProp** aLocationbar); \
|
||||
@ -294,6 +298,7 @@ public:
|
||||
NS_IMETHOD GetParent(nsIDOMWindow** aParent) { return _to GetParent(aParent); } \
|
||||
NS_IMETHOD GetTop(nsIDOMWindow** aTop) { return _to GetTop(aTop); } \
|
||||
NS_IMETHOD GetContent(nsIDOMWindow** aContent) { return _to GetContent(aContent); } \
|
||||
NS_IMETHOD GetSidebar(nsISidebar** aSidebar) { return _to GetSidebar(aSidebar); } \
|
||||
NS_IMETHOD GetMenubar(nsIDOMBarProp** aMenubar) { return _to GetMenubar(aMenubar); } \
|
||||
NS_IMETHOD GetToolbar(nsIDOMBarProp** aToolbar) { return _to GetToolbar(aToolbar); } \
|
||||
NS_IMETHOD GetLocationbar(nsIDOMBarProp** aLocationbar) { return _to GetLocationbar(aLocationbar); } \
|
||||
|
@ -10,6 +10,7 @@
|
||||
readonly attribute Window parent;
|
||||
readonly attribute Window top;
|
||||
readonly attribute Window content;
|
||||
readonly attribute xpidl nsISidebar sidebar;
|
||||
readonly attribute BarProp menubar;
|
||||
readonly attribute BarProp toolbar;
|
||||
readonly attribute BarProp locationbar;
|
||||
|
@ -819,6 +819,7 @@ enum nsDOMProp {
|
||||
NS_DOM_PROP_WINDOW_CLOSED,
|
||||
NS_DOM_PROP_WINDOW_CONFIRM,
|
||||
NS_DOM_PROP_WINDOW_CONTENT,
|
||||
NS_DOM_PROP_WINDOW_SIDEBAR,
|
||||
NS_DOM_PROP_WINDOW_CONTROLLERS,
|
||||
NS_DOM_PROP_WINDOW_DEFAULTSTATUS,
|
||||
NS_DOM_PROP_WINDOW_DIRECTORIES,
|
||||
|
@ -818,6 +818,7 @@
|
||||
"window.closed", \
|
||||
"window.confirm", \
|
||||
"window.content", \
|
||||
"window.sidebar", \
|
||||
"window.controllers", \
|
||||
"window.defaultstatus", \
|
||||
"window.directories", \
|
||||
|
@ -75,6 +75,7 @@
|
||||
#include "nsIScriptGlobalObjectOwner.h"
|
||||
#include "nsIScriptSecurityManager.h"
|
||||
#include "nsISelectionController.h"
|
||||
#include "nsISidebar.h" // XXX for sidebar HACK, see bug 20721
|
||||
#include "nsIWebNavigation.h"
|
||||
#include "nsIWebBrowser.h"
|
||||
#include "nsIWebBrowserChrome.h"
|
||||
@ -105,7 +106,8 @@ GlobalWindowImpl::GlobalWindowImpl() : mScriptObject(nsnull),
|
||||
mGlobalObjectOwner(nsnull), mTimeouts(nsnull),
|
||||
mTimeoutInsertionPoint(nsnull), mRunningTimeout(nsnull),
|
||||
mTimeoutPublicIdCounter(1), mTimeoutFiringDepth(0),
|
||||
mFirstDocumentLoad(PR_TRUE), mChromeEventHandler(nsnull), mDocShell(nsnull)
|
||||
mFirstDocumentLoad(PR_TRUE), mChromeEventHandler(nsnull), mDocShell(nsnull),
|
||||
mSidebar(nsnull)
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
@ -228,6 +230,12 @@ NS_IMETHODIMP GlobalWindowImpl::SetNewDocument(nsIDOMDocument *aDocument)
|
||||
{
|
||||
ClearAllTimeouts();
|
||||
|
||||
if (mSidebar)
|
||||
{
|
||||
mSidebar->SetWindow(nsnull);
|
||||
mSidebar = nsnull;
|
||||
}
|
||||
|
||||
if(mListenerManager)
|
||||
mListenerManager->RemoveAllListeners(PR_FALSE);
|
||||
|
||||
@ -551,6 +559,30 @@ NS_IMETHODIMP GlobalWindowImpl::GetContent(nsIDOMWindow** aContent)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// XXX for sidebar HACK, see bug 20721
|
||||
NS_IMETHODIMP GlobalWindowImpl::GetSidebar(nsISidebar** aSidebar)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
if (!mSidebar)
|
||||
{
|
||||
mSidebar = do_CreateInstance(NS_SIDEBAR_PROGID, &rv);
|
||||
|
||||
if (mSidebar)
|
||||
{
|
||||
nsIDOMWindow *win = NS_STATIC_CAST(nsIDOMWindow *, this);
|
||||
/* no addref */
|
||||
mSidebar->SetWindow(win);
|
||||
}
|
||||
}
|
||||
|
||||
*aSidebar = mSidebar;
|
||||
NS_IF_ADDREF(*aSidebar);
|
||||
|
||||
return rv;
|
||||
|
||||
}
|
||||
|
||||
NS_IMETHODIMP GlobalWindowImpl::GetMenubar(nsIDOMBarProp** aMenubar)
|
||||
{
|
||||
if(!mMenubar)
|
||||
|
@ -195,6 +195,7 @@ protected:
|
||||
nsCOMPtr<nsIDOMWindow> mOpener;
|
||||
nsCOMPtr<nsIControllers> mControllers;
|
||||
nsCOMPtr<nsIEventListenerManager> mListenerManager;
|
||||
nsCOMPtr<nsISidebar> mSidebar;
|
||||
void* mScriptObject;
|
||||
NavigatorImpl* mNavigator;
|
||||
ScreenImpl* mScreen;
|
||||
|
@ -44,6 +44,7 @@
|
||||
#include "nsIDOMWindowCollection.h"
|
||||
#include "nsIDOMEvent.h"
|
||||
#include "nsIDOMEventTarget.h"
|
||||
#include "nsISidebar.h"
|
||||
#include "nsIDOMWindow.h"
|
||||
#include "nsIControllers.h"
|
||||
|
||||
@ -61,6 +62,7 @@ static NS_DEFINE_IID(kIEventListenerIID, NS_IDOMEVENTLISTENER_IID);
|
||||
static NS_DEFINE_IID(kIWindowCollectionIID, NS_IDOMWINDOWCOLLECTION_IID);
|
||||
static NS_DEFINE_IID(kIEventIID, NS_IDOMEVENT_IID);
|
||||
static NS_DEFINE_IID(kIEventTargetIID, NS_IDOMEVENTTARGET_IID);
|
||||
static NS_DEFINE_IID(kISidebarIID, NS_ISIDEBAR_IID);
|
||||
static NS_DEFINE_IID(kIWindowIID, NS_IDOMWINDOW_IID);
|
||||
static NS_DEFINE_IID(kIControllersIID, NS_ICONTROLLERS_IID);
|
||||
|
||||
@ -77,30 +79,31 @@ enum Window_slots {
|
||||
WINDOW_PARENT = -7,
|
||||
WINDOW_TOP = -8,
|
||||
WINDOW_CONTENT = -9,
|
||||
WINDOW_MENUBAR = -10,
|
||||
WINDOW_TOOLBAR = -11,
|
||||
WINDOW_LOCATIONBAR = -12,
|
||||
WINDOW_PERSONALBAR = -13,
|
||||
WINDOW_STATUSBAR = -14,
|
||||
WINDOW_SCROLLBARS = -15,
|
||||
WINDOW_DIRECTORIES = -16,
|
||||
WINDOW_CLOSED = -17,
|
||||
WINDOW_FRAMES = -18,
|
||||
WINDOW_CONTROLLERS = -19,
|
||||
WINDOW_OPENER = -20,
|
||||
WINDOW_STATUS = -21,
|
||||
WINDOW_DEFAULTSTATUS = -22,
|
||||
WINDOW_NAME = -23,
|
||||
WINDOW_INNERWIDTH = -24,
|
||||
WINDOW_INNERHEIGHT = -25,
|
||||
WINDOW_OUTERWIDTH = -26,
|
||||
WINDOW_OUTERHEIGHT = -27,
|
||||
WINDOW_SCREENX = -28,
|
||||
WINDOW_SCREENY = -29,
|
||||
WINDOW_PAGEXOFFSET = -30,
|
||||
WINDOW_PAGEYOFFSET = -31,
|
||||
WINDOW_SCROLLX = -32,
|
||||
WINDOW_SCROLLY = -33
|
||||
WINDOW_SIDEBAR = -10,
|
||||
WINDOW_MENUBAR = -11,
|
||||
WINDOW_TOOLBAR = -12,
|
||||
WINDOW_LOCATIONBAR = -13,
|
||||
WINDOW_PERSONALBAR = -14,
|
||||
WINDOW_STATUSBAR = -15,
|
||||
WINDOW_SCROLLBARS = -16,
|
||||
WINDOW_DIRECTORIES = -17,
|
||||
WINDOW_CLOSED = -18,
|
||||
WINDOW_FRAMES = -19,
|
||||
WINDOW_CONTROLLERS = -20,
|
||||
WINDOW_OPENER = -21,
|
||||
WINDOW_STATUS = -22,
|
||||
WINDOW_DEFAULTSTATUS = -23,
|
||||
WINDOW_NAME = -24,
|
||||
WINDOW_INNERWIDTH = -25,
|
||||
WINDOW_INNERHEIGHT = -26,
|
||||
WINDOW_OUTERWIDTH = -27,
|
||||
WINDOW_OUTERHEIGHT = -28,
|
||||
WINDOW_SCREENX = -29,
|
||||
WINDOW_SCREENY = -30,
|
||||
WINDOW_PAGEXOFFSET = -31,
|
||||
WINDOW_PAGEYOFFSET = -32,
|
||||
WINDOW_SCROLLX = -33,
|
||||
WINDOW_SCROLLY = -34
|
||||
};
|
||||
|
||||
/***********************************************************************/
|
||||
@ -287,6 +290,24 @@ GetWindowProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WINDOW_SIDEBAR:
|
||||
{
|
||||
rv = secMan->CheckScriptAccess(cx, obj, NS_DOM_PROP_WINDOW_SIDEBAR, PR_FALSE);
|
||||
if (NS_FAILED(rv)) {
|
||||
return nsJSUtils::nsReportError(cx, obj, rv);
|
||||
}
|
||||
nsISidebar* prop;
|
||||
nsresult result = NS_OK;
|
||||
result = a->GetSidebar(&prop);
|
||||
if (NS_SUCCEEDED(result)) {
|
||||
// get the js object; n.b., this will do a release on 'prop'
|
||||
nsJSUtils::nsConvertXPCObjectToJSVal(prop, NS_GET_IID(nsISidebar), cx, obj, vp);
|
||||
}
|
||||
else {
|
||||
return nsJSUtils::nsReportError(cx, obj, result);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WINDOW_MENUBAR:
|
||||
{
|
||||
rv = secMan->CheckScriptAccess(cx, obj, NS_DOM_PROP_WINDOW_MENUBAR, PR_FALSE);
|
||||
@ -2780,6 +2801,7 @@ static JSPropertySpec WindowProperties[] =
|
||||
{"parent", WINDOW_PARENT, JSPROP_ENUMERATE | JSPROP_READONLY},
|
||||
{"top", WINDOW_TOP, JSPROP_ENUMERATE | JSPROP_READONLY},
|
||||
{"content", WINDOW_CONTENT, JSPROP_ENUMERATE | JSPROP_READONLY},
|
||||
{"sidebar", WINDOW_SIDEBAR, JSPROP_ENUMERATE | JSPROP_READONLY},
|
||||
{"menubar", WINDOW_MENUBAR, JSPROP_ENUMERATE | JSPROP_READONLY},
|
||||
{"toolbar", WINDOW_TOOLBAR, JSPROP_ENUMERATE | JSPROP_READONLY},
|
||||
{"locationbar", WINDOW_LOCATIONBAR, JSPROP_ENUMERATE | JSPROP_READONLY},
|
||||
|
Loading…
x
Reference in New Issue
Block a user