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.


git-svn-id: svn://10.0.0.236/trunk@78153 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
edburns%acm.org
2000-09-05 19:03:56 +00:00
parent e85ef40d72
commit f4ed6ebe07
15 changed files with 295 additions and 75 deletions

View File

@@ -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;