--- a/dom/base/nsObjectLoadingContent.cpp
+++ b/dom/base/nsObjectLoadingContent.cpp
@@ -1,17 +1,17 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/*
* A base class implementing nsIObjectLoadingContent for use by
* various content nodes that want to provide plugin/document/image
- * loading functionality (eg <embed>, <object>, <applet>, etc).
+ * loading functionality (eg <embed>, <object>, etc).
*/
// Interface headers
#include "imgLoader.h"
#include "nsIClassOfService.h"
#include "nsIConsoleService.h"
#include "nsIContent.h"
#include "nsIContentInlines.h"
@@ -97,17 +97,16 @@
// Thanks so much, Microsoft! :(
#ifdef CreateEvent
#undef CreateEvent
#endif
#endif // XP_WIN
static NS_DEFINE_CID(kAppShellCID, NS_APPSHELL_CID);
-static const char *kPrefJavaMIME = "plugin.java.mime";
static const char *kPrefYoutubeRewrite = "plugins.rewrite_youtube_embeds";
static const char *kPrefBlockURIs = "browser.safebrowsing.blockedURIs.enabled";
static const char *kPrefFavorFallbackMode = "plugins.favorfallback.mode";
static const char *kPrefFavorFallbackRules = "plugins.favorfallback.rules";
using namespace mozilla;
using namespace mozilla::dom;
using namespace mozilla::net;
@@ -118,23 +117,16 @@ GetObjectLog()
static LazyLogModule sLog("objlc");
return sLog;
}
#define LOG(args) MOZ_LOG(GetObjectLog(), mozilla::LogLevel::Debug, args)
#define LOG_ENABLED() MOZ_LOG_TEST(GetObjectLog(), mozilla::LogLevel::Debug)
static bool
-IsJavaMIME(const nsACString & aMIMEType)
-{
- return
- nsPluginHost::GetSpecialType(aMIMEType) == nsPluginHost::eSpecialType_Java;
-}
-
-static bool
IsFlashMIME(const nsACString & aMIMEType)
{
return
nsPluginHost::GetSpecialType(aMIMEType) == nsPluginHost::eSpecialType_Flash;
}
static bool
InActiveDocument(nsIContent *aContent)
@@ -864,18 +856,17 @@ nsObjectLoadingContent::GetPluginAttribu
void
nsObjectLoadingContent::GetPluginParameters(nsTArray<MozPluginParameter>& aParameters)
{
aParameters = mCachedParameters;
}
void
-nsObjectLoadingContent::GetNestedParams(nsTArray<MozPluginParameter>& aParams,
- bool aIgnoreCodebase)
+nsObjectLoadingContent::GetNestedParams(nsTArray<MozPluginParameter>& aParams)
{
nsCOMPtr<Element> ourElement =
do_QueryInterface(static_cast<nsIObjectLoadingContent*>(this));
nsCOMPtr<nsIHTMLCollection> allParams;
NS_NAMED_LITERAL_STRING(xhtml_ns, "http://www.w3.org/1999/xhtml");
ErrorResult rv;
allParams = ourElement->GetElementsByTagNameNS(xhtml_ns,
@@ -893,44 +884,35 @@ nsObjectLoadingContent::GetNestedParams(
nsAutoString name;
element->GetAttribute(NS_LITERAL_STRING("name"), name);
if (name.IsEmpty())
continue;
nsCOMPtr<nsIContent> parent = element->GetParent();
nsCOMPtr<nsIDOMHTMLObjectElement> domObject;
- nsCOMPtr<nsIDOMHTMLAppletElement> domApplet;
- while (!(domObject || domApplet) && parent) {
+ while (!domObject && parent) {
domObject = do_QueryInterface(parent);
- domApplet = do_QueryInterface(parent);
parent = parent->GetParent();
}
- if (domApplet) {
- parent = do_QueryInterface(domApplet);
- } else if (domObject) {
+ if (domObject) {
parent = do_QueryInterface(domObject);
} else {
continue;
}
if (parent == ourElement) {
MozPluginParameter param;
element->GetAttribute(NS_LITERAL_STRING("name"), param.mName);
element->GetAttribute(NS_LITERAL_STRING("value"), param.mValue);
param.mName.Trim(" \n\r\t\b", true, true, false);
param.mValue.Trim(" \n\r\t\b", true, true, false);
- // ignore codebase param if it was already added in the attributes array.
- if (aIgnoreCodebase && param.mName.EqualsIgnoreCase("codebase")) {
- continue;
- }
-
aParams.AppendElement(param);
}
}
}
nsresult
nsObjectLoadingContent::BuildParametersArray()
{
@@ -946,65 +928,47 @@ nsObjectLoadingContent::BuildParametersA
MozPluginParameter param;
const nsAttrName* attrName = content->GetAttrNameAt(i);
nsIAtom* atom = attrName->LocalName();
content->GetAttr(attrName->NamespaceID(), atom, param.mValue);
atom->ToString(param.mName);
mCachedAttributes.AppendElement(param);
}
- bool isJava = IsJavaMIME(mContentType);
-
- nsCString codebase;
- if (isJava) {
- nsresult rv = mBaseURI->GetSpec(codebase);
- NS_ENSURE_SUCCESS(rv, rv);
- }
-
nsAdoptingCString wmodeOverride = Preferences::GetCString("plugins.force.wmode");
for (uint32_t i = 0; i < mCachedAttributes.Length(); i++) {
if (!wmodeOverride.IsEmpty() && mCachedAttributes[i].mName.EqualsIgnoreCase("wmode")) {
CopyASCIItoUTF16(wmodeOverride, mCachedAttributes[i].mValue);
wmodeOverride.Truncate();
- } else if (!codebase.IsEmpty() && mCachedAttributes[i].mName.EqualsIgnoreCase("codebase")) {
- CopyASCIItoUTF16(codebase, mCachedAttributes[i].mValue);
- codebase.Truncate();
}
}
if (!wmodeOverride.IsEmpty()) {
MozPluginParameter param;
param.mName = NS_LITERAL_STRING("wmode");
CopyASCIItoUTF16(wmodeOverride, param.mValue);
mCachedAttributes.AppendElement(param);
}
- if (!codebase.IsEmpty()) {
- MozPluginParameter param;
- param.mName = NS_LITERAL_STRING("codebase");
- CopyASCIItoUTF16(codebase, param.mValue);
- mCachedAttributes.AppendElement(param);
- }
-
// Some plugins were never written to understand the "data" attribute of the OBJECT tag.
// Real and WMP will not play unless they find a "src" attribute, see bug 152334.
// Nav 4.x would simply replace the "data" with "src". Because some plugins correctly
// look for "data", lets instead copy the "data" attribute and add another entry
// to the bottom of the array if there isn't already a "src" specified.
if (content->IsHTMLElement(nsGkAtoms::object) &&
!content->HasAttr(kNameSpaceID_None, nsGkAtoms::src)) {
MozPluginParameter param;
content->GetAttr(kNameSpaceID_None, nsGkAtoms::data, param.mValue);
if (!param.mValue.IsEmpty()) {
param.mName = NS_LITERAL_STRING("SRC");
mCachedAttributes.AppendElement(param);
}
}
- GetNestedParams(mCachedParameters, isJava);
+ GetNestedParams(mCachedParameters);
return NS_OK;
}
void
nsObjectLoadingContent::NotifyOwnerDocumentActivityChanged()
{
// XXX(johns): We cannot touch plugins or run arbitrary script from this call,
@@ -1380,56 +1344,16 @@ nsObjectLoadingContent::ObjectState() co
case eFallbackVulnerableNoUpdate:
return NS_EVENT_STATE_VULNERABLE_NO_UPDATE;
}
}
NS_NOTREACHED("unknown type?");
return NS_EVENT_STATE_LOADING;
}
-// Returns false if mBaseURI is not acceptable for java applets.
-bool
-nsObjectLoadingContent::CheckJavaCodebase()
-{
- nsCOMPtr<nsIContent> thisContent =
- do_QueryInterface(static_cast<nsIImageLoadingContent*>(this));
- nsCOMPtr<nsIScriptSecurityManager> secMan =
- nsContentUtils::GetSecurityManager();
- nsCOMPtr<nsINetUtil> netutil = do_GetNetUtil();
- NS_ASSERTION(thisContent && secMan && netutil, "expected interfaces");
-
-
- // Note that mBaseURI is this tag's requested base URI, not the codebase of
- // the document for security purposes
- nsresult rv = secMan->CheckLoadURIWithPrincipal(thisContent->NodePrincipal(),
- mBaseURI, 0);
- if (NS_FAILED(rv)) {
- LOG(("OBJLC [%p]: Java codebase check failed", this));
- return false;
- }
-
- nsCOMPtr<nsIURI> principalBaseURI;
- rv = thisContent->NodePrincipal()->GetURI(getter_AddRefs(principalBaseURI));
- if (NS_FAILED(rv)) {
- NS_NOTREACHED("Failed to URI from node principal?");
- return false;
- }
- // We currently allow java's codebase to be non-same-origin, with
- // the exception of URIs that represent local files
- if (NS_URIIsLocalFile(mBaseURI) &&
- nsScriptSecurityManager::GetStrictFileOriginPolicy() &&
- !NS_RelaxStrictFileOriginPolicy(mBaseURI, principalBaseURI, true)) {
- LOG(("OBJLC [%p]: Java failed RelaxStrictFileOriginPolicy for file URI",
- this));
- return false;
- }
-
- return true;
-}
-
void
nsObjectLoadingContent::MaybeRewriteYoutubeEmbed(nsIURI* aURI, nsIURI* aBaseURI, nsIURI** aOutURI)
{
nsCOMPtr<nsIContent> thisContent =
do_QueryInterface(static_cast<nsIImageLoadingContent*>(this));
NS_ASSERTION(thisContent, "Must be an instance of content");
// We're only interested in switching out embed and object tags
@@ -1621,32 +1545,31 @@ nsObjectLoadingContent::CheckProcessPoli
LOG(("OBJLC [%p]: CheckContentProcessPolicy rejected load", this));
return false;
}
return true;
}
nsObjectLoadingContent::ParameterUpdateFlags
-nsObjectLoadingContent::UpdateObjectParameters(bool aJavaURI)
+nsObjectLoadingContent::UpdateObjectParameters()
{
nsCOMPtr<nsIContent> thisContent =
do_QueryInterface(static_cast<nsIImageLoadingContent*>(this));
NS_ASSERTION(thisContent, "Must be an instance of content");
uint32_t caps = GetCapabilities();
LOG(("OBJLC [%p]: Updating object parameters", this));
nsresult rv;
nsAutoCString newMime;
nsAutoString typeAttr;
nsCOMPtr<nsIURI> newURI;
nsCOMPtr<nsIURI> newBaseURI;
ObjectType newType;
- bool isJava = false;
// Set if this state can't be used to load anything, forces eType_Null
bool stateInvalid = false;
// Indicates what parameters changed.
// eParamChannelChanged - means parameters that affect channel opening
// decisions changed
// eParamStateChanged - means anything that affects what content we load
// changed, even if the channel we'd open remains the
// same.
@@ -1655,135 +1578,64 @@ nsObjectLoadingContent::UpdateObjectPara
// already opened a channel or tried to instantiate content, whereas channel
// parameter changes require re-opening the channel even if we haven't gotten
// that far.
nsObjectLoadingContent::ParameterUpdateFlags retval = eParamNoChange;
///
/// Initial MIME Type
///
-
- if (aJavaURI || thisContent->NodeInfo()->Equals(nsGkAtoms::applet)) {
- nsAdoptingCString javaMIME = Preferences::GetCString(kPrefJavaMIME);
- newMime = javaMIME;
- NS_ASSERTION(IsJavaMIME(newMime),
- "plugin.mime.java should be recognized as java");
- isJava = true;
- } else {
- nsAutoString rawTypeAttr;
- thisContent->GetAttr(kNameSpaceID_None, nsGkAtoms::type, rawTypeAttr);
- if (!rawTypeAttr.IsEmpty()) {
- typeAttr = rawTypeAttr;
- CopyUTF16toUTF8(rawTypeAttr, newMime);
- isJava = IsJavaMIME(newMime);
- }
- }
-
- ///
- /// classID
- ///
-
- if (caps & eSupportClassID) {
- nsAutoString classIDAttr;
- thisContent->GetAttr(kNameSpaceID_None, nsGkAtoms::classid, classIDAttr);
- if (!classIDAttr.IsEmpty()) {
- // Our classid support is limited to 'java:' ids
- nsAdoptingCString javaMIME = Preferences::GetCString(kPrefJavaMIME);
- NS_ASSERTION(IsJavaMIME(javaMIME),
- "plugin.mime.java should be recognized as java");
- RefPtr<nsPluginHost> pluginHost = nsPluginHost::GetInst();
- if (StringBeginsWith(classIDAttr, NS_LITERAL_STRING("java:")) &&
- pluginHost &&
- pluginHost->HavePluginForType(javaMIME)) {
- newMime = javaMIME;
- isJava = true;
- } else {
- // XXX(johns): Our de-facto behavior since forever was to refuse to load
- // Objects who don't have a classid we support, regardless of other type
- // or uri info leads to a valid plugin.
- newMime.Truncate();
- stateInvalid = true;
- }
- }
- }
-
///
/// Codebase
///
nsAutoString codebaseStr;
nsCOMPtr<nsIURI> docBaseURI = thisContent->GetBaseURI();
bool hasCodebase = thisContent->HasAttr(kNameSpaceID_None, nsGkAtoms::codebase);
- if (hasCodebase)
+ if (hasCodebase) {
thisContent->GetAttr(kNameSpaceID_None, nsGkAtoms::codebase, codebaseStr);
-
-
- // Java wants the codebase attribute even if it occurs in <param> tags
- if (isJava) {
- // Find all <param> tags that are nested beneath us, but not beneath another
- // object/applet tag.
- nsTArray<MozPluginParameter> params;
- GetNestedParams(params, false);
- for (uint32_t i = 0; i < params.Length(); i++) {
- if (params[i].mName.EqualsIgnoreCase("codebase")) {
- hasCodebase = true;
- codebaseStr = params[i].mValue;
- }
- }
- }
-
- if (isJava && hasCodebase && codebaseStr.IsEmpty()) {
- // Java treats codebase="" as "/"
- codebaseStr.Assign('/');
- // XXX(johns): This doesn't cover the case of "https:" which java would
- // interpret as "https:///" but we interpret as this document's
- // URI but with a changed scheme.
- } else if (isJava && !hasCodebase) {
- // Java expects a directory as the codebase, or else it will construct
- // relative URIs incorrectly :(
- codebaseStr.Assign('.');
}
if (!codebaseStr.IsEmpty()) {
rv = nsContentUtils::NewURIWithDocumentCharset(getter_AddRefs(newBaseURI),
codebaseStr,
thisContent->OwnerDoc(),
docBaseURI);
if (NS_SUCCEEDED(rv)) {
NS_TryToSetImmutable(newBaseURI);
} else {
// Malformed URI
LOG(("OBJLC [%p]: Could not parse plugin's codebase as a URI, "
"will use document baseURI instead", this));
}
}
+ nsAutoString rawTypeAttr;
+ thisContent->GetAttr(kNameSpaceID_None, nsGkAtoms::type, rawTypeAttr);
+ if (!rawTypeAttr.IsEmpty()) {
+ typeAttr = rawTypeAttr;
+ CopyUTF16toUTF8(rawTypeAttr, newMime);
+ }
+
// If we failed to build a valid URI, use the document's base URI
if (!newBaseURI) {
newBaseURI = docBaseURI;
}
///
/// URI
///
nsAutoString uriStr;
// Different elements keep this in various locations
- if (isJava) {
- // Applet tags and embed/object with explicit java MIMEs have src/data
- // attributes that are not meant to be parsed as URIs or opened by the
- // browser -- act as if they are null. (Setting these attributes triggers a
- // force-load, so tracking the old value to determine if they have changed
- // is not necessary.)
- } else if (thisContent->NodeInfo()->Equals(nsGkAtoms::object)) {
+ if (thisContent->NodeInfo()->Equals(nsGkAtoms::object)) {
thisContent->GetAttr(kNameSpaceID_None, nsGkAtoms::data, uriStr);
} else if (thisContent->NodeInfo()->Equals(nsGkAtoms::embed)) {
thisContent->GetAttr(kNameSpaceID_None, nsGkAtoms::src, uriStr);
} else {
- // Applet tags should always have a java MIME type at this point
NS_NOTREACHED("Unrecognized plugin-loading tag");
}
mRewrittenYoutubeEmbed = false;
// Note that the baseURI changing could affect the newURI, even if uriStr did
// not change.
if (!uriStr.IsEmpty()) {
rv = nsContentUtils::NewURIWithDocumentCharset(getter_AddRefs(newURI),
@@ -1808,19 +1660,16 @@ nsObjectLoadingContent::UpdateObjectPara
}
// For eAllowPluginSkipChannel tags, if we have a non-plugin type, but can get
// a plugin type from the extension, prefer that to falling back to a channel.
if (!IsPluginType(GetTypeOfContent(newMime, mSkipFakePlugins)) && newURI &&
(caps & eAllowPluginSkipChannel) &&
IsPluginEnabledByExtension(newURI, newMime)) {
LOG(("OBJLC [%p]: Using extension as type hint (%s)", this, newMime.get()));
- if (!isJava && IsJavaMIME(newMime)) {
- return UpdateObjectParameters(true);
- }
}
///
/// Check if the original (pre-channel) content-type or URI changed, and
/// record mOriginal{ContentType,URI}
///
if ((mOriginalContentType != newMime) || !URIEquals(mOriginalURI, newURI)) {
@@ -1924,25 +1773,16 @@ nsObjectLoadingContent::UpdateObjectPara
// it couldn't find a way to handle application/octet-stream
nsAutoCString parsedMime, dummy;
NS_ParseResponseContentType(newMime, parsedMime, dummy);
if (!parsedMime.IsEmpty()) {
mChannel->SetContentType(parsedMime);
}
} else {
newMime = channelType;
- if (IsJavaMIME(newMime)) {
- // Java does not load with a channel, and being java retroactively
- // changes how we may have interpreted the codebase to construct this
- // URI above. Because the behavior here is more or less undefined, play
- // it safe and reject the load.
- LOG(("OBJLC [%p]: Refusing to load with channel with java MIME",
- this));
- stateInvalid = true;
- }
}
} else if (newChannel) {
LOG(("OBJLC [%p]: We failed to open a channel, marking invalid", this));
stateInvalid = true;
}
///
/// Determine final type
@@ -2004,22 +1844,16 @@ nsObjectLoadingContent::UpdateObjectPara
if (newType != mType) {
retval = (ParameterUpdateFlags)(retval | eParamStateChanged);
LOG(("OBJLC [%p]: Type changed from %u -> %u", this, mType, newType));
mType = newType;
}
if (!URIEquals(mBaseURI, newBaseURI)) {
- if (isJava) {
- // Java bases its class loading on the base URI, so we consider the state
- // to have changed if this changes. If the object is using a relative URI,
- // mURI will have changed below regardless
- retval = (ParameterUpdateFlags)(retval | eParamStateChanged);
- }
LOG(("OBJLC [%p]: Object effective baseURI changed", this));
mBaseURI = newBaseURI;
}
if (!URIEquals(newURI, mURI)) {
retval = (ParameterUpdateFlags)(retval | eParamStateChanged);
LOG(("OBJLC [%p]: Object effective URI changed", this));
mURI = newURI;
@@ -2204,19 +2038,16 @@ nsObjectLoadingContent::LoadObject(bool
}
//
// Security checks
//
if (mType != eType_Null) {
bool allowLoad = true;
- if (IsJavaMIME(mContentType)) {
- allowLoad = CheckJavaCodebase();
- }
int16_t contentPolicy = nsIContentPolicy::ACCEPT;
// If mChannelLoaded is set we presumably already passed load policy
// If mType == eType_Loading then we call OpenChannel() which internally
// creates a new channel and calls asyncOpen2() on that channel which
// then enforces content policy checks.
if (allowLoad && mURI && !mChannelLoaded && mType != eType_Loading) {
allowLoad = CheckLoadPolicy(&contentPolicy);
}
--- a/dom/base/nsObjectLoadingContent.h
+++ b/dom/base/nsObjectLoadingContent.h
@@ -296,17 +296,18 @@ class nsObjectLoadingContent : public ns
bool aForceLoad = false);
enum Capabilities {
eSupportImages = 1u << 0, // Images are supported (imgILoader)
eSupportPlugins = 1u << 1, // Plugins are supported (nsIPluginHost)
eSupportDocuments = 1u << 2, // Documents are supported
// (nsIDocumentLoaderFactory)
// This flag always includes SVG
- eSupportClassID = 1u << 3, // The classid attribute is supported
+ eSupportClassID = 1u << 3, // The classid attribute is supported. No
+ // longer used.
// If possible to get a *plugin* type from the type attribute *or* file
// extension, we can use that type and begin loading the plugin before
// opening a channel.
// A side effect of this is if the channel fails, the plugin is still
// running.
eAllowPluginSkipChannel = 1u << 4
};
@@ -384,22 +385,18 @@ class nsObjectLoadingContent : public ns
* This is an internal helper function and should not be used directly for
* passing parameters to the plugin instance.
*
* See GetPluginParameters and GetPluginAttributes, which also handle
* quirk-overrides.
*
* @param aParameters The array containing pairs of name/value strings
* from nested <param> objects.
- * @param aIgnoreCodebase Flag for ignoring the "codebase" param when
- * building the array. This is useful when loading
- * java.
*/
- void GetNestedParams(nsTArray<mozilla::dom::MozPluginParameter>& aParameters,
- bool aIgnoreCodebase);
+ void GetNestedParams(nsTArray<mozilla::dom::MozPluginParameter>& aParameters);
MOZ_MUST_USE nsresult BuildParametersArray();
/**
* Loads fallback content with the specified FallbackType
*
* @param aType FallbackType value for type of fallback we're loading
* @param aNotify Send notifications and events. If false, caller is
@@ -420,34 +417,30 @@ class nsObjectLoadingContent : public ns
* Introspects the object and sets the following member variables:
* - mOriginalContentType : This is the type attribute on the element
* - mOriginalURI : The src or data attribute on the element
* - mURI : The final URI, considering mChannel if
* mChannelLoaded is set
* - mContentType : The final content type, considering mChannel if
* mChannelLoaded is set
* - mBaseURI : The object's base URI, which may be set by the
- * object (codebase attribute)
+ * object
* - mType : The type the object is determined to be based
* on the above
*
* NOTE The class assumes that mType is the currently loaded type at various
* points, so the caller of this function must take the appropriate
* actions to ensure this
*
* NOTE This function does not perform security checks, only determining the
* requested type and parameters of the object.
*
- * @param aJavaURI Specify that the URI will be consumed by java, which
- * changes codebase parsing and URI construction. Used
- * internally.
- *
* @return Returns a bitmask of ParameterUpdateFlags values
*/
- ParameterUpdateFlags UpdateObjectParameters(bool aJavaURI = false);
+ ParameterUpdateFlags UpdateObjectParameters();
/**
* Queue a CheckPluginStopEvent and track it in mPendingCheckPluginStopEvent
*/
void QueueCheckPluginStopEvent();
void NotifyContentObjectWrapper();
@@ -496,21 +489,16 @@ class nsObjectLoadingContent : public ns
/**
* This method tells the final answer on whether this object's fallback
* content should be used instead of the original plugin content.
*
* @param aIsPluginClickToPlay Whether this object instance is CTP.
*/
bool PreferFallback(bool aIsPluginClickToPlay);
- /*
- * Helper to check if mBaseURI can be used by java as a codebase
- */
- bool CheckJavaCodebase();
-
/**
* Helper to check if our current URI passes policy
*
* @param aContentPolicy [out] The result of the content policy decision
*
* @return true if call succeeded and NS_CP_ACCEPTED(*aContentPolicy)
*/
bool CheckLoadPolicy(int16_t *aContentPolicy);
@@ -667,22 +655,21 @@ class nsObjectLoadingContent : public ns
// false, has not yet reached OnStartRequest
nsCOMPtr<nsIChannel> mChannel;
// The URI of the current content.
// May change as we open channels and encounter redirects - does not imply
// a loaded type
nsCOMPtr<nsIURI> mURI;
- // The original URI obtained from inspecting the element (codebase, and
- // src/data). May differ from mURI due to redirects
+ // The original URI obtained from inspecting the element. May differ from
+ // mURI due to redirects
nsCOMPtr<nsIURI> mOriginalURI;
- // The baseURI used for constructing mURI, and used by some plugins (java)
- // as a root for other resource requests.
+ // The baseURI used for constructing mURI.
nsCOMPtr<nsIURI> mBaseURI;
// Type of the currently-loaded content.
ObjectType mType : 8;
// The type of fallback content we're showing (see ObjectState())
FallbackType mFallbackType : 8;