<form> inside <table> submits; marginwidth, marginheight in <frame> working; scrolling in <frame>, <iframe> working

This commit is contained in:
karnaze%netscape.com 1999-01-19 17:26:06 +00:00
Родитель bde7a0bfbd
Коммит c1f9e8dde6
9 изменённых файлов: 233 добавлений и 118 удалений

Просмотреть файл

@ -264,16 +264,18 @@ BodyRule::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* aPresContext)
float p2t;
mPart->GetAttributeCount(attrCount);
aPresContext->GetScaledPixelsToTwips(p2t);
nscoord bodyMarginWidth = -1;
nscoord bodyMarginHeight = -1;
if (0 < attrCount) {
// if marginwidth/marginheigth is set reflect them as 'margin'
mPart->GetHTMLAttribute(nsHTMLAtoms::marginwidth, value);
if (eHTMLUnit_Pixel == value.GetUnit()) {
nscoord marginWidth = NSIntPixelsToTwips(value.GetPixelValue(), p2t);
if (marginWidth < 0) {
marginWidth = 0;
bodyMarginWidth = NSIntPixelsToTwips(value.GetPixelValue(), p2t);
if (bodyMarginWidth < 0) {
bodyMarginWidth = 0;
}
nsStyleCoord widthCoord(marginWidth);
nsStyleCoord widthCoord(bodyMarginWidth);
styleSpacing->mMargin.SetLeft(widthCoord);
styleSpacing->mMargin.SetRight(widthCoord);
count++;
@ -281,12 +283,12 @@ BodyRule::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* aPresContext)
mPart->GetHTMLAttribute(nsHTMLAtoms::marginheight, value);
if (eHTMLUnit_Pixel == value.GetUnit()) {
nscoord marginHeight = NSIntPixelsToTwips(value.GetPixelValue(), p2t);
if (marginHeight < 0) {
marginHeight = 0;
bodyMarginHeight = NSIntPixelsToTwips(value.GetPixelValue(), p2t);
if (bodyMarginHeight < 0) {
bodyMarginHeight = 0;
}
nsStyleCoord heightCoord(marginHeight);
nsStyleCoord heightCoord(bodyMarginHeight);
styleSpacing->mMargin.SetTop(heightCoord);
styleSpacing->mMargin.SetBottom(heightCoord);
count++;
@ -300,33 +302,53 @@ BodyRule::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* aPresContext)
}
// XXX This is all pretty hokey...
if (count < 2) {
// if marginwidth or marginheight is set in the web shell reflect them
// as margin
// if marginwidth or marginheight is set in the <frame> and not set in the <body>
// reflect them as margin in the <body>
if ((0 > bodyMarginWidth) || (0 > bodyMarginHeight)) {
nsISupports* container;
aPresContext->GetContainer(&container);
if (nsnull != container) {
nsCompatibility mode;
aPresContext->GetCompatibilityMode(mode);
nsIWebShell* webShell = nsnull;
container->QueryInterface(kIWebShellIID, (void**) &webShell);
if (nsnull != webShell) {
PRInt32 marginWidth, marginHeight;
webShell->GetMarginWidth(marginWidth); // -1 indicates not set
webShell->GetMarginHeight(marginHeight); // -1 indicates not set
if ((marginWidth >= 0) && (marginHeight < 0)) { // nav quirk
marginHeight = 0;
nscoord pixel = NSIntPixelsToTwips(1, p2t);
nscoord frameMarginWidth, frameMarginHeight;
webShell->GetMarginWidth(frameMarginWidth); // -1 indicates not set
webShell->GetMarginHeight(frameMarginHeight);
if ((frameMarginWidth >= 0) && (0 > bodyMarginWidth)) { // set in <frame> & not in <body>
if (eCompatibility_NavQuirks == mode) { // allow 0 margins
if ((0 > bodyMarginHeight) && (0 > frameMarginHeight)) { // another nav quirk
frameMarginHeight = 0;
}
} else { // margins are at least 1 pixel
if (0 == frameMarginWidth) {
frameMarginWidth = pixel;
}
}
}
if ((marginHeight >= 0) && (marginWidth < 0)) { // nav quirk
marginWidth = 0;
if ((frameMarginHeight >= 0) && (0 > bodyMarginHeight)) { // set in <frame> & not in <body>
if (eCompatibility_NavQuirks == mode) { // allow 0 margins
if ((0 > bodyMarginWidth) && (0 > frameMarginWidth)) { // another nav quirk
frameMarginWidth = 0;
}
} else { // margins are at least 1 pixel
if (0 == frameMarginHeight) {
frameMarginHeight = pixel;
}
}
}
if (marginWidth > 0) {
nsStyleCoord widthCoord(NSIntPixelsToTwips(marginWidth, p2t));
if ((0 > bodyMarginWidth) && (frameMarginWidth >= 0)) {
nsStyleCoord widthCoord(frameMarginWidth);
styleSpacing->mMargin.SetLeft(widthCoord);
styleSpacing->mMargin.SetRight(widthCoord);
}
if (marginHeight > 0) {
nsStyleCoord heightCoord(NSIntPixelsToTwips(marginHeight, p2t));
if ((0 > bodyMarginHeight) && (frameMarginHeight >= 0)) {
nsStyleCoord heightCoord(frameMarginHeight);
styleSpacing->mMargin.SetTop(heightCoord);
styleSpacing->mMargin.SetBottom(heightCoord);
}
@ -486,6 +508,7 @@ BodyFixupRule::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* aPresCont
NS_RELEASE(parentContext);
}
return NS_OK;
}

Просмотреть файл

@ -1305,9 +1305,11 @@ HTMLContentSink::HTMLContentSink()
gSinkLogModuleInfo = PR_NewLogModule("htmlcontentsink");
}
#endif
mNotAtRef = PR_TRUE;
mParser = nsnull;
mNotAtRef = PR_TRUE;
mParser = nsnull;
mDocumentBaseURL = nsnull;
mBody = nsnull;
mFrameset = nsnull;
}
HTMLContentSink::~HTMLContentSink()
@ -1915,10 +1917,25 @@ HTMLContentSink::StartLayout()
}
mLayoutStarted = PR_TRUE;
// If it's a frameset document then disable scrolling; otherwise, let the
// determine if this is a top level frameset
PRBool topLevelFrameset = PR_FALSE;
if (mFrameset && mWebShell) {
nsIWebShell* rootWebShell;
mWebShell->GetRootWebShell(rootWebShell);
if (mWebShell == rootWebShell) {
topLevelFrameset = PR_TRUE;
}
NS_IF_RELEASE(rootWebShell);
}
// If it's a top level frameset document then disable scrolling; otherwise, let the
// style dictate. We need to do this before the initial reflow...
if (mWebShell) {
mWebShell->SetScrolling(mFrameset ? NS_STYLE_OVERFLOW_HIDDEN : -1);
if (topLevelFrameset) {
mWebShell->SetScrolling(NS_STYLE_OVERFLOW_HIDDEN);
} else if (mBody) {
// mWebShell->SetScrolling(-1);
}
}
PRInt32 i, ns = mDocument->GetNumberOfShells();
@ -1953,15 +1970,6 @@ HTMLContentSink::StartLayout()
if (rv == NS_OK) {
mRef = new nsString(ref);
}
PRBool topLevelFrameset = PR_FALSE;
if (mFrameset && mWebShell) {
nsIWebShell* rootWebShell;
mWebShell->GetRootWebShell(rootWebShell);
if (mWebShell == rootWebShell) {
topLevelFrameset = PR_TRUE;
}
NS_IF_RELEASE(rootWebShell);
}
if ((nsnull != ref) || topLevelFrameset) {
// XXX support more than one presentation-shell here

Просмотреть файл

@ -1314,9 +1314,16 @@ HTMLStyleSheetImpl::ConstructTableFrame(nsIPresContext* aPresContext,
break;
default:
// XXX For the time being ignore everything else. We should deal with
// things like table cells and create anonymous frames...
break;
// For non table related frames (e.g. forms) make them children of the outer table frame
// XXX also need to deal with things like table cells and create anonymous frames...
nsIFrame* nonTableRelatedFrame;
nsIAtom* tag;
childContent->GetTag(tag);
ConstructFrameByTag(aPresContext, childContent, aNewFrame, tag, childStyleContext,
aAbsoluteItems, nonTableRelatedFrame);
childList->SetNextSibling(nonTableRelatedFrame);
NS_IF_RELEASE(tag);
break;
}
// If it's not a caption frame, then link the frame into the inner
@ -1482,12 +1489,11 @@ HTMLStyleSheetImpl::ConstructDocElementFrame(nsIPresContext* aPresContext,
// Unless the 'overflow' policy forbids scrolling, wrap the frame in a
// scroll frame.
nsIFrame* scrollFrame = nsnull;
PRInt32 scrolling = -1;
const nsStyleDisplay* display = (const nsStyleDisplay*)
styleContext->GetStyleData(eStyleStruct_Display);
// XXX Check the webshell and see if scrolling is enabled there. This needs
// to go away...
nsStyleDisplay* display = (nsStyleDisplay*)
styleContext->GetMutableStyleData(eStyleStruct_Display);
// XXX This needs to go away... Yes, but where.
// Check the webshell and see if scrolling is enabled there.
nsISupports* container;
if (nsnull != aPresContext) {
aPresContext->GetContainer(&container);
@ -1495,17 +1501,18 @@ HTMLStyleSheetImpl::ConstructDocElementFrame(nsIPresContext* aPresContext,
nsIWebShell* webShell = nsnull;
container->QueryInterface(kIWebShellIID, (void**) &webShell);
if (nsnull != webShell) {
PRInt32 scrolling = -1;
webShell->GetScrolling(scrolling);
if (-1 != scrolling) {
display->mOverflow = scrolling;
}
NS_RELEASE(webShell);
}
NS_RELEASE(container);
}
}
if (-1 == scrolling) {
scrolling = display->mOverflow;
}
if (NS_STYLE_OVERFLOW_HIDDEN != scrolling) {
if (NS_STYLE_OVERFLOW_HIDDEN != display->mOverflow) {
NS_NewScrollFrame(scrollFrame);
scrollFrame->Init(*aPresContext, aDocElement, aRootFrame, styleContext);

Просмотреть файл

@ -298,6 +298,8 @@ public:
nsresult DestroyPluginHost(void);
protected:
void InitFrameData();
PLEventQueue* mThreadEventQueue;
nsIScriptGlobalObject *mScriptGlobal;
nsIScriptContext* mScriptContext;
@ -434,9 +436,7 @@ nsWebShell::nsWebShell()
mScrollPref = nsScrollPreference_kAuto;
mScriptGlobal = nsnull;
mScriptContext = nsnull;
mMarginWidth = -1;
mMarginHeight = -1;
mScrolling = -1;
InitFrameData();
}
nsWebShell::~nsWebShell()
@ -466,6 +466,8 @@ nsWebShell::~nsWebShell()
}
NS_IF_RELEASE(mScriptContext);
InitFrameData();
// XXX Because we hold references to the children and they hold references
// to us we never get destroyed. See Destroy() instead...
#if 0
@ -483,6 +485,13 @@ nsWebShell::~nsWebShell()
DestroyPluginHost();
}
void nsWebShell::InitFrameData()
{
mMarginWidth = -1;
mMarginHeight = -1;
mScrolling = -1;
}
void
nsWebShell::ReleaseChildren()
{
@ -1200,6 +1209,13 @@ nsWebShell::LoadURL(const PRUnichar *aURLSpec,
nsURLReloadType aType,
const PRUint32 aLocalIP)
{
// if this is the top level web shell, initialize some things, in case the
// web shell is being recycled
nsIWebShell *rootWebShell;
GetRootWebShell(rootWebShell);
if (this == rootWebShell) {
InitFrameData();
}
return LoadURL(aURLSpec,"view",aPostData,aModifyHistory,aType, aLocalIP);
}

Просмотреть файл

@ -264,16 +264,18 @@ BodyRule::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* aPresContext)
float p2t;
mPart->GetAttributeCount(attrCount);
aPresContext->GetScaledPixelsToTwips(p2t);
nscoord bodyMarginWidth = -1;
nscoord bodyMarginHeight = -1;
if (0 < attrCount) {
// if marginwidth/marginheigth is set reflect them as 'margin'
mPart->GetHTMLAttribute(nsHTMLAtoms::marginwidth, value);
if (eHTMLUnit_Pixel == value.GetUnit()) {
nscoord marginWidth = NSIntPixelsToTwips(value.GetPixelValue(), p2t);
if (marginWidth < 0) {
marginWidth = 0;
bodyMarginWidth = NSIntPixelsToTwips(value.GetPixelValue(), p2t);
if (bodyMarginWidth < 0) {
bodyMarginWidth = 0;
}
nsStyleCoord widthCoord(marginWidth);
nsStyleCoord widthCoord(bodyMarginWidth);
styleSpacing->mMargin.SetLeft(widthCoord);
styleSpacing->mMargin.SetRight(widthCoord);
count++;
@ -281,12 +283,12 @@ BodyRule::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* aPresContext)
mPart->GetHTMLAttribute(nsHTMLAtoms::marginheight, value);
if (eHTMLUnit_Pixel == value.GetUnit()) {
nscoord marginHeight = NSIntPixelsToTwips(value.GetPixelValue(), p2t);
if (marginHeight < 0) {
marginHeight = 0;
bodyMarginHeight = NSIntPixelsToTwips(value.GetPixelValue(), p2t);
if (bodyMarginHeight < 0) {
bodyMarginHeight = 0;
}
nsStyleCoord heightCoord(marginHeight);
nsStyleCoord heightCoord(bodyMarginHeight);
styleSpacing->mMargin.SetTop(heightCoord);
styleSpacing->mMargin.SetBottom(heightCoord);
count++;
@ -300,33 +302,53 @@ BodyRule::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* aPresContext)
}
// XXX This is all pretty hokey...
if (count < 2) {
// if marginwidth or marginheight is set in the web shell reflect them
// as margin
// if marginwidth or marginheight is set in the <frame> and not set in the <body>
// reflect them as margin in the <body>
if ((0 > bodyMarginWidth) || (0 > bodyMarginHeight)) {
nsISupports* container;
aPresContext->GetContainer(&container);
if (nsnull != container) {
nsCompatibility mode;
aPresContext->GetCompatibilityMode(mode);
nsIWebShell* webShell = nsnull;
container->QueryInterface(kIWebShellIID, (void**) &webShell);
if (nsnull != webShell) {
PRInt32 marginWidth, marginHeight;
webShell->GetMarginWidth(marginWidth); // -1 indicates not set
webShell->GetMarginHeight(marginHeight); // -1 indicates not set
if ((marginWidth >= 0) && (marginHeight < 0)) { // nav quirk
marginHeight = 0;
nscoord pixel = NSIntPixelsToTwips(1, p2t);
nscoord frameMarginWidth, frameMarginHeight;
webShell->GetMarginWidth(frameMarginWidth); // -1 indicates not set
webShell->GetMarginHeight(frameMarginHeight);
if ((frameMarginWidth >= 0) && (0 > bodyMarginWidth)) { // set in <frame> & not in <body>
if (eCompatibility_NavQuirks == mode) { // allow 0 margins
if ((0 > bodyMarginHeight) && (0 > frameMarginHeight)) { // another nav quirk
frameMarginHeight = 0;
}
} else { // margins are at least 1 pixel
if (0 == frameMarginWidth) {
frameMarginWidth = pixel;
}
}
}
if ((marginHeight >= 0) && (marginWidth < 0)) { // nav quirk
marginWidth = 0;
if ((frameMarginHeight >= 0) && (0 > bodyMarginHeight)) { // set in <frame> & not in <body>
if (eCompatibility_NavQuirks == mode) { // allow 0 margins
if ((0 > bodyMarginWidth) && (0 > frameMarginWidth)) { // another nav quirk
frameMarginWidth = 0;
}
} else { // margins are at least 1 pixel
if (0 == frameMarginHeight) {
frameMarginHeight = pixel;
}
}
}
if (marginWidth > 0) {
nsStyleCoord widthCoord(NSIntPixelsToTwips(marginWidth, p2t));
if ((0 > bodyMarginWidth) && (frameMarginWidth >= 0)) {
nsStyleCoord widthCoord(frameMarginWidth);
styleSpacing->mMargin.SetLeft(widthCoord);
styleSpacing->mMargin.SetRight(widthCoord);
}
if (marginHeight > 0) {
nsStyleCoord heightCoord(NSIntPixelsToTwips(marginHeight, p2t));
if ((0 > bodyMarginHeight) && (frameMarginHeight >= 0)) {
nsStyleCoord heightCoord(frameMarginHeight);
styleSpacing->mMargin.SetTop(heightCoord);
styleSpacing->mMargin.SetBottom(heightCoord);
}
@ -486,6 +508,7 @@ BodyFixupRule::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* aPresCont
NS_RELEASE(parentContext);
}
return NS_OK;
}

Просмотреть файл

@ -1305,9 +1305,11 @@ HTMLContentSink::HTMLContentSink()
gSinkLogModuleInfo = PR_NewLogModule("htmlcontentsink");
}
#endif
mNotAtRef = PR_TRUE;
mParser = nsnull;
mNotAtRef = PR_TRUE;
mParser = nsnull;
mDocumentBaseURL = nsnull;
mBody = nsnull;
mFrameset = nsnull;
}
HTMLContentSink::~HTMLContentSink()
@ -1915,10 +1917,25 @@ HTMLContentSink::StartLayout()
}
mLayoutStarted = PR_TRUE;
// If it's a frameset document then disable scrolling; otherwise, let the
// determine if this is a top level frameset
PRBool topLevelFrameset = PR_FALSE;
if (mFrameset && mWebShell) {
nsIWebShell* rootWebShell;
mWebShell->GetRootWebShell(rootWebShell);
if (mWebShell == rootWebShell) {
topLevelFrameset = PR_TRUE;
}
NS_IF_RELEASE(rootWebShell);
}
// If it's a top level frameset document then disable scrolling; otherwise, let the
// style dictate. We need to do this before the initial reflow...
if (mWebShell) {
mWebShell->SetScrolling(mFrameset ? NS_STYLE_OVERFLOW_HIDDEN : -1);
if (topLevelFrameset) {
mWebShell->SetScrolling(NS_STYLE_OVERFLOW_HIDDEN);
} else if (mBody) {
// mWebShell->SetScrolling(-1);
}
}
PRInt32 i, ns = mDocument->GetNumberOfShells();
@ -1953,15 +1970,6 @@ HTMLContentSink::StartLayout()
if (rv == NS_OK) {
mRef = new nsString(ref);
}
PRBool topLevelFrameset = PR_FALSE;
if (mFrameset && mWebShell) {
nsIWebShell* rootWebShell;
mWebShell->GetRootWebShell(rootWebShell);
if (mWebShell == rootWebShell) {
topLevelFrameset = PR_TRUE;
}
NS_IF_RELEASE(rootWebShell);
}
if ((nsnull != ref) || topLevelFrameset) {
// XXX support more than one presentation-shell here

Просмотреть файл

@ -1314,9 +1314,16 @@ HTMLStyleSheetImpl::ConstructTableFrame(nsIPresContext* aPresContext,
break;
default:
// XXX For the time being ignore everything else. We should deal with
// things like table cells and create anonymous frames...
break;
// For non table related frames (e.g. forms) make them children of the outer table frame
// XXX also need to deal with things like table cells and create anonymous frames...
nsIFrame* nonTableRelatedFrame;
nsIAtom* tag;
childContent->GetTag(tag);
ConstructFrameByTag(aPresContext, childContent, aNewFrame, tag, childStyleContext,
aAbsoluteItems, nonTableRelatedFrame);
childList->SetNextSibling(nonTableRelatedFrame);
NS_IF_RELEASE(tag);
break;
}
// If it's not a caption frame, then link the frame into the inner
@ -1482,12 +1489,11 @@ HTMLStyleSheetImpl::ConstructDocElementFrame(nsIPresContext* aPresContext,
// Unless the 'overflow' policy forbids scrolling, wrap the frame in a
// scroll frame.
nsIFrame* scrollFrame = nsnull;
PRInt32 scrolling = -1;
const nsStyleDisplay* display = (const nsStyleDisplay*)
styleContext->GetStyleData(eStyleStruct_Display);
// XXX Check the webshell and see if scrolling is enabled there. This needs
// to go away...
nsStyleDisplay* display = (nsStyleDisplay*)
styleContext->GetMutableStyleData(eStyleStruct_Display);
// XXX This needs to go away... Yes, but where.
// Check the webshell and see if scrolling is enabled there.
nsISupports* container;
if (nsnull != aPresContext) {
aPresContext->GetContainer(&container);
@ -1495,17 +1501,18 @@ HTMLStyleSheetImpl::ConstructDocElementFrame(nsIPresContext* aPresContext,
nsIWebShell* webShell = nsnull;
container->QueryInterface(kIWebShellIID, (void**) &webShell);
if (nsnull != webShell) {
PRInt32 scrolling = -1;
webShell->GetScrolling(scrolling);
if (-1 != scrolling) {
display->mOverflow = scrolling;
}
NS_RELEASE(webShell);
}
NS_RELEASE(container);
}
}
if (-1 == scrolling) {
scrolling = display->mOverflow;
}
if (NS_STYLE_OVERFLOW_HIDDEN != scrolling) {
if (NS_STYLE_OVERFLOW_HIDDEN != display->mOverflow) {
NS_NewScrollFrame(scrollFrame);
scrollFrame->Init(*aPresContext, aDocElement, aRootFrame, styleContext);

Просмотреть файл

@ -1314,9 +1314,16 @@ HTMLStyleSheetImpl::ConstructTableFrame(nsIPresContext* aPresContext,
break;
default:
// XXX For the time being ignore everything else. We should deal with
// things like table cells and create anonymous frames...
break;
// For non table related frames (e.g. forms) make them children of the outer table frame
// XXX also need to deal with things like table cells and create anonymous frames...
nsIFrame* nonTableRelatedFrame;
nsIAtom* tag;
childContent->GetTag(tag);
ConstructFrameByTag(aPresContext, childContent, aNewFrame, tag, childStyleContext,
aAbsoluteItems, nonTableRelatedFrame);
childList->SetNextSibling(nonTableRelatedFrame);
NS_IF_RELEASE(tag);
break;
}
// If it's not a caption frame, then link the frame into the inner
@ -1482,12 +1489,11 @@ HTMLStyleSheetImpl::ConstructDocElementFrame(nsIPresContext* aPresContext,
// Unless the 'overflow' policy forbids scrolling, wrap the frame in a
// scroll frame.
nsIFrame* scrollFrame = nsnull;
PRInt32 scrolling = -1;
const nsStyleDisplay* display = (const nsStyleDisplay*)
styleContext->GetStyleData(eStyleStruct_Display);
// XXX Check the webshell and see if scrolling is enabled there. This needs
// to go away...
nsStyleDisplay* display = (nsStyleDisplay*)
styleContext->GetMutableStyleData(eStyleStruct_Display);
// XXX This needs to go away... Yes, but where.
// Check the webshell and see if scrolling is enabled there.
nsISupports* container;
if (nsnull != aPresContext) {
aPresContext->GetContainer(&container);
@ -1495,17 +1501,18 @@ HTMLStyleSheetImpl::ConstructDocElementFrame(nsIPresContext* aPresContext,
nsIWebShell* webShell = nsnull;
container->QueryInterface(kIWebShellIID, (void**) &webShell);
if (nsnull != webShell) {
PRInt32 scrolling = -1;
webShell->GetScrolling(scrolling);
if (-1 != scrolling) {
display->mOverflow = scrolling;
}
NS_RELEASE(webShell);
}
NS_RELEASE(container);
}
}
if (-1 == scrolling) {
scrolling = display->mOverflow;
}
if (NS_STYLE_OVERFLOW_HIDDEN != scrolling) {
if (NS_STYLE_OVERFLOW_HIDDEN != display->mOverflow) {
NS_NewScrollFrame(scrollFrame);
scrollFrame->Init(*aPresContext, aDocElement, aRootFrame, styleContext);

Просмотреть файл

@ -298,6 +298,8 @@ public:
nsresult DestroyPluginHost(void);
protected:
void InitFrameData();
PLEventQueue* mThreadEventQueue;
nsIScriptGlobalObject *mScriptGlobal;
nsIScriptContext* mScriptContext;
@ -434,9 +436,7 @@ nsWebShell::nsWebShell()
mScrollPref = nsScrollPreference_kAuto;
mScriptGlobal = nsnull;
mScriptContext = nsnull;
mMarginWidth = -1;
mMarginHeight = -1;
mScrolling = -1;
InitFrameData();
}
nsWebShell::~nsWebShell()
@ -466,6 +466,8 @@ nsWebShell::~nsWebShell()
}
NS_IF_RELEASE(mScriptContext);
InitFrameData();
// XXX Because we hold references to the children and they hold references
// to us we never get destroyed. See Destroy() instead...
#if 0
@ -483,6 +485,13 @@ nsWebShell::~nsWebShell()
DestroyPluginHost();
}
void nsWebShell::InitFrameData()
{
mMarginWidth = -1;
mMarginHeight = -1;
mScrolling = -1;
}
void
nsWebShell::ReleaseChildren()
{
@ -1200,6 +1209,13 @@ nsWebShell::LoadURL(const PRUnichar *aURLSpec,
nsURLReloadType aType,
const PRUint32 aLocalIP)
{
// if this is the top level web shell, initialize some things, in case the
// web shell is being recycled
nsIWebShell *rootWebShell;
GetRootWebShell(rootWebShell);
if (this == rootWebShell) {
InitFrameData();
}
return LoadURL(aURLSpec,"view",aPostData,aModifyHistory,aType, aLocalIP);
}