diff --git a/mozilla/docshell/base/nsDSWebProgressListener.cpp b/mozilla/docshell/base/nsDSWebProgressListener.cpp index c3ec6841a49..7e2d56076e8 100644 --- a/mozilla/docshell/base/nsDSWebProgressListener.cpp +++ b/mozilla/docshell/base/nsDSWebProgressListener.cpp @@ -124,6 +124,15 @@ NS_IMETHODIMP nsDSWebProgressListener::OnLocationChange(nsIURI* aLocation) return NS_OK; } +NS_IMETHODIMP +nsDSWebProgressListener::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 state) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + //***************************************************************************** // nsDSWebProgressListener: Helpers //***************************************************************************** diff --git a/mozilla/docshell/base/nsDocShell.cpp b/mozilla/docshell/base/nsDocShell.cpp index f850ef354fc..38bbce59c26 100644 --- a/mozilla/docshell/base/nsDocShell.cpp +++ b/mozilla/docshell/base/nsDocShell.cpp @@ -44,6 +44,7 @@ #include "nsIPrompt.h" #include "nsTextFormatter.h" #include "nsIHTTPEventSink.h" +#include "nsISecurityEventSink.h" #include "nsScriptSecurityManager.h" // Local Includes @@ -236,7 +237,7 @@ NS_IMETHODIMP nsDocShell::GetInterface(const nsIID& aIID, void** aSink) return NS_NOINTERFACE; } else if (aIID.Equals(NS_GET_IID(nsIProgressEventSink)) || aIID.Equals(NS_GET_IID(nsIHTTPEventSink)) || - aIID.Equals(NS_GET_IID(nsIWebProgress))) + aIID.Equals(NS_GET_IID(nsIWebProgress)) || aIID.Equals(NS_GET_IID(nsISecurityEventSink)) ) { nsCOMPtr uriLoader(do_GetService(NS_URI_LOADER_CONTRACTID)); NS_ENSURE_TRUE(uriLoader, NS_ERROR_FAILURE); @@ -2414,6 +2415,15 @@ nsDocShell::OnStatusChange(nsIWebProgress* aWebProgress, return NS_OK; } +NS_IMETHODIMP +nsDocShell::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 state) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + //***************************************************************************** // nsDocShell: Content Viewer Management //***************************************************************************** diff --git a/mozilla/embedding/base/nsEmbedAPI.cpp b/mozilla/embedding/base/nsEmbedAPI.cpp index a29e19970f3..fdebee1051c 100644 --- a/mozilla/embedding/base/nsEmbedAPI.cpp +++ b/mozilla/embedding/base/nsEmbedAPI.cpp @@ -187,12 +187,14 @@ nsresult NS_TermEmbedding() } sInitCounter = 0; - nsCOMPtr eventQService; - sServiceManager->GetService(NS_EVENTQUEUESERVICE_CONTRACTID, - nsIEventQueueService::GetIID(), - getter_AddRefs(eventQService)); - if (eventQService) - eventQService->DestroyThreadEventQueue(); + { + nsCOMPtr eventQService; + sServiceManager->GetService(NS_EVENTQUEUESERVICE_CONTRACTID, + nsIEventQueueService::GetIID(), + getter_AddRefs(eventQService)); + if (eventQService) + eventQService->DestroyThreadEventQueue(); + } NS_RELEASE(sServiceManager); diff --git a/mozilla/embedding/browser/activex/src/control/WebBrowserContainer.cpp b/mozilla/embedding/browser/activex/src/control/WebBrowserContainer.cpp index 858436e9126..7a6df091d75 100644 --- a/mozilla/embedding/browser/activex/src/control/WebBrowserContainer.cpp +++ b/mozilla/embedding/browser/activex/src/control/WebBrowserContainer.cpp @@ -103,6 +103,16 @@ NS_IMETHODIMP CWebBrowserContainer::Alert(const PRUnichar* dialogTitle, const PR return NS_OK; } +/* boolean confirmCheck (in wstring text, in wstring checkMsg, out boolean checkValue); */ +NS_IMETHODIMP CWebBrowserContainer::AlertCheck(const PRUnichar* dialogTitle, const PRUnichar *text, const PRUnichar *checkMsg, PRBool *checkValue) +{ +// TODO show dialog with check box + USES_CONVERSION; + m_pOwner->MessageBox(W2T(text), W2T(dialogTitle), MB_OK | MB_ICONEXCLAMATION); + return NS_OK; +} + + /* boolean confirm (in wstring text); */ NS_IMETHODIMP CWebBrowserContainer::Confirm(const PRUnichar* dialogTitle, const PRUnichar *text, PRBool *_retval) { @@ -282,6 +292,15 @@ CWebBrowserContainer::OnStatusChange(nsIWebProgress* aWebProgress, return NS_OK; } +NS_IMETHODIMP +CWebBrowserContainer::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 state) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + /////////////////////////////////////////////////////////////////////////////// // nsIURIContentListener diff --git a/mozilla/embedding/browser/gtk/src/gtkmozembed.cpp b/mozilla/embedding/browser/gtk/src/gtkmozembed.cpp index 5bf15821f31..dbcf5596967 100644 --- a/mozilla/embedding/browser/gtk/src/gtkmozembed.cpp +++ b/mozilla/embedding/browser/gtk/src/gtkmozembed.cpp @@ -1805,6 +1805,18 @@ GtkMozEmbedContentProgress::OnStatusChange(nsIWebProgress *aWebProgress, return NS_OK; } + + + +NS_IMETHODIMP +GtkMozEmbedContentProgress::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 state) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + GtkMozEmbedChromeProgress::GtkMozEmbedChromeProgress(void) { NS_INIT_REFCNT(); @@ -1870,6 +1882,15 @@ GtkMozEmbedChromeProgress::OnStatusChange(nsIWebProgress *aWebProgress, return NS_OK; } + +NS_IMETHODIMP +GtkMozEmbedChromeProgress::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 state) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + GtkMozEmbedChromeEventListener::GtkMozEmbedChromeEventListener(void) { NS_INIT_REFCNT(); diff --git a/mozilla/embedding/browser/photon/src/MozEmbedChrome.cpp b/mozilla/embedding/browser/photon/src/MozEmbedChrome.cpp index 56a5550e3ad..8a4456b6048 100644 --- a/mozilla/embedding/browser/photon/src/MozEmbedChrome.cpp +++ b/mozilla/embedding/browser/photon/src/MozEmbedChrome.cpp @@ -705,6 +705,16 @@ MozEmbedChrome::OnStatusChange(nsIWebProgress* aWebProgress, return NS_OK; } + + +NS_IMETHODIMP +MozEmbedChrome::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 state) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + // nsIBaseWindow interface NS_IMETHODIMP MozEmbedChrome::InitWindow(nativeWindow parentNativeWindow, diff --git a/mozilla/embedding/browser/powerplant/source/CWebBrowserChrome.cpp b/mozilla/embedding/browser/powerplant/source/CWebBrowserChrome.cpp index 48d5682f935..e07715de906 100644 --- a/mozilla/embedding/browser/powerplant/source/CWebBrowserChrome.cpp +++ b/mozilla/embedding/browser/powerplant/source/CWebBrowserChrome.cpp @@ -295,6 +295,17 @@ CWebBrowserChrome::OnStatusChange(nsIWebProgress* aWebProgress, return NS_OK; } + + +NS_IMETHODIMP +CWebBrowserChrome::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 state) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + //***************************************************************************** // CWebBrowserChrome::nsIBaseWindow //***************************************************************************** @@ -536,6 +547,14 @@ NS_IMETHODIMP CWebBrowserChrome::Alert(const PRUnichar *dialogTitle, const PRUni return NS_OK; } +NS_IMETHODIMP CWebBrowserChrome::AlertCheck(const PRUnichar *dialogTitle, + const PRUnichar *text, + const PRUnichar *checkMsg, + PRBool *checkValue) +{ + return NS_OK; +} + NS_IMETHODIMP CWebBrowserChrome::Confirm(const PRUnichar *dialogTitle, const PRUnichar *text, PRBool *_retval) { NS_ENSURE_ARG_POINTER(_retval); diff --git a/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.cpp b/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.cpp index 84d174e81fc..b4c59194009 100644 --- a/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.cpp +++ b/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.cpp @@ -524,6 +524,15 @@ nsDocShellTreeOwner::OnStatusChange(nsIWebProgress* aWebProgress, return mOwnerProgressListener->OnStatusChange(aWebProgress, aRequest, aStatus, aMessage); } +NS_IMETHODIMP +nsDocShellTreeOwner::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 state) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + //***************************************************************************** // nsDocShellTreeOwner: Helpers //***************************************************************************** diff --git a/mozilla/embedding/tests/gtkEmbed/WebBrowserChrome.cpp b/mozilla/embedding/tests/gtkEmbed/WebBrowserChrome.cpp index 382ac72bdd9..7cc7d55ed02 100644 --- a/mozilla/embedding/tests/gtkEmbed/WebBrowserChrome.cpp +++ b/mozilla/embedding/tests/gtkEmbed/WebBrowserChrome.cpp @@ -31,7 +31,7 @@ #include "nsIChannel.h" #include "nsCWebBrowser.h" #include "nsWidgetsCID.h" - +#include "nsIWebBrowserSetup.h" #include "WebBrowserChrome.h" nsVoidArray WebBrowserChrome::sBrowserList; @@ -129,7 +129,7 @@ NS_IMETHODIMP WebBrowserChrome::CreateBrowserWindow(PRUint32 chromeMask, mWebBrowser->SetContainerWindow(NS_STATIC_CAST(nsIWebBrowserChrome*, this)); nsCOMPtr dsti = do_QueryInterface(mWebBrowser); - dsti->SetItemType(nsIDocShellTreeItem::typeChromeWrapper); + dsti->SetItemType(nsIDocShellTreeItem::typeContentWrapper); mBaseWindow = do_QueryInterface(mWebBrowser); @@ -143,6 +143,10 @@ NS_IMETHODIMP WebBrowserChrome::CreateBrowserWindow(PRUint32 chromeMask, 0, 0, 450, 450); mBaseWindow->Create(); + // Configure what the web browser can and cannot do + nsCOMPtr webBrowserAsSetup(do_QueryInterface(mWebBrowser)); + webBrowserAsSetup->SetProperty(nsIWebBrowserSetup::SETUP_ALLOW_PLUGINS, PR_FALSE); + NS_IF_ADDREF(*aWebBrowser = mWebBrowser); return NS_OK; } @@ -235,6 +239,17 @@ WebBrowserChrome::OnStatusChange(nsIWebProgress* aWebProgress, return NS_OK; } + + +NS_IMETHODIMP +WebBrowserChrome::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 state) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + //***************************************************************************** // WebBrowserChrome::nsIBaseWindow //***************************************************************************** diff --git a/mozilla/embedding/tests/winEmbed/WebBrowserChrome.cpp b/mozilla/embedding/tests/winEmbed/WebBrowserChrome.cpp index 9845140198c..2dc4b0518ef 100644 --- a/mozilla/embedding/tests/winEmbed/WebBrowserChrome.cpp +++ b/mozilla/embedding/tests/winEmbed/WebBrowserChrome.cpp @@ -234,6 +234,17 @@ WebBrowserChrome::OnStatusChange(nsIWebProgress* aWebProgress, return NS_OK; } + + +NS_IMETHODIMP +WebBrowserChrome::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 state) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + //***************************************************************************** // WebBrowserChrome::nsIBaseWindow //***************************************************************************** diff --git a/mozilla/extensions/psm-glue/src/nsSecureBrowserUIImpl.cpp b/mozilla/extensions/psm-glue/src/nsSecureBrowserUIImpl.cpp index c6154ba7d55..f123d5c3a92 100644 --- a/mozilla/extensions/psm-glue/src/nsSecureBrowserUIImpl.cpp +++ b/mozilla/extensions/psm-glue/src/nsSecureBrowserUIImpl.cpp @@ -55,6 +55,8 @@ #include "prmem.h" +#include "nsISecurityEventSink.h" + #include "nsINetSupportDialogService.h" #include "nsIPrompt.h" #include "nsICommonDialogs.h" @@ -297,16 +299,21 @@ nsSecureBrowserUIImpl::OnStateChange(nsIWebProgress* aWebProgress, { nsresult res = NS_OK; - if (aRequest == nsnull || !mSecurityButton || !mPref) + if (aRequest == nsnull || !mPref) return NS_ERROR_NULL_POINTER; // Get the channel from the request... // If the request is not network based, then ignore it. - nsCOMPtr channel; - channel = do_QueryInterface(aRequest, &res); + nsCOMPtr channel = do_QueryInterface(aRequest, &res); if (NS_FAILED(res)) return NS_OK; + nsCOMPtr requestor; + nsCOMPtr eventSink; + channel->GetNotificationCallbacks(getter_AddRefs(requestor)); + if (requestor) + eventSink = do_GetInterface(requestor); + nsCOMPtr loadingURI; channel->GetURI(getter_AddRefs(loadingURI)); @@ -324,9 +331,13 @@ nsSecureBrowserUIImpl::OnStateChange(nsIWebProgress* aWebProgress, PR_FREEIF(mLastPSMStatus); mLastPSMStatus = nsnull; mIsSecureDocument = mMixContentAlertShown = mIsDocumentBroken = PR_FALSE; - mSecurityButton->RemoveAttribute( NS_ConvertASCIItoUCS2("level") ); - - res = CheckProtocolContextSwitch( loadingURI, mCurrentURI); + if (mSecurityButton) + mSecurityButton->RemoveAttribute( NS_ConvertASCIItoUCS2("level") ); + if (eventSink) + eventSink->OnSecurityChange(aRequest, (STATE_IS_INSECURE) ); + + + res = CheckProtocolContextSwitch(eventSink, aRequest, loadingURI, mCurrentURI); return res; } @@ -350,7 +361,16 @@ nsSecureBrowserUIImpl::OnStateChange(nsIWebProgress* aWebProgress, if (NS_SUCCEEDED(res)) { PR_LOG(gSecureDocLog, PR_LOG_DEBUG, ("SecureUI:%p: Icon set to lock\n", this)); - res = mSecurityButton->SetAttribute( NS_ConvertASCIItoUCS2("level"), NS_ConvertASCIItoUCS2("high") ); + + if (mSecurityButton) + res = mSecurityButton->SetAttribute( NS_ConvertASCIItoUCS2("level"), NS_ConvertASCIItoUCS2("high") ); + + if (eventSink) + eventSink->OnSecurityChange(aRequest, (STATE_IS_SECURE)); + + if (!mSecurityButton) + return res; + // Do we really need to look at res here? What happens if there's an error? // We should still set the certificate authority display. CMTItem caName; @@ -403,7 +423,8 @@ nsSecureBrowserUIImpl::OnStateChange(nsIWebProgress* aWebProgress, PR_LOG(gSecureDocLog, PR_LOG_DEBUG, ("SecureUI:%p: Icon set to broken\n", this)); mIsDocumentBroken = PR_TRUE; - SetBrokenLockIcon(); + SetBrokenLockIcon(eventSink, aRequest); + return res; } @@ -421,7 +442,7 @@ nsSecureBrowserUIImpl::OnStateChange(nsIWebProgress* aWebProgress, if ((aProgressStateFlags & STATE_START) && (aProgressStateFlags & STATE_IS_NETWORK)) { // check to see if we are going to mix content. - return CheckMixedContext(loadingURI); + return CheckMixedContext(eventSink, aRequest, loadingURI); } // A URL has finished loading... @@ -441,7 +462,7 @@ nsSecureBrowserUIImpl::OnStateChange(nsIWebProgress* aWebProgress, } PR_LOG(gSecureDocLog, PR_LOG_DEBUG, ("SecureUI:%p: OnStateChange - Icon set to broken\n", this)); - SetBrokenLockIcon(); + SetBrokenLockIcon(eventSink, aRequest); mIsDocumentBroken = PR_TRUE; } @@ -474,6 +495,32 @@ nsSecureBrowserUIImpl::OnStatusChange(nsIWebProgress* aWebProgress, return NS_OK; } +NS_IMETHODIMP +nsSecureBrowserUIImpl::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 state) +{ + // I am the guy that created this notification - do nothing + +#if defined(DEBUG_dougt) + nsCOMPtr channel = do_QueryInterface(aRequest); + if (!channel) + return NS_ERROR_FAILURE; + + nsCOMPtr aURI; + channel->GetURI(getter_AddRefs(aURI)); + + nsXPIDLCString temp; + aURI->GetSpec(getter_Copies(temp)); + printf("OnSecurityChange: (%x) %s\n", state, (const char*)temp); +#endif + + + + + return NS_OK; +} + nsresult nsSecureBrowserUIImpl::IsURLHTTPS(nsIURI* aURL, PRBool* value) { @@ -504,8 +551,8 @@ nsSecureBrowserUIImpl::IsURLfromPSM(nsIURI* aURL, PRBool* value) return NS_OK; PCMT_CONTROL control; - char* host; - aURL->GetHost(&host); + nsXPIDLCString host; + aURL->GetHost(getter_Copies(host)); if (host == nsnull) return NS_ERROR_NULL_POINTER; @@ -522,19 +569,17 @@ nsSecureBrowserUIImpl::IsURLfromPSM(nsIURI* aURL, PRBool* value) } // Get the password - char* password; - aURL->GetPassword(&password); + nsXPIDLCString password; + aURL->GetPassword(getter_Copies(password)); if (password == nsnull) { return NS_ERROR_NULL_POINTER; } if (PL_strncasecmp(password, (const char*)control->nonce.data, control->nonce.len) == 0) { - nsMemory::Free(password); *value = PR_TRUE; } } - nsMemory::Free(host); return NS_OK; } @@ -555,7 +600,7 @@ void nsSecureBrowserUIImpl::GetBundleString(const nsString& name, nsString &outS } nsresult -nsSecureBrowserUIImpl::CheckProtocolContextSwitch( nsIURI* newURI, nsIURI* oldURI) +nsSecureBrowserUIImpl::CheckProtocolContextSwitch( nsISecurityEventSink* eventSink, nsIRequest* aRequest, nsIURI* newURI, nsIURI* oldURI) { nsresult res; PRBool isNewSchemeSecure, isOldSchemeSecure, boolpref; @@ -570,15 +615,17 @@ nsSecureBrowserUIImpl::CheckProtocolContextSwitch( nsIURI* newURI, nsIURI* oldUR // Check to see if we are going from a secure page to and insecure page if ( !isNewSchemeSecure && isOldSchemeSecure) { - SetBrokenLockIcon(PR_TRUE); + SetBrokenLockIcon(eventSink, aRequest, PR_TRUE); + if ((mPref->GetBoolPref(LEAVE_SITE_PREF, &boolpref) != 0)) boolpref = PR_TRUE; if (boolpref) { - NS_WITH_SERVICE(nsICommonDialogs, dialog, kCommonDialogsCID, &res); - if (NS_FAILED(res)) - return res; + nsCOMPtr dialog; + mWindow->GetPrompter(getter_AddRefs(dialog)); + if (!dialog) + return NS_ERROR_FAILURE; nsAutoString windowTitle, message, dontShowAgain; @@ -587,12 +634,13 @@ nsSecureBrowserUIImpl::CheckProtocolContextSwitch( nsIURI* newURI, nsIURI* oldUR GetBundleString(NS_ConvertASCIItoUCS2("DontShowAgain"), dontShowAgain); PRBool outCheckValue = PR_TRUE; - dialog->AlertCheck(mWindow, - windowTitle.GetUnicode(), - message.GetUnicode(), - dontShowAgain.GetUnicode(), - &outCheckValue); - + res = dialog->AlertCheck(windowTitle.GetUnicode(), + message.GetUnicode(), + dontShowAgain.GetUnicode(), + &outCheckValue); + if (NS_FAILED(res)) + return res; + if (!outCheckValue) { mPref->SetBoolPref(LEAVE_SITE_PREF, PR_FALSE); NS_WITH_SERVICE(nsIPSMComponent, psm, PSM_COMPONENT_CONTRACTID, &res); @@ -607,12 +655,12 @@ nsSecureBrowserUIImpl::CheckProtocolContextSwitch( nsIURI* newURI, nsIURI* oldUR { if ((mPref->GetBoolPref(ENTER_SITE_PREF, &boolpref) != 0)) boolpref = PR_TRUE; - if (boolpref) { - NS_WITH_SERVICE(nsICommonDialogs, dialog, kCommonDialogsCID, &res); - if (NS_FAILED(res)) - return res; + nsCOMPtr dialog; + mWindow->GetPrompter(getter_AddRefs(dialog)); + if (!dialog) + return NS_ERROR_FAILURE; nsAutoString windowTitle, message, dontShowAgain; @@ -621,12 +669,13 @@ nsSecureBrowserUIImpl::CheckProtocolContextSwitch( nsIURI* newURI, nsIURI* oldUR GetBundleString(NS_ConvertASCIItoUCS2("DontShowAgain"), dontShowAgain); PRBool outCheckValue = PR_TRUE; - dialog->AlertCheck(mWindow, - windowTitle.GetUnicode(), - message.GetUnicode(), - dontShowAgain.GetUnicode(), - &outCheckValue); - + res = dialog->AlertCheck(windowTitle.GetUnicode(), + message.GetUnicode(), + dontShowAgain.GetUnicode(), + &outCheckValue); + if (NS_FAILED(res)) + return res; + if (!outCheckValue) { mPref->SetBoolPref(ENTER_SITE_PREF, PR_FALSE); @@ -644,7 +693,7 @@ nsSecureBrowserUIImpl::CheckProtocolContextSwitch( nsIURI* newURI, nsIURI* oldUR nsresult -nsSecureBrowserUIImpl::CheckMixedContext(nsIURI* nextURI) +nsSecureBrowserUIImpl::CheckMixedContext(nsISecurityEventSink *eventSink, nsIRequest* aRequest, nsIURI* nextURI) { PRBool secure; @@ -655,8 +704,8 @@ nsSecureBrowserUIImpl::CheckMixedContext(nsIURI* nextURI) if (!secure && mIsSecureDocument) { mIsDocumentBroken = PR_TRUE; - SetBrokenLockIcon(); - + SetBrokenLockIcon(eventSink, aRequest); + if (!mPref) return NS_ERROR_NULL_POINTER; PRBool boolpref; @@ -665,9 +714,10 @@ nsSecureBrowserUIImpl::CheckMixedContext(nsIURI* nextURI) if (boolpref && !mMixContentAlertShown) { - NS_WITH_SERVICE(nsICommonDialogs, dialog, kCommonDialogsCID, &rv); - if (NS_FAILED(rv)) - return rv; + nsCOMPtr dialog; + mWindow->GetPrompter(getter_AddRefs(dialog)); + if (!dialog) + return NS_ERROR_FAILURE; nsAutoString windowTitle, message, dontShowAgain; @@ -677,11 +727,13 @@ nsSecureBrowserUIImpl::CheckMixedContext(nsIURI* nextURI) PRBool outCheckValue = PR_TRUE; - dialog->AlertCheck(mWindow, - windowTitle.GetUnicode(), - message.GetUnicode(), - dontShowAgain.GetUnicode(), - &outCheckValue); + rv = dialog->AlertCheck(windowTitle.GetUnicode(), + message.GetUnicode(), + dontShowAgain.GetUnicode(), + &outCheckValue); + if (NS_FAILED(rv)) + return rv; + if (!outCheckValue) { mPref->SetBoolPref(MIXEDCONTENT_PREF, PR_FALSE); @@ -730,9 +782,10 @@ nsSecureBrowserUIImpl::CheckPost(nsIURI *actionURL, PRBool *okayToPost) mPref->GetBoolPref(INSECURE_SUBMIT_PREF, &boolpref); if (boolpref) { - NS_WITH_SERVICE(nsICommonDialogs, dialog, kCommonDialogsCID, &rv); - if (NS_FAILED(rv)) - return rv; + nsCOMPtr dialog; + mWindow->GetPrompter(getter_AddRefs(dialog)); + if (!dialog) + return NS_ERROR_FAILURE; nsAutoString windowTitle, message, dontShowAgain; @@ -747,13 +800,14 @@ nsSecureBrowserUIImpl::CheckPost(nsIURI *actionURL, PRBool *okayToPost) } PRBool outCheckValue = PR_TRUE; - dialog->ConfirmCheck(mWindow, - windowTitle.GetUnicode(), - message.GetUnicode(), - dontShowAgain.GetUnicode(), - &outCheckValue, - okayToPost); - + rv = dialog->ConfirmCheck(windowTitle.GetUnicode(), + message.GetUnicode(), + dontShowAgain.GetUnicode(), + &outCheckValue, + okayToPost); + if (NS_FAILED(rv)) + return rv; + if (!outCheckValue) { mPref->SetBoolPref(INSECURE_SUBMIT_PREF, PR_FALSE); NS_WITH_SERVICE(nsIPSMComponent, psm, PSM_COMPONENT_CONTRACTID, &rv); @@ -769,15 +823,32 @@ nsSecureBrowserUIImpl::CheckPost(nsIURI *actionURL, PRBool *okayToPost) } nsresult -nsSecureBrowserUIImpl::SetBrokenLockIcon(PRBool removeValue) +nsSecureBrowserUIImpl::SetBrokenLockIcon(nsISecurityEventSink* eventSink, nsIRequest* aRequest, PRBool removeValue) { nsresult rv = NS_OK; if (removeValue) - rv = mSecurityButton->RemoveAttribute( NS_ConvertASCIItoUCS2("level") ); + { + if (mSecurityButton) + rv = mSecurityButton->RemoveAttribute( NS_ConvertASCIItoUCS2("level") ); + if (eventSink) + (void) eventSink->OnSecurityChange(aRequest, (STATE_IS_INSECURE)); + } else - rv = mSecurityButton->SetAttribute( NS_ConvertASCIItoUCS2("level"), NS_ConvertASCIItoUCS2("broken") ); + { + if (mSecurityButton) + rv = mSecurityButton->SetAttribute( NS_ConvertASCIItoUCS2("level"), NS_ConvertASCIItoUCS2("broken") ); + if (eventSink) + (void) eventSink->OnSecurityChange(aRequest, (STATE_IS_BROKEN)); + } + nsAutoString tooltiptext; GetBundleString(NS_ConvertASCIItoUCS2("SecurityButtonTooltipText"), tooltiptext); - rv = mSecurityButton->SetAttribute( NS_ConvertASCIItoUCS2("tooltiptext"), tooltiptext ); + if (mSecurityButton) + rv = mSecurityButton->SetAttribute( NS_ConvertASCIItoUCS2("tooltiptext"), tooltiptext ); return rv; } + + + + + diff --git a/mozilla/extensions/psm-glue/src/nsSecureBrowserUIImpl.h b/mozilla/extensions/psm-glue/src/nsSecureBrowserUIImpl.h index 44f68f5f06d..66e418b5c71 100644 --- a/mozilla/extensions/psm-glue/src/nsSecureBrowserUIImpl.h +++ b/mozilla/extensions/psm-glue/src/nsSecureBrowserUIImpl.h @@ -39,6 +39,7 @@ #include "nsIWebProgressListener.h" #include "nsIFormSubmitObserver.h" #include "nsIURI.h" +#include "nsISecurityEventSink.h" #define NS_SECURE_BROWSER_DOCOBSERVER_CLASSNAME "Mozilla Secure Browser Doc Observer" @@ -61,7 +62,7 @@ public: static NS_METHOD Create(nsISupports *aOuter, REFNSIID aIID, void **aResult); - NS_DECL_ISUPPORTS + NS_DECL_ISUPPORTS NS_DECL_NSIWEBPROGRESSLISTENER NS_DECL_NSSECUREBROWSERUI @@ -91,12 +92,12 @@ protected: void GetBundleString(const nsString& name, nsString &outString); - nsresult CheckProtocolContextSwitch( nsIURI* newURI, nsIURI* oldURI); - nsresult CheckMixedContext(nsIURI* nextURI); + nsresult CheckProtocolContextSwitch( nsISecurityEventSink* sink, nsIRequest* request, nsIURI* newURI, nsIURI* oldURI); + nsresult CheckMixedContext( nsISecurityEventSink* sink, nsIRequest* request, nsIURI* nextURI); nsresult CheckPost(nsIURI *actionURL, PRBool *okayToPost); nsresult IsURLHTTPS(nsIURI* aURL, PRBool *value); nsresult IsURLfromPSM(nsIURI* aURL, PRBool *value); - nsresult SetBrokenLockIcon(PRBool removeValue = PR_FALSE); + nsresult SetBrokenLockIcon(nsISecurityEventSink* sink, nsIRequest* request, PRBool removeValue = PR_FALSE); }; diff --git a/mozilla/extensions/wallet/src/nsWalletService.cpp b/mozilla/extensions/wallet/src/nsWalletService.cpp index 9caa87aca17..017422d110b 100644 --- a/mozilla/extensions/wallet/src/nsWalletService.cpp +++ b/mozilla/extensions/wallet/src/nsWalletService.cpp @@ -430,6 +430,15 @@ nsSingleSignOnPrompt::Alert(const PRUnichar *dialogTitle, const PRUnichar *text) return mPrompt->Alert(dialogTitle, text); } +NS_IMETHODIMP +nsSingleSignOnPrompt::AlertCheck(const PRUnichar *dialogTitle, + const PRUnichar *text, + const PRUnichar *checkMsg, + PRBool *checkValue) +{ + return mPrompt->AlertCheck(dialogTitle, text, checkMsg, checkValue); +} + NS_IMETHODIMP nsSingleSignOnPrompt::Confirm(const PRUnichar *dialogTitle, const PRUnichar *text, PRBool *_retval) { diff --git a/mozilla/mailnews/base/src/nsMsgStatusFeedback.cpp b/mozilla/mailnews/base/src/nsMsgStatusFeedback.cpp index c830ee81246..aaf6f935472 100644 --- a/mozilla/mailnews/base/src/nsMsgStatusFeedback.cpp +++ b/mozilla/mailnews/base/src/nsMsgStatusFeedback.cpp @@ -154,6 +154,16 @@ nsMsgStatusFeedback::OnStatusChange(nsIWebProgress* aWebProgress, return NS_OK; } + +NS_IMETHODIMP +nsMsgStatusFeedback::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 state) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + NS_IMETHODIMP nsMsgStatusFeedback::ShowStatusString(const PRUnichar *status) { diff --git a/mozilla/mailnews/compose/src/nsURLFetcher.cpp b/mozilla/mailnews/compose/src/nsURLFetcher.cpp index 8b6124d8a66..fad11eb9124 100644 --- a/mozilla/mailnews/compose/src/nsURLFetcher.cpp +++ b/mozilla/mailnews/compose/src/nsURLFetcher.cpp @@ -426,3 +426,13 @@ nsURLFetcher::OnStatusChange(nsIWebProgress* aWebProgress, return NS_OK; } + + +NS_IMETHODIMP +nsURLFetcher::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 state) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + diff --git a/mozilla/netwerk/base/public/MANIFEST_IDL b/mozilla/netwerk/base/public/MANIFEST_IDL index ee5d07d2d46..a80092cfdff 100644 --- a/mozilla/netwerk/base/public/MANIFEST_IDL +++ b/mozilla/netwerk/base/public/MANIFEST_IDL @@ -21,3 +21,9 @@ nsIURI.idl nsIURL.idl nsIURLParser.idl nsIWebFilters.idl +nsISecurityEventSink.idl + + + + + diff --git a/mozilla/netwerk/base/public/Makefile.in b/mozilla/netwerk/base/public/Makefile.in index 36d4696b905..9b81f00014b 100644 --- a/mozilla/netwerk/base/public/Makefile.in +++ b/mozilla/netwerk/base/public/Makefile.in @@ -57,6 +57,7 @@ XPIDLSRCS = \ nsIURL.idl \ nsIURLParser.idl \ nsIWebFilters.idl \ + nsISecurityEventSink.idl \ $(NULL) EXPORTS = \ diff --git a/mozilla/netwerk/base/public/makefile.win b/mozilla/netwerk/base/public/makefile.win index ce6e8782cf2..841b76c01ab 100644 --- a/mozilla/netwerk/base/public/makefile.win +++ b/mozilla/netwerk/base/public/makefile.win @@ -60,6 +60,7 @@ XPIDLSRCS = \ .\nsIURL.idl \ .\nsIURLParser.idl \ .\nsIWebFilters.idl \ + .\nsISecurityEventSink.idl \ $(NULL) include <$(DEPTH)/config/rules.mak> diff --git a/mozilla/netwerk/base/public/nsIPrompt.idl b/mozilla/netwerk/base/public/nsIPrompt.idl index bb388544879..5f92531f749 100644 --- a/mozilla/netwerk/base/public/nsIPrompt.idl +++ b/mozilla/netwerk/base/public/nsIPrompt.idl @@ -31,6 +31,14 @@ interface nsIPrompt : nsISupports void alert(in wstring dialogTitle, in wstring text); + /** + * Puts up an alert dialog with an OK button. + */ + void alertCheck(in wstring dialogTitle, + in wstring text, + in wstring checkMsg, + out boolean checkValue); + /** * Puts up a dialog with OK and Cancel buttons. * @return true for OK, false for Cancel diff --git a/mozilla/netwerk/base/public/nsISecurityEventSink.idl b/mozilla/netwerk/base/public/nsISecurityEventSink.idl index ac341b4e222..fcdb3745bca 100644 --- a/mozilla/netwerk/base/public/nsISecurityEventSink.idl +++ b/mozilla/netwerk/base/public/nsISecurityEventSink.idl @@ -29,9 +29,10 @@ interface nsISecurityEventSink : nsISupports /** * Fired when a security change occurs due to page transitions, - * or end document load. This interface will only be called if - * a security package is installed (eg Netscape Personal Security - * Manager). State flags are in nsIWebProgressListener.idl + * or end document load. This interface should be called by + * a security package (eg Netscape Personal Security Manager) + * to notify nwIWebProgressListeners that security state has + * changed. State flags are in nsIWebProgressListener.idl */ void onSecurityChange(in nsISupports i_Context, in long state); diff --git a/mozilla/uriloader/base/nsDocLoader.cpp b/mozilla/uriloader/base/nsDocLoader.cpp index f253b94897f..b2df95805c0 100644 --- a/mozilla/uriloader/base/nsDocLoader.cpp +++ b/mozilla/uriloader/base/nsDocLoader.cpp @@ -199,6 +199,7 @@ NS_INTERFACE_MAP_BEGIN(nsDocLoaderImpl) NS_INTERFACE_MAP_ENTRY(nsIProgressEventSink) NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor) NS_INTERFACE_MAP_ENTRY(nsIHTTPEventSink) + NS_INTERFACE_MAP_ENTRY(nsISecurityEventSink) NS_INTERFACE_MAP_END @@ -1248,6 +1249,7 @@ void nsDocLoaderImpl::FireOnStateChange(nsIWebProgress *aProgress, } + NS_IMETHODIMP nsDocLoaderImpl::FireOnLocationChange(nsIWebProgress* aWebProgress, nsIRequest* aRequest, @@ -1255,6 +1257,7 @@ nsDocLoaderImpl::FireOnLocationChange(nsIWebProgress* aWebProgress, { PRInt32 count; + count = mListenerList.Count(); while (count > 0) { nsIWebProgressListener *listener; @@ -1400,6 +1403,40 @@ NS_IMETHODIMP nsDocLoaderImpl::OnRedirect(nsISupports * aContext, nsIURI * aNewL } +NS_IMETHODIMP nsDocLoaderImpl::OnSecurityChange(nsISupports * aContext, + PRInt32 state) +{ + // + // Fire progress notifications out to any registered nsIWebProgressListeners. + // + + nsCOMPtr request = do_QueryInterface(aContext); + nsIWebProgress* webProgress = NS_STATIC_CAST(nsIWebProgress*, this); + + PRInt32 count = mListenerList.Count(); + while (count > 0) { + nsIWebProgressListener *listener; + + listener = NS_STATIC_CAST(nsIWebProgressListener*, + mListenerList.ElementAt(--count)); + + NS_ASSERTION(listener, "NULL listener found in list."); + if (! listener) { + continue; + } + listener->OnSecurityChange(webProgress, request, state); + } + + // Pass the notification up to the parent... + if (mParent) { + mParent->OnSecurityChange(aContext, state); + } + return NS_OK; +} + + + + #if 0 void nsDocLoaderImpl::DumpChannelInfo() { diff --git a/mozilla/uriloader/base/nsDocLoader.h b/mozilla/uriloader/base/nsDocLoader.h index 492bb2ade6c..3b613aea61f 100644 --- a/mozilla/uriloader/base/nsDocLoader.h +++ b/mozilla/uriloader/base/nsDocLoader.h @@ -39,6 +39,7 @@ #include "nsIProgressEventSink.h" #include "nsIInterfaceRequestor.h" #include "nsIHTTPEventSink.h" +#include "nsISecurityEventSink.h" #include "nsCOMPtr.h" struct nsChannelInfo; @@ -53,7 +54,8 @@ class nsDocLoaderImpl : public nsIDocumentLoader, public nsIProgressEventSink, public nsIWebProgress, public nsIInterfaceRequestor, - public nsIHTTPEventSink + public nsIHTTPEventSink, + public nsISecurityEventSink { public: @@ -70,6 +72,8 @@ public: // nsIProgressEventSink NS_DECL_NSIPROGRESSEVENTSINK + NS_DECL_NSISECURITYEVENTSINK + // nsIStreamObserver methods: (for observing the load group) NS_DECL_NSISTREAMOBSERVER NS_DECL_NSIWEBPROGRESS diff --git a/mozilla/uriloader/base/nsIWebProgressListener.idl b/mozilla/uriloader/base/nsIWebProgressListener.idl index 45772ea4fd4..a3b80cc92a4 100644 --- a/mozilla/uriloader/base/nsIWebProgressListener.idl +++ b/mozilla/uriloader/base/nsIWebProgressListener.idl @@ -55,6 +55,18 @@ interface nsIWebProgressListener : nsISupports const unsigned long STATE_IS_DOCUMENT = 0x00020000; const unsigned long STATE_IS_NETWORK = 0x00040000; const unsigned long STATE_IS_WINDOW = 0x00080000; + + /** + * Security state bits + */ + const unsigned long STATE_IS_INSECURE = 0x00000000; + const unsigned long STATE_IS_BROKEN = 0x00000001; + const unsigned long STATE_IS_SECURE = 0x00000002; + + const unsigned long STATE_SECURE_HIGH = 0x00000000; + const unsigned long STATE_SECURE_MED = 0x00010000; + const unsigned long STATE_SECURE_LOW = 0x00020000; + /** * Notification indicating the state has changed for one of the requests @@ -123,4 +135,21 @@ interface nsIWebProgressListener : nsISupports in nsIRequest aRequest, in nsresult aStatus, in wstring aMessage); + + + /** + * Notification called for security progress. + * This method will be called on security transitions (eg HTTP -> HTTPS, + * HTTPS -> HTTP, FOO -> https) and after document load completion. + * It might also be called if an error occurs during network loading. + * + * These notification will only occur if a security package is installed. + */ + + + void onSecurityChange(in nsIWebProgress aWebProgress, + in nsIRequest aRequest, + in long state); }; + + diff --git a/mozilla/webshell/tests/viewer/nsBrowserWindow.cpp b/mozilla/webshell/tests/viewer/nsBrowserWindow.cpp index ce638184427..8104ee9abf4 100644 --- a/mozilla/webshell/tests/viewer/nsBrowserWindow.cpp +++ b/mozilla/webshell/tests/viewer/nsBrowserWindow.cpp @@ -2203,6 +2203,19 @@ nsBrowserWindow::Alert(const PRUnichar *dialogTitle, const PRUnichar *text) return NS_OK; } +NS_IMETHODIMP +nsBrowserWindow::AlertCheck(const PRUnichar *dialogTitle, + const PRUnichar *text, + const PRUnichar *checkMsg, + PRBool *checkValue) +{ + nsCAutoString str; str.AssignWithConversion(text); + printf("%cBrowser Window AlertCheck: %s\n", '\007', str.GetBuffer()); + + return NS_OK; +} + + NS_IMETHODIMP nsBrowserWindow::Confirm(const PRUnichar *dialogTitle, const PRUnichar *text, diff --git a/mozilla/webshell/tests/viewer/nsWebBrowserChrome.cpp b/mozilla/webshell/tests/viewer/nsWebBrowserChrome.cpp index 1af37720c9f..ff3736cc11c 100644 --- a/mozilla/webshell/tests/viewer/nsWebBrowserChrome.cpp +++ b/mozilla/webshell/tests/viewer/nsWebBrowserChrome.cpp @@ -471,6 +471,14 @@ nsWebBrowserChrome::OnStatusChange(nsIWebProgress* aWebProgress, return NS_OK; } +NS_IMETHODIMP +nsWebBrowserChrome::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 state) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + //***************************************************************************** // nsWebBrowserChrome: Helpers //***************************************************************************** diff --git a/mozilla/xpcom/tests/Makefile.in b/mozilla/xpcom/tests/Makefile.in index a5903977fc3..a1edb0a5247 100644 --- a/mozilla/xpcom/tests/Makefile.in +++ b/mozilla/xpcom/tests/Makefile.in @@ -34,6 +34,7 @@ TESTS_NOT_COMPILING = \ CPPSRCS = \ nsIFileTest.cpp \ + nsIFileEnumerator.cpp \ TestServMgr.cpp \ TestFactory.cpp \ TestCOMPtr.cpp \ diff --git a/mozilla/xpcom/tests/nsIFileEnumerator.cpp b/mozilla/xpcom/tests/nsIFileEnumerator.cpp index 9d0f46156ee..eaae7515333 100644 --- a/mozilla/xpcom/tests/nsIFileEnumerator.cpp +++ b/mozilla/xpcom/tests/nsIFileEnumerator.cpp @@ -32,16 +32,16 @@ PRBool LoopInDir(nsILocalFile* file) if(NS_FAILED(file->GetLeafName(&name))) return PR_FALSE; - //printf("%s\t", name); PRBool isDir; - + printf("%s\n", name); rv = file->IsDirectory(&isDir); if (isDir == PR_TRUE) { - nsCOMPtr lfile = do_QueryInterface(file); - LoopInDir(lfile); + nsCOMPtr lfile = do_QueryInterface(file); + LoopInDir(lfile); } - nsMemory::Free(name); + + nsMemory::Free(name); } return PR_TRUE; } diff --git a/mozilla/xpfe/appshell/src/nsChromeTreeOwner.cpp b/mozilla/xpfe/appshell/src/nsChromeTreeOwner.cpp index 297ca78f49e..e58ddd13f92 100644 --- a/mozilla/xpfe/appshell/src/nsChromeTreeOwner.cpp +++ b/mozilla/xpfe/appshell/src/nsChromeTreeOwner.cpp @@ -360,6 +360,16 @@ nsChromeTreeOwner::OnStatusChange(nsIWebProgress* aWebProgress, return NS_OK; } + + +NS_IMETHODIMP +nsChromeTreeOwner::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 state) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + //***************************************************************************** // nsChromeTreeOwner: Helpers //***************************************************************************** diff --git a/mozilla/xpfe/appshell/src/nsNetSupportDialog.cpp b/mozilla/xpfe/appshell/src/nsNetSupportDialog.cpp index 4c8d3d72012..989ed39fc0a 100644 --- a/mozilla/xpfe/appshell/src/nsNetSupportDialog.cpp +++ b/mozilla/xpfe/appshell/src/nsNetSupportDialog.cpp @@ -75,6 +75,21 @@ NS_IMETHODIMP nsNetSupportDialog::Alert(const PRUnichar *dialogTitle, const PRUn return rv; } +NS_IMETHODIMP nsNetSupportDialog::AlertCheck(const PRUnichar *dialogTitle, + const PRUnichar *text, + const PRUnichar *checkMsg, + PRBool *checkValue) +{ + + nsresult rv = NS_ERROR_FAILURE; + nsCOMPtr< nsIPrompt> dialogService; + if( GetNSIPrompt( dialogService ) ) + rv = dialogService->AlertCheck(dialogTitle, text, checkMsg, checkValue); + + return rv; +} + + NS_IMETHODIMP nsNetSupportDialog::Confirm(const PRUnichar *dialogTitle, const PRUnichar *text, PRBool *returnValue) { diff --git a/mozilla/xpfe/appshell/src/nsWebShellWindow.cpp b/mozilla/xpfe/appshell/src/nsWebShellWindow.cpp index fd91dfa0b5c..9e492fe0ab4 100644 --- a/mozilla/xpfe/appshell/src/nsWebShellWindow.cpp +++ b/mozilla/xpfe/appshell/src/nsWebShellWindow.cpp @@ -1846,6 +1846,30 @@ nsDOMWindowPrompter::Alert(const PRUnichar* dialogTitle, return rv; } +NS_IMETHODIMP +nsDOMWindowPrompter::AlertCheck(const PRUnichar* dialogTitle, + const PRUnichar* text, + const PRUnichar* checkMsg, + PRBool *checkValue) +{ + nsresult rv; + + if (dialogTitle == nsnull) { + PRUnichar *title; + rv = GetLocaleString(NS_ConvertASCIItoUCS2("Alert"), &title); + if (NS_FAILED(rv)) return NS_ERROR_FAILURE; + + rv = mCommonDialogs->AlertCheck(mDOMWindow, title, text, checkMsg, checkValue); + nsCRT::free(title); + title = nsnull; + } + else { + rv = mCommonDialogs->AlertCheck(mDOMWindow, dialogTitle, text, checkMsg, checkValue); + } + + return rv; +} + NS_IMETHODIMP nsDOMWindowPrompter::Confirm(const PRUnichar* dialogTitle, const PRUnichar* text, diff --git a/mozilla/xpfe/browser/src/nsBrowserInstance.cpp b/mozilla/xpfe/browser/src/nsBrowserInstance.cpp index 44ab6705d3f..969af0bf3dd 100644 --- a/mozilla/xpfe/browser/src/nsBrowserInstance.cpp +++ b/mozilla/xpfe/browser/src/nsBrowserInstance.cpp @@ -1963,6 +1963,16 @@ nsBrowserInstance::OnStatusChange(nsIWebProgress* aWebProgress, return NS_OK; } + +NS_IMETHODIMP +nsBrowserInstance::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 state) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + //***************************************************************************** // nsBrowserInstance: Helpers //*****************************************************************************