forked from mozilla/gecko-dev
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathnsJavaDOMFactory.cpp
142 lines (115 loc) · 3.54 KB
/
nsJavaDOMFactory.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
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 Initial Developer of the Original Code is Sun Microsystems,
Inc. Portions created by Sun are Copyright (C) 1999 Sun Microsystems,
Inc. All Rights Reserved.
*/
#include "pratom.h"
#include "nsCOMPtr.h"
#include "nsIServiceManager.h"
#include "nsJavaDOMCID.h"
#include "nsJavaDOMImpl.h"
#include "nsJavaDOMFactory.h"
static PRInt32 gLockCount = 0;
static NS_DEFINE_CID(kComponentManagerCID, NS_COMPONENTMANAGER_CID);
static NS_DEFINE_IID(kJavaDOMFactoryCID, NS_JAVADOMFACTORY_CID);
static NS_DEFINE_IID(kJavaDOMFactoryIID, NS_JAVADOMFACTORY_IID);
NS_IMPL_ISUPPORTS(nsJavaDOMFactory, kJavaDOMFactoryIID)
nsJavaDOMFactory::nsJavaDOMFactory()
{
NS_INIT_REFCNT();
}
nsresult nsJavaDOMFactory::CreateInstance(nsISupports* aOuter,
const nsIID& aIID,
void** aResult)
{
if (aOuter != NULL)
return NS_ERROR_NO_AGGREGATION;
if (aResult == NULL)
return NS_ERROR_NULL_POINTER;
*aResult = NULL;
nsISupports* inst = new nsJavaDOMImpl();
if (inst == NULL)
return NS_ERROR_OUT_OF_MEMORY;
nsresult res = inst->QueryInterface(aIID, aResult);
if (NS_FAILED(res))
delete inst;
return res;
}
nsresult nsJavaDOMFactory::LockFactory(PRBool aLock)
{
if (aLock)
PR_AtomicIncrement(&gLockCount);
else
PR_AtomicDecrement(&gLockCount);
return NS_OK;
}
extern "C"
NS_EXPORT nsresult NSGetFactory(nsISupports* serviceMgr,
const nsCID& aClass,
const char* aClassName,
const char* aProgID,
nsIFactory** aFactory)
{
if (aFactory == NULL)
return NS_ERROR_NULL_POINTER;
*aFactory = NULL;
nsISupports *inst = NULL;
static NS_DEFINE_IID(kJavaDOMFactoryCID, NS_JAVADOMFACTORY_CID);
if (aClass.Equals(kJavaDOMFactoryCID))
inst = new nsJavaDOMFactory();
else
return NS_ERROR_ILLEGAL_VALUE;
if (inst == NULL)
return NS_ERROR_OUT_OF_MEMORY;
nsresult res = inst->QueryInterface(kJavaDOMFactoryIID,
(void**) aFactory);
if (res != NS_OK)
delete inst;
return res;
}
extern "C"
NS_EXPORT PRBool NSCanUnload(nsISupports* serviceMgr)
{
return (PRBool) (gLockCount == 0);
}
extern "C"
NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char* aPath)
{
nsresult rv;
nsCOMPtr<nsIServiceManager> servMgr(do_QueryInterface(aServMgr, &rv));
if (NS_FAILED(rv))
return rv;
nsIComponentManager* cm = nsnull;
rv = servMgr->GetService(kComponentManagerCID,
nsIComponentManager::GetIID(),
(nsISupports**)&cm);
if (NS_FAILED(rv))
return rv;
rv = cm->RegisterComponent(kJavaDOMFactoryCID, NULL, NULL,
aPath, PR_TRUE, PR_TRUE);
return rv;
}
extern "C"
NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char* aPath)
{
nsresult rv;
nsCOMPtr<nsIServiceManager> servMgr(do_QueryInterface(aServMgr, &rv));
if (NS_FAILED(rv))
return rv;
nsIComponentManager* cm = nsnull;
rv = servMgr->GetService(kComponentManagerCID,
nsIComponentManager::GetIID(),
(nsISupports**)&cm);
if (NS_FAILED(rv))
return rv;
rv = cm->UnregisterComponent(kJavaDOMFactoryCID, aPath);
return rv;
}