Remove more JSLib cruft.
1 #include "nsComponentManagerUtils.h"
3 #include "nsReadonlyWrapper.h"
4 #include "nsReadonlyClasses.h"
5 #include "nsIVariant.h"
7 NS_IMPL_ISUPPORTS1(nsReadonlyWrapper, nsIInterfaceWrapper)
9 nsReadonlyWrapper::nsReadonlyWrapper()
14 nsReadonlyWrapper::~nsReadonlyWrapper()
20 nsReadonlyWrapper::GetWrapperNative(const nsIID & iid,
22 nsISupports **wrapper)
24 NS_ENSURE_ARG_POINTER(wrappee);
28 if (iid.Equals(NS_GET_IID(nsIArray)))
30 nsCOMPtr<nsIArray> array = do_QueryInterface((nsISupports*) wrappee, &rv);
31 NS_ENSURE_SUCCESS(rv, rv);
32 nsCOMPtr<nsIArray> localArray = new nsArrayRO(array);
33 NS_ENSURE_TRUE(localArray, NS_ERROR_OUT_OF_MEMORY);
34 NS_IF_ADDREF(*wrapper = localArray);
38 if (iid.Equals(NS_GET_IID(nsIDataMatrix)))
40 nsCOMPtr<nsIDataMatrix> data
41 = do_QueryInterface((nsISupports*) wrappee, &rv);
42 NS_ENSURE_SUCCESS(rv, rv);
43 nsCOMPtr<nsIDataMatrix> localData = new nsDataMatrixRO(data);
44 NS_ENSURE_TRUE(localData, NS_ERROR_OUT_OF_MEMORY);
45 NS_IF_ADDREF(*wrapper = localData);
49 return NS_ERROR_NO_INTERFACE;
53 nsReadonlyWrapper::GetWrapper(const nsIID & iid,
57 nsISupports* wrapper = nsnull;
58 nsresult rv = GetWrapperNative(iid, wrappee, &wrapper);
59 NS_ENSURE_SUCCESS(rv, rv);
61 nsCOMPtr<nsIWritableVariant> variant
62 = do_CreateInstance(NS_VARIANT_CONTRACTID, &rv);
63 NS_ENSURE_SUCCESS(rv, rv);
65 rv = variant->SetAsInterface(iid, wrapper);
66 NS_ENSURE_SUCCESS(rv, rv);
68 // Prevent leak: variant holds the owning reference now.
69 NS_IF_RELEASE(wrapper);
71 rv = variant->SetWritable(PR_FALSE);
72 NS_ENSURE_SUCCESS(rv, rv);
73 NS_ADDREF(*_retval = variant);
77 nsRefPtr<nsReadonlyWrapper>
78 nsReadonlyWrapper::mService = nsnull;
81 nsReadonlyWrapper::GetSingleton()
83 if (!nsReadonlyWrapper::mService)
84 nsReadonlyWrapper::mService = new nsReadonlyWrapper();
85 nsIInterfaceWrapper* service = nsReadonlyWrapper::mService;
86 NS_IF_ADDREF(service);
87 return nsReadonlyWrapper::mService;
91 nsReadonlyWrapper::Shutdown()