Bug 909218 - add defaultLoadFlags to nsILoadGroup and have the docShell set them. r=mayhemer

This commit is contained in:
Mark Hammond 2013-09-06 16:33:29 +10:00
parent 9b3025f596
commit 82367c4c5a
5 changed files with 46 additions and 2 deletions

View File

@ -5379,6 +5379,14 @@ NS_IMETHODIMP
nsDocShell::SetDefaultLoadFlags(uint32_t aDefaultLoadFlags)
{
mDefaultLoadFlags = aDefaultLoadFlags;
// Tell the load group to set these flags all requests in the group
if (mLoadGroup) {
mLoadGroup->SetDefaultLoadFlags(aDefaultLoadFlags);
} else {
NS_WARNING("nsDocShell::SetDefaultLoadFlags has no loadGroup to propagate the flags to");
}
// Recursively tell all of our children. We *do not* skip
// <iframe mozbrowser> children - if someone sticks custom flags in this
// docShell then they too get the same flags.

View File

@ -356,7 +356,8 @@ interface nsIDocShell : nsIDocShellTreeItem
/*
* Default load flags (as defined in nsIRequest) that will be set on all
* requests made by this docShell and propagated to all child docShells.
* requests made by this docShell and propagated to all child docShells and
* to nsILoadGroup::defaultLoadFlags for the docShell's loadGroup.
* Default is no flags. Once set, only future requests initiated by the
* docShell are affected, so in general, these flags should be set before
* the docShell loads any content.

View File

@ -10,10 +10,12 @@ interface nsIRequestObserver;
interface nsIInterfaceRequestor;
interface nsILoadGroupConnectionInfo;
typedef unsigned long nsLoadFlags;
/**
* A load group maintains a collection of nsIRequest objects.
*/
[scriptable, uuid(19501006-46e3-4634-b97d-26eff894b4d3)]
[scriptable, uuid(afb57ac2-bce5-4ee3-bb34-385089a9ba5c)]
interface nsILoadGroup : nsIRequest
{
/**
@ -78,6 +80,19 @@ interface nsILoadGroup : nsIRequest
* connection blocking, and per-tab connection grouping
*/
readonly attribute nsILoadGroupConnectionInfo connectionInfo;
/**
* The set of load flags that will be added to all new requests added to
* this group. Any existing requests in the load group are not modified,
* so it is expected these flags will be added before requests are added
* to the group - typically via nsIDocShell::defaultLoadFlags on a new
* docShell.
* Note that these flags are *not* added to the default request for the
* load group; it is expected the default request will already have these
* flags (again, courtesy of setting nsIDocShell::defaultLoadFlags before
* the docShell has created the default request.)
*/
attribute nsLoadFlags defaultLoadFlags;
};
%{C++

View File

@ -115,6 +115,7 @@ RescheduleRequests(PLDHashTable *table, PLDHashEntryHdr *hdr,
nsLoadGroup::nsLoadGroup(nsISupports* outer)
: mForegroundCount(0)
, mLoadFlags(LOAD_NORMAL)
, mDefaultLoadFlags(0)
, mStatus(NS_OK)
, mPriority(PRIORITY_NORMAL)
, mIsCanceling(false)
@ -859,6 +860,21 @@ nsLoadGroup::AdjustPriority(int32_t aDelta)
return NS_OK;
}
NS_IMETHODIMP
nsLoadGroup::GetDefaultLoadFlags(uint32_t *aFlags)
{
*aFlags = mDefaultLoadFlags;
return NS_OK;
}
NS_IMETHODIMP
nsLoadGroup::SetDefaultLoadFlags(uint32_t aFlags)
{
mDefaultLoadFlags = aFlags;
return NS_OK;
}
////////////////////////////////////////////////////////////////////////////////
void
@ -1039,6 +1055,9 @@ nsresult nsLoadGroup::MergeLoadFlags(nsIRequest *aRequest, nsLoadFlags& outFlags
VALIDATE_ONCE_PER_SESSION |
VALIDATE_NEVER));
// ... and force the default flags.
flags |= mDefaultLoadFlags;
if (flags != oldFlags)
rv = aRequest->SetLoadFlags(flags);

View File

@ -70,6 +70,7 @@ private:
protected:
uint32_t mForegroundCount;
uint32_t mLoadFlags;
uint32_t mDefaultLoadFlags;
nsCOMPtr<nsILoadGroup> mLoadGroup; // load groups can contain load groups
nsCOMPtr<nsIInterfaceRequestor> mCallbacks;