Prevent double submission of forms (bug 72906). r=darin@netscape.com, r=alexsavulov@netscape.com, sr=alecf@netscape.com, a=asa

This commit is contained in:
jkeiser@netscape.com
2002-03-13 06:08:56 +00:00
parent b1686866bf
commit 2e0703757a
11 changed files with 309 additions and 102 deletions

View File

@@ -455,17 +455,18 @@ struct OnLinkClickEvent : public PLEvent {
~OnLinkClickEvent();
void HandleEvent() {
mHandler->HandleLinkClickEvent(mContent, mVerb, mURLSpec->get(),
mTargetSpec->get(), mPostDataStream,
mHeadersDataStream);
mHandler->OnLinkClickSync(mContent, mVerb, mURLSpec.get(),
mTargetSpec.get(), mPostDataStream,
mHeadersDataStream,
nsnull, nsnull);
}
nsWebShell* mHandler;
nsString* mURLSpec;
nsString* mTargetSpec;
nsIInputStream* mPostDataStream;
nsIInputStream* mHeadersDataStream;
nsIContent* mContent;
nsWebShell* mHandler;
nsString mURLSpec;
nsString mTargetSpec;
nsCOMPtr<nsIInputStream> mPostDataStream;
nsCOMPtr<nsIInputStream> mHeadersDataStream;
nsCOMPtr<nsIContent> mContent;
nsLinkVerb mVerb;
};
@@ -489,14 +490,11 @@ OnLinkClickEvent::OnLinkClickEvent(nsWebShell* aHandler,
{
mHandler = aHandler;
NS_ADDREF(aHandler);
mURLSpec = new nsString(aURLSpec);
mTargetSpec = new nsString(aTargetSpec);
mURLSpec.Assign(aURLSpec);
mTargetSpec.Assign(aTargetSpec);
mPostDataStream = aPostDataStream;
NS_IF_ADDREF(mPostDataStream);
mHeadersDataStream = aHeadersDataStream;
NS_IF_ADDREF(mHeadersDataStream);
mContent = aContent;
NS_IF_ADDREF(mContent);
mVerb = aVerb;
PL_InitEvent(this, nsnull,
@@ -512,13 +510,7 @@ OnLinkClickEvent::OnLinkClickEvent(nsWebShell* aHandler,
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;
}
//----------------------------------------
@@ -554,17 +546,27 @@ nsWebShell::GetEventQueue(nsIEventQueue **aQueue)
return *aQueue ? NS_OK : NS_ERROR_FAILURE;
}
void
nsWebShell::HandleLinkClickEvent(nsIContent *aContent,
nsLinkVerb aVerb,
const PRUnichar* aURLSpec,
const PRUnichar* aTargetSpec,
nsIInputStream* aPostDataStream,
nsIInputStream* aHeadersDataStream)
NS_IMETHODIMP
nsWebShell::OnLinkClickSync(nsIContent *aContent,
nsLinkVerb aVerb,
const PRUnichar* aURLSpec,
const PRUnichar* aTargetSpec,
nsIInputStream* aPostDataStream,
nsIInputStream* aHeadersDataStream,
nsIDocShell** aDocShell,
nsIRequest** aRequest)
{
nsresult rv;
nsAutoString target(aTargetSpec);
// Initialize the DocShell / Request
if (aDocShell) {
*aDocShell = nsnull;
}
if (aRequest) {
*aRequest = nsnull;
}
switch(aVerb) {
case eLinkVerb_New:
target.Assign(NS_LITERAL_STRING("_blank"));
@@ -599,19 +601,21 @@ nsWebShell::HandleLinkClickEvent(nsIContent *aContent,
listener->OnStartURIOpen(uri, &abort);
}
}
return;
return rv;
}
rv = InternalLoad(uri, // New URI
mCurrentURI, // Referer URI
nsnull, // No onwer
PR_TRUE, // Inherit owner from document
target.get(), // Window target
aPostDataStream, // Post data stream
aHeadersDataStream, // Headers stream
LOAD_LINK, // Load type
nsnull, // No SHEntry
PR_TRUE); // first party site
return InternalLoad(uri, // New URI
mCurrentURI, // Referer URI
nsnull, // No onwer
PR_TRUE, // Inherit owner from document
target.get(), // Window target
aPostDataStream, // Post data stream
aHeadersDataStream, // Headers stream
LOAD_LINK, // Load type
nsnull, // No SHEntry
PR_TRUE, // first party site
aDocShell, // DocShell out-param
aRequest); // Request out-param
}
break;
case eLinkVerb_Embed:
@@ -619,6 +623,7 @@ nsWebShell::HandleLinkClickEvent(nsIContent *aContent,
// in NS 4.x
default:
NS_ABORT_IF_FALSE(0,"unexpected link verb");
return NS_ERROR_UNEXPECTED;
}
}
@@ -997,7 +1002,9 @@ nsresult nsWebShell::EndPageLoad(nsIWebProgress *aProgress,
nsnull, // No headers stream
LOAD_RELOAD_BYPASS_PROXY_AND_CACHE,// Load type
nsnull, // No SHEntry
PR_TRUE); // first party site
PR_TRUE, // first party site
nsnull, // No nsIDocShell
nsnull); // No nsIRequest
}
}
}