29754. fixed a couple warnings, removed FTP dependence on xul window for prompting, and started using the nsIPrompt interface.

This commit is contained in:
valeski%netscape.com 2000-03-30 01:00:29 +00:00
Родитель 4e80826107
Коммит 6be78f079f
4 изменённых файлов: 41 добавлений и 52 удалений

Просмотреть файл

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