mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-25 22:01:30 +00:00
This was tested on win32, and is known to build on win32 and solaris.
Right now, nsIPluginManager::PostURL() has parameters for postHeadersLength and postHeaders. However, nothing is being done with these parameters. This bug fix utilizes these params for their intended purpose: to allow the plugin the ability to add HTTP headers to a POST data stream. Important assumptions made by this fix: * postHeadersLength is the correct length for postHeaders. * postHeaders is a buffer of headers in the form "HeaderName: HeaderValue\r\n" each header, including the last, MUST be followed by "\r\n". To affect this fix I had to modify the following files: M docshell/base/nsDocShell.cpp M docshell/base/nsDocShell.h M docshell/base/nsWebShell.cpp M modules/plugin/nglsrc/nsPluginViewer.cpp M docshell/base/nsWebShell.h M layout/html/base/src/nsObjectFrame.cpp M modules/plugin/nglsrc/nsIPluginInstanceOwner.h M modules/plugin/nglsrc/nsPluginHostImpl.cpp M modules/plugin/nglsrc/nsPluginInstancePeer.cpp M webshell/public/nsILinkHandler.h Basically, it involved clearing a path so the headers arguments can make it down to nsIPluginInstanceOwner::GetURL()'s implementation in nsObjectFrame.cpp, where an nsIInputStream is made of the headers.
This commit is contained in:
parent
b0e445587e
commit
8ee33dddde
@ -84,6 +84,24 @@ static NS_DEFINE_CID(kSimpleURICID, NS_SIMPLEURI_CID);
|
||||
static NS_DEFINE_CID(kDocumentCharsetInfoCID, NS_DOCUMENTCHARSETINFO_CID);
|
||||
static NS_DEFINE_CID(kPluginManagerCID, NS_PLUGINMANAGER_CID);
|
||||
|
||||
//
|
||||
// Local function prototypes
|
||||
//
|
||||
|
||||
/**
|
||||
|
||||
* Used in AddHeadersToChannel
|
||||
|
||||
*/
|
||||
|
||||
static NS_METHOD AHTC_WriteFunc(nsIInputStream* in,
|
||||
void* closure,
|
||||
const char* fromRawSegment,
|
||||
PRUint32 toOffset,
|
||||
PRUint32 count,
|
||||
PRUint32 *writeCount);
|
||||
|
||||
|
||||
//*****************************************************************************
|
||||
//*** nsDocShell: Object Management
|
||||
//*****************************************************************************
|
||||
@ -282,7 +300,8 @@ nsDocShell::LoadURI(nsIURI* aURI, nsIDocShellLoadInfo* aLoadInfo)
|
||||
if (shEntry) {
|
||||
rv = LoadHistoryEntry(shEntry, loadType);
|
||||
} else {
|
||||
rv = InternalLoad(aURI, referrer, owner, inheritOwner, nsnull, nsnull, loadType, nsnull);
|
||||
rv = InternalLoad(aURI, referrer, owner, inheritOwner, nsnull, nsnull,
|
||||
nsnull, loadType, nsnull);
|
||||
}
|
||||
|
||||
return rv;
|
||||
@ -1306,7 +1325,7 @@ NS_IMETHODIMP nsDocShell::Reload(PRInt32 aReloadType)
|
||||
else {
|
||||
//May be one of those <META> charset reloads in a composer or Messenger
|
||||
return InternalLoad(mCurrentURI, mReferrerURI, nsnull, PR_TRUE, nsnull,
|
||||
nsnull, type);
|
||||
nsnull, nsnull, type);
|
||||
|
||||
}
|
||||
#else
|
||||
@ -1316,7 +1335,7 @@ NS_IMETHODIMP nsDocShell::Reload(PRInt32 aReloadType)
|
||||
// there is no major difference between this one and the one inside #if 0
|
||||
|
||||
return InternalLoad(mCurrentURI, mReferrerURI, nsnull, PR_TRUE, nsnull,
|
||||
nsnull, type);
|
||||
nsnull, nsnull, type);
|
||||
#endif /* 0 */
|
||||
|
||||
|
||||
@ -1335,8 +1354,9 @@ NS_IMETHODIMP nsDocShell::Reload(PRInt32 aReloadType)
|
||||
|
||||
UpdateCurrentSessionHistory();
|
||||
|
||||
NS_ENSURE_SUCCESS(InternalLoad(mCurrentURI, mReferrerURI, nsnull, PR_TRUE, nsnull,
|
||||
nsnull, type), NS_ERROR_FAILURE);
|
||||
NS_ENSURE_SUCCESS(InternalLoad(mCurrentURI, mReferrerURI, nsnull, PR_TRUE,
|
||||
nsnull, nsnull, nsnull, type),
|
||||
NS_ERROR_FAILURE);
|
||||
return NS_OK;
|
||||
#endif /* SH_IN_FRAMES */
|
||||
|
||||
@ -2677,13 +2697,13 @@ NS_IMETHODIMP nsDocShell::SetupNewViewer(nsIContentViewer* aNewViewer)
|
||||
//*****************************************************************************
|
||||
#ifdef SH_IN_FRAMES
|
||||
NS_IMETHODIMP nsDocShell::InternalLoad(nsIURI* aURI, nsIURI* aReferrer,
|
||||
nsISupports* aOwner, PRBool aInheritOwner,
|
||||
const char* aWindowTarget, nsIInputStream* aPostData,
|
||||
nsISupports* aOwner, PRBool aInheritOwner, const char* aWindowTarget,
|
||||
nsIInputStream* aPostData, nsIInputStream* aHeadersData,
|
||||
nsDocShellInfoLoadType aLoadType, nsISHEntry * aSHEntry)
|
||||
#else
|
||||
NS_IMETHODIMP nsDocShell::InternalLoad(nsIURI* aURI, nsIURI* aReferrer,
|
||||
nsISupports* aOwner, PRBool aInheritOwner,
|
||||
const char* aWindowTarget, nsIInputStream* aPostData,
|
||||
nsISupports* aOwner, PRBool aInheritOwner, const char* aWindowTarget,
|
||||
nsIInputStream* aPostData, nsIInputStream* aHeadersData,
|
||||
nsDocShellInfoLoadType aLoadType)
|
||||
#endif
|
||||
{
|
||||
@ -2745,7 +2765,8 @@ NS_IMETHODIMP nsDocShell::InternalLoad(nsIURI* aURI, nsIURI* aReferrer,
|
||||
if(nsIDocShellLoadInfo::loadLink == aLoadType)
|
||||
loadCmd = nsIURILoader::viewUserClick;
|
||||
NS_ENSURE_SUCCESS(DoURILoad(aURI, aReferrer, aOwner, aInheritOwner,
|
||||
loadCmd, aWindowTarget, aPostData), NS_ERROR_FAILURE);
|
||||
loadCmd, aWindowTarget,
|
||||
aPostData, aHeadersData), NS_ERROR_FAILURE);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
@ -3008,8 +3029,9 @@ NS_IMETHODIMP nsDocShell::GetCurrentDocumentOwner(nsISupports** aOwner)
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsDocShell::DoURILoad(nsIURI* aURI, nsIURI* aReferrerURI,
|
||||
nsISupports* aOwner, PRBool aInheritOwner, nsURILoadCommand aLoadCmd,
|
||||
const char* aWindowTarget, nsIInputStream* aPostData)
|
||||
nsISupports* aOwner, PRBool aInheritOwner, nsURILoadCommand aLoadCmd,
|
||||
const char* aWindowTarget, nsIInputStream* aPostData,
|
||||
nsIInputStream *aHeadersData)
|
||||
{
|
||||
static const char jsSchemeName[] = "javascript";
|
||||
// if the load cmd is a user click....and we are supposed to try using
|
||||
@ -3072,6 +3094,10 @@ NS_IMETHODIMP nsDocShell::DoURILoad(nsIURI* aURI, nsIURI* aReferrerURI,
|
||||
httpChannel->SetRequestMethod(method);
|
||||
httpChannel->SetUploadStream(aPostData);
|
||||
}
|
||||
if (aHeadersData)
|
||||
{
|
||||
rv = AddHeadersToChannel(aHeadersData, httpChannel);
|
||||
}
|
||||
// Set the referrer explicitly
|
||||
if(aReferrerURI) // Referrer is currenly only set for link clicks here.
|
||||
httpChannel->SetReferrer(aReferrerURI,
|
||||
@ -3109,6 +3135,164 @@ NS_IMETHODIMP nsDocShell::DoURILoad(nsIURI* aURI, nsIURI* aReferrerURI,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
static NS_METHOD AHTC_WriteFunc(nsIInputStream* in,
|
||||
void* closure,
|
||||
const char* fromRawSegment,
|
||||
PRUint32 toOffset,
|
||||
PRUint32 count,
|
||||
PRUint32 *writeCount)
|
||||
{
|
||||
if (nsnull == writeCount || nsnull == closure ||
|
||||
nsnull == fromRawSegment || nsCRT::strlen(fromRawSegment) < 1) {
|
||||
return NS_BASE_STREAM_CLOSED;
|
||||
}
|
||||
|
||||
*writeCount = 0;
|
||||
char *headersBuf = *((char **)closure);
|
||||
// pointer to where we should start copying bytes from rawSegment
|
||||
char *pHeadersBuf = nsnull;
|
||||
PRUint32 headersBufLen;
|
||||
PRUint32 rawSegmentLen = nsCRT::strlen(fromRawSegment);
|
||||
|
||||
// if the buffer has no data yet
|
||||
if (!headersBuf) {
|
||||
headersBufLen = rawSegmentLen;
|
||||
pHeadersBuf = headersBuf = (char *) nsMemory::Alloc(headersBufLen + 1);
|
||||
if (!headersBuf) {
|
||||
return NS_BASE_STREAM_WOULD_BLOCK;
|
||||
}
|
||||
nsCRT::memset(headersBuf, nsnull, headersBufLen + 1);
|
||||
}
|
||||
else {
|
||||
// data has been read, reallocate
|
||||
// store a pointer to the old full buffer
|
||||
pHeadersBuf = headersBuf;
|
||||
|
||||
// create a new buffer
|
||||
headersBufLen = nsCRT::strlen(headersBuf);
|
||||
headersBuf = (char *) nsMemory::Alloc(rawSegmentLen+headersBufLen + 1);
|
||||
if (!headersBuf) {
|
||||
headersBuf = pHeadersBuf;
|
||||
pHeadersBuf = nsnull;
|
||||
return NS_BASE_STREAM_WOULD_BLOCK;
|
||||
}
|
||||
memset(headersBuf, nsnull, rawSegmentLen + headersBufLen + 1);
|
||||
// copy the old buffer to the beginning of the new buffer
|
||||
nsCRT::memcpy(headersBuf, pHeadersBuf, headersBufLen);
|
||||
// free the old buffer
|
||||
nsCRT::free(pHeadersBuf);
|
||||
// make the buffer pointer point to the writeable part
|
||||
// of the new buffer
|
||||
pHeadersBuf = headersBuf + headersBufLen;
|
||||
// increment the length of the buffer
|
||||
headersBufLen += rawSegmentLen;
|
||||
}
|
||||
|
||||
// at this point, pHeadersBuf points to where we should copy bits
|
||||
// from fromRawSegment.
|
||||
nsCRT::memcpy(pHeadersBuf, fromRawSegment, rawSegmentLen);
|
||||
// null termination
|
||||
headersBuf[headersBufLen] = nsnull;
|
||||
*((char **)closure) = headersBuf;
|
||||
*writeCount = rawSegmentLen;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsDocShell::AddHeadersToChannel(nsIInputStream *aHeadersData,
|
||||
nsIChannel *aGenericChannel)
|
||||
{
|
||||
if (nsnull == aHeadersData || nsnull == aGenericChannel) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
nsCOMPtr<nsIHTTPChannel> aChannel = do_QueryInterface(aGenericChannel);
|
||||
if (!aChannel) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
// used during the manipulation of the InputStream
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
PRUint32 available = 0;
|
||||
PRUint32 bytesRead;
|
||||
char *headersBuf = nsnull;
|
||||
|
||||
// used during the manipulation of the String from the InputStream
|
||||
nsCAutoString headersString;
|
||||
nsCAutoString oneHeader;
|
||||
nsCAutoString headerName;
|
||||
nsCAutoString headerValue;
|
||||
PRUint32 crlf = 0;
|
||||
PRUint32 colon = 0;
|
||||
nsIAtom *headerAtom;
|
||||
|
||||
//
|
||||
// Suck all the data out of the nsIInputStream into a char * buffer.
|
||||
//
|
||||
|
||||
rv = aHeadersData->Available(&available);
|
||||
if (NS_FAILED(rv) || available < 1) {
|
||||
goto AHTC_CLEANUP;
|
||||
}
|
||||
|
||||
do {
|
||||
aHeadersData->ReadSegments(AHTC_WriteFunc, &headersBuf, available,
|
||||
&bytesRead);
|
||||
rv = aHeadersData->Available(&available);
|
||||
if (NS_FAILED(rv)) {
|
||||
goto AHTC_CLEANUP;
|
||||
}
|
||||
} while(0 < available);
|
||||
|
||||
//
|
||||
// Turn the char * buffer into an nsString.
|
||||
//
|
||||
headersString = (const char *) headersBuf;
|
||||
|
||||
//
|
||||
// Iterate over the nsString: for each "\r\n" delimeted chunk,
|
||||
// add the value as a header to the nsIHTTPChannel
|
||||
//
|
||||
|
||||
while (true) {
|
||||
crlf = headersString.Find("\r\n", PR_TRUE);
|
||||
if (-1 == crlf) {
|
||||
rv = NS_OK;
|
||||
goto AHTC_CLEANUP;
|
||||
}
|
||||
headersString.Mid(oneHeader, 0, crlf);
|
||||
headersString.Cut(0, crlf + 2);
|
||||
oneHeader.StripWhitespace();
|
||||
colon = oneHeader.Find(":");
|
||||
if (-1 == colon) {
|
||||
rv = NS_ERROR_NULL_POINTER;
|
||||
goto AHTC_CLEANUP;
|
||||
}
|
||||
oneHeader.Left(headerName, colon);
|
||||
colon++;
|
||||
oneHeader.Mid(headerValue, colon, oneHeader.Length() - colon);
|
||||
headerAtom = NS_NewAtom((const char *) headerName);
|
||||
if (!headerAtom) {
|
||||
rv = NS_ERROR_NULL_POINTER;
|
||||
goto AHTC_CLEANUP;
|
||||
}
|
||||
|
||||
//
|
||||
// FINALLY: we can set the header!
|
||||
//
|
||||
|
||||
rv =aChannel->SetRequestHeader(headerAtom, (const char *) headerValue);
|
||||
if (NS_FAILED(rv)) {
|
||||
rv = NS_ERROR_NULL_POINTER;
|
||||
goto AHTC_CLEANUP;
|
||||
}
|
||||
}
|
||||
|
||||
AHTC_CLEANUP:
|
||||
nsMemory::Free((void *) headersBuf);
|
||||
headersBuf = nsnull;
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsDocShell::DoChannelLoad(nsIChannel *aChannel, nsURILoadCommand aLoadCmd,
|
||||
const char* aWindowTarget, nsIURILoader *aURILoader)
|
||||
{
|
||||
@ -3630,10 +3814,13 @@ NS_IMETHODIMP nsDocShell::LoadHistoryEntry(nsISHEntry* aEntry)
|
||||
|
||||
|
||||
#ifdef SH_IN_FRAMES
|
||||
NS_ENSURE_SUCCESS(InternalLoad(uri, nsnull, nsnull, PR_TRUE, nsnull, postData, aLoadType, aEntry),
|
||||
NS_ENSURE_SUCCESS(InternalLoad(uri, nsnull, nsnull, PR_TRUE, nsnull,
|
||||
postData, nsnull, aLoadType, aEntry),
|
||||
NS_ERROR_FAILURE);
|
||||
#else
|
||||
NS_ENSURE_SUCCESS(InternalLoad(uri, nsnull, nsnull, PR_TRUE, nsnull, postData, nsIDocShellLoadInfo::loadHistory),
|
||||
NS_ENSURE_SUCCESS(InternalLoad(uri, nsnull, nsnull, nsnull, PR_TRUE,
|
||||
postData, nsnull,
|
||||
nsIDocShellLoadInfo::loadHistory),
|
||||
NS_ERROR_FAILURE);
|
||||
#endif
|
||||
|
||||
|
@ -173,12 +173,14 @@ protected:
|
||||
|
||||
#ifdef SH_IN_FRAMES
|
||||
NS_IMETHOD InternalLoad(nsIURI* aURI, nsIURI* aReferrerURI,
|
||||
nsISupports* owner, PRBool inheritOwnerFromDocument, const char* aWindowTarget=nsnull,
|
||||
nsIInputStream* aPostData=nsnull, nsDocShellInfoLoadType aLoadType=nsIDocShellLoadInfo::loadNormal, nsISHEntry * aSHEntry = nsnull);
|
||||
nsISupports* owner, PRBool inheritOwnerFromDocument,
|
||||
const char* aWindowTarget=nsnull,
|
||||
nsIInputStream* aPostData=nsnull, nsIInputStream* aHeadersData=nsnull, nsDocShellInfoLoadType aLoadType=nsIDocShellLoadInfo::loadNormal, nsISHEntry * aSHEntry = nsnull);
|
||||
#else
|
||||
NS_IMETHOD InternalLoad(nsIURI* aURI, nsIURI* aReferrerURI,
|
||||
nsISupports* owner, PRBool inheritOwnerFromDocument, const char* aWindowTarget=nsnull,
|
||||
nsIInputStream* aPostData=nsnull, nsDocShellInfoLoadType aLoadType=nsIDocShellLoadInfo::loadNormal);
|
||||
nsISupports* owner, PRBool inheritOwnerFromDocument,
|
||||
const char* aWindowTarget=nsnull,
|
||||
nsIInputStream* aPostData=nsnull, nsIInputStream* aHeadersData=nsnull, nsDocShellInfoLoadType aLoadType=nsIDocShellLoadInfo::loadNormal);
|
||||
#endif
|
||||
|
||||
NS_IMETHOD CreateFixupURI(const PRUnichar* aStringURI, nsIURI** aURI);
|
||||
@ -188,8 +190,11 @@ protected:
|
||||
NS_IMETHOD KeywordURIFixup(const PRUnichar* aStringURI, nsIURI** aURI);
|
||||
NS_IMETHOD GetCurrentDocumentOwner(nsISupports** aOwner);
|
||||
NS_IMETHOD DoURILoad(nsIURI* aURI, nsIURI* aReferrer, nsISupports *aOwner,
|
||||
PRBool inheritOwnerFromDocument, nsURILoadCommand aLoadCmd, const char* aWindowTarget,
|
||||
nsIInputStream* aPostData);
|
||||
PRBool inheritOwnerFromDocument, nsURILoadCommand aLoadCmd,
|
||||
const char* aWindowTarget,
|
||||
nsIInputStream* aPostData, nsIInputStream* aHeadersData);
|
||||
NS_IMETHOD AddHeadersToChannel(nsIInputStream *aHeadersData,
|
||||
nsIChannel *aChannel);
|
||||
NS_IMETHOD DoChannelLoad(nsIChannel* aChannel, nsURILoadCommand aLoadCmd,
|
||||
const char* aWindowTarget, nsIURILoader *aURILoader);
|
||||
NS_IMETHOD ScrollIfAnchor(nsIURI* aURI, PRBool* aWasAnchor);
|
||||
@ -291,6 +296,7 @@ protected:
|
||||
nsIDocShellTreeItem* mParent; // Weak Reference
|
||||
nsIDocShellTreeOwner* mTreeOwner; // Weak Reference
|
||||
nsIChromeEventHandler* mChromeEventHandler; //Weak Reference
|
||||
|
||||
};
|
||||
|
||||
#endif /* nsDocShell_h__ */
|
||||
|
@ -724,18 +724,21 @@ nsWebShell::SetRendering(PRBool aRender)
|
||||
struct OnLinkClickEvent : public PLEvent {
|
||||
OnLinkClickEvent(nsWebShell* aHandler, nsIContent* aContent,
|
||||
nsLinkVerb aVerb, const PRUnichar* aURLSpec,
|
||||
const PRUnichar* aTargetSpec, nsIInputStream* aPostDataStream = 0);
|
||||
const PRUnichar* aTargetSpec, nsIInputStream* aPostDataStream = 0,
|
||||
nsIInputStream* aHeadersDataStream = 0);
|
||||
~OnLinkClickEvent();
|
||||
|
||||
void HandleEvent() {
|
||||
mHandler->HandleLinkClickEvent(mContent, mVerb, mURLSpec->GetUnicode(),
|
||||
mTargetSpec->GetUnicode(), mPostDataStream);
|
||||
mTargetSpec->GetUnicode(), mPostDataStream,
|
||||
mHeadersDataStream);
|
||||
}
|
||||
|
||||
nsWebShell* mHandler;
|
||||
nsString* mURLSpec;
|
||||
nsString* mTargetSpec;
|
||||
nsIInputStream* mPostDataStream;
|
||||
nsIInputStream* mHeadersDataStream;
|
||||
nsIContent* mContent;
|
||||
nsLinkVerb mVerb;
|
||||
};
|
||||
@ -755,7 +758,8 @@ OnLinkClickEvent::OnLinkClickEvent(nsWebShell* aHandler,
|
||||
nsLinkVerb aVerb,
|
||||
const PRUnichar* aURLSpec,
|
||||
const PRUnichar* aTargetSpec,
|
||||
nsIInputStream* aPostDataStream)
|
||||
nsIInputStream* aPostDataStream,
|
||||
nsIInputStream* aHeadersDataStream)
|
||||
{
|
||||
nsIEventQueue* eventQueue;
|
||||
|
||||
@ -765,6 +769,8 @@ OnLinkClickEvent::OnLinkClickEvent(nsWebShell* aHandler,
|
||||
mTargetSpec = new nsString(aTargetSpec);
|
||||
mPostDataStream = aPostDataStream;
|
||||
NS_IF_ADDREF(mPostDataStream);
|
||||
mHeadersDataStream = aHeadersDataStream;
|
||||
NS_IF_ADDREF(mHeadersDataStream);
|
||||
mContent = aContent;
|
||||
NS_IF_ADDREF(mContent);
|
||||
mVerb = aVerb;
|
||||
@ -783,6 +789,7 @@ OnLinkClickEvent::~OnLinkClickEvent()
|
||||
NS_IF_RELEASE(mContent);
|
||||
NS_IF_RELEASE(mHandler);
|
||||
NS_IF_RELEASE(mPostDataStream);
|
||||
NS_IF_RELEASE(mHeadersDataStream);
|
||||
if (nsnull != mURLSpec) delete mURLSpec;
|
||||
if (nsnull != mTargetSpec) delete mTargetSpec;
|
||||
|
||||
@ -795,13 +802,14 @@ nsWebShell::OnLinkClick(nsIContent* aContent,
|
||||
nsLinkVerb aVerb,
|
||||
const PRUnichar* aURLSpec,
|
||||
const PRUnichar* aTargetSpec,
|
||||
nsIInputStream* aPostDataStream)
|
||||
nsIInputStream* aPostDataStream,
|
||||
nsIInputStream* aHeadersDataStream)
|
||||
{
|
||||
OnLinkClickEvent* ev;
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
ev = new OnLinkClickEvent(this, aContent, aVerb, aURLSpec,
|
||||
aTargetSpec, aPostDataStream);
|
||||
aTargetSpec, aPostDataStream, aHeadersDataStream);
|
||||
if (nsnull == ev) {
|
||||
rv = NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
@ -820,7 +828,8 @@ nsWebShell::HandleLinkClickEvent(nsIContent *aContent,
|
||||
nsLinkVerb aVerb,
|
||||
const PRUnichar* aURLSpec,
|
||||
const PRUnichar* aTargetSpec,
|
||||
nsIInputStream* aPostDataStream)
|
||||
nsIInputStream* aPostDataStream,
|
||||
nsIInputStream* aHeadersDataStream)
|
||||
{
|
||||
nsCAutoString target; target.AssignWithConversion(aTargetSpec);
|
||||
|
||||
@ -839,9 +848,12 @@ nsWebShell::HandleLinkClickEvent(nsIContent *aContent,
|
||||
NS_NewURI(getter_AddRefs(uri), nsLiteralString(aURLSpec), nsnull);
|
||||
|
||||
#ifdef SH_IN_FRAMES
|
||||
InternalLoad(uri, mCurrentURI, nsnull, PR_TRUE, target, aPostDataStream, nsIDocShellLoadInfo::loadLink, nsnull);
|
||||
InternalLoad(uri, mCurrentURI, nsnull, PR_TRUE, target, aPostDataStream,
|
||||
aHeadersDataStream, nsIDocShellLoadInfo::loadLink, nsnull);
|
||||
#else
|
||||
InternalLoad(uri, mCurrentURI, nsnull, PR_TRUE, target, aPostDataStream, nsIDocShellLoadInfo::loadLink);
|
||||
InternalLoad(uri, mCurrentURI, nsnull, PR_TRUE, target,
|
||||
aPostDataStream, aHeadersDataStream,
|
||||
nsIDocShellLoadInfo::loadLink);
|
||||
#endif /* SH_IN_FRAMES */
|
||||
}
|
||||
break;
|
||||
|
@ -88,7 +88,8 @@ public:
|
||||
nsLinkVerb aVerb,
|
||||
const PRUnichar* aURLSpec,
|
||||
const PRUnichar* aTargetSpec,
|
||||
nsIInputStream* aPostDataStream = 0);
|
||||
nsIInputStream* aPostDataStream = 0,
|
||||
nsIInputStream* aHeadersDataStream = 0);
|
||||
NS_IMETHOD OnOverLink(nsIContent* aContent,
|
||||
const PRUnichar* aURLSpec,
|
||||
const PRUnichar* aTargetSpec);
|
||||
@ -111,7 +112,8 @@ public:
|
||||
nsLinkVerb aVerb,
|
||||
const PRUnichar* aURLSpec,
|
||||
const PRUnichar* aTargetSpec,
|
||||
nsIInputStream* aPostDataStream = 0);
|
||||
nsIInputStream* aPostDataStream = 0,
|
||||
nsIInputStream* aHeadersDataStream = 0);
|
||||
|
||||
static nsEventStatus PR_CALLBACK HandleEvent(nsGUIEvent *aEvent);
|
||||
|
||||
|
@ -89,7 +89,8 @@ public:
|
||||
NS_IMETHOD CreateWidget(void);
|
||||
|
||||
NS_IMETHOD GetURL(const char *aURL, const char *aTarget, void *aPostData,
|
||||
PRUint32 aPostDataLen);
|
||||
PRUint32 aPostDataLen, void *aHeadersData,
|
||||
PRUint32 aHeadersDataLen);
|
||||
|
||||
NS_IMETHOD ShowStatus(const char *aStatusMsg);
|
||||
|
||||
@ -1671,7 +1672,8 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetInstance(nsIPluginInstance *&aInstance)
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsPluginInstanceOwner::GetURL(const char *aURL, const char *aTarget, void *aPostData, PRUint32 aPostDataLen)
|
||||
NS_IMETHODIMP nsPluginInstanceOwner::GetURL(const char *aURL, const char *aTarget, void *aPostData, PRUint32 aPostDataLen, void *aHeadersData,
|
||||
PRUint32 aHeadersDataLen)
|
||||
{
|
||||
nsISupports *container;
|
||||
nsILinkHandler *lh;
|
||||
@ -1710,6 +1712,7 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetURL(const char *aURL, const char *aTarge
|
||||
mOwner->GetContent(&content);
|
||||
nsCOMPtr<nsISupports> result = nsnull;
|
||||
nsCOMPtr<nsIInputStream> postDataStream = nsnull;
|
||||
nsCOMPtr<nsIInputStream> headersDataStream = nsnull;
|
||||
if (aPostData) {
|
||||
NS_NewByteInputStream(getter_AddRefs(result),
|
||||
(const char *) aPostData, aPostDataLen);
|
||||
@ -1717,18 +1720,17 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetURL(const char *aURL, const char *aTarge
|
||||
postDataStream = do_QueryInterface(result, &rv);
|
||||
}
|
||||
}
|
||||
if (postDataStream) {
|
||||
rv = lh->OnLinkClick(content, eLinkVerb_Replace,
|
||||
fullurl.GetUnicode(),
|
||||
unitarget.GetUnicode(),
|
||||
postDataStream);
|
||||
}
|
||||
else {
|
||||
rv = lh->OnLinkClick(content, eLinkVerb_Replace,
|
||||
fullurl.GetUnicode(),
|
||||
unitarget.GetUnicode(),
|
||||
nsnull);
|
||||
if (aHeadersData) {
|
||||
NS_NewByteInputStream(getter_AddRefs(result),
|
||||
(const char *) aHeadersData, aHeadersDataLen);
|
||||
if (result) {
|
||||
headersDataStream = do_QueryInterface(result, &rv);
|
||||
}
|
||||
}
|
||||
rv = lh->OnLinkClick(content, eLinkVerb_Replace,
|
||||
fullurl.GetUnicode(),
|
||||
unitarget.GetUnicode(),
|
||||
postDataStream, headersDataStream);
|
||||
NS_IF_RELEASE(content);
|
||||
}
|
||||
NS_RELEASE(lh);
|
||||
|
@ -89,7 +89,8 @@ public:
|
||||
NS_IMETHOD CreateWidget(void);
|
||||
|
||||
NS_IMETHOD GetURL(const char *aURL, const char *aTarget, void *aPostData,
|
||||
PRUint32 aPostDataLen);
|
||||
PRUint32 aPostDataLen, void *aHeadersData,
|
||||
PRUint32 aHeadersDataLen);
|
||||
|
||||
NS_IMETHOD ShowStatus(const char *aStatusMsg);
|
||||
|
||||
@ -1671,7 +1672,8 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetInstance(nsIPluginInstance *&aInstance)
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsPluginInstanceOwner::GetURL(const char *aURL, const char *aTarget, void *aPostData, PRUint32 aPostDataLen)
|
||||
NS_IMETHODIMP nsPluginInstanceOwner::GetURL(const char *aURL, const char *aTarget, void *aPostData, PRUint32 aPostDataLen, void *aHeadersData,
|
||||
PRUint32 aHeadersDataLen)
|
||||
{
|
||||
nsISupports *container;
|
||||
nsILinkHandler *lh;
|
||||
@ -1710,6 +1712,7 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetURL(const char *aURL, const char *aTarge
|
||||
mOwner->GetContent(&content);
|
||||
nsCOMPtr<nsISupports> result = nsnull;
|
||||
nsCOMPtr<nsIInputStream> postDataStream = nsnull;
|
||||
nsCOMPtr<nsIInputStream> headersDataStream = nsnull;
|
||||
if (aPostData) {
|
||||
NS_NewByteInputStream(getter_AddRefs(result),
|
||||
(const char *) aPostData, aPostDataLen);
|
||||
@ -1717,18 +1720,17 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetURL(const char *aURL, const char *aTarge
|
||||
postDataStream = do_QueryInterface(result, &rv);
|
||||
}
|
||||
}
|
||||
if (postDataStream) {
|
||||
rv = lh->OnLinkClick(content, eLinkVerb_Replace,
|
||||
fullurl.GetUnicode(),
|
||||
unitarget.GetUnicode(),
|
||||
postDataStream);
|
||||
}
|
||||
else {
|
||||
rv = lh->OnLinkClick(content, eLinkVerb_Replace,
|
||||
fullurl.GetUnicode(),
|
||||
unitarget.GetUnicode(),
|
||||
nsnull);
|
||||
if (aHeadersData) {
|
||||
NS_NewByteInputStream(getter_AddRefs(result),
|
||||
(const char *) aHeadersData, aHeadersDataLen);
|
||||
if (result) {
|
||||
headersDataStream = do_QueryInterface(result, &rv);
|
||||
}
|
||||
}
|
||||
rv = lh->OnLinkClick(content, eLinkVerb_Replace,
|
||||
fullurl.GetUnicode(),
|
||||
unitarget.GetUnicode(),
|
||||
postDataStream, headersDataStream);
|
||||
NS_IF_RELEASE(content);
|
||||
}
|
||||
NS_RELEASE(lh);
|
||||
|
@ -81,8 +81,9 @@ public:
|
||||
*
|
||||
*/
|
||||
NS_IMETHOD
|
||||
GetURL(const char *aURL, const char *aTarget, void *aPostData,
|
||||
PRUint32 aPostDataLen) = 0;
|
||||
GetURL(const char *aURL, const char *aTarget,
|
||||
void *aPostData, PRUint32 aPostDataLen,
|
||||
void *aHeadersData, PRUint32 aHeadersDataLen) = 0;
|
||||
|
||||
/**
|
||||
* Show a status message in the host environment.
|
||||
|
@ -1484,7 +1484,7 @@ NS_IMETHODIMP nsPluginHostImpl::GetURL(nsISupports* pluginInst,
|
||||
else if (0 == PL_strcmp(target, "_current"))
|
||||
target = "_self";
|
||||
|
||||
rv = owner->GetURL(url, target, nsnull, 0);
|
||||
rv = owner->GetURL(url, target, nsnull, 0, nsnull, nsnull);
|
||||
}
|
||||
|
||||
NS_RELEASE(peer);
|
||||
@ -1549,7 +1549,8 @@ NS_IMETHODIMP nsPluginHostImpl::PostURL(nsISupports* pluginInst,
|
||||
else if (0 == PL_strcmp(target, "_current"))
|
||||
target = "_self";
|
||||
}
|
||||
rv = owner->GetURL(url, target, (void*)postData, postDataLen);
|
||||
rv = owner->GetURL(url, target, (void*)postData, postDataLen,
|
||||
(void*) postHeaders, postHeadersLength);
|
||||
}
|
||||
|
||||
NS_RELEASE(peer);
|
||||
|
@ -270,7 +270,7 @@ nsPluginStreamToFile::Write(const char* aBuf, PRUint32 aCount, PRUint32 *aWriteC
|
||||
PRUint32 actualCount;
|
||||
mFileThing->Write(aBuf, aCount, &actualCount);
|
||||
mFileThing->Close();
|
||||
mOwner->GetURL(mFileURL.GetAsString(), mTarget, nsnull, 0);
|
||||
mOwner->GetURL(mFileURL.GetAsString(), mTarget, nsnull, 0, nsnull, 0);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
@ -320,7 +320,7 @@ nsPluginStreamToFile::SetObserver(nsIOutputStreamObserver * aObserver)
|
||||
NS_IMETHODIMP
|
||||
nsPluginStreamToFile::Close(void)
|
||||
{
|
||||
mOwner->GetURL(mFileURL.GetAsString(), mTarget, nsnull, 0);
|
||||
mOwner->GetURL(mFileURL.GetAsString(), mTarget, nsnull, 0, nsnull, 0);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -100,8 +100,9 @@ public:
|
||||
|
||||
NS_IMETHOD CreateWidget(void);
|
||||
|
||||
NS_IMETHOD GetURL(const char *aURL, const char *aTarget, void *aPostData,
|
||||
PRUint32 aPostDataLen);
|
||||
NS_IMETHOD GetURL(const char *aURL, const char *aTarget,
|
||||
void *aPostData, PRUint32 aPostDataLen,
|
||||
void *aHeadersData, PRUint32 aHeadersDataLen);
|
||||
|
||||
NS_IMETHOD ShowStatus(const char *aStatusMsg);
|
||||
|
||||
@ -816,7 +817,8 @@ NS_IMETHODIMP pluginInstanceOwner :: CreateWidget(void)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP pluginInstanceOwner :: GetURL(const char *aURL, const char *aTarget, void *aPostData, PRUint32 aPostDataLen)
|
||||
NS_IMETHODIMP pluginInstanceOwner :: GetURL(const char *aURL, const char *aTarget, void *aPostData, PRUint32 aPostDataLen, void *aHeadersData,
|
||||
PRUint32 aHeadersDataLen)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
|
@ -81,8 +81,9 @@ public:
|
||||
*
|
||||
*/
|
||||
NS_IMETHOD
|
||||
GetURL(const char *aURL, const char *aTarget, void *aPostData,
|
||||
PRUint32 aPostDataLen) = 0;
|
||||
GetURL(const char *aURL, const char *aTarget,
|
||||
void *aPostData, PRUint32 aPostDataLen,
|
||||
void *aHeadersData, PRUint32 aHeadersDataLen) = 0;
|
||||
|
||||
/**
|
||||
* Show a status message in the host environment.
|
||||
|
@ -1484,7 +1484,7 @@ NS_IMETHODIMP nsPluginHostImpl::GetURL(nsISupports* pluginInst,
|
||||
else if (0 == PL_strcmp(target, "_current"))
|
||||
target = "_self";
|
||||
|
||||
rv = owner->GetURL(url, target, nsnull, 0);
|
||||
rv = owner->GetURL(url, target, nsnull, 0, nsnull, nsnull);
|
||||
}
|
||||
|
||||
NS_RELEASE(peer);
|
||||
@ -1549,7 +1549,8 @@ NS_IMETHODIMP nsPluginHostImpl::PostURL(nsISupports* pluginInst,
|
||||
else if (0 == PL_strcmp(target, "_current"))
|
||||
target = "_self";
|
||||
}
|
||||
rv = owner->GetURL(url, target, (void*)postData, postDataLen);
|
||||
rv = owner->GetURL(url, target, (void*)postData, postDataLen,
|
||||
(void*) postHeaders, postHeadersLength);
|
||||
}
|
||||
|
||||
NS_RELEASE(peer);
|
||||
|
@ -270,7 +270,7 @@ nsPluginStreamToFile::Write(const char* aBuf, PRUint32 aCount, PRUint32 *aWriteC
|
||||
PRUint32 actualCount;
|
||||
mFileThing->Write(aBuf, aCount, &actualCount);
|
||||
mFileThing->Close();
|
||||
mOwner->GetURL(mFileURL.GetAsString(), mTarget, nsnull, 0);
|
||||
mOwner->GetURL(mFileURL.GetAsString(), mTarget, nsnull, 0, nsnull, 0);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
@ -320,7 +320,7 @@ nsPluginStreamToFile::SetObserver(nsIOutputStreamObserver * aObserver)
|
||||
NS_IMETHODIMP
|
||||
nsPluginStreamToFile::Close(void)
|
||||
{
|
||||
mOwner->GetURL(mFileURL.GetAsString(), mTarget, nsnull, 0);
|
||||
mOwner->GetURL(mFileURL.GetAsString(), mTarget, nsnull, 0, nsnull, 0);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -100,8 +100,9 @@ public:
|
||||
|
||||
NS_IMETHOD CreateWidget(void);
|
||||
|
||||
NS_IMETHOD GetURL(const char *aURL, const char *aTarget, void *aPostData,
|
||||
PRUint32 aPostDataLen);
|
||||
NS_IMETHOD GetURL(const char *aURL, const char *aTarget,
|
||||
void *aPostData, PRUint32 aPostDataLen,
|
||||
void *aHeadersData, PRUint32 aHeadersDataLen);
|
||||
|
||||
NS_IMETHOD ShowStatus(const char *aStatusMsg);
|
||||
|
||||
@ -816,7 +817,8 @@ NS_IMETHODIMP pluginInstanceOwner :: CreateWidget(void)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP pluginInstanceOwner :: GetURL(const char *aURL, const char *aTarget, void *aPostData, PRUint32 aPostDataLen)
|
||||
NS_IMETHODIMP pluginInstanceOwner :: GetURL(const char *aURL, const char *aTarget, void *aPostData, PRUint32 aPostDataLen, void *aHeadersData,
|
||||
PRUint32 aHeadersDataLen)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
|
@ -69,7 +69,8 @@ public:
|
||||
nsLinkVerb aVerb,
|
||||
const PRUnichar* aURLSpec,
|
||||
const PRUnichar* aTargetSpec,
|
||||
nsIInputStream* aPostDataStream = 0) = 0;
|
||||
nsIInputStream* aPostDataStream = 0,
|
||||
nsIInputStream* aHeadersDataStream = 0) = 0;
|
||||
|
||||
/**
|
||||
* Process a mouse-over a link. aContent is the
|
||||
|
Loading…
Reference in New Issue
Block a user