Remove aForceType argument of LoadObject, make it a capability instead

bug 322128 r+sr=bz
This commit is contained in:
cbiesinger%web.de 2006-01-05 13:30:19 +00:00
Родитель 0ea5eacb9a
Коммит 2f52d47057
5 изменённых файлов: 23 добавлений и 28 удалений

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

@ -702,7 +702,6 @@ nsresult
nsObjectLoadingContent::LoadObject(const nsAString& aURI,
PRBool aNotify,
const nsCString& aTypeHint,
PRBool aForceType,
PRBool aForceLoad)
{
LOG(("OBJLC [%p]: Loading object: URI string=<%s> notify=%i type=<%s> forcetype=%i forceload=%i\n",
@ -730,18 +729,17 @@ nsObjectLoadingContent::LoadObject(const nsAString& aURI,
return NS_OK;
}
return LoadObject(uri, aNotify, aTypeHint, aForceType, aForceLoad);
return LoadObject(uri, aNotify, aTypeHint, aForceLoad);
}
nsresult
nsObjectLoadingContent::LoadObject(nsIURI* aURI,
PRBool aNotify,
const nsCString& aTypeHint,
PRBool aForceType,
PRBool aForceLoad)
{
LOG(("OBJLC [%p]: Loading object: URI=<%p> notify=%i type=<%s> forcetype=%i forceload=%i\n",
this, aURI, aNotify, aTypeHint.get(), aForceType, aForceLoad));
LOG(("OBJLC [%p]: Loading object: URI=<%p> notify=%i type=<%s> forceload=%i\n",
this, aURI, aNotify, aTypeHint.get(), aForceLoad));
if (mURI && aURI && !aForceLoad) {
PRBool equal;
@ -849,10 +847,13 @@ nsObjectLoadingContent::LoadObject(nsIURI* aURI,
// change the order of the declarations!
AutoFallback fallback(this, &rv);
if (aForceType && !aTypeHint.IsEmpty()) {
PRUint32 caps = GetCapabilities();
LOG(("OBJLC [%p]: Capabilities: %04x\n", this, caps));
if ((caps & eOverrideServerType) && !aTypeHint.IsEmpty()) {
ObjectType newType = GetTypeOfContent(aTypeHint);
if (newType != mType) {
LOG(("OBJLC [%p]: (aForceType) Changing type from %u to %u\n", this, mType, newType));
LOG(("OBJLC [%p]: (eOverrideServerType) Changing type from %u to %u\n", this, mType, newType));
UnloadContent();
@ -908,7 +909,7 @@ nsObjectLoadingContent::LoadObject(nsIURI* aURI,
PRBool isSupportedClassID = PR_FALSE;
nsCAutoString typeForID; // Will be set iff isSupportedClassID == PR_TRUE
PRBool hasID = PR_FALSE;
if (GetCapabilities() & eSupportClassID) {
if (caps & eSupportClassID) {
nsAutoString classid;
thisContent->GetAttr(kNameSpaceID_None, nsHTMLAtoms::classid, classid);
if (!classid.IsEmpty()) {

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

@ -126,9 +126,8 @@ class nsObjectLoadingContent : public nsImageLoadingContent
* @param aURI The URI to load.
* @param aNotify If true, nsIDocumentObserver state change notifications
* will be sent as needed.
* @param aTypeHint MIME Type hint. Overridden by the server.
* @param aForceType Whether to always use aTypeHint as the type, instead
* of letting the server override it.
* @param aTypeHint MIME Type hint. Overridden by the server unless this
* class has the eOverrideServerType capability.
* @param aForceLoad If true, the object will be refetched even if the URI
* is the same as the currently-loaded object.
* @note Prefer the nsIURI-taking version of this function if a URI object
@ -139,7 +138,6 @@ class nsObjectLoadingContent : public nsImageLoadingContent
nsresult LoadObject(const nsAString& aURI,
PRBool aNotify,
const nsCString& aTypeHint = EmptyCString(),
PRBool aForceType = PR_FALSE,
PRBool aForceLoad = PR_FALSE);
/**
* Loads the object from the given URI.
@ -165,16 +163,12 @@ class nsObjectLoadingContent : public nsImageLoadingContent
* Otherwise a request to that URI is made and the type sent by the server
* is used to find a suitable handler.
*
* @param aForceType Whether the passed-in type should override
* server-supplied MIME types. Will be ignored if
* aTypeHint is empty.
* @param aForceLoad If true, the object will be refetched even if the URI
* is the same as the currently-loaded object.
*/
nsresult LoadObject(nsIURI* aURI,
PRBool aNotify,
const nsCString& aTypeHint = EmptyCString(),
PRBool aForceType = PR_FALSE,
PRBool aForceLoad = PR_FALSE);
enum Capabilities {
@ -186,7 +180,9 @@ class nsObjectLoadingContent : public nsImageLoadingContent
#ifdef MOZ_SVG
eSupportSVG = PR_BIT(3), // SVG is supported (image/svg+xml)
#endif
eSupportClassID = PR_BIT(4) // The classid attribute is supported
eSupportClassID = PR_BIT(4), // The classid attribute is supported
eOverrideServerType = PR_BIT(5) // The server-sent MIME type is ignored
// (ignored if no type is specified)
};
/**

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

@ -141,7 +141,7 @@ nsHTMLAppletElement::IsDoneAddingChildren()
PRUint32
nsHTMLAppletElement::GetCapabilities() const
{
return eSupportPlugins;
return eSupportPlugins | eOverrideServerType;
}
void
@ -286,9 +286,8 @@ nsHTMLAppletElement::SetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
// Skip the LoadObject call in that case.
if (aNotify &&
aNameSpaceID == kNameSpaceID_None && aName == nsHTMLAtoms::code) {
LoadObject(aValue, aNotify,
NS_LITERAL_CSTRING("application/x-java-vm"),
PR_TRUE, PR_TRUE);
LoadObject(aValue, aNotify, NS_LITERAL_CSTRING("application/x-java-vm"),
PR_TRUE);
}
@ -301,8 +300,7 @@ nsHTMLAppletElement::StartAppletLoad(PRBool aNotify)
{
nsAutoString uri;
if (GetAttr(kNameSpaceID_None, nsHTMLAtoms::code, uri)) {
LoadObject(uri, aNotify,
NS_LITERAL_CSTRING("application/x-java-vm"), PR_TRUE);
LoadObject(uri, aNotify, NS_LITERAL_CSTRING("application/x-java-vm"));
} else {
// The constructor set the type to eType_Loading; but if we have no code
// attribute, then we aren't really a plugin

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

@ -233,7 +233,7 @@ nsHTMLObjectElement::SetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
aNameSpaceID == kNameSpaceID_None && aName == nsHTMLAtoms::data) {
nsAutoString type;
GetAttr(kNameSpaceID_None, nsHTMLAtoms::type, type);
LoadObject(aValue, aNotify, NS_ConvertUTF16toUTF8(type), PR_FALSE, PR_TRUE);
LoadObject(aValue, aNotify, NS_ConvertUTF16toUTF8(type), PR_TRUE);
}

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

@ -532,11 +532,11 @@ nsHTMLSharedElement::BindToTree(nsIDocument* aDocument,
nsAutoString uri;
if (GetAttr(kNameSpaceID_None, nsHTMLAtoms::src, uri)) {
// Don't notify: We aren't in a document yet, so we have no frames
LoadObject(uri, PR_FALSE, NS_ConvertUTF16toUTF8(type), PR_TRUE);
LoadObject(uri, PR_FALSE, NS_ConvertUTF16toUTF8(type));
} else {
// Sometimes, code uses <embed> with no src attributes, for example using
// code="...". Handle that case.
LoadObject(nsnull, PR_FALSE, NS_ConvertUTF16toUTF8(type), PR_TRUE);
LoadObject(nsnull, PR_FALSE, NS_ConvertUTF16toUTF8(type));
}
}
return rv;
@ -569,7 +569,7 @@ nsHTMLSharedElement::SetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
aNameSpaceID == kNameSpaceID_None && aName == nsHTMLAtoms::src) {
nsAutoString type;
GetAttr(kNameSpaceID_None, nsHTMLAtoms::type, type);
LoadObject(aValue, aNotify, NS_ConvertUTF16toUTF8(type), PR_TRUE, PR_TRUE);
LoadObject(aValue, aNotify, NS_ConvertUTF16toUTF8(type), PR_TRUE);
}
}
@ -580,7 +580,7 @@ nsHTMLSharedElement::SetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
PRUint32
nsHTMLSharedElement::GetCapabilities() const
{
return eSupportImages | eSupportPlugins
return eSupportImages | eSupportPlugins | eOverrideServerType
#ifdef MOZ_SVG
| eSupportSVG
#endif