зеркало из https://github.com/mozilla/pjs.git
First Checked In.
This commit is contained in:
Родитель
ba7382d0be
Коммит
16ff8ffac2
|
@ -0,0 +1,522 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public License
|
||||||
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||||
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||||
|
* http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS"
|
||||||
|
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
||||||
|
* the License for the specific language governing rights and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* The Original Code is Mozilla Communicator client code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Netscape Communications
|
||||||
|
* Corporation. Portions created by Netscape are Copyright (C) 1998
|
||||||
|
* Netscape Communications Corporation. All Rights Reserved.
|
||||||
|
*/
|
||||||
|
#include "nsNetSupportDialog.h"
|
||||||
|
#include "nsIWebShell.h"
|
||||||
|
#include "nsIXULWindowCallbacks.h"
|
||||||
|
#include "nsIDOMXULDocument.h"
|
||||||
|
#include "nsIPresShell.h"
|
||||||
|
#include "nsIDocument.h"
|
||||||
|
#include "nsIDocumentViewer.h"
|
||||||
|
#include "nsCOMPtr.h"
|
||||||
|
#include "nsIPresContext.h"
|
||||||
|
#include "nsIDOMElement.h"
|
||||||
|
#include "nsIAppShellService.h"
|
||||||
|
#include "nsIServiceManager.h"
|
||||||
|
#include "nsAppShellCIDs.h"
|
||||||
|
#include "nsIURL.h"
|
||||||
|
#include "nsIDOMHTMLInputElement.h"
|
||||||
|
#include "nsIWebShellWindow.H"
|
||||||
|
#include "nsIDOMEventReceiver.h"
|
||||||
|
#include "nsIURL.h"
|
||||||
|
/* Define Class IDs */
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kAppShellServiceCID, NS_APPSHELL_SERVICE_CID);
|
||||||
|
|
||||||
|
const static PRInt32 kCancelButton = 0;
|
||||||
|
const static PRInt32 kOKButton = 0;
|
||||||
|
|
||||||
|
/* Define Interface IDs */
|
||||||
|
static NS_DEFINE_IID(kIAppShellServiceIID, NS_IAPPSHELL_SERVICE_IID);
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kIDOMMouseListenerIID, NS_IDOMMOUSELISTENER_IID);
|
||||||
|
static NS_DEFINE_IID(kIDOMEventReceiverIID, NS_IDOMEVENTRECEIVER_IID);
|
||||||
|
static NS_DEFINE_IID(kINetSupportDialogIID, NS_INETSUPPORTDIALOGSERVICE_IID);
|
||||||
|
static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID);
|
||||||
|
// Copy and paste
|
||||||
|
#define APP_DEBUG 1
|
||||||
|
static nsresult setAttribute( nsIWebShell *shell,
|
||||||
|
const char *id,
|
||||||
|
const char *name,
|
||||||
|
const nsString &value ) {
|
||||||
|
nsresult rv = NS_OK;
|
||||||
|
|
||||||
|
nsCOMPtr<nsIContentViewer> cv;
|
||||||
|
rv = shell->GetContentViewer(getter_AddRefs(cv));
|
||||||
|
if ( cv ) {
|
||||||
|
// Up-cast.
|
||||||
|
nsCOMPtr<nsIDocumentViewer> docv(do_QueryInterface(cv));
|
||||||
|
if ( docv ) {
|
||||||
|
// Get the document from the doc viewer.
|
||||||
|
nsCOMPtr<nsIDocument> doc;
|
||||||
|
rv = docv->GetDocument(*getter_AddRefs(doc));
|
||||||
|
if ( doc ) {
|
||||||
|
// Up-cast.
|
||||||
|
nsCOMPtr<nsIDOMXULDocument> xulDoc( do_QueryInterface(doc) );
|
||||||
|
if ( xulDoc ) {
|
||||||
|
// Find specified element.
|
||||||
|
nsCOMPtr<nsIDOMElement> elem;
|
||||||
|
rv = xulDoc->GetElementById( id, getter_AddRefs(elem) );
|
||||||
|
if ( elem ) {
|
||||||
|
// Set the text attribute.
|
||||||
|
rv = elem->SetAttribute( name, value );
|
||||||
|
if ( APP_DEBUG ) {
|
||||||
|
char *p = value.ToNewCString();
|
||||||
|
//printf( "Set %s %s=\"%s\", rv=0x%08X\n", id, name, p, (int)rv );
|
||||||
|
delete [] p;
|
||||||
|
}
|
||||||
|
if ( rv != NS_OK ) {
|
||||||
|
if (APP_DEBUG) printf("SetAttribute failed, rv=0x%X\n",(int)rv);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (APP_DEBUG) printf("GetElementByID failed, rv=0x%X\n",(int)rv);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (APP_DEBUG) printf("Upcast to nsIDOMXULDocument failed\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (APP_DEBUG) printf("GetDocument failed, rv=0x%X\n",(int)rv);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (APP_DEBUG) printf("Upcast to nsIDocumentViewer failed\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (APP_DEBUG) printf("GetContentViewer failed, rv=0x%X\n",(int)rv);
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
static nsresult GetInputFieldValue( nsIWebShell *shell,
|
||||||
|
const char *id,
|
||||||
|
nsString &value ) {
|
||||||
|
nsresult rv = NS_OK;
|
||||||
|
|
||||||
|
nsCOMPtr<nsIContentViewer> cv;
|
||||||
|
rv = shell->GetContentViewer(getter_AddRefs(cv));
|
||||||
|
if ( cv ) {
|
||||||
|
// Up-cast.
|
||||||
|
nsCOMPtr<nsIDocumentViewer> docv(do_QueryInterface(cv));
|
||||||
|
if ( docv ) {
|
||||||
|
// Get the document from the doc viewer.
|
||||||
|
nsCOMPtr<nsIDocument> doc;
|
||||||
|
rv = docv->GetDocument(*getter_AddRefs(doc));
|
||||||
|
if ( doc ) {
|
||||||
|
// Up-cast.
|
||||||
|
nsCOMPtr<nsIDOMXULDocument> xulDoc( do_QueryInterface(doc) );
|
||||||
|
if ( xulDoc ) {
|
||||||
|
// Find specified element.
|
||||||
|
nsCOMPtr<nsIDOMElement> elem;
|
||||||
|
rv = xulDoc->GetElementById( id, getter_AddRefs(elem) );
|
||||||
|
if ( elem ) {
|
||||||
|
nsCOMPtr<nsIDOMHTMLInputElement> element( do_QueryInterface( elem ) );
|
||||||
|
if ( element ){
|
||||||
|
nsString str;
|
||||||
|
element->GetValue(value);
|
||||||
|
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
if (APP_DEBUG) printf(" Get nsIDOMHTMLInputElement failed, rv=0x%X\n",(int)rv);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (APP_DEBUG) printf("GetElementByID failed, rv=0x%X\n",(int)rv);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (APP_DEBUG) printf("Upcast to nsIDOMXULDocument failed\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (APP_DEBUG) printf("GetDocument failed, rv=0x%X\n",(int)rv);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (APP_DEBUG) printf("Upcast to nsIDocumentViewer failed\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (APP_DEBUG) printf("GetContentViewer failed, rv=0x%X\n",(int)rv);
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
static nsresult findDOMNode( nsIWebShell *shell,
|
||||||
|
const char *id,
|
||||||
|
nsIDOMElement **node )
|
||||||
|
{
|
||||||
|
nsresult rv = NS_OK;
|
||||||
|
|
||||||
|
nsCOMPtr<nsIContentViewer> cv;
|
||||||
|
rv = shell->GetContentViewer(getter_AddRefs(cv));
|
||||||
|
if ( cv ) {
|
||||||
|
// Up-cast.
|
||||||
|
nsCOMPtr<nsIDocumentViewer> docv(do_QueryInterface(cv));
|
||||||
|
if ( docv ) {
|
||||||
|
// Get the document from the doc viewer.
|
||||||
|
nsCOMPtr<nsIDocument> doc;
|
||||||
|
rv = docv->GetDocument(*getter_AddRefs(doc));
|
||||||
|
if ( doc ) {
|
||||||
|
// Up-cast.
|
||||||
|
nsCOMPtr<nsIDOMXULDocument> xulDoc( do_QueryInterface(doc) );
|
||||||
|
if ( xulDoc ) {
|
||||||
|
rv = xulDoc->GetElementById( id, node );
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (APP_DEBUG) printf("Upcast to nsIDOMXULDocument failed\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (APP_DEBUG) printf("GetDocument failed, rv=0x%X\n",(int)rv);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (APP_DEBUG) printf("Upcast to nsIDocumentViewer failed\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (APP_DEBUG) printf("GetContentViewer failed, rv=0x%X\n",(int)rv);
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsNetSupportDialog::nsNetSupportDialog()
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
}
|
||||||
|
|
||||||
|
void nsNetSupportDialog::Init()
|
||||||
|
{
|
||||||
|
mDefault = NULL;
|
||||||
|
mUser = NULL;
|
||||||
|
mPassword = NULL;
|
||||||
|
mMsg = NULL;
|
||||||
|
mReturnValue = NULL;
|
||||||
|
mOKButton = NULL;
|
||||||
|
mCancelButton = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP nsNetSupportDialog::Alert( const nsString &aText )
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
mMsg = &aText;
|
||||||
|
nsString url( "resource:/res/samples/NetSupportAlert.xul") ;
|
||||||
|
DoDialog( url );
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP nsNetSupportDialog::Confirm( const nsString &aText, PRInt32* returnValue )
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
mMsg = &aText;
|
||||||
|
mReturnValue = returnValue;
|
||||||
|
nsString url( "resource:/res/samples/NetSupportConfirm.xul") ;
|
||||||
|
DoDialog( url );
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP nsNetSupportDialog::Prompt( const nsString &aText, const nsString &aDefault,nsString &aResult, PRInt32* returnValue )
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
mMsg = &aText;
|
||||||
|
mDefault = &aDefault;
|
||||||
|
mUser = &aResult;
|
||||||
|
mReturnValue = returnValue;
|
||||||
|
nsString url( "resource:/res/samples/NetSupportPrompt.xul") ;
|
||||||
|
DoDialog( url );
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP nsNetSupportDialog::PromptUserAndPassword( const nsString &aText,
|
||||||
|
nsString &aUser,
|
||||||
|
nsString &aPassword,PRInt32* returnValue )
|
||||||
|
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
mMsg = &aText;
|
||||||
|
mUser = &aUser;
|
||||||
|
mPassword = &aPassword;
|
||||||
|
mReturnValue = returnValue;
|
||||||
|
nsString url( "resource:/res/samples/NetSupportUserPassword.xul") ;
|
||||||
|
DoDialog( url );
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP nsNetSupportDialog::PromptPassword( const nsString &aText,
|
||||||
|
nsString &aPassword, PRInt32* returnValue )
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
mMsg = &aText;
|
||||||
|
mPassword = &aPassword;
|
||||||
|
mReturnValue = returnValue;
|
||||||
|
nsString url( "resource:/res/samples/NetSupportPassword.xul") ;
|
||||||
|
DoDialog( url );
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
nsresult nsNetSupportDialog::ConstructBeforeJavaScript(nsIWebShell *aWebShell)
|
||||||
|
{
|
||||||
|
|
||||||
|
if ( aWebShell == NULL )
|
||||||
|
return NS_ERROR_INVALID_ARG;
|
||||||
|
mWebShell = aWebShell;
|
||||||
|
mWebShell->AddRef();
|
||||||
|
|
||||||
|
if ( mMsg )
|
||||||
|
setAttribute( aWebShell, "NetDialog:Message", "text", *mMsg );
|
||||||
|
|
||||||
|
// Hook up the event listeners
|
||||||
|
findDOMNode( mWebShell,"OKButton", &mOKButton );
|
||||||
|
findDOMNode( mWebShell,"CancelButton", &mCancelButton );
|
||||||
|
|
||||||
|
AddMouseEventListener( mOKButton );
|
||||||
|
AddMouseEventListener( mCancelButton );
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult nsNetSupportDialog::ConstructAfterJavaScript(nsIWebShell *aWebShell)
|
||||||
|
{
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult nsNetSupportDialog::DoDialog( nsString& inXULURL )
|
||||||
|
{
|
||||||
|
nsresult result;
|
||||||
|
// Create the Application Shell instance...
|
||||||
|
nsIAppShellService* appShellService = nsnull;
|
||||||
|
if ( !NS_SUCCEEDED(
|
||||||
|
result = nsServiceManager::GetService(kAppShellServiceCID, kIAppShellServiceIID, (nsISupports**)&appShellService) )
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !NS_SUCCEEDED (result = appShellService->Initialize() ) )
|
||||||
|
{
|
||||||
|
appShellService->Release();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsIURL* dialogURL;
|
||||||
|
if (!NS_SUCCEEDED (result = NS_NewURL(&dialogURL, inXULURL ) ) )
|
||||||
|
{
|
||||||
|
appShellService->Release();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsString controllerCID = "43147b80-8a39-11d2-9938-0080c7cb1081";
|
||||||
|
result = appShellService->CreateDialogWindow( nsnull, dialogURL, controllerCID, mWebShellWindow, nsnull, this, 300, 150);
|
||||||
|
|
||||||
|
// Run the dialog
|
||||||
|
// Results will be in the XUL callback
|
||||||
|
if ( mWebShellWindow )
|
||||||
|
mWebShellWindow->ShowModal();
|
||||||
|
|
||||||
|
// cleanup
|
||||||
|
if ( mOKButton )
|
||||||
|
RemoveEventListener( mOKButton );
|
||||||
|
if ( mCancelButton )
|
||||||
|
RemoveEventListener( mCancelButton );
|
||||||
|
appShellService->Release();
|
||||||
|
dialogURL->Release();
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Event Handlers which should be called using XPConnect eventually
|
||||||
|
void nsNetSupportDialog::OnOK()
|
||||||
|
{
|
||||||
|
if ( mUser )
|
||||||
|
GetInputFieldValue( mWebShell,"User" ,*mUser);
|
||||||
|
if ( mPassword )
|
||||||
|
GetInputFieldValue( mWebShell,"Password" ,*mPassword);
|
||||||
|
// Fill in NetLib struct
|
||||||
|
*mReturnValue = kOKButton;
|
||||||
|
// Cleanup
|
||||||
|
mWebShell->Release();
|
||||||
|
|
||||||
|
mWebShellWindow->Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void nsNetSupportDialog::OnCancel()
|
||||||
|
{
|
||||||
|
*mReturnValue = kCancelButton;
|
||||||
|
mWebShell->Release();
|
||||||
|
mWebShellWindow->Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult nsNetSupportDialog::MouseClick(nsIDOMEvent* aMouseEvent)
|
||||||
|
{
|
||||||
|
|
||||||
|
nsIDOMNode * node;
|
||||||
|
aMouseEvent->GetTarget(&node);
|
||||||
|
if (node == mOKButton)
|
||||||
|
{
|
||||||
|
OnOK();
|
||||||
|
} else if ( node == mCancelButton )
|
||||||
|
{
|
||||||
|
OnCancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_RELEASE(node);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void nsNetSupportDialog::AddMouseEventListener(nsIDOMNode * aNode)
|
||||||
|
{
|
||||||
|
nsIDOMEventReceiver * receiver;
|
||||||
|
|
||||||
|
NS_PRECONDITION(nsnull != aNode, "adding event listener to null node");
|
||||||
|
|
||||||
|
if ( NS_SUCCEEDED(aNode->QueryInterface(kIDOMEventReceiverIID, (void**) &receiver) ) )
|
||||||
|
{
|
||||||
|
receiver->AddEventListenerByIID((nsIDOMMouseListener*)this, kIDOMMouseListenerIID);
|
||||||
|
NS_RELEASE(receiver);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
void nsNetSupportDialog::RemoveEventListener(nsIDOMNode * aNode)
|
||||||
|
{
|
||||||
|
nsIDOMEventReceiver * receiver;
|
||||||
|
|
||||||
|
NS_PRECONDITION(nsnull != aNode, "removing event listener from null node");
|
||||||
|
|
||||||
|
if (NS_OK == aNode->QueryInterface(kIDOMEventReceiverIID, (void**) &receiver)) {
|
||||||
|
receiver->RemoveEventListenerByIID(this, kIDOMMouseListenerIID);
|
||||||
|
NS_RELEASE(receiver);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// COM Fluff
|
||||||
|
NS_IMPL_ADDREF(nsNetSupportDialog)
|
||||||
|
NS_IMPL_RELEASE(nsNetSupportDialog)
|
||||||
|
|
||||||
|
|
||||||
|
NS_IMETHODIMP nsNetSupportDialog::QueryInterface(REFNSIID aIID,void** aInstancePtr)
|
||||||
|
{
|
||||||
|
if (aInstancePtr == NULL)
|
||||||
|
{
|
||||||
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Always NULL result, in case of failure
|
||||||
|
*aInstancePtr = NULL;
|
||||||
|
|
||||||
|
if ( aIID.Equals( kINetSupportDialogIID ) )
|
||||||
|
{
|
||||||
|
*aInstancePtr = (void*) ((nsINetSupportDialogService*)this);
|
||||||
|
AddRef();
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
else if (aIID.Equals(kIDOMMouseListenerIID))
|
||||||
|
{
|
||||||
|
NS_ADDREF_THIS(); // Increase reference count for caller
|
||||||
|
*aInstancePtr = (void *)((nsIDOMMouseListener*)this);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return NS_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Factory code for creating nsGlobalHistory
|
||||||
|
|
||||||
|
class nsNetSupportDialogFactory : public nsIFactory
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
nsNetSupportDialogFactory();
|
||||||
|
NS_DECL_ISUPPORTS
|
||||||
|
|
||||||
|
// nsIFactory methods
|
||||||
|
NS_IMETHOD CreateInstance(nsISupports *aOuter,
|
||||||
|
const nsIID &aIID,
|
||||||
|
void **aResult);
|
||||||
|
|
||||||
|
NS_IMETHOD LockFactory(PRBool aLock);
|
||||||
|
protected:
|
||||||
|
virtual ~nsNetSupportDialogFactory();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
nsNetSupportDialogFactory::nsNetSupportDialogFactory()
|
||||||
|
{
|
||||||
|
NS_INIT_REFCNT();
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult
|
||||||
|
nsNetSupportDialogFactory::LockFactory(PRBool lock)
|
||||||
|
{
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsNetSupportDialogFactory::~nsNetSupportDialogFactory()
|
||||||
|
{
|
||||||
|
NS_ASSERTION(mRefCnt == 0, "non-zero refcnt at destruction");
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMPL_ISUPPORTS(nsNetSupportDialogFactory, kIFactoryIID);
|
||||||
|
|
||||||
|
|
||||||
|
nsresult nsNetSupportDialogFactory::CreateInstance(nsISupports *aOuter,
|
||||||
|
const nsIID &aIID,
|
||||||
|
void **aResult)
|
||||||
|
{
|
||||||
|
nsresult rv;
|
||||||
|
nsNetSupportDialog* inst;
|
||||||
|
|
||||||
|
if (aResult == NULL)
|
||||||
|
{
|
||||||
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
}
|
||||||
|
*aResult = NULL;
|
||||||
|
if (nsnull != aOuter)
|
||||||
|
{
|
||||||
|
rv = NS_ERROR_NO_AGGREGATION;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_NEWXPCOM(inst, nsNetSupportDialog);
|
||||||
|
if (inst == NULL)
|
||||||
|
{
|
||||||
|
rv = NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_ADDREF(inst);
|
||||||
|
rv = inst->QueryInterface(aIID, aResult);
|
||||||
|
NS_RELEASE(inst);
|
||||||
|
|
||||||
|
done:
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
nsresult NS_NewNetSupportDialogFactory(nsIFactory** aFactory)
|
||||||
|
{
|
||||||
|
nsresult rv = NS_OK;
|
||||||
|
nsIFactory* inst = new nsNetSupportDialogFactory();
|
||||||
|
if (nsnull == inst)
|
||||||
|
{
|
||||||
|
rv = NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NS_ADDREF(inst);
|
||||||
|
}
|
||||||
|
*aFactory = inst;
|
||||||
|
return rv;
|
||||||
|
}
|
Загрузка…
Ссылка в новой задаче