зеркало из https://github.com/mozilla/pjs.git
Fixed bug with flow of control - reflows after the first one no longer call
CantRenderDisplacedElement() when it's not supposed to.
This commit is contained in:
Родитель
7eafa61459
Коммит
25093ccc16
|
@ -865,7 +865,7 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext,
|
|||
const nsHTMLReflowState& aReflowState,
|
||||
nsReflowStatus& aStatus)
|
||||
{
|
||||
nsresult rv;
|
||||
nsresult rv = NS_OK;
|
||||
char* mimeType = nsnull;
|
||||
PRUint32 buflen;
|
||||
|
||||
|
@ -880,101 +880,110 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext,
|
|||
// if mInstance is null, we need to determine what kind of object we are and instantiate ourselves
|
||||
if(!mInstanceOwner)
|
||||
{
|
||||
// XXX - do we need to create this for widgets as well?
|
||||
// XXX - do we need to create this for widgets as well?
|
||||
mInstanceOwner = new nsPluginInstanceOwner();
|
||||
if(!mInstanceOwner)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
if(!mInstanceOwner)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
NS_ADDREF(mInstanceOwner);
|
||||
mInstanceOwner->Init(&aPresContext, this);
|
||||
|
||||
nsISupports *container;
|
||||
nsIPluginHost *pluginHost;
|
||||
nsIContentViewerContainer *cv;
|
||||
nsISupports *container;
|
||||
nsIPluginHost *pluginHost;
|
||||
nsIContentViewerContainer *cv;
|
||||
|
||||
nsAutoString classid;
|
||||
PRInt32 nameSpaceID;
|
||||
// if we have a clsid, we're either an internal widget or an ActiveX control
|
||||
mContent->GetNameSpaceID(nameSpaceID);
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE == mContent->GetAttribute(nameSpaceID, nsHTMLAtoms::classid, classid))
|
||||
{
|
||||
nsCID widgetCID;
|
||||
classid.Cut(0, 6); // Strip off the clsid:. What's left is the class ID.
|
||||
nsAutoString classid;
|
||||
PRInt32 nameSpaceID;
|
||||
|
||||
// These are some builtin types that we know about for now.
|
||||
// (Eventually this will move somewhere else.)
|
||||
if (classid == "treeview")
|
||||
{
|
||||
widgetCID = kCTreeViewCID;
|
||||
rv = InstantiateWidget(aPresContext, aMetrics, aReflowState, widgetCID);
|
||||
}
|
||||
else if (classid == "toolbar")
|
||||
{
|
||||
widgetCID = kCToolbarCID;
|
||||
rv = InstantiateWidget(aPresContext, aMetrics, aReflowState, widgetCID);
|
||||
}
|
||||
else if (classid == "browser")
|
||||
{
|
||||
widgetCID = kCAppShellCID;
|
||||
rv = InstantiateWidget(aPresContext, aMetrics, aReflowState, widgetCID);
|
||||
}
|
||||
else
|
||||
{
|
||||
// if we haven't matched to an internal type, check to see if we have an ActiveX handler
|
||||
// if not, create the default plugin
|
||||
// if we have a clsid, we're either an internal widget or an ActiveX control
|
||||
mContent->GetNameSpaceID(nameSpaceID);
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE == mContent->GetAttribute(nameSpaceID, nsHTMLAtoms::classid, classid))
|
||||
{
|
||||
nsCID widgetCID;
|
||||
classid.Cut(0, 6); // Strip off the clsid:. What's left is the class ID.
|
||||
|
||||
// These are some builtin types that we know about for now.
|
||||
// (Eventually this will move somewhere else.)
|
||||
if (classid == "treeview")
|
||||
{
|
||||
widgetCID = kCTreeViewCID;
|
||||
rv = InstantiateWidget(aPresContext, aMetrics, aReflowState, widgetCID);
|
||||
}
|
||||
else if (classid == "toolbar")
|
||||
{
|
||||
widgetCID = kCToolbarCID;
|
||||
rv = InstantiateWidget(aPresContext, aMetrics, aReflowState, widgetCID);
|
||||
}
|
||||
else if (classid == "browser")
|
||||
{
|
||||
widgetCID = kCAppShellCID;
|
||||
rv = InstantiateWidget(aPresContext, aMetrics, aReflowState, widgetCID);
|
||||
}
|
||||
else
|
||||
{
|
||||
// if we haven't matched to an internal type, check to see if we have an ActiveX handler
|
||||
// if not, create the default plugin
|
||||
nsIURL* baseURL;
|
||||
nsIURL* fullURL;
|
||||
nsIURL* fullURL;
|
||||
|
||||
if((rv = GetBaseURL(baseURL)) != NS_OK)
|
||||
return rv;
|
||||
if((rv = GetBaseURL(baseURL)) != NS_OK)
|
||||
return rv;
|
||||
|
||||
nsIURLGroup* group = nsnull;
|
||||
nsIURLGroup* group = nsnull;
|
||||
if(nsnull != baseURL)
|
||||
baseURL->GetURLGroup(&group);
|
||||
|
||||
// if we have a codebase, add it to the fullURL
|
||||
nsAutoString codeBase;
|
||||
// if we have a codebase, add it to the fullURL
|
||||
nsAutoString codeBase;
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE == mContent->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::codebase, codeBase))
|
||||
{
|
||||
{
|
||||
nsIURL* codeBaseURL = nsnull;
|
||||
rv = NS_NewURL(&fullURL, codeBase, baseURL, nsnull, group);
|
||||
}
|
||||
else
|
||||
fullURL = baseURL;
|
||||
else
|
||||
fullURL = baseURL;
|
||||
|
||||
NS_IF_RELEASE(group);
|
||||
NS_IF_RELEASE(group);
|
||||
|
||||
// get the nsIPluginHost interface
|
||||
if((rv = aPresContext.GetContainer(&container)) != NS_OK)
|
||||
return rv;
|
||||
if((rv = container->QueryInterface(kIContentViewerContainerIID, (void **)&cv)) != NS_OK)
|
||||
// get the nsIPluginHost interface
|
||||
if((rv = aPresContext.GetContainer(&container)) != NS_OK)
|
||||
return rv;
|
||||
if((rv = container->QueryInterface(kIContentViewerContainerIID, (void **)&cv)) != NS_OK)
|
||||
{
|
||||
NS_RELEASE(container);
|
||||
NS_RELEASE(container);
|
||||
return rv;
|
||||
}
|
||||
if((rv = cv->QueryCapability(kIPluginHostIID, (void **)&pluginHost)) != NS_OK)
|
||||
if((rv = cv->QueryCapability(kIPluginHostIID, (void **)&pluginHost)) != NS_OK)
|
||||
{
|
||||
NS_RELEASE(container);
|
||||
NS_RELEASE(container);
|
||||
NS_RELEASE(cv);
|
||||
return rv;
|
||||
}
|
||||
|
||||
if(pluginHost->IsPluginEnabledForType("application/x-oleobject") == NS_OK)
|
||||
rv = InstantiatePlugin(aPresContext, aMetrics, aReflowState, pluginHost, "application/x-oleobject", fullURL);
|
||||
else if(pluginHost->IsPluginEnabledForType("application/oleobject") == NS_OK)
|
||||
rv = InstantiatePlugin(aPresContext, aMetrics, aReflowState, pluginHost, "application/oleobject", fullURL);
|
||||
else if(pluginHost->IsPluginEnabledForType("*") == NS_OK)
|
||||
rv = InstantiatePlugin(aPresContext, aMetrics, aReflowState, pluginHost, "*", fullURL);
|
||||
else
|
||||
rv = NS_ERROR_FAILURE;
|
||||
|
||||
NS_RELEASE(pluginHost);
|
||||
NS_RELEASE(cv);
|
||||
NS_RELEASE(container);
|
||||
}
|
||||
if(pluginHost->IsPluginEnabledForType("application/x-oleobject") == NS_OK)
|
||||
rv = InstantiatePlugin(aPresContext, aMetrics, aReflowState, pluginHost, "application/x-oleobject", fullURL);
|
||||
else if(pluginHost->IsPluginEnabledForType("application/oleobject") == NS_OK)
|
||||
rv = InstantiatePlugin(aPresContext, aMetrics, aReflowState, pluginHost, "application/oleobject", fullURL);
|
||||
else
|
||||
rv = NS_ERROR_FAILURE;
|
||||
|
||||
aStatus = NS_FRAME_COMPLETE;
|
||||
return rv;
|
||||
NS_RELEASE(pluginHost);
|
||||
NS_RELEASE(cv);
|
||||
NS_RELEASE(container);
|
||||
}
|
||||
|
||||
if(rv == NS_OK)
|
||||
{
|
||||
aStatus = NS_FRAME_COMPLETE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsIPresShell* presShell;
|
||||
aPresContext.GetShell(&presShell);
|
||||
presShell->CantRenderReplacedElement(&aPresContext, this);
|
||||
NS_RELEASE(presShell);
|
||||
aStatus = NS_FRAME_COMPLETE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// if we're here, the object is either an applet or a plugin
|
||||
|
@ -1092,12 +1101,12 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext,
|
|||
NS_IF_RELEASE(pluginHost);
|
||||
NS_IF_RELEASE(cv);
|
||||
NS_IF_RELEASE(container);
|
||||
}
|
||||
|
||||
if(rv == NS_OK)
|
||||
{
|
||||
aStatus = NS_FRAME_COMPLETE;
|
||||
return NS_OK;
|
||||
}
|
||||
if(rv == NS_OK)
|
||||
{
|
||||
aStatus = NS_FRAME_COMPLETE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsIPresShell* presShell;
|
||||
|
|
|
@ -865,7 +865,7 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext,
|
|||
const nsHTMLReflowState& aReflowState,
|
||||
nsReflowStatus& aStatus)
|
||||
{
|
||||
nsresult rv;
|
||||
nsresult rv = NS_OK;
|
||||
char* mimeType = nsnull;
|
||||
PRUint32 buflen;
|
||||
|
||||
|
@ -880,101 +880,110 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext,
|
|||
// if mInstance is null, we need to determine what kind of object we are and instantiate ourselves
|
||||
if(!mInstanceOwner)
|
||||
{
|
||||
// XXX - do we need to create this for widgets as well?
|
||||
// XXX - do we need to create this for widgets as well?
|
||||
mInstanceOwner = new nsPluginInstanceOwner();
|
||||
if(!mInstanceOwner)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
if(!mInstanceOwner)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
NS_ADDREF(mInstanceOwner);
|
||||
mInstanceOwner->Init(&aPresContext, this);
|
||||
|
||||
nsISupports *container;
|
||||
nsIPluginHost *pluginHost;
|
||||
nsIContentViewerContainer *cv;
|
||||
nsISupports *container;
|
||||
nsIPluginHost *pluginHost;
|
||||
nsIContentViewerContainer *cv;
|
||||
|
||||
nsAutoString classid;
|
||||
PRInt32 nameSpaceID;
|
||||
// if we have a clsid, we're either an internal widget or an ActiveX control
|
||||
mContent->GetNameSpaceID(nameSpaceID);
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE == mContent->GetAttribute(nameSpaceID, nsHTMLAtoms::classid, classid))
|
||||
{
|
||||
nsCID widgetCID;
|
||||
classid.Cut(0, 6); // Strip off the clsid:. What's left is the class ID.
|
||||
nsAutoString classid;
|
||||
PRInt32 nameSpaceID;
|
||||
|
||||
// These are some builtin types that we know about for now.
|
||||
// (Eventually this will move somewhere else.)
|
||||
if (classid == "treeview")
|
||||
{
|
||||
widgetCID = kCTreeViewCID;
|
||||
rv = InstantiateWidget(aPresContext, aMetrics, aReflowState, widgetCID);
|
||||
}
|
||||
else if (classid == "toolbar")
|
||||
{
|
||||
widgetCID = kCToolbarCID;
|
||||
rv = InstantiateWidget(aPresContext, aMetrics, aReflowState, widgetCID);
|
||||
}
|
||||
else if (classid == "browser")
|
||||
{
|
||||
widgetCID = kCAppShellCID;
|
||||
rv = InstantiateWidget(aPresContext, aMetrics, aReflowState, widgetCID);
|
||||
}
|
||||
else
|
||||
{
|
||||
// if we haven't matched to an internal type, check to see if we have an ActiveX handler
|
||||
// if not, create the default plugin
|
||||
// if we have a clsid, we're either an internal widget or an ActiveX control
|
||||
mContent->GetNameSpaceID(nameSpaceID);
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE == mContent->GetAttribute(nameSpaceID, nsHTMLAtoms::classid, classid))
|
||||
{
|
||||
nsCID widgetCID;
|
||||
classid.Cut(0, 6); // Strip off the clsid:. What's left is the class ID.
|
||||
|
||||
// These are some builtin types that we know about for now.
|
||||
// (Eventually this will move somewhere else.)
|
||||
if (classid == "treeview")
|
||||
{
|
||||
widgetCID = kCTreeViewCID;
|
||||
rv = InstantiateWidget(aPresContext, aMetrics, aReflowState, widgetCID);
|
||||
}
|
||||
else if (classid == "toolbar")
|
||||
{
|
||||
widgetCID = kCToolbarCID;
|
||||
rv = InstantiateWidget(aPresContext, aMetrics, aReflowState, widgetCID);
|
||||
}
|
||||
else if (classid == "browser")
|
||||
{
|
||||
widgetCID = kCAppShellCID;
|
||||
rv = InstantiateWidget(aPresContext, aMetrics, aReflowState, widgetCID);
|
||||
}
|
||||
else
|
||||
{
|
||||
// if we haven't matched to an internal type, check to see if we have an ActiveX handler
|
||||
// if not, create the default plugin
|
||||
nsIURL* baseURL;
|
||||
nsIURL* fullURL;
|
||||
nsIURL* fullURL;
|
||||
|
||||
if((rv = GetBaseURL(baseURL)) != NS_OK)
|
||||
return rv;
|
||||
if((rv = GetBaseURL(baseURL)) != NS_OK)
|
||||
return rv;
|
||||
|
||||
nsIURLGroup* group = nsnull;
|
||||
nsIURLGroup* group = nsnull;
|
||||
if(nsnull != baseURL)
|
||||
baseURL->GetURLGroup(&group);
|
||||
|
||||
// if we have a codebase, add it to the fullURL
|
||||
nsAutoString codeBase;
|
||||
// if we have a codebase, add it to the fullURL
|
||||
nsAutoString codeBase;
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE == mContent->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::codebase, codeBase))
|
||||
{
|
||||
{
|
||||
nsIURL* codeBaseURL = nsnull;
|
||||
rv = NS_NewURL(&fullURL, codeBase, baseURL, nsnull, group);
|
||||
}
|
||||
else
|
||||
fullURL = baseURL;
|
||||
else
|
||||
fullURL = baseURL;
|
||||
|
||||
NS_IF_RELEASE(group);
|
||||
NS_IF_RELEASE(group);
|
||||
|
||||
// get the nsIPluginHost interface
|
||||
if((rv = aPresContext.GetContainer(&container)) != NS_OK)
|
||||
return rv;
|
||||
if((rv = container->QueryInterface(kIContentViewerContainerIID, (void **)&cv)) != NS_OK)
|
||||
// get the nsIPluginHost interface
|
||||
if((rv = aPresContext.GetContainer(&container)) != NS_OK)
|
||||
return rv;
|
||||
if((rv = container->QueryInterface(kIContentViewerContainerIID, (void **)&cv)) != NS_OK)
|
||||
{
|
||||
NS_RELEASE(container);
|
||||
NS_RELEASE(container);
|
||||
return rv;
|
||||
}
|
||||
if((rv = cv->QueryCapability(kIPluginHostIID, (void **)&pluginHost)) != NS_OK)
|
||||
if((rv = cv->QueryCapability(kIPluginHostIID, (void **)&pluginHost)) != NS_OK)
|
||||
{
|
||||
NS_RELEASE(container);
|
||||
NS_RELEASE(container);
|
||||
NS_RELEASE(cv);
|
||||
return rv;
|
||||
}
|
||||
|
||||
if(pluginHost->IsPluginEnabledForType("application/x-oleobject") == NS_OK)
|
||||
rv = InstantiatePlugin(aPresContext, aMetrics, aReflowState, pluginHost, "application/x-oleobject", fullURL);
|
||||
else if(pluginHost->IsPluginEnabledForType("application/oleobject") == NS_OK)
|
||||
rv = InstantiatePlugin(aPresContext, aMetrics, aReflowState, pluginHost, "application/oleobject", fullURL);
|
||||
else if(pluginHost->IsPluginEnabledForType("*") == NS_OK)
|
||||
rv = InstantiatePlugin(aPresContext, aMetrics, aReflowState, pluginHost, "*", fullURL);
|
||||
else
|
||||
rv = NS_ERROR_FAILURE;
|
||||
|
||||
NS_RELEASE(pluginHost);
|
||||
NS_RELEASE(cv);
|
||||
NS_RELEASE(container);
|
||||
}
|
||||
if(pluginHost->IsPluginEnabledForType("application/x-oleobject") == NS_OK)
|
||||
rv = InstantiatePlugin(aPresContext, aMetrics, aReflowState, pluginHost, "application/x-oleobject", fullURL);
|
||||
else if(pluginHost->IsPluginEnabledForType("application/oleobject") == NS_OK)
|
||||
rv = InstantiatePlugin(aPresContext, aMetrics, aReflowState, pluginHost, "application/oleobject", fullURL);
|
||||
else
|
||||
rv = NS_ERROR_FAILURE;
|
||||
|
||||
aStatus = NS_FRAME_COMPLETE;
|
||||
return rv;
|
||||
NS_RELEASE(pluginHost);
|
||||
NS_RELEASE(cv);
|
||||
NS_RELEASE(container);
|
||||
}
|
||||
|
||||
if(rv == NS_OK)
|
||||
{
|
||||
aStatus = NS_FRAME_COMPLETE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsIPresShell* presShell;
|
||||
aPresContext.GetShell(&presShell);
|
||||
presShell->CantRenderReplacedElement(&aPresContext, this);
|
||||
NS_RELEASE(presShell);
|
||||
aStatus = NS_FRAME_COMPLETE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// if we're here, the object is either an applet or a plugin
|
||||
|
@ -1092,12 +1101,12 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext,
|
|||
NS_IF_RELEASE(pluginHost);
|
||||
NS_IF_RELEASE(cv);
|
||||
NS_IF_RELEASE(container);
|
||||
}
|
||||
|
||||
if(rv == NS_OK)
|
||||
{
|
||||
aStatus = NS_FRAME_COMPLETE;
|
||||
return NS_OK;
|
||||
}
|
||||
if(rv == NS_OK)
|
||||
{
|
||||
aStatus = NS_FRAME_COMPLETE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsIPresShell* presShell;
|
||||
|
|
Загрузка…
Ссылка в новой задаче