Fix for 50044, 47861, 47471, r=ben

This commit is contained in:
hyatt@netscape.com
2000-08-25 07:01:53 +00:00
parent cf089f87f6
commit d3c9e4bf73
14 changed files with 407 additions and 76 deletions

View File

@@ -4213,16 +4213,7 @@ nsXULElement::RemoveFocus(nsIPresContext* aPresContext)
NS_IMETHODIMP NS_IMETHODIMP
nsXULElement::GetBindingParent(nsIContent** aContent) nsXULElement::GetBindingParent(nsIContent** aContent)
{ {
nsCOMPtr<nsIAtom> tag;
GetTag(*getter_AddRefs(tag));
if (tag.get() == nsXULAtoms::scrollbar) {
if (!mParent) {
*aContent = (nsIStyledContent*)this;
}
}
else
*aContent = mBindingParent; *aContent = mBindingParent;
NS_IF_ADDREF(*aContent); NS_IF_ADDREF(*aContent);
return NS_OK; return NS_OK;
} }

View File

@@ -20,12 +20,12 @@
* Contributor(s): * Contributor(s):
*/ */
#include "nsISupports.idl" #include "nsISecurityCheckedComponent.idl"
#include "nsIController.idl" #include "nsIController.idl"
interface nsIDOMXULCommandDispatcher; interface nsIDOMXULCommandDispatcher;
[scriptable, uuid(A5ED3A01-7CC7-11d3-BF87-00105A1B0627)] [scriptable, uuid(A5ED3A01-7CC7-11d3-BF87-00105A1B0627)]
interface nsIControllers : nsISupports { interface nsIControllers : nsISecurityCheckedComponent {
attribute nsIDOMXULCommandDispatcher commandDispatcher; attribute nsIDOMXULCommandDispatcher commandDispatcher;
nsIController getControllerForCommand(in wstring command); nsIController getControllerForCommand(in wstring command);

View File

@@ -66,7 +66,7 @@ NS_NewXULControllers(nsISupports* aOuter, REFNSIID aIID, void** aResult)
return rv; return rv;
} }
NS_IMPL_ISUPPORTS(nsXULControllers, NS_GET_IID(nsIControllers)); NS_IMPL_ISUPPORTS2(nsXULControllers, nsIControllers, nsISecurityCheckedComponent);
NS_IMETHODIMP NS_IMETHODIMP
@@ -195,3 +195,35 @@ nsXULControllers::GetControllerCount(PRUint32 *_retval)
return NS_OK; return NS_OK;
} }
/* string canCreateWrapper (in nsIIDPtr iid); */
NS_IMETHODIMP nsXULControllers::CanCreateWrapper(const nsIID * iid, char **_retval)
{
nsCAutoString str("AllAccess");
*_retval = str.ToNewCString();
return NS_OK;
}
/* string canCallMethod (in nsIIDPtr iid, in wstring methodName); */
NS_IMETHODIMP nsXULControllers::CanCallMethod(const nsIID * iid, const PRUnichar *methodName, char **_retval)
{
nsCAutoString str("AllAccess");
*_retval = str.ToNewCString();
return NS_OK;
}
/* string canGetProperty (in nsIIDPtr iid, in wstring propertyName); */
NS_IMETHODIMP nsXULControllers::CanGetProperty(const nsIID * iid, const PRUnichar *propertyName, char **_retval)
{
nsCAutoString str("AllAccess");
*_retval = str.ToNewCString();
return NS_OK;
}
/* string canSetProperty (in nsIIDPtr iid, in wstring propertyName); */
NS_IMETHODIMP nsXULControllers::CanSetProperty(const nsIID * iid, const PRUnichar *propertyName, char **_retval)
{
nsCAutoString str("AllAccess");
*_retval = str.ToNewCString();
return NS_OK;
}

View File

@@ -47,6 +47,7 @@ public:
NS_DECL_ISUPPORTS NS_DECL_ISUPPORTS
NS_DECL_NSICONTROLLERS NS_DECL_NSICONTROLLERS
NS_DECL_NSISECURITYCHECKEDCOMPONENT
protected: protected:
nsXULControllers(); nsXULControllers();

View File

@@ -7925,6 +7925,136 @@ nsCSSFrameConstructor::AppendFrames(nsIPresContext* aPresContext,
return rv; return rv;
} }
static nsIFrame*
FindPreviousAnonymousSibling(nsIPresShell* aPresShell,
nsIContent* aContainer,
nsIContent* aChild)
{
nsIFrame* prevSibling = nsnull;
nsCOMPtr<nsIDOMNodeList> nodeList;
nsCOMPtr<nsIDocument> doc;
aContainer->GetDocument(*getter_AddRefs(doc));
nsCOMPtr<nsIDOMDocumentXBL> xblDoc(do_QueryInterface(doc));
nsCOMPtr<nsIDOMElement> elt(do_QueryInterface(aContainer));
xblDoc->GetAnonymousNodes(elt, getter_AddRefs(nodeList));
if (nodeList) {
PRUint32 ctr,listLength;
nsCOMPtr<nsIDOMNode> node;
nodeList->GetLength(&listLength);
if (listLength == 0)
return nsnull;
PRBool found = PR_FALSE;
for (ctr = listLength; ctr > 0; ctr--) {
nodeList->Item(ctr-1, getter_AddRefs(node));
nsCOMPtr<nsIContent> childContent(do_QueryInterface(node));
if (childContent.get() == aChild) {
found = PR_TRUE;
continue;
}
if (found) {
aPresShell->GetPrimaryFrameFor(childContent, &prevSibling);
if (nsnull != prevSibling) {
// The frame may have a next-in-flow. Get the last-in-flow
nsIFrame* nextInFlow;
do {
prevSibling->GetNextInFlow(&nextInFlow);
if (nsnull != nextInFlow) {
prevSibling = nextInFlow;
}
} while (nsnull != nextInFlow);
// Did we really get the *right* frame?
const nsStyleDisplay* display;
prevSibling->GetStyleData(eStyleStruct_Display,
(const nsStyleStruct*&)display);
const nsStylePosition* position;
prevSibling->GetStyleData(eStyleStruct_Position,
(const nsStyleStruct*&)position);
if (display->IsFloating() || position->IsPositioned()) {
// Nope. Get the place-holder instead
nsIFrame* placeholderFrame;
aPresShell->GetPlaceholderFrameFor(prevSibling, &placeholderFrame);
NS_ASSERTION(nsnull != placeholderFrame, "yikes");
prevSibling = placeholderFrame;
}
break;
}
}
}
}
return prevSibling;
}
static nsIFrame*
FindNextAnonymousSibling(nsIPresShell* aPresShell,
nsIContent* aContainer,
nsIContent* aChild)
{
nsIFrame* nextSibling = nsnull;
nsCOMPtr<nsIDOMNodeList> nodeList;
nsCOMPtr<nsIDocument> doc;
aContainer->GetDocument(*getter_AddRefs(doc));
nsCOMPtr<nsIDOMDocumentXBL> xblDoc(do_QueryInterface(doc));
nsCOMPtr<nsIDOMElement> elt(do_QueryInterface(aContainer));
xblDoc->GetAnonymousNodes(elt, getter_AddRefs(nodeList));
if (nodeList) {
PRUint32 ctr,listLength;
nsCOMPtr<nsIDOMNode> node;
nodeList->GetLength(&listLength);
PRBool found = PR_FALSE;
for (ctr = 0; ctr < listLength; ctr++) {
nodeList->Item(ctr, getter_AddRefs(node));
nsCOMPtr<nsIContent> childContent(do_QueryInterface(node));
if (childContent.get() == aChild) {
found = PR_TRUE;
continue;
}
if (found) {
aPresShell->GetPrimaryFrameFor(childContent, &nextSibling);
if (nsnull != nextSibling) {
// The frame may have a next-in-flow. Get the first-in-flow
nsIFrame* prevInFlow;
do {
nextSibling->GetPrevInFlow(&prevInFlow);
if (nsnull != prevInFlow) {
nextSibling = prevInFlow;
}
} while (nsnull != prevInFlow);
// Did we really get the *right* frame?
const nsStyleDisplay* display;
nextSibling->GetStyleData(eStyleStruct_Display,
(const nsStyleStruct*&)display);
const nsStylePosition* position;
nextSibling->GetStyleData(eStyleStruct_Position,
(const nsStyleStruct*&)position);
if (display->IsFloating() || position->IsPositioned()) {
// Nope. Get the place-holder instead
nsIFrame* placeholderFrame;
aPresShell->GetPlaceholderFrameFor(nextSibling, &placeholderFrame);
NS_ASSERTION(nsnull != placeholderFrame, "yikes");
nextSibling = placeholderFrame;
}
break;
}
}
}
}
return nextSibling;
}
static nsIFrame* static nsIFrame*
FindPreviousSibling(nsIPresShell* aPresShell, FindPreviousSibling(nsIPresShell* aPresShell,
nsIContent* aContainer, nsIContent* aContainer,
@@ -7932,6 +8062,7 @@ FindPreviousSibling(nsIPresShell* aPresShell,
{ {
nsIFrame* prevSibling = nsnull; nsIFrame* prevSibling = nsnull;
// Walk the
// Note: not all content objects are associated with a frame (e.g., if their // Note: not all content objects are associated with a frame (e.g., if their
// 'display' type is 'hidden') so keep looking until we find a previous frame // 'display' type is 'hidden') so keep looking until we find a previous frame
for (PRInt32 i = aIndexInContainer - 1; i >= 0; i--) { for (PRInt32 i = aIndexInContainer - 1; i >= 0; i--) {
@@ -8475,35 +8606,18 @@ nsCSSFrameConstructor::ContentInserted(nsIPresContext* aPresContext,
} else { } else {
// Find the frame that precedes the insertion point. // Find the frame that precedes the insertion point.
nsIFrame* prevSibling = FindPreviousSibling(shell, aContainer, aIndexInContainer); nsIFrame* prevSibling = (aIndexInContainer == -1) ?
FindPreviousAnonymousSibling(shell, aContainer, aChild) :
/* FindPreviousSibling(shell, aContainer, aIndexInContainer);
if (prevSibling) {
nsIFrame* parent;
prevSibling->GetParent(&parent);
nsIFrame* first;
parent->FirstChild(aPresContext, nsnull, &first);
PRBool found = PR_FALSE;
while(first)
{
if (first == prevSibling) {
found = PR_TRUE;
break;
}
first->GetNextSibling(&first);
}
NS_ASSERTION(found,"Error sibling not in parent!!!!!");
}
*/
nsIFrame* nextSibling = nsnull; nsIFrame* nextSibling = nsnull;
PRBool isAppend = PR_FALSE; PRBool isAppend = PR_FALSE;
// If there is no previous sibling, then find the frame that follows // If there is no previous sibling, then find the frame that follows
if (nsnull == prevSibling) { if (nsnull == prevSibling) {
nextSibling = FindNextSibling(shell, aContainer, aIndexInContainer); nextSibling = (aIndexInContainer == -1) ?
FindNextAnonymousSibling(shell, aContainer, aChild) :
FindNextSibling(shell, aContainer, aIndexInContainer);
} }
// Get the geometric parent. Use the prev sibling if we have it; // Get the geometric parent. Use the prev sibling if we have it;

View File

@@ -7925,6 +7925,136 @@ nsCSSFrameConstructor::AppendFrames(nsIPresContext* aPresContext,
return rv; return rv;
} }
static nsIFrame*
FindPreviousAnonymousSibling(nsIPresShell* aPresShell,
nsIContent* aContainer,
nsIContent* aChild)
{
nsIFrame* prevSibling = nsnull;
nsCOMPtr<nsIDOMNodeList> nodeList;
nsCOMPtr<nsIDocument> doc;
aContainer->GetDocument(*getter_AddRefs(doc));
nsCOMPtr<nsIDOMDocumentXBL> xblDoc(do_QueryInterface(doc));
nsCOMPtr<nsIDOMElement> elt(do_QueryInterface(aContainer));
xblDoc->GetAnonymousNodes(elt, getter_AddRefs(nodeList));
if (nodeList) {
PRUint32 ctr,listLength;
nsCOMPtr<nsIDOMNode> node;
nodeList->GetLength(&listLength);
if (listLength == 0)
return nsnull;
PRBool found = PR_FALSE;
for (ctr = listLength; ctr > 0; ctr--) {
nodeList->Item(ctr-1, getter_AddRefs(node));
nsCOMPtr<nsIContent> childContent(do_QueryInterface(node));
if (childContent.get() == aChild) {
found = PR_TRUE;
continue;
}
if (found) {
aPresShell->GetPrimaryFrameFor(childContent, &prevSibling);
if (nsnull != prevSibling) {
// The frame may have a next-in-flow. Get the last-in-flow
nsIFrame* nextInFlow;
do {
prevSibling->GetNextInFlow(&nextInFlow);
if (nsnull != nextInFlow) {
prevSibling = nextInFlow;
}
} while (nsnull != nextInFlow);
// Did we really get the *right* frame?
const nsStyleDisplay* display;
prevSibling->GetStyleData(eStyleStruct_Display,
(const nsStyleStruct*&)display);
const nsStylePosition* position;
prevSibling->GetStyleData(eStyleStruct_Position,
(const nsStyleStruct*&)position);
if (display->IsFloating() || position->IsPositioned()) {
// Nope. Get the place-holder instead
nsIFrame* placeholderFrame;
aPresShell->GetPlaceholderFrameFor(prevSibling, &placeholderFrame);
NS_ASSERTION(nsnull != placeholderFrame, "yikes");
prevSibling = placeholderFrame;
}
break;
}
}
}
}
return prevSibling;
}
static nsIFrame*
FindNextAnonymousSibling(nsIPresShell* aPresShell,
nsIContent* aContainer,
nsIContent* aChild)
{
nsIFrame* nextSibling = nsnull;
nsCOMPtr<nsIDOMNodeList> nodeList;
nsCOMPtr<nsIDocument> doc;
aContainer->GetDocument(*getter_AddRefs(doc));
nsCOMPtr<nsIDOMDocumentXBL> xblDoc(do_QueryInterface(doc));
nsCOMPtr<nsIDOMElement> elt(do_QueryInterface(aContainer));
xblDoc->GetAnonymousNodes(elt, getter_AddRefs(nodeList));
if (nodeList) {
PRUint32 ctr,listLength;
nsCOMPtr<nsIDOMNode> node;
nodeList->GetLength(&listLength);
PRBool found = PR_FALSE;
for (ctr = 0; ctr < listLength; ctr++) {
nodeList->Item(ctr, getter_AddRefs(node));
nsCOMPtr<nsIContent> childContent(do_QueryInterface(node));
if (childContent.get() == aChild) {
found = PR_TRUE;
continue;
}
if (found) {
aPresShell->GetPrimaryFrameFor(childContent, &nextSibling);
if (nsnull != nextSibling) {
// The frame may have a next-in-flow. Get the first-in-flow
nsIFrame* prevInFlow;
do {
nextSibling->GetPrevInFlow(&prevInFlow);
if (nsnull != prevInFlow) {
nextSibling = prevInFlow;
}
} while (nsnull != prevInFlow);
// Did we really get the *right* frame?
const nsStyleDisplay* display;
nextSibling->GetStyleData(eStyleStruct_Display,
(const nsStyleStruct*&)display);
const nsStylePosition* position;
nextSibling->GetStyleData(eStyleStruct_Position,
(const nsStyleStruct*&)position);
if (display->IsFloating() || position->IsPositioned()) {
// Nope. Get the place-holder instead
nsIFrame* placeholderFrame;
aPresShell->GetPlaceholderFrameFor(nextSibling, &placeholderFrame);
NS_ASSERTION(nsnull != placeholderFrame, "yikes");
nextSibling = placeholderFrame;
}
break;
}
}
}
}
return nextSibling;
}
static nsIFrame* static nsIFrame*
FindPreviousSibling(nsIPresShell* aPresShell, FindPreviousSibling(nsIPresShell* aPresShell,
nsIContent* aContainer, nsIContent* aContainer,
@@ -7932,6 +8062,7 @@ FindPreviousSibling(nsIPresShell* aPresShell,
{ {
nsIFrame* prevSibling = nsnull; nsIFrame* prevSibling = nsnull;
// Walk the
// Note: not all content objects are associated with a frame (e.g., if their // Note: not all content objects are associated with a frame (e.g., if their
// 'display' type is 'hidden') so keep looking until we find a previous frame // 'display' type is 'hidden') so keep looking until we find a previous frame
for (PRInt32 i = aIndexInContainer - 1; i >= 0; i--) { for (PRInt32 i = aIndexInContainer - 1; i >= 0; i--) {
@@ -8475,35 +8606,18 @@ nsCSSFrameConstructor::ContentInserted(nsIPresContext* aPresContext,
} else { } else {
// Find the frame that precedes the insertion point. // Find the frame that precedes the insertion point.
nsIFrame* prevSibling = FindPreviousSibling(shell, aContainer, aIndexInContainer); nsIFrame* prevSibling = (aIndexInContainer == -1) ?
FindPreviousAnonymousSibling(shell, aContainer, aChild) :
/* FindPreviousSibling(shell, aContainer, aIndexInContainer);
if (prevSibling) {
nsIFrame* parent;
prevSibling->GetParent(&parent);
nsIFrame* first;
parent->FirstChild(aPresContext, nsnull, &first);
PRBool found = PR_FALSE;
while(first)
{
if (first == prevSibling) {
found = PR_TRUE;
break;
}
first->GetNextSibling(&first);
}
NS_ASSERTION(found,"Error sibling not in parent!!!!!");
}
*/
nsIFrame* nextSibling = nsnull; nsIFrame* nextSibling = nsnull;
PRBool isAppend = PR_FALSE; PRBool isAppend = PR_FALSE;
// If there is no previous sibling, then find the frame that follows // If there is no previous sibling, then find the frame that follows
if (nsnull == prevSibling) { if (nsnull == prevSibling) {
nextSibling = FindNextSibling(shell, aContainer, aIndexInContainer); nextSibling = (aIndexInContainer == -1) ?
FindNextAnonymousSibling(shell, aContainer, aChild) :
FindNextSibling(shell, aContainer, aIndexInContainer);
} }
// Get the geometric parent. Use the prev sibling if we have it; // Get the geometric parent. Use the prev sibling if we have it;

View File

@@ -31,13 +31,27 @@ class nsIPresShell;
class nsIContent; class nsIContent;
class nsIDocument; class nsIDocument;
class nsPIBoxObject : public nsISupports { #include "nsISecurityCheckedComponent.h"
class nsPIBoxObject : public nsISecurityCheckedComponent {
public: public:
static const nsIID& GetIID() { static nsIID iid = NS_PIBOXOBJECT_IID; return iid; } static const nsIID& GetIID() { static nsIID iid = NS_PIBOXOBJECT_IID; return iid; }
NS_IMETHOD Init(nsIContent* aContent, nsIPresShell* aShell) = 0; NS_IMETHOD Init(nsIContent* aContent, nsIPresShell* aShell) = 0;
NS_IMETHOD SetDocument(nsIDocument* aDocument) = 0; NS_IMETHOD SetDocument(nsIDocument* aDocument) = 0;
/* string canCreateWrapper (in nsIIDPtr iid); */
NS_IMETHOD CanCreateWrapper(const nsIID * iid, char **_retval) = 0;
/* string canCallMethod (in nsIIDPtr iid, in wstring methodName); */
NS_IMETHOD CanCallMethod(const nsIID * iid, const PRUnichar *methodName, char **_retval) = 0;
/* string canGetProperty (in nsIIDPtr iid, in wstring propertyName); */
NS_IMETHOD CanGetProperty(const nsIID * iid, const PRUnichar *propertyName, char **_retval) = 0;
/* string canSetProperty (in nsIIDPtr iid, in wstring propertyName); */
NS_IMETHOD CanSetProperty(const nsIID * iid, const PRUnichar *propertyName, char **_retval) = 0;
}; };
#endif #endif

View File

@@ -41,7 +41,7 @@
// Static member variable initialization // Static member variable initialization
// Implement our nsISupports methods // Implement our nsISupports methods
NS_IMPL_ISUPPORTS2(nsBoxObject, nsIBoxObject, nsPIBoxObject) NS_IMPL_ISUPPORTS3(nsBoxObject, nsIBoxObject, nsPIBoxObject, nsISecurityCheckedComponent)
// Constructors/Destructors // Constructors/Destructors
nsBoxObject::nsBoxObject(void) nsBoxObject::nsBoxObject(void)
@@ -263,6 +263,37 @@ nsBoxObject::GetHeight(PRInt32* aResult)
return NS_OK; return NS_OK;
} }
/* string canCreateWrapper (in nsIIDPtr iid); */
NS_IMETHODIMP nsBoxObject::CanCreateWrapper(const nsIID * iid, char **_retval)
{
nsCAutoString str("AllAccess");
*_retval = str.ToNewCString();
return NS_OK;
}
/* string canCallMethod (in nsIIDPtr iid, in wstring methodName); */
NS_IMETHODIMP nsBoxObject::CanCallMethod(const nsIID * iid, const PRUnichar *methodName, char **_retval)
{
nsCAutoString str("AllAccess");
*_retval = str.ToNewCString();
return NS_OK;
}
/* string canGetProperty (in nsIIDPtr iid, in wstring propertyName); */
NS_IMETHODIMP nsBoxObject::CanGetProperty(const nsIID * iid, const PRUnichar *propertyName, char **_retval)
{
nsCAutoString str("AllAccess");
*_retval = str.ToNewCString();
return NS_OK;
}
/* string canSetProperty (in nsIIDPtr iid, in wstring propertyName); */
NS_IMETHODIMP nsBoxObject::CanSetProperty(const nsIID * iid, const PRUnichar *propertyName, char **_retval)
{
nsCAutoString str("AllAccess");
*_retval = str.ToNewCString();
return NS_OK;
}
// Creation Routine /////////////////////////////////////////////////////////////////////// // Creation Routine ///////////////////////////////////////////////////////////////////////
nsresult nsresult

View File

@@ -34,6 +34,7 @@ class nsBoxObject : public nsIBoxObject, public nsPIBoxObject
{ {
NS_DECL_ISUPPORTS NS_DECL_ISUPPORTS
NS_DECL_NSIBOXOBJECT NS_DECL_NSIBOXOBJECT
NS_DECL_NSISECURITYCHECKEDCOMPONENT
public: public:
nsBoxObject(); nsBoxObject();

View File

@@ -43,6 +43,7 @@
#include "nsIBox.h" #include "nsIBox.h"
#include "nsBoxLayoutState.h" #include "nsBoxLayoutState.h"
#include "nsIBoxToBlockAdaptor.h" #include "nsIBoxToBlockAdaptor.h"
#include "nsIScrollbarMediator.h"
#include "nsISupportsPrimitives.h" #include "nsISupportsPrimitives.h"
#include "nsIPresState.h" #include "nsIPresState.h"
#include "nsButtonBoxFrame.h" #include "nsButtonBoxFrame.h"
@@ -634,6 +635,14 @@ NS_IMETHODIMP
nsScrollBoxFrame::SaveState(nsIPresContext* aPresContext, nsScrollBoxFrame::SaveState(nsIPresContext* aPresContext,
nsIPresState** aState) nsIPresState** aState)
{ {
nsCOMPtr<nsIScrollbarMediator> mediator;
nsIFrame* first = mFrames.FirstChild();
mediator = do_QueryInterface(first);
if (mediator) {
// Child manages its own scrolling. Bail.
return NS_OK;
}
nsresult res = NS_OK; nsresult res = NS_OK;
PRInt32 x,y; PRInt32 x,y;
nsIScrollableView* scrollingView; nsIScrollableView* scrollingView;

View File

@@ -20,12 +20,12 @@
* Contributor(s): * Contributor(s):
*/ */
#include "nsISupports.idl" #include "nsISecurityCheckedComponent.idl"
#include "nsIController.idl" #include "nsIController.idl"
interface nsIDOMXULCommandDispatcher; interface nsIDOMXULCommandDispatcher;
[scriptable, uuid(A5ED3A01-7CC7-11d3-BF87-00105A1B0627)] [scriptable, uuid(A5ED3A01-7CC7-11d3-BF87-00105A1B0627)]
interface nsIControllers : nsISupports { interface nsIControllers : nsISecurityCheckedComponent {
attribute nsIDOMXULCommandDispatcher commandDispatcher; attribute nsIDOMXULCommandDispatcher commandDispatcher;
nsIController getControllerForCommand(in wstring command); nsIController getControllerForCommand(in wstring command);

View File

@@ -66,7 +66,7 @@ NS_NewXULControllers(nsISupports* aOuter, REFNSIID aIID, void** aResult)
return rv; return rv;
} }
NS_IMPL_ISUPPORTS(nsXULControllers, NS_GET_IID(nsIControllers)); NS_IMPL_ISUPPORTS2(nsXULControllers, nsIControllers, nsISecurityCheckedComponent);
NS_IMETHODIMP NS_IMETHODIMP
@@ -195,3 +195,35 @@ nsXULControllers::GetControllerCount(PRUint32 *_retval)
return NS_OK; return NS_OK;
} }
/* string canCreateWrapper (in nsIIDPtr iid); */
NS_IMETHODIMP nsXULControllers::CanCreateWrapper(const nsIID * iid, char **_retval)
{
nsCAutoString str("AllAccess");
*_retval = str.ToNewCString();
return NS_OK;
}
/* string canCallMethod (in nsIIDPtr iid, in wstring methodName); */
NS_IMETHODIMP nsXULControllers::CanCallMethod(const nsIID * iid, const PRUnichar *methodName, char **_retval)
{
nsCAutoString str("AllAccess");
*_retval = str.ToNewCString();
return NS_OK;
}
/* string canGetProperty (in nsIIDPtr iid, in wstring propertyName); */
NS_IMETHODIMP nsXULControllers::CanGetProperty(const nsIID * iid, const PRUnichar *propertyName, char **_retval)
{
nsCAutoString str("AllAccess");
*_retval = str.ToNewCString();
return NS_OK;
}
/* string canSetProperty (in nsIIDPtr iid, in wstring propertyName); */
NS_IMETHODIMP nsXULControllers::CanSetProperty(const nsIID * iid, const PRUnichar *propertyName, char **_retval)
{
nsCAutoString str("AllAccess");
*_retval = str.ToNewCString();
return NS_OK;
}

View File

@@ -47,6 +47,7 @@ public:
NS_DECL_ISUPPORTS NS_DECL_ISUPPORTS
NS_DECL_NSICONTROLLERS NS_DECL_NSICONTROLLERS
NS_DECL_NSISECURITYCHECKEDCOMPONENT
protected: protected:
nsXULControllers(); nsXULControllers();

View File

@@ -4213,16 +4213,7 @@ nsXULElement::RemoveFocus(nsIPresContext* aPresContext)
NS_IMETHODIMP NS_IMETHODIMP
nsXULElement::GetBindingParent(nsIContent** aContent) nsXULElement::GetBindingParent(nsIContent** aContent)
{ {
nsCOMPtr<nsIAtom> tag;
GetTag(*getter_AddRefs(tag));
if (tag.get() == nsXULAtoms::scrollbar) {
if (!mParent) {
*aContent = (nsIStyledContent*)this;
}
}
else
*aContent = mBindingParent; *aContent = mBindingParent;
NS_IF_ADDREF(*aContent); NS_IF_ADDREF(*aContent);
return NS_OK; return NS_OK;
} }