From 39c28694697b4b948e8c617fcc23a64025c1aaa2 Mon Sep 17 00:00:00 2001 From: Ehsan Akhgari Date: Mon, 27 Jan 2014 08:27:04 -0800 Subject: [PATCH] Bug 964061 - Part 1: Convert CRMFObject to WebIDL bindings; r=bzbarsky --HG-- extra : rebase_source : 39a2b35df50cdd42624fb0e7a14383e8d40cea4b --- dom/base/Crypto.cpp | 2 +- dom/base/Crypto.h | 8 +++-- dom/base/nsDOMClassInfo.cpp | 19 ----------- dom/base/nsDOMClassInfoClasses.h | 5 --- dom/bindings/Bindings.conf | 5 +++ .../mochitest/general/test_interfaces.html | 2 -- dom/webidl/CRMFObject.webidl | 10 ++++++ dom/webidl/Crypto.webidl | 16 ++++----- dom/webidl/moz.build | 5 +++ security/manager/ssl/src/moz.build | 1 + security/manager/ssl/src/nsCrypto.cpp | 34 +++++++++---------- security/manager/ssl/src/nsCrypto.h | 18 ++++++---- 12 files changed, 64 insertions(+), 61 deletions(-) create mode 100644 dom/webidl/CRMFObject.webidl diff --git a/dom/base/Crypto.cpp b/dom/base/Crypto.cpp index f50979ae8d8..7678a2fca5f 100644 --- a/dom/base/Crypto.cpp +++ b/dom/base/Crypto.cpp @@ -150,7 +150,7 @@ Crypto::GetVersion(nsString& aVersion) { } -already_AddRefed +already_AddRefed Crypto::GenerateCRMFRequest(JSContext* aContext, const nsCString& aReqDN, const nsCString& aRegToken, diff --git a/dom/base/Crypto.h b/dom/base/Crypto.h index 8688ad9fe62..d17226cdf24 100644 --- a/dom/base/Crypto.h +++ b/dom/base/Crypto.h @@ -8,7 +8,11 @@ #include "nsIDOMCrypto.h" #else #include "nsIDOMCryptoLegacy.h" -class nsIDOMCRMFObject; +namespace mozilla { +namespace dom { +class CRMFObject; +} +} #endif #include "nsPIDOMWindow.h" @@ -46,7 +50,7 @@ public: virtual void GetVersion(nsString& aVersion); - virtual already_AddRefed + virtual already_AddRefed GenerateCRMFRequest(JSContext* aContext, const nsCString& aReqDN, const nsCString& aRegToken, diff --git a/dom/base/nsDOMClassInfo.cpp b/dom/base/nsDOMClassInfo.cpp index 092f120899e..5c8cd1544e1 100644 --- a/dom/base/nsDOMClassInfo.cpp +++ b/dom/base/nsDOMClassInfo.cpp @@ -110,9 +110,6 @@ #include "nsIDOMCSSStyleRule.h" #include "nsIDOMCSSStyleSheet.h" #include "nsIDOMXULCommandDispatcher.h" -#ifndef MOZ_DISABLE_CRYPTOLEGACY -#include "nsIDOMCRMFObject.h" -#endif #include "nsIControllers.h" #include "nsIBoxObject.h" #ifdef MOZ_XUL @@ -228,10 +225,6 @@ static NS_DEFINE_CID(kDOMSOF_CID, NS_DOM_SCRIPT_OBJECT_FACTORY_CID); const uint32_t kDOMClassInfo_##_dom_class##_interfaces = \ 0; -#ifndef MOZ_DISABLE_CRYPTOLEGACY -DOMCI_DATA_NO_CLASS(CRMFObject) -#endif - DOMCI_DATA_NO_CLASS(ContentFrameMessageManager) DOMCI_DATA_NO_CLASS(ChromeMessageBroadcaster) DOMCI_DATA_NO_CLASS(ChromeMessageSender) @@ -354,12 +347,6 @@ static nsDOMClassInfoData sClassInfoData[] = { DEFAULT_SCRIPTABLE_FLAGS) #endif - // Crypto classes -#ifndef MOZ_DISABLE_CRYPTOLEGACY - NS_DEFINE_CLASSINFO_DATA(CRMFObject, nsDOMGenericSH, - DOM_DEFAULT_SCRIPTABLE_FLAGS) -#endif - // DOM Chrome Window class. NS_DEFINE_CHROME_XBL_CLASSINFO_DATA(ChromeWindow, nsWindowSH, DEFAULT_SCRIPTABLE_FLAGS | @@ -1016,12 +1003,6 @@ nsDOMClassInfo::Init() DOM_CLASSINFO_MAP_END #endif -#ifndef MOZ_DISABLE_CRYPTOLEGACY - DOM_CLASSINFO_MAP_BEGIN(CRMFObject, nsIDOMCRMFObject) - DOM_CLASSINFO_MAP_ENTRY(nsIDOMCRMFObject) - DOM_CLASSINFO_MAP_END -#endif - DOM_CLASSINFO_MAP_BEGIN_NO_CLASS_IF(ChromeWindow, nsIDOMWindow) DOM_CLASSINFO_WINDOW_MAP_ENTRIES DOM_CLASSINFO_MAP_ENTRY(nsIDOMChromeWindow) diff --git a/dom/base/nsDOMClassInfoClasses.h b/dom/base/nsDOMClassInfoClasses.h index 0c477cd7d91..848c134b038 100644 --- a/dom/base/nsDOMClassInfoClasses.h +++ b/dom/base/nsDOMClassInfoClasses.h @@ -30,11 +30,6 @@ DOMCI_CLASS(TreeSelection) DOMCI_CLASS(TreeContentView) #endif -// Crypto classes -#ifndef MOZ_DISABLE_CRYPTOLEGACY -DOMCI_CLASS(CRMFObject) -#endif - // DOM Chrome Window class, almost identical to Window DOMCI_CLASS(ChromeWindow) diff --git a/dom/bindings/Bindings.conf b/dom/bindings/Bindings.conf index 9de1d3990c9..9ec4b91e185 100644 --- a/dom/bindings/Bindings.conf +++ b/dom/bindings/Bindings.conf @@ -251,6 +251,11 @@ DOMInterfaces = { 'headerFile': 'nsGeoPosition.h' }, +'CRMFObject': { + 'headerFile': 'nsCrypto.h', + 'wrapperCache': False, +}, + 'Crypto' : { 'implicitJSContext': [ 'generateCRMFRequest', 'signText' ], 'headerFile': 'Crypto.h' diff --git a/dom/tests/mochitest/general/test_interfaces.html b/dom/tests/mochitest/general/test_interfaces.html index 41c42b2109b..b756f8d7fd8 100644 --- a/dom/tests/mochitest/general/test_interfaces.html +++ b/dom/tests/mochitest/general/test_interfaces.html @@ -210,8 +210,6 @@ var interfaceNamesInGlobalScope = "Controllers", // IMPORTANT: Do not change this list without review from a DOM peer! "ConvolverNode", -// IMPORTANT: Do not change this list without review from a DOM peer! - {name: "CRMFObject", desktop: true}, // IMPORTANT: Do not change this list without review from a DOM peer! "Crypto", // IMPORTANT: Do not change this list without review from a DOM peer! diff --git a/dom/webidl/CRMFObject.webidl b/dom/webidl/CRMFObject.webidl new file mode 100644 index 00000000000..388e88f3008 --- /dev/null +++ b/dom/webidl/CRMFObject.webidl @@ -0,0 +1,10 @@ +/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +[NoInterfaceObject] +interface CRMFObject { + readonly attribute DOMString request; +}; diff --git a/dom/webidl/Crypto.webidl b/dom/webidl/Crypto.webidl index 04e9c463b4c..ff8bda87b0f 100644 --- a/dom/webidl/Crypto.webidl +++ b/dom/webidl/Crypto.webidl @@ -19,8 +19,6 @@ interface Crypto { }; #ifndef MOZ_DISABLE_CRYPTOLEGACY -interface CRMFObject; - [NoInterfaceObject] interface CryptoLegacy { readonly attribute DOMString version; @@ -28,13 +26,13 @@ interface CryptoLegacy { [SetterThrows] attribute boolean enableSmartCardEvents; - [Throws] - CRMFObject generateCRMFRequest(ByteString? reqDN, - ByteString? regToken, - ByteString? authenticator, - ByteString? eaCert, - ByteString? jsCallback, - any... args); + [Throws,NewObject] + CRMFObject? generateCRMFRequest(ByteString? reqDN, + ByteString? regToken, + ByteString? authenticator, + ByteString? eaCert, + ByteString? jsCallback, + any... args); [Throws] DOMString importUserCertificates(DOMString nickname, diff --git a/dom/webidl/moz.build b/dom/webidl/moz.build index 13512539bc4..71971b81d49 100644 --- a/dom/webidl/moz.build +++ b/dom/webidl/moz.build @@ -552,6 +552,11 @@ if CONFIG['MOZ_B2G_FM']: 'FMRadio.webidl', ] +if not CONFIG['MOZ_DISABLE_CRYPTOLEGACY']: + WEBIDL_FILES += [ + 'CRMFObject.webidl', + ] + GENERATED_EVENTS_WEBIDL_FILES = [ 'BlobEvent.webidl', 'CallGroupErrorEvent.webidl', diff --git a/security/manager/ssl/src/moz.build b/security/manager/ssl/src/moz.build index 029a6d1fcde..d81692bc3f4 100644 --- a/security/manager/ssl/src/moz.build +++ b/security/manager/ssl/src/moz.build @@ -6,6 +6,7 @@ EXPORTS += [ 'CryptoTask.h', + 'nsCrypto.h', 'nsNSSShutDown.h', 'nsRandomGenerator.h', 'ScopedNSSTypes.h', diff --git a/security/manager/ssl/src/nsCrypto.cpp b/security/manager/ssl/src/nsCrypto.cpp index a5ee5c2286b..7aac6d0bc9a 100644 --- a/security/manager/ssl/src/nsCrypto.cpp +++ b/security/manager/ssl/src/nsCrypto.cpp @@ -79,6 +79,9 @@ #include #include "nsWrapperCacheInlines.h" #endif +#ifndef MOZ_DISABLE_CRYPTOLEGACY +#include "mozilla/dom/CRMFObjectBinding.h" +#endif using namespace mozilla; using namespace mozilla::dom; @@ -214,15 +217,14 @@ NS_INTERFACE_MAP_END_INHERITING(mozilla::dom::Crypto) NS_IMPL_ADDREF_INHERITED(nsCrypto, mozilla::dom::Crypto) NS_IMPL_RELEASE_INHERITED(nsCrypto, mozilla::dom::Crypto) -// QueryInterface implementation for nsCRMFObject -NS_INTERFACE_MAP_BEGIN(nsCRMFObject) +// QueryInterface implementation for CRMFObject +NS_INTERFACE_MAP_BEGIN(CRMFObject) NS_INTERFACE_MAP_ENTRY(nsIDOMCRMFObject) NS_INTERFACE_MAP_ENTRY(nsISupports) - NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CRMFObject) NS_INTERFACE_MAP_END -NS_IMPL_ADDREF(nsCRMFObject) -NS_IMPL_RELEASE(nsCRMFObject) +NS_IMPL_ADDREF(CRMFObject) +NS_IMPL_RELEASE(CRMFObject) // QueryInterface implementation for nsPkcs11 #endif // MOZ_DISABLE_CRYPTOLEGACY @@ -1858,7 +1860,7 @@ GetISupportsFromContext(JSContext *cx) //The top level method which is a member of nsIDOMCrypto //for generate a base64 encoded CRMF request. -already_AddRefed +already_AddRefed nsCrypto::GenerateCRMFRequest(JSContext* aContext, const nsCString& aReqDN, const nsCString& aRegToken, @@ -1869,7 +1871,6 @@ nsCrypto::GenerateCRMFRequest(JSContext* aContext, ErrorResult& aRv) { nsNSSShutDownPreventionLock locker; - nsCOMPtr crmf; nsresult nrv; uint32_t argc = aArgs.Length(); @@ -2029,9 +2030,8 @@ nsCrypto::GenerateCRMFRequest(JSContext* aContext, aRv.Throw(NS_ERROR_FAILURE); return nullptr; } - nsCRMFObject *newObject = new nsCRMFObject(); + nsRefPtr newObject = new CRMFObject(); newObject->SetCRMFRequest(encodedRequest); - crmf = newObject; nsFreeKeyPairInfo(keyids, numRequests); // Post an event on the UI queue so that the JS gets called after @@ -2080,7 +2080,7 @@ nsCrypto::GenerateCRMFRequest(JSContext* aContext, delete cryptoRunnable; } - return crmf.forget(); + return newObject.forget(); } // Reminder that we inherit the memory passed into us here. @@ -2855,29 +2855,29 @@ nsCrypto::DisableRightClick(ErrorResult& aRv) aRv.Throw(NS_ERROR_NOT_IMPLEMENTED); } -nsCRMFObject::nsCRMFObject() +CRMFObject::CRMFObject() { } -nsCRMFObject::~nsCRMFObject() +CRMFObject::~CRMFObject() { } -nsresult -nsCRMFObject::init() +JSObject* +CRMFObject::WrapObject(JSContext *aCx, JS::Handle aScope) { - return NS_OK; + return CRMFObjectBinding::Wrap(aCx, aScope, this); } NS_IMETHODIMP -nsCRMFObject::GetRequest(nsAString& aRequest) +CRMFObject::GetRequest(nsAString& aRequest) { aRequest.Assign(mBase64Request); return NS_OK; } nsresult -nsCRMFObject::SetCRMFRequest(char *inRequest) +CRMFObject::SetCRMFRequest(char *inRequest) { mBase64Request.AssignWithConversion(inRequest); return NS_OK; diff --git a/security/manager/ssl/src/nsCrypto.h b/security/manager/ssl/src/nsCrypto.h index 9187a70c162..3c86d500385 100644 --- a/security/manager/ssl/src/nsCrypto.h +++ b/security/manager/ssl/src/nsCrypto.h @@ -24,23 +24,29 @@ class nsIPSMComponent; class nsIDOMScriptObjectFactory; -class nsCRMFObject : public nsIDOMCRMFObject +namespace mozilla { +namespace dom { + +class CRMFObject : public nsIDOMCRMFObject { public: - nsCRMFObject(); - virtual ~nsCRMFObject(); + CRMFObject(); + virtual ~CRMFObject(); NS_DECL_NSIDOMCRMFOBJECT NS_DECL_ISUPPORTS - nsresult init(); - nsresult SetCRMFRequest(char *inRequest); + + JSObject* WrapObject(JSContext *aCx, JS::Handle aScope); private: nsString mBase64Request; }; +} +} + class nsCrypto: public mozilla::dom::Crypto { public: @@ -59,7 +65,7 @@ public: virtual void GetVersion(nsString& aVersion) MOZ_OVERRIDE; - virtual already_AddRefed + virtual already_AddRefed GenerateCRMFRequest(JSContext* aContext, const nsCString& aReqDN, const nsCString& aRegToken,