зеркало из https://github.com/mozilla/gecko-dev.git
29754. fixed a couple warnings, removed FTP dependence on xul window for prompting, and started using the nsIPrompt interface.
This commit is contained in:
Родитель
4e80826107
Коммит
6be78f079f
|
@ -49,9 +49,9 @@ nsFTPChannel::nsFTPChannel()
|
|||
mSourceOffset(0),
|
||||
mAmount(0),
|
||||
mContentLength(-1),
|
||||
mLock(nsnull),
|
||||
mBufferSegmentSize(0),
|
||||
mBufferMaxSize(0),
|
||||
mLock(nsnull),
|
||||
mStatus(NS_OK)
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
|
@ -254,7 +254,8 @@ nsFTPChannel::OpenInputStream(nsIInputStream **result)
|
|||
if (!thread) return NS_ERROR_OUT_OF_MEMORY;
|
||||
mConnThread = thread;
|
||||
|
||||
rv = thread->Init(mHandler, this, mBufferSegmentSize, mBufferMaxSize);
|
||||
rv = thread->Init(mHandler, this, mPrompter,
|
||||
mBufferSegmentSize, mBufferMaxSize);
|
||||
mHandler = 0;
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
|
@ -327,7 +328,8 @@ nsFTPChannel::AsyncRead(nsIStreamListener *listener, nsISupports *ctxt)
|
|||
if (!thread) return NS_ERROR_OUT_OF_MEMORY;
|
||||
mConnThread = thread;
|
||||
|
||||
rv = thread->Init(mHandler, this, mBufferSegmentSize, mBufferMaxSize);
|
||||
rv = thread->Init(mHandler, this, mPrompter,
|
||||
mBufferSegmentSize, mBufferMaxSize);
|
||||
mHandler = nsnull;
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
|
@ -365,7 +367,8 @@ nsFTPChannel::AsyncWrite(nsIInputStream *fromStream,
|
|||
if (!thread) return NS_ERROR_OUT_OF_MEMORY;
|
||||
mConnThread = thread;
|
||||
|
||||
rv = thread->Init(mHandler, this, mBufferSegmentSize, mBufferMaxSize);
|
||||
rv = thread->Init(mHandler, this, mPrompter,
|
||||
mBufferSegmentSize, mBufferMaxSize);
|
||||
mHandler = 0;
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
|
@ -576,11 +579,11 @@ nsFTPChannel::SetNotificationCallbacks(nsIInterfaceRequestor* aNotificationCallb
|
|||
mCallbacks = aNotificationCallbacks;
|
||||
|
||||
if (mCallbacks) {
|
||||
nsresult rv = mCallbacks->GetInterface(NS_GET_IID(nsIProgressEventSink),
|
||||
getter_AddRefs(mEventSink));
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(gFTPLog, PR_LOG_DEBUG, ("nsFTPChannel::Init() (couldn't find event sink)\n"));
|
||||
}
|
||||
(void)mCallbacks->GetInterface(NS_GET_IID(nsIProgressEventSink),
|
||||
getter_AddRefs(mEventSink));
|
||||
|
||||
(void)mCallbacks->GetInterface(NS_GET_IID(nsIPrompt),
|
||||
getter_AddRefs(mPrompter));
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include "nsXPIDLString.h"
|
||||
#include "nsIStreamListener.h"
|
||||
#include "nsAutoLock.h"
|
||||
#include "nsIPrompt.h"
|
||||
|
||||
class nsFTPChannel : public nsIChannel,
|
||||
public nsIInterfaceRequestor,
|
||||
|
@ -73,6 +74,7 @@ protected:
|
|||
nsCOMPtr<nsIURI> mOriginalURI;
|
||||
nsCOMPtr<nsIURI> mURL;
|
||||
nsCOMPtr<nsIProgressEventSink> mEventSink;
|
||||
nsCOMPtr<nsIPrompt> mPrompter;
|
||||
nsCOMPtr<nsIInterfaceRequestor> mCallbacks;
|
||||
|
||||
PRBool mConnected;
|
||||
|
|
|
@ -36,17 +36,9 @@
|
|||
#include "nsEscape.h"
|
||||
#include "nsNetUtil.h"
|
||||
|
||||
#include "nsAppShellCIDs.h" // TODO remove later
|
||||
#include "nsIAppShellService.h" // TODO remove later
|
||||
#include "nsIXULWindow.h" // TODO remove later
|
||||
#include "nsINetPrompt.h"
|
||||
|
||||
static NS_DEFINE_CID(kStreamConverterServiceCID, NS_STREAMCONVERTERSERVICE_CID);
|
||||
static NS_DEFINE_CID(kMIMEServiceCID, NS_MIMESERVICE_CID);
|
||||
|
||||
static NS_DEFINE_CID(kAppShellServiceCID, NS_APPSHELL_SERVICE_CID);
|
||||
static NS_DEFINE_CID(kProxyObjectManagerCID, NS_PROXYEVENT_MANAGER_CID);
|
||||
|
||||
static NS_DEFINE_CID(kSocketTransportServiceCID, NS_SOCKETTRANSPORTSERVICE_CID);
|
||||
static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
|
||||
|
||||
|
@ -81,7 +73,7 @@ nsFtpConnectionThread::nsFtpConnectionThread() {
|
|||
mPasv = 0;
|
||||
mLastModified = LL_ZERO;
|
||||
mAsyncReadEvent = 0;
|
||||
mWriteCount = -1;
|
||||
mWriteCount = 0;
|
||||
mBufferSegmentSize = 0;
|
||||
mBufferMaxSize = 0;
|
||||
}
|
||||
|
@ -788,20 +780,16 @@ nsFtpConnectionThread::S_user() {
|
|||
usernameStr.Append("anonymous");
|
||||
} else {
|
||||
if (!mUsername.Length()) {
|
||||
if (!mPrompter) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
nsCOMPtr<nsIAppShellService> appShellService(do_GetService(kAppShellServiceCID));
|
||||
NS_ENSURE_TRUE(appShellService, NS_ERROR_FAILURE);
|
||||
|
||||
nsCOMPtr<nsIXULWindow> xulWindow;
|
||||
appShellService->GetHiddenWindow(getter_AddRefs( xulWindow ) );
|
||||
nsCOMPtr<nsINetPrompt> prompter( do_QueryInterface( xulWindow ) );
|
||||
|
||||
NS_WITH_SERVICE(nsIProxyObjectManager, pIProxyObjectManager, kProxyObjectManagerCID, &rv);
|
||||
NS_WITH_SERVICE(nsIProxyObjectManager, pIProxyObjectManager,
|
||||
kProxyObjectManagerCID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCOMPtr<nsINetPrompt> proxyprompter;
|
||||
|
||||
nsCOMPtr<nsIPrompt> proxyprompter;
|
||||
rv = pIProxyObjectManager->GetProxyObject(NS_UI_THREAD_EVENTQ,
|
||||
NS_GET_IID(nsINetPrompt), prompter,
|
||||
NS_GET_IID(nsIPrompt), mPrompter,
|
||||
PROXY_SYNC, getter_AddRefs(proxyprompter));
|
||||
PRUnichar *user = nsnull, *passwd = nsnull;
|
||||
PRBool retval;
|
||||
|
@ -814,7 +802,9 @@ nsFtpConnectionThread::S_user() {
|
|||
message += host;
|
||||
}
|
||||
|
||||
rv = proxyprompter->PromptUsernameAndPassword(host, PR_TRUE, NULL, message.GetUnicode(), &user, &passwd, &retval);
|
||||
rv = proxyprompter->PromptUsernameAndPassword(message.GetUnicode(),
|
||||
&user, &passwd, &retval);
|
||||
|
||||
// if the user canceled or didn't supply a username we want to fail
|
||||
if (!retval || (user && !*user) )
|
||||
return NS_ERROR_FAILURE;
|
||||
|
@ -867,34 +857,21 @@ nsFtpConnectionThread::S_pass() {
|
|||
passwordStr.Append("mozilla@");
|
||||
} else {
|
||||
if (!mPassword.Length() || mRetryPass) {
|
||||
// ignore any password we have, it's not working
|
||||
nsCOMPtr<nsIAppShellService> appShellService(do_GetService(kAppShellServiceCID));
|
||||
NS_ENSURE_TRUE(appShellService, NS_ERROR_FAILURE);
|
||||
if (!mPrompter) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
nsCOMPtr<nsIXULWindow> xulWindow;
|
||||
appShellService->GetHiddenWindow(getter_AddRefs( xulWindow ) );
|
||||
nsCOMPtr<nsINetPrompt> prompter( do_QueryInterface( xulWindow ) );
|
||||
|
||||
NS_WITH_SERVICE(nsIProxyObjectManager, pIProxyObjectManager, kProxyObjectManagerCID, &rv);
|
||||
NS_WITH_SERVICE(nsIProxyObjectManager, pIProxyObjectManager,
|
||||
kProxyObjectManagerCID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCOMPtr<nsINetPrompt> proxyprompter;
|
||||
|
||||
nsCOMPtr<nsIPrompt> proxyprompter;
|
||||
rv = pIProxyObjectManager->GetProxyObject(NS_UI_THREAD_EVENTQ,
|
||||
NS_GET_IID(nsINetPrompt), prompter,
|
||||
NS_GET_IID(nsIPrompt), mPrompter,
|
||||
PROXY_SYNC, getter_AddRefs(proxyprompter));
|
||||
PRUnichar *passwd = nsnull;
|
||||
PRBool retval;
|
||||
static nsAutoString message;
|
||||
nsXPIDLCString host2;
|
||||
rv = mURL->GetHost(getter_Copies(host2));
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
}
|
||||
nsAutoString userAtHost;
|
||||
userAtHost = mUsername;
|
||||
userAtHost += "@";
|
||||
userAtHost += host2;
|
||||
char * userAtHostC = userAtHost.ToNewCString();
|
||||
nsAutoString title("Password");
|
||||
|
||||
if (message.Length() < 1) {
|
||||
nsXPIDLCString host;
|
||||
rv = mURL->GetHost(getter_Copies(host));
|
||||
|
@ -904,8 +881,9 @@ nsFtpConnectionThread::S_pass() {
|
|||
message += " on ";
|
||||
message += host;
|
||||
}
|
||||
rv = proxyprompter->PromptPassword(userAtHostC, PR_TRUE, NULL, message.GetUnicode(), &passwd, &retval);
|
||||
nsCRT::free(userAtHostC);
|
||||
rv = proxyprompter->PromptPassword(message.GetUnicode(),
|
||||
title.GetUnicode(),
|
||||
&passwd, &retval);
|
||||
|
||||
// we want to fail if the user canceled or didn't enter a password.
|
||||
if (!retval || (passwd && !*passwd) )
|
||||
|
@ -1581,12 +1559,15 @@ nsFtpConnectionThread::Resume(void)
|
|||
nsresult
|
||||
nsFtpConnectionThread::Init(nsIProtocolHandler* aHandler,
|
||||
nsIChannel* aChannel,
|
||||
nsIPrompt* aPrompter,
|
||||
PRUint32 bufferSegmentSize,
|
||||
PRUint32 bufferMaxSize) {
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
if (mConnected) return NS_ERROR_ALREADY_CONNECTED;
|
||||
|
||||
mPrompter = aPrompter;
|
||||
|
||||
mBufferSegmentSize = bufferSegmentSize;
|
||||
mBufferMaxSize = bufferMaxSize;
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
#include "nsIBufferOutputStream.h"
|
||||
#include "nsAutoLock.h"
|
||||
#include "nsIEventQueueService.h"
|
||||
#include "nsIPrompt.h"
|
||||
|
||||
// ftp server types
|
||||
#define FTP_GENERIC_TYPE 0
|
||||
|
@ -95,6 +96,7 @@ public:
|
|||
|
||||
nsresult Init(nsIProtocolHandler *aHandler,
|
||||
nsIChannel *aChannel,
|
||||
nsIPrompt *aPrompter,
|
||||
PRUint32 bufferSegmentSize,
|
||||
PRUint32 bufferMaxSize);
|
||||
|
||||
|
@ -211,6 +213,7 @@ private:
|
|||
PRBool mFireCallbacks; // Fire the listener callbacks.
|
||||
|
||||
nsCOMPtr<nsIEventQueue> mEventQueue;
|
||||
nsCOMPtr<nsIPrompt> mPrompter;
|
||||
};
|
||||
|
||||
#define NS_FTP_BUFFER_READ_SIZE (8*1024)
|
||||
|
|
Загрузка…
Ссылка в новой задаче