mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1193552 - Remove baseURI from LoadInfo (r=sicking,jkitch)
This commit is contained in:
parent
c96f86e39f
commit
a12861eafc
@ -48,6 +48,7 @@
|
||||
#include "prenv.h"
|
||||
#include "nsIDOMWindow.h"
|
||||
#include "nsIGlobalObject.h"
|
||||
#include "nsIViewSourceChannel.h"
|
||||
#include "nsIWebBrowserChrome.h"
|
||||
#include "nsPoint.h"
|
||||
#include "nsIObserverService.h"
|
||||
@ -10395,20 +10396,18 @@ nsDocShell::DoURILoad(nsIURI* aURI,
|
||||
}
|
||||
|
||||
if (!isSrcdoc) {
|
||||
nsCOMPtr<nsILoadInfo> loadInfo =
|
||||
new LoadInfo(requestingNode ? requestingNode->NodePrincipal() :
|
||||
triggeringPrincipal.get(),
|
||||
triggeringPrincipal,
|
||||
requestingNode,
|
||||
securityFlags,
|
||||
aContentPolicyType,
|
||||
aBaseURI);
|
||||
rv = NS_NewChannelInternal(getter_AddRefs(channel),
|
||||
aURI,
|
||||
loadInfo,
|
||||
nullptr, // loadGroup
|
||||
static_cast<nsIInterfaceRequestor*>(this),
|
||||
loadFlags);
|
||||
requestingNode,
|
||||
requestingNode
|
||||
? requestingNode->NodePrincipal()
|
||||
: triggeringPrincipal.get(),
|
||||
triggeringPrincipal,
|
||||
securityFlags,
|
||||
aContentPolicyType,
|
||||
nullptr, // loadGroup
|
||||
static_cast<nsIInterfaceRequestor*>(this),
|
||||
loadFlags);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
if (rv == NS_ERROR_UNKNOWN_PROTOCOL) {
|
||||
@ -10425,6 +10424,12 @@ nsDocShell::DoURILoad(nsIURI* aURI,
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
if (aBaseURI) {
|
||||
nsCOMPtr<nsIViewSourceChannel> vsc = do_QueryInterface(channel);
|
||||
if (vsc) {
|
||||
vsc->SetBaseURI(aBaseURI);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
nsAutoCString scheme;
|
||||
rv = aURI->GetScheme(scheme);
|
||||
@ -10436,17 +10441,15 @@ nsDocShell::DoURILoad(nsIURI* aURI,
|
||||
nsViewSourceHandler* vsh = nsViewSourceHandler::GetInstance();
|
||||
NS_ENSURE_TRUE(vsh, NS_ERROR_FAILURE);
|
||||
|
||||
rv = vsh->NewSrcdocChannel(aURI, aSrcdoc, getter_AddRefs(channel));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsCOMPtr<nsILoadInfo> loadInfo =
|
||||
new LoadInfo(requestingNode ? requestingNode->NodePrincipal() :
|
||||
triggeringPrincipal.get(),
|
||||
triggeringPrincipal,
|
||||
requestingNode,
|
||||
securityFlags,
|
||||
aContentPolicyType,
|
||||
aBaseURI);
|
||||
channel->SetLoadInfo(loadInfo);
|
||||
rv = vsh->NewSrcdocChannel(aURI, aBaseURI, aSrcdoc,
|
||||
requestingNode,
|
||||
requestingNode
|
||||
? requestingNode->NodePrincipal()
|
||||
: triggeringPrincipal.get(),
|
||||
triggeringPrincipal,
|
||||
securityFlags,
|
||||
aContentPolicyType,
|
||||
getter_AddRefs(channel));
|
||||
} else {
|
||||
rv = NS_NewInputStreamChannelInternal(getter_AddRefs(channel),
|
||||
aURI,
|
||||
@ -10459,9 +10462,11 @@ nsDocShell::DoURILoad(nsIURI* aURI,
|
||||
triggeringPrincipal,
|
||||
securityFlags,
|
||||
aContentPolicyType,
|
||||
true,
|
||||
aBaseURI);
|
||||
true);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsCOMPtr<nsIInputStreamChannel> isc = do_QueryInterface(channel);
|
||||
MOZ_ASSERT(isc);
|
||||
isc->SetBaseURI(aBaseURI);
|
||||
}
|
||||
}
|
||||
|
||||
@ -11735,7 +11740,7 @@ nsDocShell::AddToSessionHistory(nsIURI* aURI, nsIChannel* aChannel,
|
||||
nsCOMPtr<nsILoadInfo> loadInfo;
|
||||
aChannel->GetLoadInfo(getter_AddRefs(loadInfo));
|
||||
nsCOMPtr<nsIURI> baseURI;
|
||||
loadInfo->GetBaseURI(getter_AddRefs(baseURI));
|
||||
inStrmChan->GetBaseURI(getter_AddRefs(baseURI));
|
||||
entry->SetBaseURI(baseURI);
|
||||
}
|
||||
}
|
||||
|
@ -23,8 +23,7 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadingPrincipal,
|
||||
nsIPrincipal* aTriggeringPrincipal,
|
||||
nsINode* aLoadingContext,
|
||||
nsSecurityFlags aSecurityFlags,
|
||||
nsContentPolicyType aContentPolicyType,
|
||||
nsIURI* aBaseURI)
|
||||
nsContentPolicyType aContentPolicyType)
|
||||
: mLoadingPrincipal(aLoadingContext ?
|
||||
aLoadingContext->NodePrincipal() : aLoadingPrincipal)
|
||||
, mTriggeringPrincipal(aTriggeringPrincipal ?
|
||||
@ -32,7 +31,6 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadingPrincipal,
|
||||
, mLoadingContext(do_GetWeakReference(aLoadingContext))
|
||||
, mSecurityFlags(aSecurityFlags)
|
||||
, mContentPolicyType(aContentPolicyType)
|
||||
, mBaseURI(aBaseURI)
|
||||
, mUpgradeInsecureRequests(false)
|
||||
, mInnerWindowID(0)
|
||||
, mOuterWindowID(0)
|
||||
@ -226,20 +224,6 @@ LoadInfo::InternalContentPolicyType()
|
||||
return mContentPolicyType;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
LoadInfo::GetBaseURI(nsIURI** aBaseURI)
|
||||
{
|
||||
*aBaseURI = mBaseURI;
|
||||
NS_IF_ADDREF(*aBaseURI);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsIURI*
|
||||
LoadInfo::BaseURI()
|
||||
{
|
||||
return mBaseURI;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
LoadInfo::GetUpgradeInsecureRequests(bool* aResult)
|
||||
{
|
||||
|
@ -48,8 +48,7 @@ public:
|
||||
nsIPrincipal* aTriggeringPrincipal,
|
||||
nsINode* aLoadingContext,
|
||||
nsSecurityFlags aSecurityFlags,
|
||||
nsContentPolicyType aContentPolicyType,
|
||||
nsIURI* aBaseURI = nullptr);
|
||||
nsContentPolicyType aContentPolicyType);
|
||||
|
||||
private:
|
||||
// private constructor that is only allowed to be called from within
|
||||
@ -80,7 +79,6 @@ private:
|
||||
nsWeakPtr mLoadingContext;
|
||||
nsSecurityFlags mSecurityFlags;
|
||||
nsContentPolicyType mContentPolicyType;
|
||||
nsCOMPtr<nsIURI> mBaseURI;
|
||||
bool mUpgradeInsecureRequests;
|
||||
uint64_t mInnerWindowID;
|
||||
uint64_t mOuterWindowID;
|
||||
|
@ -13,7 +13,7 @@ interface nsIURI;
|
||||
* This interface provides methods to initialize an input stream channel.
|
||||
* The input stream channel serves as a data pump for an input stream.
|
||||
*/
|
||||
[scriptable, uuid(e1e95852-914b-4d83-b574-23f114db9b89)]
|
||||
[scriptable, uuid(ea730238-4bfd-4015-8489-8f264d05b343)]
|
||||
interface nsIInputStreamChannel : nsISupports
|
||||
{
|
||||
/**
|
||||
@ -55,4 +55,10 @@ interface nsIInputStreamChannel : nsISupports
|
||||
* Returns true if srcdocData has been set within the channel.
|
||||
*/
|
||||
readonly attribute boolean isSrcdocChannel;
|
||||
|
||||
/**
|
||||
* The base URI to be used for the channel. Used when the base URI cannot
|
||||
* be inferred by other means, for example when this is a srcdoc channel.
|
||||
*/
|
||||
attribute nsIURI baseURI;
|
||||
};
|
||||
|
@ -10,7 +10,6 @@
|
||||
interface nsIDOMDocument;
|
||||
interface nsINode;
|
||||
interface nsIPrincipal;
|
||||
interface nsIURI;
|
||||
|
||||
%{C++
|
||||
#include "nsTArray.h"
|
||||
@ -23,7 +22,7 @@ typedef unsigned long nsSecurityFlags;
|
||||
/**
|
||||
* An nsILoadOwner represents per-load information about who started the load.
|
||||
*/
|
||||
[scriptable, builtinclass, uuid(cc51498e-f8f8-469d-85ba-6dcba17027e4)]
|
||||
[scriptable, builtinclass, uuid(99abb145-29d2-4a0a-8bca-213fa6211cc9)]
|
||||
interface nsILoadInfo : nsISupports
|
||||
{
|
||||
/**
|
||||
@ -270,19 +269,6 @@ interface nsILoadInfo : nsISupports
|
||||
[noscript, notxpcom]
|
||||
nsContentPolicyType internalContentPolicyType();
|
||||
|
||||
/**
|
||||
* A base URI for use in situations where it cannot otherwise be inferred.
|
||||
* This attribute may be null. The value of this attribute may be
|
||||
* ignored if the base URI can be inferred by the channel's URI.
|
||||
*/
|
||||
readonly attribute nsIURI baseURI;
|
||||
|
||||
/**
|
||||
* A C++-friendly version of baseURI.
|
||||
*/
|
||||
[noscript, notxpcom, nostdcall, binaryname(BaseURI)]
|
||||
nsIURI binaryBaseURI();
|
||||
|
||||
/**
|
||||
* Returns true if document or any of the documents ancestors
|
||||
* up to the toplevel document make use of the CSP directive
|
||||
|
@ -89,3 +89,18 @@ nsInputStreamChannel::GetIsSrcdocChannel(bool *aIsSrcdocChannel)
|
||||
*aIsSrcdocChannel = mIsSrcdocChannel;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInputStreamChannel::GetBaseURI(nsIURI** aBaseURI)
|
||||
{
|
||||
*aBaseURI = mBaseURI;
|
||||
NS_IF_ADDREF(*aBaseURI);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInputStreamChannel::SetBaseURI(nsIURI* aBaseURI)
|
||||
{
|
||||
mBaseURI = aBaseURI;
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -33,6 +33,7 @@ protected:
|
||||
|
||||
private:
|
||||
nsCOMPtr<nsIInputStream> mContentStream;
|
||||
nsCOMPtr<nsIURI> mBaseURI;
|
||||
nsString mSrcdocData;
|
||||
bool mIsSrcdocChannel;
|
||||
};
|
||||
|
@ -310,16 +310,14 @@ NS_NewInputStreamChannelInternal(nsIChannel **outChannel,
|
||||
nsIPrincipal *aLoadingPrincipal,
|
||||
nsIPrincipal *aTriggeringPrincipal,
|
||||
nsSecurityFlags aSecurityFlags,
|
||||
nsContentPolicyType aContentPolicyType,
|
||||
nsIURI *aBaseURI /* = nullptr */)
|
||||
nsContentPolicyType aContentPolicyType)
|
||||
{
|
||||
nsCOMPtr<nsILoadInfo> loadInfo =
|
||||
new mozilla::LoadInfo(aLoadingPrincipal,
|
||||
aTriggeringPrincipal,
|
||||
aLoadingNode,
|
||||
aSecurityFlags,
|
||||
aContentPolicyType,
|
||||
aBaseURI);
|
||||
aContentPolicyType);
|
||||
if (!loadInfo) {
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
}
|
||||
@ -363,8 +361,7 @@ NS_NewInputStreamChannelInternal(nsIChannel **outChannel,
|
||||
nsIPrincipal *aTriggeringPrincipal,
|
||||
nsSecurityFlags aSecurityFlags,
|
||||
nsContentPolicyType aContentPolicyType,
|
||||
bool aIsSrcdocChannel /* = false */,
|
||||
nsIURI *aBaseURI /* = nullptr */)
|
||||
bool aIsSrcdocChannel /* = false */)
|
||||
{
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIStringInputStream> stream;
|
||||
@ -390,8 +387,7 @@ NS_NewInputStreamChannelInternal(nsIChannel **outChannel,
|
||||
aLoadingPrincipal,
|
||||
aTriggeringPrincipal,
|
||||
aSecurityFlags,
|
||||
aContentPolicyType,
|
||||
aBaseURI);
|
||||
aContentPolicyType);
|
||||
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
@ -412,8 +408,7 @@ NS_NewInputStreamChannel(nsIChannel **outChannel,
|
||||
nsIPrincipal *aLoadingPrincipal,
|
||||
nsSecurityFlags aSecurityFlags,
|
||||
nsContentPolicyType aContentPolicyType,
|
||||
bool aIsSrcdocChannel /* = false */,
|
||||
nsIURI *aBaseURI /* = nullptr */)
|
||||
bool aIsSrcdocChannel /* = false */)
|
||||
{
|
||||
return NS_NewInputStreamChannelInternal(outChannel,
|
||||
aUri,
|
||||
@ -424,8 +419,7 @@ NS_NewInputStreamChannel(nsIChannel **outChannel,
|
||||
nullptr, // aTriggeringPrincipal
|
||||
aSecurityFlags,
|
||||
aContentPolicyType,
|
||||
aIsSrcdocChannel,
|
||||
aBaseURI);
|
||||
aIsSrcdocChannel);
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
@ -288,8 +288,7 @@ nsresult NS_NewInputStreamChannelInternal(nsIChannel **outChannel,
|
||||
nsIPrincipal *aLoadingPrincipal,
|
||||
nsIPrincipal *aTriggeringPrincipal,
|
||||
nsSecurityFlags aSecurityFlags,
|
||||
nsContentPolicyType aContentPolicyType,
|
||||
nsIURI *aBaseURI = nullptr);
|
||||
nsContentPolicyType aContentPolicyType);
|
||||
|
||||
|
||||
nsresult /* NS_NewInputStreamChannelPrincipal */
|
||||
@ -311,8 +310,7 @@ nsresult NS_NewInputStreamChannelInternal(nsIChannel **outChannel,
|
||||
nsIPrincipal *aTriggeringPrincipal,
|
||||
nsSecurityFlags aSecurityFlags,
|
||||
nsContentPolicyType aContentPolicyType,
|
||||
bool aIsSrcdocChannel = false,
|
||||
nsIURI *aBaseURI = nullptr);
|
||||
bool aIsSrcdocChannel = false);
|
||||
|
||||
nsresult NS_NewInputStreamChannel(nsIChannel **outChannel,
|
||||
nsIURI *aUri,
|
||||
@ -321,8 +319,7 @@ nsresult NS_NewInputStreamChannel(nsIChannel **outChannel,
|
||||
nsIPrincipal *aLoadingPrincipal,
|
||||
nsSecurityFlags aSecurityFlags,
|
||||
nsContentPolicyType aContentPolicyType,
|
||||
bool aIsSrcdocChannel = false,
|
||||
nsIURI *aBaseURI = nullptr);
|
||||
bool aIsSrcdocChannel = false);
|
||||
|
||||
nsresult NS_NewInputStreamPump(nsIInputStreamPump **result,
|
||||
nsIInputStream *stream,
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
#include "nsIChannel.idl"
|
||||
|
||||
[uuid(72d9580a-b636-4392-b888-6c003c56f3d7)]
|
||||
[uuid(3e9800f8-edb7-4c9a-9285-09b4f045b019)]
|
||||
interface nsIViewSourceChannel : nsIChannel
|
||||
{
|
||||
/**
|
||||
@ -24,6 +24,15 @@ interface nsIViewSourceChannel : nsIChannel
|
||||
* Whether the channel was created to view the source of a srcdoc document.
|
||||
*/
|
||||
readonly attribute boolean isSrcdocChannel;
|
||||
|
||||
/**
|
||||
* Set to indicate the base URI. If this channel is a srcdoc channel, it
|
||||
* returns the base URI provided by the embedded channel. It is used to
|
||||
* provide an indication of the base URI in circumstances where it isn't
|
||||
* otherwise recoverable. Returns null when it isn't set and isn't a
|
||||
* srcdoc channel.
|
||||
*/
|
||||
attribute nsIURI baseURI;
|
||||
};
|
||||
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "nsContentSecurityManager.h"
|
||||
#include "nsNullPrincipal.h"
|
||||
#include "nsServiceManagerUtils.h"
|
||||
#include "nsIInputStreamChannel.h"
|
||||
|
||||
NS_IMPL_ADDREF(nsViewSourceChannel)
|
||||
NS_IMPL_RELEASE(nsViewSourceChannel)
|
||||
@ -91,9 +92,15 @@ nsViewSourceChannel::Init(nsIURI* uri)
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsViewSourceChannel::InitSrcdoc(nsIURI* aURI, const nsAString &aSrcdoc)
|
||||
nsViewSourceChannel::InitSrcdoc(nsIURI* aURI,
|
||||
nsIURI* aBaseURI,
|
||||
const nsAString &aSrcdoc,
|
||||
nsINode *aLoadingNode,
|
||||
nsIPrincipal *aLoadingPrincipal,
|
||||
nsIPrincipal *aTriggeringPrincipal,
|
||||
nsSecurityFlags aSecurityFlags,
|
||||
nsContentPolicyType aContentPolicyType)
|
||||
{
|
||||
|
||||
nsresult rv;
|
||||
|
||||
nsCOMPtr<nsIURI> inStreamURI;
|
||||
@ -104,14 +111,16 @@ nsViewSourceChannel::InitSrcdoc(nsIURI* aURI, const nsAString &aSrcdoc)
|
||||
NS_LITERAL_STRING("about:srcdoc"));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = NS_NewInputStreamChannel(getter_AddRefs(mChannel),
|
||||
inStreamURI,
|
||||
aSrcdoc,
|
||||
NS_LITERAL_CSTRING("text/html"),
|
||||
nsContentUtils::GetSystemPrincipal(),
|
||||
nsILoadInfo::SEC_NORMAL,
|
||||
nsIContentPolicy::TYPE_OTHER,
|
||||
true);
|
||||
rv = NS_NewInputStreamChannelInternal(getter_AddRefs(mChannel),
|
||||
inStreamURI,
|
||||
aSrcdoc,
|
||||
NS_LITERAL_CSTRING("text/html"),
|
||||
aLoadingNode,
|
||||
aLoadingPrincipal,
|
||||
aTriggeringPrincipal,
|
||||
aSecurityFlags,
|
||||
aContentPolicyType,
|
||||
true);
|
||||
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
mOriginalURI = aURI;
|
||||
@ -124,6 +133,10 @@ nsViewSourceChannel::InitSrcdoc(nsIURI* aURI, const nsAString &aSrcdoc)
|
||||
mCacheInfoChannel = do_QueryInterface(mChannel);
|
||||
mApplicationCacheChannel = do_QueryInterface(mChannel);
|
||||
mUploadChannel = do_QueryInterface(mChannel);
|
||||
|
||||
nsCOMPtr<nsIInputStreamChannel> isc = do_QueryInterface(mChannel);
|
||||
MOZ_ASSERT(isc);
|
||||
isc->SetBaseURI(aBaseURI);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -592,6 +605,27 @@ nsViewSourceChannel::GetIsSrcdocChannel(bool* aIsSrcdocChannel)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsViewSourceChannel::GetBaseURI(nsIURI** aBaseURI)
|
||||
{
|
||||
if (mIsSrcdocChannel) {
|
||||
nsCOMPtr<nsIInputStreamChannel> isc = do_QueryInterface(mChannel);
|
||||
if (isc) {
|
||||
return isc->GetBaseURI(aBaseURI);
|
||||
}
|
||||
}
|
||||
*aBaseURI = mBaseURI;
|
||||
NS_IF_ADDREF(*aBaseURI);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsViewSourceChannel::SetBaseURI(nsIURI* aBaseURI)
|
||||
{
|
||||
mBaseURI = aBaseURI;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// nsIRequestObserver methods
|
||||
NS_IMETHODIMP
|
||||
nsViewSourceChannel::OnStartRequest(nsIRequest *aRequest, nsISupports *aContext)
|
||||
|
@ -49,7 +49,14 @@ public:
|
||||
|
||||
nsresult Init(nsIURI* uri);
|
||||
|
||||
nsresult InitSrcdoc(nsIURI* aURI, const nsAString &aSrcdoc);
|
||||
nsresult InitSrcdoc(nsIURI* aURI,
|
||||
nsIURI* aBaseURI,
|
||||
const nsAString &aSrcdoc,
|
||||
nsINode *aLoadingNode,
|
||||
nsIPrincipal *aLoadingPrincipal,
|
||||
nsIPrincipal *aTriggeringPrincipal,
|
||||
nsSecurityFlags aSecurityFlags,
|
||||
nsContentPolicyType aContentPolicyType);
|
||||
|
||||
protected:
|
||||
~nsViewSourceChannel() {}
|
||||
@ -63,6 +70,7 @@ protected:
|
||||
nsCOMPtr<nsIUploadChannel> mUploadChannel;
|
||||
nsCOMPtr<nsIStreamListener> mListener;
|
||||
nsCOMPtr<nsIURI> mOriginalURI;
|
||||
nsCOMPtr<nsIURI> mBaseURI;
|
||||
nsCString mContentType;
|
||||
bool mIsDocument; // keeps track of the LOAD_DOCUMENT_URI flag
|
||||
bool mOpened;
|
||||
|
@ -124,22 +124,33 @@ nsViewSourceHandler::NewChannel(nsIURI* uri, nsIChannel* *result)
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsViewSourceHandler::NewSrcdocChannel(nsIURI* uri, const nsAString &srcdoc,
|
||||
nsIChannel* *result)
|
||||
nsViewSourceHandler::NewSrcdocChannel(nsIURI *aURI,
|
||||
nsIURI *aBaseURI,
|
||||
const nsAString &aSrcdoc,
|
||||
nsINode *aLoadingNode,
|
||||
nsIPrincipal *aLoadingPrincipal,
|
||||
nsIPrincipal *aTriggeringPrincipal,
|
||||
nsSecurityFlags aSecurityFlags,
|
||||
nsContentPolicyType aContentPolicyType,
|
||||
nsIChannel** outChannel)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(uri);
|
||||
NS_ENSURE_ARG_POINTER(aURI);
|
||||
nsViewSourceChannel *channel = new nsViewSourceChannel();
|
||||
if (!channel)
|
||||
if (!channel) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
NS_ADDREF(channel);
|
||||
|
||||
nsresult rv = channel->InitSrcdoc(uri, srcdoc);
|
||||
nsresult rv = channel->InitSrcdoc(aURI, aBaseURI, aSrcdoc,
|
||||
aLoadingNode, aLoadingPrincipal,
|
||||
aTriggeringPrincipal, aSecurityFlags,
|
||||
aContentPolicyType);
|
||||
if (NS_FAILED(rv)) {
|
||||
NS_RELEASE(channel);
|
||||
return rv;
|
||||
}
|
||||
|
||||
*result = static_cast<nsIViewSourceChannel*>(channel);
|
||||
*outChannel = static_cast<nsIViewSourceChannel*>(channel);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -19,8 +19,15 @@ public:
|
||||
|
||||
// Creates a new nsViewSourceChannel to view the source of an about:srcdoc
|
||||
// URI with contents specified by srcdoc.
|
||||
nsresult NewSrcdocChannel(nsIURI* uri, const nsAString &srcdoc,
|
||||
nsIChannel** result);
|
||||
nsresult NewSrcdocChannel(nsIURI *aURI,
|
||||
nsIURI *aBaseURI,
|
||||
const nsAString &aSrcdoc,
|
||||
nsINode *aLoadingNode,
|
||||
nsIPrincipal *aLoadingPrincipal,
|
||||
nsIPrincipal *aTriggeringPrincipal,
|
||||
nsSecurityFlags aSecurityFlags,
|
||||
nsContentPolicyType aContentPolicyType,
|
||||
nsIChannel** outChannel);
|
||||
|
||||
static nsViewSourceHandler* GetInstance();
|
||||
|
||||
|
@ -29,7 +29,7 @@
|
||||
#include "nsIScriptContext.h"
|
||||
#include "mozilla/Preferences.h"
|
||||
#include "nsIHTMLDocument.h"
|
||||
#include "nsILoadInfo.h"
|
||||
#include "nsIViewSourceChannel.h"
|
||||
|
||||
using namespace mozilla;
|
||||
|
||||
@ -803,15 +803,12 @@ nsHtml5TreeOpExecutor::GetViewSourceBaseURI()
|
||||
// We query the channel for the baseURI because in certain situations it
|
||||
// cannot otherwise be determined. If this process fails, fall back to the
|
||||
// standard method.
|
||||
nsCOMPtr<nsIChannel> channel = mDocument->GetChannel();
|
||||
if (channel) {
|
||||
nsCOMPtr<nsILoadInfo> loadInfo;
|
||||
nsresult rv = channel->GetLoadInfo(getter_AddRefs(loadInfo));
|
||||
if (NS_SUCCEEDED(rv) && loadInfo) {
|
||||
rv = loadInfo->GetBaseURI(getter_AddRefs(mViewSourceBaseURI));
|
||||
if (NS_SUCCEEDED(rv) && mViewSourceBaseURI) {
|
||||
return mViewSourceBaseURI;
|
||||
}
|
||||
nsCOMPtr<nsIViewSourceChannel> vsc =
|
||||
do_QueryInterface(mDocument->GetChannel());
|
||||
if (vsc) {
|
||||
nsresult rv = vsc->GetBaseURI(getter_AddRefs(mViewSourceBaseURI));
|
||||
if (NS_SUCCEEDED(rv) && mViewSourceBaseURI) {
|
||||
return mViewSourceBaseURI;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user