From e353fded48c53d839d5e0726b6c9a81af2a3d816 Mon Sep 17 00:00:00 2001 From: Terrence Cole Date: Tue, 16 Jun 2015 16:03:11 -0700 Subject: [PATCH 01/63] Bug 1174850 - Remove the explicitly relocatable store buffers; r=jonco --- js/src/gc/Barrier.h | 4 ++-- js/src/gc/Nursery.cpp | 14 ++------------ js/src/gc/StoreBuffer.cpp | 6 ------ js/src/gc/StoreBuffer.h | 36 ++++++------------------------------ js/src/jsobj.h | 4 ++-- 5 files changed, 12 insertions(+), 52 deletions(-) diff --git a/js/src/gc/Barrier.h b/js/src/gc/Barrier.h index 7f4b71907f62..c38bdaea1c87 100644 --- a/js/src/gc/Barrier.h +++ b/js/src/gc/Barrier.h @@ -277,7 +277,7 @@ struct InternalGCMethods if (vp->isObject()) { gc::StoreBuffer* sb = reinterpret_cast(&vp->toObject())->storeBuffer(); if (sb) - sb->putRelocatableValueFromAnyThread(vp); + sb->putValueFromAnyThread(vp); } } @@ -287,7 +287,7 @@ struct InternalGCMethods MOZ_ASSERT(!CurrentThreadIsIonCompiling()); JSRuntime* rt = static_cast(vp->toGCThing())->runtimeFromAnyThread(); JS::shadow::Runtime* shadowRuntime = JS::shadow::Runtime::asShadowRuntime(rt); - shadowRuntime->gcStoreBufferPtr()->removeRelocatableValueFromAnyThread(vp); + shadowRuntime->gcStoreBufferPtr()->unputValueFromAnyThread(vp); } static void readBarrier(const Value& v) { diff --git a/js/src/gc/Nursery.cpp b/js/src/gc/Nursery.cpp index cca867dadda2..a1a164c8748d 100644 --- a/js/src/gc/Nursery.cpp +++ b/js/src/gc/Nursery.cpp @@ -445,14 +445,6 @@ js::Nursery::collect(JSRuntime* rt, JS::gcreason::Reason reason, ObjectGroupList sb.traceWholeCells(mover); TIME_END(traceWholeCells); - TIME_START(traceRelocatableValues); - sb.traceRelocatableValues(mover); - TIME_END(traceRelocatableValues); - - TIME_START(traceRelocatableCells); - sb.traceRelocatableCells(mover); - TIME_END(traceRelocatableCells); - TIME_START(traceGenericEntries); sb.traceGenericEntries(&mover); TIME_END(traceGenericEntries); @@ -557,13 +549,13 @@ js::Nursery::collect(JSRuntime* rt, JS::gcreason::Reason reason, ObjectGroupList static bool printedHeader = false; if (!printedHeader) { fprintf(stderr, - "MinorGC: Reason PRate Size Time mkVals mkClls mkSlts mkWCll mkRVal mkRCll mkGnrc ckTbls mkRntm mkDbgr clrNOC collct swpABO updtIn runFin frSlts clrSB sweep resize pretnr\n"); + "MinorGC: Reason PRate Size Time mkVals mkClls mkSlts mkWCll mkGnrc ckTbls mkRntm mkDbgr clrNOC collct swpABO updtIn runFin frSlts clrSB sweep resize pretnr\n"); printedHeader = true; } #define FMT " %6" PRIu64 fprintf(stderr, - "MinorGC: %20s %5.1f%% %4d" FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT "\n", + "MinorGC: %20s %5.1f%% %4d" FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT "\n", js::gcstats::ExplainReason(reason), promotionRate * 100, numActiveChunks_, @@ -573,8 +565,6 @@ js::Nursery::collect(JSRuntime* rt, JS::gcreason::Reason reason, ObjectGroupList TIME_TOTAL(traceCells), TIME_TOTAL(traceSlots), TIME_TOTAL(traceWholeCells), - TIME_TOTAL(traceRelocatableValues), - TIME_TOTAL(traceRelocatableCells), TIME_TOTAL(traceGenericEntries), TIME_TOTAL(checkHashTables), TIME_TOTAL(markRuntime), diff --git a/js/src/gc/StoreBuffer.cpp b/js/src/gc/StoreBuffer.cpp index ef9f545c8276..d918865b24a7 100644 --- a/js/src/gc/StoreBuffer.cpp +++ b/js/src/gc/StoreBuffer.cpp @@ -44,8 +44,6 @@ StoreBuffer::enable() !bufferCell.init() || !bufferSlot.init() || !bufferWholeCell.init() || - !bufferRelocVal.init() || - !bufferRelocCell.init() || !bufferGeneric.init()) { return false; @@ -79,8 +77,6 @@ StoreBuffer::clear() bufferCell.clear(); bufferSlot.clear(); bufferWholeCell.clear(); - bufferRelocVal.clear(); - bufferRelocCell.clear(); bufferGeneric.clear(); return true; @@ -104,8 +100,6 @@ StoreBuffer::addSizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf, JS::GCSi sizes->storeBufferCells += bufferCell.sizeOfExcludingThis(mallocSizeOf); sizes->storeBufferSlots += bufferSlot.sizeOfExcludingThis(mallocSizeOf); sizes->storeBufferWholeCells += bufferWholeCell.sizeOfExcludingThis(mallocSizeOf); - sizes->storeBufferRelocVals += bufferRelocVal.sizeOfExcludingThis(mallocSizeOf); - sizes->storeBufferRelocCells += bufferRelocCell.sizeOfExcludingThis(mallocSizeOf); sizes->storeBufferGenerics += bufferGeneric.sizeOfExcludingThis(mallocSizeOf); } diff --git a/js/src/gc/StoreBuffer.h b/js/src/gc/StoreBuffer.h index 9efbf37f81b7..e8375ba43dba 100644 --- a/js/src/gc/StoreBuffer.h +++ b/js/src/gc/StoreBuffer.h @@ -381,8 +381,6 @@ class StoreBuffer MonoTypeBuffer bufferCell; MonoTypeBuffer bufferSlot; MonoTypeBuffer bufferWholeCell; - MonoTypeBuffer bufferRelocVal; - MonoTypeBuffer bufferRelocCell; GenericBuffer bufferGeneric; bool cancelIonCompilations_; @@ -395,10 +393,9 @@ class StoreBuffer public: explicit StoreBuffer(JSRuntime* rt, const Nursery& nursery) - : bufferVal(), bufferCell(), bufferSlot(), bufferWholeCell(), - bufferRelocVal(), bufferRelocCell(), bufferGeneric(), cancelIonCompilations_(false), - runtime_(rt), nursery_(nursery), aboutToOverflow_(false), enabled_(false), - mEntered(false) + : bufferVal(), bufferCell(), bufferSlot(), bufferWholeCell(), bufferGeneric(), + cancelIonCompilations_(false), runtime_(rt), nursery_(nursery), aboutToOverflow_(false), + enabled_(false), mEntered(false) { } @@ -414,8 +411,10 @@ class StoreBuffer bool cancelIonCompilations() const { return cancelIonCompilations_; } /* Insert a single edge into the buffer/remembered set. */ - void putValueFromAnyThread(JS::Value* valuep) { putFromAnyThread(bufferVal, ValueEdge(valuep)); } + void putValueFromAnyThread(JS::Value* vp) { putFromAnyThread(bufferVal, ValueEdge(vp)); } + void unputValueFromAnyThread(JS::Value* vp) { unputFromAnyThread(bufferVal, ValueEdge(vp)); } void putCellFromAnyThread(Cell** cellp) { putFromAnyThread(bufferCell, CellPtrEdge(cellp)); } + void unputCellFromAnyThread(Cell** cellp) { unputFromAnyThread(bufferCell, CellPtrEdge(cellp)); } void putSlotFromAnyThread(NativeObject* obj, int kind, int32_t start, int32_t count) { putFromAnyThread(bufferSlot, SlotsEdge(obj, kind, start, count)); } @@ -424,20 +423,6 @@ class StoreBuffer putFromMainThread(bufferWholeCell, WholeCellEdges(cell)); } - /* Insert or update a single edge in the Relocatable buffer. */ - void putRelocatableValueFromAnyThread(JS::Value* valuep) { - putFromAnyThread(bufferRelocVal, ValueEdge(valuep)); - } - void removeRelocatableValueFromAnyThread(JS::Value* valuep) { - unputFromAnyThread(bufferRelocVal, ValueEdge(valuep)); - } - void putRelocatableCellFromAnyThread(Cell** cellp) { - putFromAnyThread(bufferRelocCell, CellPtrEdge(cellp)); - } - void removeRelocatableCellFromAnyThread(Cell** cellp) { - unputFromAnyThread(bufferRelocCell, CellPtrEdge(cellp)); - } - /* Insert an entry into the generic buffer. */ template void putGeneric(const T& t) { putFromAnyThread(bufferGeneric, t);} @@ -457,20 +442,11 @@ class StoreBuffer void traceCells(TenuringTracer& mover) { bufferCell.trace(this, mover); } void traceSlots(TenuringTracer& mover) { bufferSlot.trace(this, mover); } void traceWholeCells(TenuringTracer& mover) { bufferWholeCell.trace(this, mover); } - void traceRelocatableValues(TenuringTracer& mover) { bufferRelocVal.trace(this, mover); } - void traceRelocatableCells(TenuringTracer& mover) { bufferRelocCell.trace(this, mover); } void traceGenericEntries(JSTracer *trc) { bufferGeneric.trace(this, trc); } /* For use by our owned buffers and for testing. */ void setAboutToOverflow(); - /* For jit access to the raw buffer. */ - void oolSinkStoresForWholeCellBuffer() { bufferWholeCell.sinkStores(this); } - void* addressOfWholeCellBufferPointer() const { return (void*)&bufferWholeCell.insert_; } - void* addressOfWholeCellBufferEnd() const { - return (void*)(bufferWholeCell.buffer_ + bufferWholeCell.NumBufferEntries); - } - void addSizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf, JS::GCSizes* sizes); }; diff --git a/js/src/jsobj.h b/js/src/jsobj.h index 23fd3b35cb06..05b3424fc8ce 100644 --- a/js/src/jsobj.h +++ b/js/src/jsobj.h @@ -649,7 +649,7 @@ JSObject::writeBarrierPostRelocate(JSObject* obj, void* cellp) MOZ_ASSERT(obj == *static_cast(cellp)); js::gc::StoreBuffer* storeBuffer = obj->storeBuffer(); if (storeBuffer) - storeBuffer->putRelocatableCellFromAnyThread(static_cast(cellp)); + storeBuffer->putCellFromAnyThread(static_cast(cellp)); } /* static */ MOZ_ALWAYS_INLINE void @@ -658,7 +658,7 @@ JSObject::writeBarrierPostRemove(JSObject* obj, void* cellp) MOZ_ASSERT(cellp); MOZ_ASSERT(obj); MOZ_ASSERT(obj == *static_cast(cellp)); - obj->shadowRuntimeFromAnyThread()->gcStoreBufferPtr()->removeRelocatableCellFromAnyThread( + obj->shadowRuntimeFromAnyThread()->gcStoreBufferPtr()->unputCellFromAnyThread( static_cast(cellp)); } From fc9a4cb52f969b8993b1e5c6a816c2c62768c814 Mon Sep 17 00:00:00 2001 From: Andrea Marchesini Date: Mon, 29 Jun 2015 17:02:53 +0100 Subject: [PATCH 02/63] Bug 1177916 - URLSearchParams::GetParentObject should not return nullptr, r=smaug --- dom/base/Link.cpp | 2 +- dom/base/URL.cpp | 2 +- dom/base/URLSearchParams.cpp | 24 +++++++++++++------ dom/base/URLSearchParams.h | 9 ++++--- dom/fetch/Fetch.cpp | 6 ++--- dom/workers/URL.cpp | 2 +- .../components/places/tests/cpp/mock_Link.h | 3 ++- 7 files changed, 31 insertions(+), 17 deletions(-) diff --git a/dom/base/Link.cpp b/dom/base/Link.cpp index fe91eb6cb1ed..0d7e70a57b0a 100644 --- a/dom/base/Link.cpp +++ b/dom/base/Link.cpp @@ -613,7 +613,7 @@ void Link::CreateSearchParamsIfNeeded() { if (!mSearchParams) { - mSearchParams = new URLSearchParams(this); + mSearchParams = new URLSearchParams(this, this); UpdateURLSearchParams(); } } diff --git a/dom/base/URL.cpp b/dom/base/URL.cpp index 5e4d46313074..2eb0aff1f73f 100644 --- a/dom/base/URL.cpp +++ b/dom/base/URL.cpp @@ -533,7 +533,7 @@ void URL::CreateSearchParamsIfNeeded() { if (!mSearchParams) { - mSearchParams = new URLSearchParams(this); + mSearchParams = new URLSearchParams(this, this); UpdateURLSearchParams(); } } diff --git a/dom/base/URLSearchParams.cpp b/dom/base/URLSearchParams.cpp index 84e0d7e0f695..9c8991067448 100644 --- a/dom/base/URLSearchParams.cpp +++ b/dom/base/URLSearchParams.cpp @@ -293,7 +293,7 @@ URLParams::Serialize(nsAString& aValue) const } } -NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(URLSearchParams, mObserver) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(URLSearchParams, mParent, mObserver) NS_IMPL_CYCLE_COLLECTING_ADDREF(URLSearchParams) NS_IMPL_CYCLE_COLLECTING_RELEASE(URLSearchParams) @@ -302,13 +302,19 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(URLSearchParams) NS_INTERFACE_MAP_ENTRY(nsISupports) NS_INTERFACE_MAP_END -URLSearchParams::URLSearchParams(URLSearchParamsObserver* aObserver) - : mParams(new URLParams()), mObserver(aObserver) +URLSearchParams::URLSearchParams(nsISupports* aParent, + URLSearchParamsObserver* aObserver) + : mParams(new URLParams()) + , mParent(aParent) + , mObserver(aObserver) { } -URLSearchParams::URLSearchParams(const URLSearchParams& aOther) - : mParams(new URLParams(*aOther.mParams.get())), mObserver(aOther.mObserver) +URLSearchParams::URLSearchParams(nsISupports* aParent, + const URLSearchParams& aOther) + : mParams(new URLParams(*aOther.mParams.get())) + , mParent(aParent) + , mObserver(aOther.mObserver) { } @@ -328,8 +334,10 @@ URLSearchParams::Constructor(const GlobalObject& aGlobal, const nsAString& aInit, ErrorResult& aRv) { - nsRefPtr sp = new URLSearchParams(nullptr); + nsRefPtr sp = + new URLSearchParams(aGlobal.GetAsSupports(), nullptr); sp->ParseInput(NS_ConvertUTF16toUTF8(aInit)); + return sp.forget(); } @@ -338,7 +346,9 @@ URLSearchParams::Constructor(const GlobalObject& aGlobal, URLSearchParams& aInit, ErrorResult& aRv) { - nsRefPtr sp = new URLSearchParams(aInit); + nsRefPtr sp = + new URLSearchParams(aGlobal.GetAsSupports(), aInit); + return sp.forget(); } diff --git a/dom/base/URLSearchParams.h b/dom/base/URLSearchParams.h index f32a02d471fe..f60461faef1a 100644 --- a/dom/base/URLSearchParams.h +++ b/dom/base/URLSearchParams.h @@ -114,14 +114,16 @@ public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(URLSearchParams) - explicit URLSearchParams(URLSearchParamsObserver* aObserver); + URLSearchParams(nsISupports* aParent, + URLSearchParamsObserver* aObserver); - explicit URLSearchParams(const URLSearchParams& aOther); + URLSearchParams(nsISupports* aParent, + const URLSearchParams& aOther); // WebIDL methods nsISupports* GetParentObject() const { - return nullptr; + return mParent; } virtual JSObject* @@ -174,6 +176,7 @@ private: void NotifyObserver(); UniquePtr mParams; + nsCOMPtr mParent; nsRefPtr mObserver; }; diff --git a/dom/fetch/Fetch.cpp b/dom/fetch/Fetch.cpp index e61d0339593d..216f40d2cb79 100644 --- a/dom/fetch/Fetch.cpp +++ b/dom/fetch/Fetch.cpp @@ -1543,12 +1543,12 @@ FetchBody::ContinueConsumeBody(nsresult aStatus, uint32_t aResultLength } if (isValidUrlEncodedMimeType) { - nsRefPtr params = new URLSearchParams(nullptr); - params->ParseInput(data); + URLParams params; + params.ParseInput(data); nsRefPtr fd = new nsFormData(DerivedClass()->GetParentObject()); FillFormIterator iterator(fd); - DebugOnly status = params->ForEach(iterator); + DebugOnly status = params.ForEach(iterator); MOZ_ASSERT(status); localPromise->MaybeResolve(fd); diff --git a/dom/workers/URL.cpp b/dom/workers/URL.cpp index b0bb9f2394aa..9dccd72de5df 100644 --- a/dom/workers/URL.cpp +++ b/dom/workers/URL.cpp @@ -952,7 +952,7 @@ void URL::CreateSearchParamsIfNeeded() { if (!mSearchParams) { - mSearchParams = new URLSearchParams(this); + mSearchParams = new URLSearchParams(this, this); UpdateURLSearchParams(); } } diff --git a/toolkit/components/places/tests/cpp/mock_Link.h b/toolkit/components/places/tests/cpp/mock_Link.h index 42a94c530088..a5e641c8c59f 100644 --- a/toolkit/components/places/tests/cpp/mock_Link.h +++ b/toolkit/components/places/tests/cpp/mock_Link.h @@ -145,7 +145,8 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(URLSearchParams) NS_INTERFACE_MAP_END -URLSearchParams::URLSearchParams(URLSearchParamsObserver* aObserver) +URLSearchParams::URLSearchParams(nsISupports* aParent, + URLSearchParamsObserver* aObserver) { } From 3fb4f1025030b6c876f9aae8abdfe2e2cf76e897 Mon Sep 17 00:00:00 2001 From: Andrea Marchesini Date: Mon, 29 Jun 2015 17:03:47 +0100 Subject: [PATCH 03/63] Bug 1177916 - URL should be a nsWrapperCache object, r=smaug --- dom/base/URL.cpp | 38 ++++++++++++++++++++------------------ dom/base/URL.h | 20 +++++++++++++++----- dom/bindings/Bindings.conf | 5 +---- dom/workers/URL.cpp | 15 ++++++++------- dom/workers/URL.h | 6 ++++-- 5 files changed, 48 insertions(+), 36 deletions(-) diff --git a/dom/base/URL.cpp b/dom/base/URL.cpp index 2eb0aff1f73f..e00582234cbb 100644 --- a/dom/base/URL.cpp +++ b/dom/base/URL.cpp @@ -26,12 +26,12 @@ namespace dom { NS_IMPL_CYCLE_COLLECTION_CLASS(URL) NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(URL) - if (tmp->mSearchParams) { - NS_IMPL_CYCLE_COLLECTION_UNLINK(mSearchParams) - } + NS_IMPL_CYCLE_COLLECTION_UNLINK(mParent) + NS_IMPL_CYCLE_COLLECTION_UNLINK(mSearchParams) NS_IMPL_CYCLE_COLLECTION_UNLINK_END NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(URL) + NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mParent) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mSearchParams) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END @@ -42,22 +42,23 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(URL) NS_INTERFACE_MAP_ENTRY(nsISupports) NS_INTERFACE_MAP_END -URL::URL(already_AddRefed aURI) - : mURI(aURI) +URL::URL(nsISupports* aParent, already_AddRefed aURI) + : mParent(aParent) + , mURI(aURI) { } -bool -URL::WrapObject(JSContext* aCx, JS::Handle aGivenProto, JS::MutableHandle aReflector) +JSObject* +URL::WrapObject(JSContext* aCx, JS::Handle aGivenProto) { - return URLBinding::Wrap(aCx, this, aGivenProto, aReflector); + return URLBinding::Wrap(aCx, this, aGivenProto); } /* static */ already_AddRefed URL::Constructor(const GlobalObject& aGlobal, const nsAString& aUrl, URL& aBase, ErrorResult& aRv) { - return Constructor(aUrl, aBase.GetURI(), aRv); + return Constructor(aGlobal.GetAsSupports(), aUrl, aBase.GetURI(), aRv); } /* static */ already_AddRefed @@ -65,22 +66,22 @@ URL::Constructor(const GlobalObject& aGlobal, const nsAString& aUrl, const Optional& aBase, ErrorResult& aRv) { if (aBase.WasPassed()) { - return Constructor(aUrl, aBase.Value(), aRv); + return Constructor(aGlobal.GetAsSupports(), aUrl, aBase.Value(), aRv); } - return Constructor(aUrl, nullptr, aRv); + return Constructor(aGlobal.GetAsSupports(), aUrl, nullptr, aRv); } /* static */ already_AddRefed URL::Constructor(const GlobalObject& aGlobal, const nsAString& aUrl, const nsAString& aBase, ErrorResult& aRv) { - return Constructor(aUrl, aBase, aRv); + return Constructor(aGlobal.GetAsSupports(), aUrl, aBase, aRv); } /* static */ already_AddRefed -URL::Constructor(const nsAString& aUrl, const nsAString& aBase, - ErrorResult& aRv) +URL::Constructor(nsISupports* aParent, const nsAString& aUrl, + const nsAString& aBase, ErrorResult& aRv) { nsCOMPtr baseUri; nsresult rv = NS_NewURI(getter_AddRefs(baseUri), aBase, nullptr, nullptr, @@ -90,12 +91,13 @@ URL::Constructor(const nsAString& aUrl, const nsAString& aBase, return nullptr; } - return Constructor(aUrl, baseUri, aRv); + return Constructor(aParent, aUrl, baseUri, aRv); } /* static */ already_AddRefed -URL::Constructor(const nsAString& aUrl, nsIURI* aBase, ErrorResult& aRv) +URL::Constructor(nsISupports* aParent, const nsAString& aUrl, nsIURI* aBase, + ErrorResult& aRv) { nsCOMPtr uri; nsresult rv = NS_NewURI(getter_AddRefs(uri), aUrl, nullptr, aBase, @@ -105,7 +107,7 @@ URL::Constructor(const nsAString& aUrl, nsIURI* aBase, ErrorResult& aRv) return nullptr; } - nsRefPtr url = new URL(uri.forget()); + nsRefPtr url = new URL(aParent, uri.forget()); return url.forget(); } @@ -533,7 +535,7 @@ void URL::CreateSearchParamsIfNeeded() { if (!mSearchParams) { - mSearchParams = new URLSearchParams(this, this); + mSearchParams = new URLSearchParams(mParent, this); UpdateURLSearchParams(); } } diff --git a/dom/base/URL.h b/dom/base/URL.h index be7a1b72cf09..2f6613df604d 100644 --- a/dom/base/URL.h +++ b/dom/base/URL.h @@ -11,6 +11,7 @@ #include "nsCycleCollectionParticipant.h" #include "nsAutoPtr.h" #include "nsString.h" +#include "nsWrapperCache.h" class nsISupports; class nsIURI; @@ -32,6 +33,7 @@ class URLProxy; } class URL final : public URLSearchParamsObserver + , public nsWrapperCache { ~URL() {} @@ -39,11 +41,16 @@ public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS NS_DECL_CYCLE_COLLECTION_CLASS(URL) - explicit URL(already_AddRefed aURI); + URL(nsISupports* aParent, already_AddRefed aURI); // WebIDL methods - bool - WrapObject(JSContext* aCx, JS::Handle aGivenProto, JS::MutableHandle aReflector); + nsISupports* GetParentObject() const + { + return mParent; + } + + virtual JSObject* + WrapObject(JSContext* aCx, JS::Handle aGivenProto) override; static already_AddRefed Constructor(const GlobalObject& aGlobal, const nsAString& aUrl, @@ -56,9 +63,11 @@ public: Constructor(const GlobalObject& aGlobal, const nsAString& aUrl, const nsAString& aBase, ErrorResult& aRv); static already_AddRefed - Constructor(const nsAString& aUrl, const nsAString& aBase, ErrorResult& aRv); + Constructor(nsISupports* aParent, const nsAString& aUrl, + const nsAString& aBase, ErrorResult& aRv); static already_AddRefed - Constructor(const nsAString& aUrl, nsIURI* aBase, ErrorResult& aRv); + Constructor(nsISupports* aParent, const nsAString& aUrl, + nsIURI* aBase, ErrorResult& aRv); static void CreateObjectURL(const GlobalObject& aGlobal, Blob& aBlob, @@ -150,6 +159,7 @@ private: nsAString& aResult, ErrorResult& aError); + nsCOMPtr mParent; nsCOMPtr mURI; nsRefPtr mSearchParams; diff --git a/dom/bindings/Bindings.conf b/dom/bindings/Bindings.conf index 305c908b1681..e3a4b208c3ca 100644 --- a/dom/bindings/Bindings.conf +++ b/dom/bindings/Bindings.conf @@ -1308,12 +1308,9 @@ DOMInterfaces = { 'implicitJSContext' : [ 'undo', 'redo', 'transact' ], }, -'URL' : [{ - 'wrapperCache': False, -}, +'URL' : [{}, { 'workers': True, - 'wrapperCache': False, }], 'VRDevice': { diff --git a/dom/workers/URL.cpp b/dom/workers/URL.cpp index 9dccd72de5df..2a172ea78fa3 100644 --- a/dom/workers/URL.cpp +++ b/dom/workers/URL.cpp @@ -259,11 +259,12 @@ public: nsRefPtr url; if (mBaseProxy) { - url = mozilla::dom::URL::Constructor(mURL, mBaseProxy->URI(), mRv); + url = mozilla::dom::URL::Constructor(nullptr, mURL, mBaseProxy->URI(), + mRv); } else if (!mBase.IsVoid()) { - url = mozilla::dom::URL::Constructor(mURL, mBase, mRv); + url = mozilla::dom::URL::Constructor(nullptr, mURL, mBase, mRv); } else { - url = mozilla::dom::URL::Constructor(mURL, nullptr, mRv); + url = mozilla::dom::URL::Constructor(nullptr, mURL, nullptr, mRv); } if (mRv.Failed()) { @@ -580,10 +581,10 @@ URL::~URL() } } -bool -URL::WrapObject(JSContext* aCx, JS::Handle aGivenProto, JS::MutableHandle aReflector) +JSObject* +URL::WrapObject(JSContext* aCx, JS::Handle aGivenProto) { - return URLBinding_workers::Wrap(aCx, this, aGivenProto, aReflector); + return URLBinding_workers::Wrap(aCx, this, aGivenProto); } void @@ -952,7 +953,7 @@ void URL::CreateSearchParamsIfNeeded() { if (!mSearchParams) { - mSearchParams = new URLSearchParams(this, this); + mSearchParams = new URLSearchParams(nullptr, this); UpdateURLSearchParams(); } } diff --git a/dom/workers/URL.h b/dom/workers/URL.h index 110868bff43f..eaed4ceec71c 100644 --- a/dom/workers/URL.h +++ b/dom/workers/URL.h @@ -12,6 +12,7 @@ #include "mozilla/ErrorResult.h" #include "mozilla/dom/BindingDeclarations.h" #include "mozilla/dom/URLSearchParams.h" +#include "nsWrapperCache.h" namespace mozilla { namespace dom { @@ -26,6 +27,7 @@ class URLProxy; class ConstructorRunnable; class URL final : public mozilla::dom::URLSearchParamsObserver + , public nsWrapperCache { typedef mozilla::dom::URLSearchParams URLSearchParams; @@ -44,8 +46,8 @@ public: return nullptr; } - bool - WrapObject(JSContext* aCx, JS::Handle aGivenProto, JS::MutableHandle aReflector); + virtual JSObject* + WrapObject(JSContext* aCx, JS::Handle aGivenProto) override; // Methods for WebIDL From c72540ed84b3fb0feeb669d51acfb177be7a52f2 Mon Sep 17 00:00:00 2001 From: Andrea Marchesini Date: Mon, 29 Jun 2015 17:42:41 +0100 Subject: [PATCH 04/63] Bug 1178261 - make BroadcastChannel CC skippable, r=smaug --- dom/broadcastchannel/BroadcastChannel.h | 5 +++++ dom/events/DOMEventTargetHelper.cpp | 6 +++++- dom/events/DOMEventTargetHelper.h | 8 ++++++++ dom/messagechannel/MessagePort.cpp | 27 ------------------------- dom/messagechannel/MessagePort.h | 9 +++++++-- 5 files changed, 25 insertions(+), 30 deletions(-) diff --git a/dom/broadcastchannel/BroadcastChannel.h b/dom/broadcastchannel/BroadcastChannel.h index 78fe2b99eaff..792b53019d5f 100644 --- a/dom/broadcastchannel/BroadcastChannel.h +++ b/dom/broadcastchannel/BroadcastChannel.h @@ -105,6 +105,11 @@ private: void UpdateMustKeepAlive(); + bool IsCertainlyAliveForCC() const override + { + return mIsKeptAlive; + } + nsRefPtr mActor; nsTArray> mPendingMessages; diff --git a/dom/events/DOMEventTargetHelper.cpp b/dom/events/DOMEventTargetHelper.cpp index aa9be0be2294..327b644db430 100644 --- a/dom/events/DOMEventTargetHelper.cpp +++ b/dom/events/DOMEventTargetHelper.cpp @@ -48,10 +48,14 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(DOMEventTargetHelper) NS_IMPL_CYCLE_COLLECTION_UNLINK_END NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN(DOMEventTargetHelper) - if (tmp->IsBlack()) { + if (tmp->IsBlack() || tmp->IsCertainlyAliveForCC()) { if (tmp->mListenerManager) { tmp->mListenerManager->MarkForCC(); } + if (!tmp->IsBlack() && tmp->PreservingWrapper()) { + // This marks the wrapper black. + tmp->GetWrapper(); + } return true; } NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_END diff --git a/dom/events/DOMEventTargetHelper.h b/dom/events/DOMEventTargetHelper.h index 60e1f7d405a4..126dfe89de2e 100644 --- a/dom/events/DOMEventTargetHelper.h +++ b/dom/events/DOMEventTargetHelper.h @@ -167,6 +167,14 @@ protected: nsresult WantsUntrusted(bool* aRetVal); + // If this method returns true your object is kept alive until it returns + // false. You can use this method instead using + // NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN macro. + virtual bool IsCertainlyAliveForCC() const + { + return false; + } + nsRefPtr mListenerManager; // Make |event| trusted and dispatch |aEvent| to |this|. nsresult DispatchTrustedEvent(nsIDOMEvent* aEvent); diff --git a/dom/messagechannel/MessagePort.cpp b/dom/messagechannel/MessagePort.cpp index a6bb1e93475a..3b8b5e633254 100644 --- a/dom/messagechannel/MessagePort.cpp +++ b/dom/messagechannel/MessagePort.cpp @@ -192,29 +192,6 @@ MessagePortBase::MessagePortBase() NS_IMPL_CYCLE_COLLECTION_CLASS(MessagePort) -NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN(MessagePort) - bool isBlack = tmp->IsBlack(); - if (isBlack || tmp->mIsKeptAlive) { - if (tmp->mListenerManager) { - tmp->mListenerManager->MarkForCC(); - } - if (!isBlack && tmp->PreservingWrapper()) { - // This marks the wrapper black. - tmp->GetWrapper(); - } - return true; - } -NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_END - -NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_IN_CC_BEGIN(MessagePort) - return tmp-> - IsBlackAndDoesNotNeedTracing(static_cast(tmp)); -NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_IN_CC_END - -NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_THIS_BEGIN(MessagePort) - return tmp->IsBlack(); -NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_THIS_END - NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(MessagePort, MessagePortBase) if (tmp->mDispatchRunnable) { @@ -235,10 +212,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(MessagePort, NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mUnshippedEntangledPort); NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END -NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(MessagePort, - MessagePortBase) -NS_IMPL_CYCLE_COLLECTION_TRACE_END - NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(MessagePort) NS_INTERFACE_MAP_ENTRY(nsIIPCBackgroundChildCreateCallback) NS_INTERFACE_MAP_ENTRY(nsIObserver) diff --git a/dom/messagechannel/MessagePort.h b/dom/messagechannel/MessagePort.h index 6cf673e335cf..28b2920c2099 100644 --- a/dom/messagechannel/MessagePort.h +++ b/dom/messagechannel/MessagePort.h @@ -75,8 +75,8 @@ public: NS_DECL_NSIIPCBACKGROUNDCHILDCREATECALLBACK NS_DECL_NSIOBSERVER NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS_INHERITED(MessagePort, - DOMEventTargetHelper) + NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(MessagePort, + MessagePortBase) static already_AddRefed Create(nsPIDOMWindow* aWindow, const nsID& aUUID, @@ -177,6 +177,11 @@ private: // We release the object when the port is closed or disentangled. void UpdateMustKeepAlive(); + bool IsCertainlyAliveForCC() const override + { + return mIsKeptAlive; + } + nsAutoPtr mWorkerFeature; nsRefPtr mDispatchRunnable; From 20599f646b19e33a5e001b95590b745598ac260e Mon Sep 17 00:00:00 2001 From: Andrea Marchesini Date: Mon, 29 Jun 2015 17:44:18 +0100 Subject: [PATCH 05/63] Bug 1156875 - patch 3 - nsIGlobalObject members correctly ordered in the header file, r=bz --- dom/base/nsIGlobalObject.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/dom/base/nsIGlobalObject.h b/dom/base/nsIGlobalObject.h index d76279d17620..e937036af296 100644 --- a/dom/base/nsIGlobalObject.h +++ b/dom/base/nsIGlobalObject.h @@ -22,6 +22,7 @@ class nsIPrincipal; class nsIGlobalObject : public nsISupports { + nsTArray mHostObjectURIs; bool mIsDying; protected: @@ -69,10 +70,6 @@ public: protected: virtual ~nsIGlobalObject(); -private: - nsTArray mHostObjectURIs; - -protected: void StartDying() { From 86c069f39e87cf3bc7efc45875377eb832701784 Mon Sep 17 00:00:00 2001 From: Shu-yu Guo Date: Mon, 29 Jun 2015 10:19:36 -0700 Subject: [PATCH 06/63] Bug 1176511 - Minor GC when tracking types as a better bandaid. (r=terrence) --- js/src/jit/OptimizationTracking.cpp | 20 +++++++++++--------- js/src/jit/OptimizationTracking.h | 3 ++- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/js/src/jit/OptimizationTracking.cpp b/js/src/jit/OptimizationTracking.cpp index c61b82ad7a88..be94dad70fa4 100644 --- a/js/src/jit/OptimizationTracking.cpp +++ b/js/src/jit/OptimizationTracking.cpp @@ -375,18 +375,20 @@ class jit::UniqueTrackedTypes { } bool init() { return map_.init(); } - bool getIndexOf(TypeSet::Type ty, uint8_t* indexp); + bool getIndexOf(JSContext* cx, TypeSet::Type ty, uint8_t* indexp); uint32_t count() const { MOZ_ASSERT(map_.count() == list_.length()); return list_.length(); } bool enumerate(TypeSet::TypeList* types) const; }; bool -UniqueTrackedTypes::getIndexOf(TypeSet::Type ty, uint8_t* indexp) +UniqueTrackedTypes::getIndexOf(JSContext* cx, TypeSet::Type ty, uint8_t* indexp) { - // For now, tracking of nursery singleton objects is not supported. - if (ty.isSingletonUnchecked() && IsInsideNursery(ty.singleton())) - ty = TypeSet::UnknownType(); + // FIXME bug 1176511. It is unduly onerous to make nursery things work + // correctly as keys of hash tables. Until then, since TypeSet::Types may + // be in the nursery, we evict the nursery before tracking types. + cx->runtime()->gc.evictNursery(); + MOZ_ASSERT_IF(ty.isSingletonUnchecked(), !IsInsideNursery(ty.singleton())); TypesMap::AddPtr p = map_.lookupForAdd(ty); if (p) { @@ -600,15 +602,15 @@ OptimizationAttempt::writeCompact(CompactBufferWriter& writer) const } bool -OptimizationTypeInfo::writeCompact(CompactBufferWriter& writer, - UniqueTrackedTypes& uniqueTypes) const +OptimizationTypeInfo::writeCompact(JSContext* cx, CompactBufferWriter& writer, + UniqueTrackedTypes& uniqueTypes) const { writer.writeUnsigned((uint32_t) site_); writer.writeUnsigned((uint32_t) mirType_); writer.writeUnsigned(types_.length()); for (uint32_t i = 0; i < types_.length(); i++) { uint8_t index; - if (!uniqueTypes.getIndexOf(types_[i], &index)) + if (!uniqueTypes.getIndexOf(cx, types_[i], &index)) return false; writer.writeByte(index); } @@ -954,7 +956,7 @@ jit::WriteIonTrackedOptimizationsTable(JSContext* cx, CompactBufferWriter& write return false; for (const OptimizationTypeInfo* t = v->begin(); t != v->end(); t++) { - if (!t->writeCompact(writer, uniqueTypes)) + if (!t->writeCompact(cx, writer, uniqueTypes)) return false; } } diff --git a/js/src/jit/OptimizationTracking.h b/js/src/jit/OptimizationTracking.h index d39dac246d7e..af142c28bd17 100644 --- a/js/src/jit/OptimizationTracking.h +++ b/js/src/jit/OptimizationTracking.h @@ -87,7 +87,8 @@ class OptimizationTypeInfo HashNumber hash() const; - bool writeCompact(CompactBufferWriter& writer, UniqueTrackedTypes& uniqueTypes) const; + bool writeCompact(JSContext* cx, CompactBufferWriter& writer, + UniqueTrackedTypes& uniqueTypes) const; }; typedef Vector TempOptimizationTypeInfoVector; From 4e82d78121f4af216c37499af6cd3052588f9529 Mon Sep 17 00:00:00 2001 From: James Graham Date: Mon, 29 Jun 2015 17:01:48 +0100 Subject: [PATCH 07/63] Bug 1172411 - Disable unstable CSP test on Windows, r=RyanVM --- .../script-src/script-src-1_2.html.ini | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 testing/web-platform/meta/content-security-policy/script-src/script-src-1_2.html.ini diff --git a/testing/web-platform/meta/content-security-policy/script-src/script-src-1_2.html.ini b/testing/web-platform/meta/content-security-policy/script-src/script-src-1_2.html.ini new file mode 100644 index 000000000000..82387c997c7b --- /dev/null +++ b/testing/web-platform/meta/content-security-policy/script-src/script-src-1_2.html.ini @@ -0,0 +1,4 @@ +[script-src-1_2.html] + type: testharness + disabled: + if os == "win": bug 1172411 From 6db3e0d0698d059d4d12a5f07fec3d52a5fb068b Mon Sep 17 00:00:00 2001 From: James Graham Date: Mon, 29 Jun 2015 17:02:36 +0100 Subject: [PATCH 08/63] Bug 1094323 - Disable unstable CSP test on Windows, r=RyanVM --- .../script-src/script-src-1_4_1.html.ini | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 testing/web-platform/meta/content-security-policy/script-src/script-src-1_4_1.html.ini diff --git a/testing/web-platform/meta/content-security-policy/script-src/script-src-1_4_1.html.ini b/testing/web-platform/meta/content-security-policy/script-src/script-src-1_4_1.html.ini new file mode 100644 index 000000000000..97191a941827 --- /dev/null +++ b/testing/web-platform/meta/content-security-policy/script-src/script-src-1_4_1.html.ini @@ -0,0 +1,4 @@ +[script-src-1_4_1.html] + type: testharness + disabled: + if os == "win": bug 1094323 From c0744808ad8503acabb980a25380510c398dffc2 Mon Sep 17 00:00:00 2001 From: James Graham Date: Mon, 29 Jun 2015 17:03:34 +0100 Subject: [PATCH 09/63] Bug 1090203 - Disable unstable CSP test on Windows, r=RyanVM --- .../content-security-policy/style-src/style-src-3_2.html.ini | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 testing/web-platform/meta/content-security-policy/style-src/style-src-3_2.html.ini diff --git a/testing/web-platform/meta/content-security-policy/style-src/style-src-3_2.html.ini b/testing/web-platform/meta/content-security-policy/style-src/style-src-3_2.html.ini new file mode 100644 index 000000000000..3a139df45ede --- /dev/null +++ b/testing/web-platform/meta/content-security-policy/style-src/style-src-3_2.html.ini @@ -0,0 +1,4 @@ +[style-src-3_2.html] + type: testharness + disabled: + if os == "win": bug 1090203 From de78de7124db823b0eabad28344a2a0df67ed94e Mon Sep 17 00:00:00 2001 From: Neil Deakin Date: Mon, 29 Jun 2015 14:10:35 -0400 Subject: [PATCH 10/63] Bug 1178373, add listener before opening the popup, r=test-only-change --- toolkit/content/tests/chrome/test_menulist_keynav.xul | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/toolkit/content/tests/chrome/test_menulist_keynav.xul b/toolkit/content/tests/chrome/test_menulist_keynav.xul index ee7a8edc6820..183d1ec5c4f7 100644 --- a/toolkit/content/tests/chrome/test_menulist_keynav.xul +++ b/toolkit/content/tests/chrome/test_menulist_keynav.xul @@ -118,13 +118,14 @@ function differentPressed() list.selectedItem = $("i1"); gShowPopup = true; - list.open = true; gOpenPhase = true; list.addEventListener("popupshown", function popupShownListener() { list.removeEventListener("popupshown", popupShownListener, false); pressLetter(); }, false); + + list.open = true; } } From 791cc48bc559db45d68861c92f642f72baf8a15c Mon Sep 17 00:00:00 2001 From: Chris Manchester Date: Mon, 29 Jun 2015 11:16:50 -0700 Subject: [PATCH 11/63] Bug 917999 - Part 3 - Split tests into harness specific zips.;r=ted --HG-- extra : commitid : 65dFMKKGcoU --- build/gen_test_packages_manifest.py | 6 +++ .../mozharness/android_arm_4_3_config.py | 2 +- .../config/mozharness/android_panda_config.py | 2 +- .../config/mozharness/b2g_emulator_config.py | 2 +- testing/config/mozharness/linux_config.py | 2 +- testing/config/mozharness/mac_config.py | 2 +- testing/config/mozharness/windows_config.py | 2 +- testing/testsuite-targets.mk | 44 +++++++++++++------ toolkit/mozapps/installer/package-name.mk | 7 ++- toolkit/mozapps/installer/upload-files.mk | 5 +++ 10 files changed, 54 insertions(+), 20 deletions(-) diff --git a/build/gen_test_packages_manifest.py b/build/gen_test_packages_manifest.py index 7d7e645a6ae4..5f319a91aaec 100644 --- a/build/gen_test_packages_manifest.py +++ b/build/gen_test_packages_manifest.py @@ -17,9 +17,15 @@ ALL_HARNESSES = [ 'cppunittest', 'jittest', 'mozbase', + 'web-platform', ] PACKAGE_SPECIFIED_HARNESSES = [ + 'cppunittest', + 'mochitest', + 'reftest', + 'xpcshell', + 'web-platform', ] diff --git a/testing/config/mozharness/android_arm_4_3_config.py b/testing/config/mozharness/android_arm_4_3_config.py index dbe4e73d210e..77cd6bba9794 100644 --- a/testing/config/mozharness/android_arm_4_3_config.py +++ b/testing/config/mozharness/android_arm_4_3_config.py @@ -99,7 +99,7 @@ config = { }, "cppunittest": { "run_filename": "remotecppunittests.py", - "testsdir": "cppunittests", + "testsdir": "cppunittest", "options": [ "--symbols-path=%(symbols_path)s", "--xre-path=%(xre_path)s", diff --git a/testing/config/mozharness/android_panda_config.py b/testing/config/mozharness/android_panda_config.py index f1c67492dfc4..369a33ba3dad 100644 --- a/testing/config/mozharness/android_panda_config.py +++ b/testing/config/mozharness/android_panda_config.py @@ -15,7 +15,7 @@ config = { "--skip-manifest=../tests/cppunittests/android_cppunittest_manifest.txt" ], "run_filename": "remotecppunittests.py", - "testsdir": "cppunittests" + "testsdir": "cppunittest" }, "crashtest": { "options": [ diff --git a/testing/config/mozharness/b2g_emulator_config.py b/testing/config/mozharness/b2g_emulator_config.py index 40aa6b008dbb..7285f7bd8209 100644 --- a/testing/config/mozharness/b2g_emulator_config.py +++ b/testing/config/mozharness/b2g_emulator_config.py @@ -16,7 +16,7 @@ config = { "." ], "run_filename": "remotecppunittests.py", - "testsdir": "cppunittests" + "testsdir": "cppunittest" }, "crashtest": { "options": [ diff --git a/testing/config/mozharness/linux_config.py b/testing/config/mozharness/linux_config.py index 7f79e3bbc0a2..dd8bc4066cc9 100644 --- a/testing/config/mozharness/linux_config.py +++ b/testing/config/mozharness/linux_config.py @@ -10,7 +10,7 @@ config = { "--xre-path=%(abs_app_dir)s" ], "run_filename": "runcppunittests.py", - "testsdir": "cppunittests" + "testsdir": "cppunittest" }, "jittest": { "options": [ diff --git a/testing/config/mozharness/mac_config.py b/testing/config/mozharness/mac_config.py index 8d2cd095adea..5443e891f177 100644 --- a/testing/config/mozharness/mac_config.py +++ b/testing/config/mozharness/mac_config.py @@ -10,7 +10,7 @@ config = { "--xre-path=%(abs_app_dir)s" ], "run_filename": "runcppunittests.py", - "testsdir": "cppunittests" + "testsdir": "cppunittest" }, "jittest": { "options": [ diff --git a/testing/config/mozharness/windows_config.py b/testing/config/mozharness/windows_config.py index 8d2cd095adea..5443e891f177 100644 --- a/testing/config/mozharness/windows_config.py +++ b/testing/config/mozharness/windows_config.py @@ -10,7 +10,7 @@ config = { "--xre-path=%(abs_app_dir)s" ], "run_filename": "runcppunittests.py", - "testsdir": "cppunittests" + "testsdir": "cppunittest" }, "jittest": { "options": [ diff --git a/testing/testsuite-targets.mk b/testing/testsuite-targets.mk index 249c1984f2ba..1a5c4f3c17ae 100644 --- a/testing/testsuite-targets.mk +++ b/testing/testsuite-targets.mk @@ -416,19 +416,37 @@ else PKG_STAGE = $(DIST)/universal/test-stage endif +TEST_PKGS := \ + cppunittest \ + mochitest \ + reftest \ + xpcshell \ + web-platform \ + $(NULL) + +PKG_ARG = --$(1) $(PKG_BASENAME).$(1).tests.zip + test-packages-manifest: @rm -f $(MOZ_TEST_PACKAGES_FILE) - $(PYTHON) $(topsrcdir)/build/gen_test_packages_manifest.py --common $(TEST_PACKAGE) --jsshell $(JSSHELL_NAME) --dest-file $(MOZ_TEST_PACKAGES_FILE) + $(PYTHON) $(topsrcdir)/build/gen_test_packages_manifest.py \ + --jsshell $(JSSHELL_NAME) \ + --dest-file $(MOZ_TEST_PACKAGES_FILE) \ + $(call PKG_ARG,common) \ + $(foreach pkg,$(TEST_PKGS),$(call PKG_ARG,$(pkg))) package-tests: @rm -f '$(DIST)/$(PKG_PATH)$(TEST_PACKAGE)' ifndef UNIVERSAL_BINARY $(NSINSTALL) -D $(DIST)/$(PKG_PATH) endif +# Exclude harness specific directories when generating the common zip. $(MKDIR) -p $(abspath $(DIST))/$(PKG_PATH) && \ cd $(PKG_STAGE) && \ zip -rq9D '$(abspath $(DIST))/$(PKG_PATH)$(TEST_PACKAGE)' \ - * -x \*/.mkdir.done \*.pyc + * -x \*/.mkdir.done \*.pyc $(foreach name,$(TEST_PKGS),$(name)\*) && \ + $(foreach name,$(TEST_PKGS),rm -f '$(DIST)/$(PKG_PATH)$(PKG_BASENAME).'$(name)'.tests.zip' && \ + zip -rq9D '$(abspath $(DIST))/$(PKG_PATH)$(PKG_BASENAME).'$(name)'.tests.zip' \ + $(name) -x \*/.mkdir.done \*.pyc ;) ifeq ($(MOZ_WIDGET_TOOLKIT),android) package-tests: stage-android @@ -510,24 +528,24 @@ endif endif stage-cppunittests: make-stage-dir - $(NSINSTALL) -D $(PKG_STAGE)/cppunittests + $(NSINSTALL) -D $(PKG_STAGE)/cppunittest ifdef STRIP_CPP_TESTS - $(foreach bin,$(CPP_UNIT_TEST_BINS),$(OBJCOPY) $(or $(STRIP_FLAGS),--strip-unneeded) $(bin) $(bin:$(DIST)/%=$(PKG_STAGE)/%);) + $(foreach bin,$(CPP_UNIT_TEST_BINS),$(OBJCOPY) $(or $(STRIP_FLAGS),--strip-unneeded) $(bin) $(bin:$(DIST)/cppunittests/%=$(PKG_STAGE)/cppunittest/%);) else - cp -RL $(DIST)/cppunittests $(PKG_STAGE) + cp -RL $(CPP_UNIT_TEST_BINS) $(PKG_STAGE)/cppunittest endif - cp $(topsrcdir)/testing/runcppunittests.py $(PKG_STAGE)/cppunittests - cp $(topsrcdir)/testing/remotecppunittests.py $(PKG_STAGE)/cppunittests - cp $(topsrcdir)/testing/cppunittest.ini $(PKG_STAGE)/cppunittests - cp $(DEPTH)/mozinfo.json $(PKG_STAGE)/cppunittests + cp $(topsrcdir)/testing/runcppunittests.py $(PKG_STAGE)/cppunittest + cp $(topsrcdir)/testing/remotecppunittests.py $(PKG_STAGE)/cppunittest + cp $(topsrcdir)/testing/cppunittest.ini $(PKG_STAGE)/cppunittest + cp $(DEPTH)/mozinfo.json $(PKG_STAGE)/cppunittest ifeq ($(MOZ_DISABLE_STARTUPCACHE),) - cp $(topsrcdir)/startupcache/test/TestStartupCacheTelemetry.js $(PKG_STAGE)/cppunittests - cp $(topsrcdir)/startupcache/test/TestStartupCacheTelemetry.manifest $(PKG_STAGE)/cppunittests + cp $(topsrcdir)/startupcache/test/TestStartupCacheTelemetry.js $(PKG_STAGE)/cppunittest + cp $(topsrcdir)/startupcache/test/TestStartupCacheTelemetry.manifest $(PKG_STAGE)/cppunittest endif ifdef STRIP_CPP_TESTS - $(OBJCOPY) $(or $(STRIP_FLAGS),--strip-unneeded) $(DIST)/bin/jsapi-tests$(BIN_SUFFIX) $(PKG_STAGE)/cppunittests/jsapi-tests$(BIN_SUFFIX) + $(OBJCOPY) $(or $(STRIP_FLAGS),--strip-unneeded) $(DIST)/bin/jsapi-tests$(BIN_SUFFIX) $(PKG_STAGE)/cppunittest/jsapi-tests$(BIN_SUFFIX) else - cp -RL $(DIST)/bin/jsapi-tests$(BIN_SUFFIX) $(PKG_STAGE)/cppunittests + cp -RL $(DIST)/bin/jsapi-tests$(BIN_SUFFIX) $(PKG_STAGE)/cppunittest endif stage-jittest: make-stage-dir diff --git a/toolkit/mozapps/installer/package-name.mk b/toolkit/mozapps/installer/package-name.mk index b5a7b2f9eeda..a95ae7e6ba87 100644 --- a/toolkit/mozapps/installer/package-name.mk +++ b/toolkit/mozapps/installer/package-name.mk @@ -129,7 +129,12 @@ SYMBOL_ARCHIVE_BASENAME = $(PKG_BASENAME).crashreporter-symbols CODE_COVERAGE_ARCHIVE_BASENAME = $(PKG_BASENAME).code-coverage-gcno # Test package naming -TEST_PACKAGE = $(PKG_BASENAME).tests.zip +TEST_PACKAGE = $(PKG_BASENAME).common.tests.zip +CPP_TEST_PACKAGE = $(PKG_BASENAME).cppunittest.tests.zip +XPC_TEST_PACKAGE = $(PKG_BASENAME).xpcshell.tests.zip +MOCHITEST_PACKAGE = $(PKG_BASENAME).mochitest.tests.zip +REFTEST_PACKAGE = $(PKG_BASENAME).reftest.tests.zip +WP_TEST_PACKAGE = $(PKG_BASENAME).web-platform.tests.zip ifneq (,$(wildcard $(DIST)/bin/application.ini)) BUILDID = $(shell $(PYTHON) $(MOZILLA_DIR)/config/printconfigsetting.py $(DIST)/bin/application.ini App BuildID) diff --git a/toolkit/mozapps/installer/upload-files.mk b/toolkit/mozapps/installer/upload-files.mk index 7b646ede0fdd..251b005ccdd9 100644 --- a/toolkit/mozapps/installer/upload-files.mk +++ b/toolkit/mozapps/installer/upload-files.mk @@ -726,6 +726,11 @@ UPLOAD_FILES= \ $(call QUOTED_WILDCARD,$(DIST)/$(LANGPACK)) \ $(call QUOTED_WILDCARD,$(wildcard $(DIST)/$(PARTIAL_MAR))) \ $(call QUOTED_WILDCARD,$(DIST)/$(PKG_PATH)$(TEST_PACKAGE)) \ + $(call QUOTED_WILDCARD,$(DIST)/$(PKG_PATH)$(CPP_TEST_PACKAGE)) \ + $(call QUOTED_WILDCARD,$(DIST)/$(PKG_PATH)$(XPC_TEST_PACKAGE)) \ + $(call QUOTED_WILDCARD,$(DIST)/$(PKG_PATH)$(MOCHITEST_PACKAGE)) \ + $(call QUOTED_WILDCARD,$(DIST)/$(PKG_PATH)$(REFTEST_PACKAGE)) \ + $(call QUOTED_WILDCARD,$(DIST)/$(PKG_PATH)$(WP_TEST_PACKAGE)) \ $(call QUOTED_WILDCARD,$(DIST)/$(PKG_PATH)$(SYMBOL_ARCHIVE_BASENAME).zip) \ $(call QUOTED_WILDCARD,$(DIST)/$(SDK)) \ $(call QUOTED_WILDCARD,$(MOZ_SOURCESTAMP_FILE)) \ From afeccd94753c9ba951cd84555b34cc3b6350930d Mon Sep 17 00:00:00 2001 From: Chris Manchester Date: Mon, 29 Jun 2015 11:16:51 -0700 Subject: [PATCH 12/63] Bug 917999 - Part 3.1 - Prepare taskcluster for a split test package.;r=jlal --HG-- extra : commitid : CzKMKHPjBvG --- build/gen_test_packages_manifest.py | 11 +++++++++- testing/taskcluster/README.md | 2 +- testing/taskcluster/mach_commands.py | 22 ++++++++++++++----- .../scripts/builder/build-b2g-desktop.sh | 7 ++++-- .../scripts/builder/build-emulator-x86.sh | 2 +- .../scripts/builder/build-emulator.sh | 2 +- .../scripts/builder/build-mulet-linux.sh | 7 ++++-- .../taskcluster_graph/build_task.py | 5 +++-- .../tasks/builds/b2g_desktop_base.yml | 2 +- .../taskcluster/tasks/builds/mulet_linux.yml | 2 +- .../tasks/tests/b2g_build_test.yml | 2 +- .../tasks/tests/b2g_build_unit.yml | 2 +- .../tests/b2g_gaia_js_integration_tests.yml | 2 +- .../tests/b2g_gaia_ui_test_accessibility.yml | 2 +- .../tests/b2g_gaia_ui_test_functional.yml | 2 +- .../tasks/tests/b2g_gaia_ui_test_unit.yml | 2 +- .../taskcluster/tasks/tests/b2g_gaia_unit.yml | 2 +- .../taskcluster/tasks/tests/b2g_gip_oop.yml | 2 +- .../taskcluster/tasks/tests/b2g_linter.yml | 2 +- .../tasks/tests/mulet_mochitests.yml | 2 +- .../tasks/tests/mulet_reftests.yml | 2 +- testing/testsuite-targets.mk | 10 +++++++++ toolkit/mozapps/installer/package-name.mk | 1 + 23 files changed, 67 insertions(+), 28 deletions(-) diff --git a/build/gen_test_packages_manifest.py b/build/gen_test_packages_manifest.py index 5f319a91aaec..e6437ec2b146 100644 --- a/build/gen_test_packages_manifest.py +++ b/build/gen_test_packages_manifest.py @@ -37,6 +37,9 @@ def parse_args(): parser.add_argument("--jsshell", required=True, action="store", dest="jsshell", help="Name of the jsshell zip.") + parser.add_argument("--use-short-names", action="store_true", + help="Use short names for packages (target.$name.tests.zip " + "instead of $(PACKAGE_BASENAME).$name.tests.zip)") for harness in PACKAGE_SPECIFIED_HARNESSES: parser.add_argument("--%s" % harness, required=True, action="store", dest=harness, @@ -54,12 +57,18 @@ def generate_package_data(args): # which will be an optimization once parts of the main zip are split to harness # specific zips. tests_common = args.tests_common + if args.use_short_names: + tests_common = 'target.common.tests.zip' + jsshell = args.jsshell harness_requirements = dict([(k, [tests_common]) for k in ALL_HARNESSES]) harness_requirements['jittest'].append(jsshell) for harness in PACKAGE_SPECIFIED_HARNESSES: - harness_requirements[harness].append(getattr(args, harness)) + pkg_name = getattr(args, harness) + if args.use_short_names: + pkg_name = 'target.%s.tests.zip' % harness + harness_requirements[harness].append(pkg_name) return harness_requirements if __name__ == '__main__': diff --git a/testing/taskcluster/README.md b/testing/taskcluster/README.md index 2d77dc19b269..ee47c6c3af8b 100644 --- a/testing/taskcluster/README.md +++ b/testing/taskcluster/README.md @@ -87,7 +87,7 @@ task: # need to provide an easy way to lookup the correct aritfact path. locations: build: 'public/name_i_made_up.tar.gz' - tests: 'public/some_tests.zip' + tests: 'public/some_tests.zip' or test_packages: 'public/test_packages.json' ``` #### Templates properties diff --git a/testing/taskcluster/mach_commands.py b/testing/taskcluster/mach_commands.py index f5560d0ee893..308556b64525 100644 --- a/testing/taskcluster/mach_commands.py +++ b/testing/taskcluster/mach_commands.py @@ -280,10 +280,19 @@ class Graph(object): taskcluster_graph.build_task.validate(build_task) graph['tasks'].append(build_task) - tests_url = ARTIFACT_URL.format( - build_parameters['build_slugid'], - build_task['task']['extra']['locations']['tests'] - ) + test_packages_url, tests_url = None, None + + if 'test_packages' in build_task['task']['extra']['locations']: + test_packages_url = ARTIFACT_URL.format( + build_parameters['build_slugid'], + build_task['task']['extra']['locations']['test_packages'] + ) + + if 'tests' in build_task['task']['extra']['locations']: + tests_url = ARTIFACT_URL.format( + build_parameters['build_slugid'], + build_task['task']['extra']['locations']['tests'] + ) build_url = ARTIFACT_URL.format( build_parameters['build_slugid'], @@ -327,7 +336,10 @@ class Graph(object): test_parameters = copy.copy(build_parameters) test_parameters['build_url'] = build_url test_parameters['img_url'] = img_url - test_parameters['tests_url'] = tests_url + if tests_url: + test_parameters['tests_url'] = tests_url + if test_packages_url: + test_parameters['test_packages_url'] = test_packages_url test_definition = templates.load(test['task'], {})['task'] chunk_config = test_definition['extra']['chunks'] diff --git a/testing/taskcluster/scripts/builder/build-b2g-desktop.sh b/testing/taskcluster/scripts/builder/build-b2g-desktop.sh index e3268706651f..c8f64ca46896 100755 --- a/testing/taskcluster/scripts/builder/build-b2g-desktop.sh +++ b/testing/taskcluster/scripts/builder/build-b2g-desktop.sh @@ -27,7 +27,7 @@ cd $MOZ_OBJDIR/dist ls -lah $MOZ_OBJDIR/dist/ # Target names are cached so make sure we discard them first if found. -rm -f target.linux-x86_64.tar.bz2 target.linux-x86_64.json target.tests.zip +rm -f target.linux-x86_64.tar.bz2 target.linux-x86_64.json target*.tests.zip # Artifacts folder is outside of the cache. mkdir -p $HOME/artifacts/ @@ -36,7 +36,10 @@ mkdir -p $HOME/artifacts/ # the right filename in the task payload where artifacts are declared mv *.linux-x86_64.tar.bz2 $HOME/artifacts/target.linux-x86_64.tar.bz2 mv *.linux-x86_64.json $HOME/artifacts/target.linux-x86_64.json -mv *.tests.zip $HOME/artifacts/target.tests.zip +for name in common cppunittest reftest mochitest xpcshell; do + mv *.$name.tests.zip $HOME/artifacts/target.$name.tests.zip ; +done +mv test_packages_tc.json $HOME/artifacts/test_packages.json mv *.crashreporter-symbols.zip $HOME/artifacts/target.crashreporter-symbols.zip # If the simulator does not exist don't fail diff --git a/testing/taskcluster/scripts/builder/build-emulator-x86.sh b/testing/taskcluster/scripts/builder/build-emulator-x86.sh index dbfb730c02bd..2b129163ab81 100755 --- a/testing/taskcluster/scripts/builder/build-emulator-x86.sh +++ b/testing/taskcluster/scripts/builder/build-emulator-x86.sh @@ -58,7 +58,7 @@ ls -lah $WORKSPACE/B2G/objdir-gecko/dist/ mv $WORKSPACE/B2G/sources.xml $HOME/artifacts/sources.xml mv $WORKSPACE/B2G/out/target/product/generic_x86/tests/gaia-tests.zip $HOME/artifacts/gaia-tests.zip -mv $WORKSPACE/B2G/out/target/product/generic_x86/tests/b2g-*tests.zip $HOME/artifacts/b2g-tests.zip +mv $WORKSPACE/B2G/out/target/product/generic_x86/tests/b2g-*.zip $HOME/artifacts mv $WORKSPACE/B2G/out/emulator.tar.gz $HOME/artifacts/emulator.tar.gz mv $WORKSPACE/B2G/objdir-gecko/dist/b2g-*.crashreporter-symbols.zip $HOME/artifacts/b2g-crashreporter-symbols.zip diff --git a/testing/taskcluster/scripts/builder/build-emulator.sh b/testing/taskcluster/scripts/builder/build-emulator.sh index 41664dfb4bb0..e97de3723f50 100755 --- a/testing/taskcluster/scripts/builder/build-emulator.sh +++ b/testing/taskcluster/scripts/builder/build-emulator.sh @@ -64,7 +64,7 @@ ls -lah $WORKSPACE/B2G/objdir-gecko/dist/ mv $WORKSPACE/B2G/sources.xml $HOME/artifacts/sources.xml mv $WORKSPACE/B2G/out/target/product/generic/tests/gaia-tests.zip $HOME/artifacts/gaia-tests.zip -mv $WORKSPACE/B2G/out/target/product/generic/tests/b2g-*tests.zip $HOME/artifacts/b2g-tests.zip +mv $WORKSPACE/B2G/out/target/product/generic/tests/b2g-*.zip $HOME/artifacts mv $WORKSPACE/B2G/out/emulator.tar.gz $HOME/artifacts/emulator.tar.gz mv $WORKSPACE/B2G/objdir-gecko/dist/b2g-*.crashreporter-symbols.zip $HOME/artifacts/b2g-crashreporter-symbols.zip diff --git a/testing/taskcluster/scripts/builder/build-mulet-linux.sh b/testing/taskcluster/scripts/builder/build-mulet-linux.sh index e7bd31310d59..00193e789dd0 100755 --- a/testing/taskcluster/scripts/builder/build-mulet-linux.sh +++ b/testing/taskcluster/scripts/builder/build-mulet-linux.sh @@ -21,7 +21,7 @@ cd $MOZ_OBJDIR/dist; ls -lah $MOZ_OBJDIR/dist/ # Target names are cached so make sure we discard them first if found. -rm -f target.linux-x86_64.tar.bz2 target.linux-x86_64.json target.tests.zip +rm -f target.linux-x86_64.tar.bz2 target.linux-x86_64.json target*.tests.zip # Artifacts folder is outside of the cache. mkdir -p $HOME/artifacts/ @@ -30,7 +30,10 @@ mkdir -p $HOME/artifacts/ # the right filename in the task payload where artifacts are declared mv *.linux-x86_64.tar.bz2 $HOME/artifacts/target.linux-x86_64.tar.bz2 mv *.linux-x86_64.json $HOME/artifacts/target.linux-x86_64.json -mv *.tests.zip $HOME/artifacts/target.tests.zip +for name in common cppunittest reftest mochitest xpcshell; do + mv *.$name.tests.zip $HOME/artifacts/target.$name.tests.zip ; +done +mv test_packages_tc.json $HOME/artifacts/test_packages.json mv *.crashreporter-symbols.zip $HOME/artifacts/target.crashreporter-symbols.zip mv jsshell-linux-x86_64.zip $HOME/artifacts/jsshell-linux-x86_64.zip diff --git a/testing/taskcluster/taskcluster_graph/build_task.py b/testing/taskcluster/taskcluster_graph/build_task.py index 0b76631f027d..5d8ed84c9e48 100644 --- a/testing/taskcluster/taskcluster_graph/build_task.py +++ b/testing/taskcluster/taskcluster_graph/build_task.py @@ -29,5 +29,6 @@ def validate(task): if 'build' not in locations: raise BuildTaskValidationException('task.extra.locations.build missing') - if 'tests' not in locations: - raise BuildTaskValidationException('task.extra.locations.tests missing') + if 'tests' not in locations and 'test_packages' not in locations: + raise BuildTaskValidationException('task.extra.locations.tests or ' + 'task.extra.locations.tests_packages missing') diff --git a/testing/taskcluster/tasks/builds/b2g_desktop_base.yml b/testing/taskcluster/tasks/builds/b2g_desktop_base.yml index 8e8b8a5b8008..b86b35f428fa 100644 --- a/testing/taskcluster/tasks/builds/b2g_desktop_base.yml +++ b/testing/taskcluster/tasks/builds/b2g_desktop_base.yml @@ -35,4 +35,4 @@ task: # files are located. locations: build: 'public/build/target.linux-x86_64.tar.bz2' - tests: 'public/build/target.tests.zip' + test_packages: 'public/build/test_packages.json' diff --git a/testing/taskcluster/tasks/builds/mulet_linux.yml b/testing/taskcluster/tasks/builds/mulet_linux.yml index 687c5bac69c6..860f5b4e25cb 100644 --- a/testing/taskcluster/tasks/builds/mulet_linux.yml +++ b/testing/taskcluster/tasks/builds/mulet_linux.yml @@ -50,4 +50,4 @@ task: # files are located. locations: build: 'public/build/target.linux-x86_64.tar.bz2' - tests: 'public/build/target.tests.zip' + test_packages: 'public/build/test_packages.json' diff --git a/testing/taskcluster/tasks/tests/b2g_build_test.yml b/testing/taskcluster/tasks/tests/b2g_build_test.yml index 2ccf9d11b37d..5862175a799c 100644 --- a/testing/taskcluster/tasks/tests/b2g_build_test.yml +++ b/testing/taskcluster/tasks/tests/b2g_build_test.yml @@ -18,7 +18,7 @@ task: --config-file ./mozharness_configs/remove_executables.py --installer-url {{build_url}} --no-pull - --test-url {{tests_url}} + --test-packages-url {{test_packages_url}} --download-symbols ondemand --gaia-repo https://hg.mozilla.org/integration/gaia-central --gaia-dir /home/worker diff --git a/testing/taskcluster/tasks/tests/b2g_build_unit.yml b/testing/taskcluster/tasks/tests/b2g_build_unit.yml index cb82118c3f8b..a1abc4e8d9d3 100644 --- a/testing/taskcluster/tasks/tests/b2g_build_unit.yml +++ b/testing/taskcluster/tasks/tests/b2g_build_unit.yml @@ -20,7 +20,7 @@ task: --no-pull --download-symbols ondemand --installer-url {{build_url}} - --test-url {{tests_url}} + --test-packages-url {{test_packages_url}} --gaia-repo https://hg.mozilla.org/integration/gaia-central --gaia-dir /home/worker artifacts: diff --git a/testing/taskcluster/tasks/tests/b2g_gaia_js_integration_tests.yml b/testing/taskcluster/tasks/tests/b2g_gaia_js_integration_tests.yml index 4c8095ee92c6..8744b765e0dc 100644 --- a/testing/taskcluster/tasks/tests/b2g_gaia_js_integration_tests.yml +++ b/testing/taskcluster/tasks/tests/b2g_gaia_js_integration_tests.yml @@ -19,7 +19,7 @@ task: --config-file ./mozharness_configs/remove_executables.py --no-pull --installer-url {{build_url}} - --test-url {{tests_url}} + --test-packages-url {{test_packages_url}} --download-symbols ondemand --total-chunk {{total_chunks}} --this-chunk {{chunk}} diff --git a/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_accessibility.yml b/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_accessibility.yml index 743154c36483..af9758450f18 100644 --- a/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_accessibility.yml +++ b/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_accessibility.yml @@ -19,7 +19,7 @@ task: --config-file ./mozharness_configs/remove_executables.py --no-pull --installer-url {{build_url}} - --test-url {{tests_url}} + --test-packages-url {{test_packages_url}} --download-symbols ondemand --gip-suite accessibility --gaia-repo https://hg.mozilla.org/integration/gaia-central diff --git a/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_functional.yml b/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_functional.yml index 927689ddb088..7299c03a754b 100644 --- a/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_functional.yml +++ b/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_functional.yml @@ -19,7 +19,7 @@ task: --config-file ./mozharness_configs/remove_executables.py --no-pull --installer-url {{build_url}} - --test-url {{tests_url}} + --test-packages-url {{test_packages_url}} --download-symbols ondemand --gip-suite functional --total-chunk {{total_chunks}} diff --git a/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_unit.yml b/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_unit.yml index 028ff1304464..a5f89d0a1f46 100644 --- a/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_unit.yml +++ b/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_unit.yml @@ -19,7 +19,7 @@ task: --config-file ./mozharness_configs/remove_executables.py --installer-url {{build_url}} --no-pull - --test-url {{tests_url}} + --test-packages-url {{test_packages_url}} --download-symbols ondemand --gip-suite unit --gaia-repo https://hg.mozilla.org/integration/gaia-central diff --git a/testing/taskcluster/tasks/tests/b2g_gaia_unit.yml b/testing/taskcluster/tasks/tests/b2g_gaia_unit.yml index c346bd0b1291..c3630df3a206 100644 --- a/testing/taskcluster/tasks/tests/b2g_gaia_unit.yml +++ b/testing/taskcluster/tasks/tests/b2g_gaia_unit.yml @@ -20,7 +20,7 @@ task: --download-symbols ondemand --no-pull --installer-url {{build_url}} - --test-url {{tests_url}} + --test-packages-url {{test_packages_url}} --gaia-repo https://hg.mozilla.org/integration/gaia-central --gaia-dir /home/worker --xre-url https://queue.taskcluster.net/v1/task/wXAHAaxDQpqxoWF1iljJjg/runs/0/artifacts/public/cache/xulrunner-sdk-40.zip diff --git a/testing/taskcluster/tasks/tests/b2g_gip_oop.yml b/testing/taskcluster/tasks/tests/b2g_gip_oop.yml index 177e8343da52..fedcdde8b700 100644 --- a/testing/taskcluster/tasks/tests/b2g_gip_oop.yml +++ b/testing/taskcluster/tasks/tests/b2g_gip_oop.yml @@ -20,7 +20,7 @@ task: --no-pull --app-arg -oop --installer-url {{build_url}} - --test-url {{tests_url}} + --test-packages-url {{test_packages_url}} --download-symbols ondemand --gaia-repo https://hg.mozilla.org/integration/gaia-central --gaia-dir /home/worker diff --git a/testing/taskcluster/tasks/tests/b2g_linter.yml b/testing/taskcluster/tasks/tests/b2g_linter.yml index e72f23494176..14863c136c72 100644 --- a/testing/taskcluster/tasks/tests/b2g_linter.yml +++ b/testing/taskcluster/tasks/tests/b2g_linter.yml @@ -18,7 +18,7 @@ task: --download-symbols ondemand --no-pull --installer-url {{build_url}} - --test-url {{tests_url}} + --test-packages-url {{test_packages_url}} --gaia-repo https://hg.mozilla.org/integration/gaia-central --gaia-dir /home/worker artifacts: diff --git a/testing/taskcluster/tasks/tests/mulet_mochitests.yml b/testing/taskcluster/tasks/tests/mulet_mochitests.yml index 1b7b63b90d53..66ddb8caff40 100644 --- a/testing/taskcluster/tasks/tests/mulet_mochitests.yml +++ b/testing/taskcluster/tasks/tests/mulet_mochitests.yml @@ -14,7 +14,7 @@ task: --config-file ./mozharness/configs/unittests/linux_unittest.py --config-file ./mozharness_configs/remove_executables.py --installer-url {{build_url}} - --test-url {{tests_url}} + --test-packages-url {{test_packages_url}} --download-symbols ondemand --mochitest-suite plain-chunked --total-chunk={{total_chunks}} diff --git a/testing/taskcluster/tasks/tests/mulet_reftests.yml b/testing/taskcluster/tasks/tests/mulet_reftests.yml index 901316d68d9a..b643291b8a82 100644 --- a/testing/taskcluster/tasks/tests/mulet_reftests.yml +++ b/testing/taskcluster/tasks/tests/mulet_reftests.yml @@ -19,7 +19,7 @@ task: --config-file ./mozharness_configs/remove_executables.py --no-pull --installer-url {{build_url}} - --test-url {{tests_url}} + --test-packages-url {{test_packages_url}} --download-symbols ondemand --test-suite reftest --test-manifest tests/layout/reftests/reftest.list diff --git a/testing/testsuite-targets.mk b/testing/testsuite-targets.mk index 1a5c4f3c17ae..f4ac4b3d79cc 100644 --- a/testing/testsuite-targets.mk +++ b/testing/testsuite-targets.mk @@ -407,6 +407,7 @@ package-tests: \ stage-web-platform-tests \ stage-luciddream \ test-packages-manifest \ + test-packages-manifest-tc \ $(NULL) ifdef MOZ_WEBRTC package-tests: stage-steeplechase @@ -426,6 +427,14 @@ TEST_PKGS := \ PKG_ARG = --$(1) $(PKG_BASENAME).$(1).tests.zip +test-packages-manifest-tc: + $(PYTHON) $(topsrcdir)/build/gen_test_packages_manifest.py \ + --jsshell $(JSSHELL_NAME) \ + --dest-file $(MOZ_TEST_PACKAGES_FILE_TC) \ + --use-short-names \ + $(call PKG_ARG,common) \ + $(foreach pkg,$(TEST_PKGS),$(call PKG_ARG,$(pkg))) + test-packages-manifest: @rm -f $(MOZ_TEST_PACKAGES_FILE) $(PYTHON) $(topsrcdir)/build/gen_test_packages_manifest.py \ @@ -625,5 +634,6 @@ stage-instrumentation-tests: make-stage-dir stage-instrumentation-tests \ stage-luciddream \ test-packages-manifest \ + test-packages-manifest-tc \ $(NULL) diff --git a/toolkit/mozapps/installer/package-name.mk b/toolkit/mozapps/installer/package-name.mk index a95ae7e6ba87..4d3db732f52e 100644 --- a/toolkit/mozapps/installer/package-name.mk +++ b/toolkit/mozapps/installer/package-name.mk @@ -161,6 +161,7 @@ MOZ_SOURCESTAMP_FILE = $(DIST)/$(PKG_PATH)/$(MOZ_INFO_BASENAME).txt MOZ_BUILDINFO_FILE = $(DIST)/$(PKG_PATH)/$(MOZ_INFO_BASENAME).json MOZ_MOZINFO_FILE = $(DIST)/$(PKG_PATH)/$(MOZ_INFO_BASENAME).mozinfo.json MOZ_TEST_PACKAGES_FILE = $(DIST)/$(PKG_PATH)/test_packages.json +MOZ_TEST_PACKAGES_FILE_TC = $(DIST)/$(PKG_PATH)/test_packages_tc.json # JavaScript Shell JSSHELL_NAME = jsshell-$(MOZ_PKG_PLATFORM).zip From 4773a771b0962c1a4b3c1b4e1de26a972fb2d51b Mon Sep 17 00:00:00 2001 From: Chris Manchester Date: Mon, 29 Jun 2015 11:16:51 -0700 Subject: [PATCH 13/63] Bug 917999 - Bump mozharness for changes to directory name for cppunittests.;r=me --HG-- extra : commitid : IelfHb9FUgt --- testing/mozharness/mozharness.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/mozharness/mozharness.json b/testing/mozharness/mozharness.json index 39f3525224cc..89d4b76d8ba6 100644 --- a/testing/mozharness/mozharness.json +++ b/testing/mozharness/mozharness.json @@ -1,4 +1,4 @@ { "repo": "https://hg.mozilla.org/build/mozharness", - "revision": "30d82783408b" + "revision": "94dbc2337e5f" } From a38c8a3b51edfdd2e4ea923143e5de3cdcba5a90 Mon Sep 17 00:00:00 2001 From: "Dustin J. Mitchell" Date: Thu, 18 Jun 2015 17:38:06 -0400 Subject: [PATCH 14/63] Bug 1169703: use new provisioner types; r=mrrrgn --HG-- extra : source : 09569fe733398293e54a9980c1325fe7e11ad516 extra : amend_source : 54406c03a8ffaec7341072d5d8fc613080e1cd21 --- testing/taskcluster/tasks/builds/android_api_11.yml | 2 +- testing/taskcluster/tasks/builds/dbg_linux64.yml | 2 +- testing/taskcluster/tasks/builds/opt_linux64.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/testing/taskcluster/tasks/builds/android_api_11.yml b/testing/taskcluster/tasks/builds/android_api_11.yml index e416792a67f4..3c6c72124dc6 100644 --- a/testing/taskcluster/tasks/builds/android_api_11.yml +++ b/testing/taskcluster/tasks/builds/android_api_11.yml @@ -8,7 +8,7 @@ task: name: '[TC] Android armv7 API 11+' description: 'Android armv7 API 11+' - workerType: b2g-desktop-opt + workerType: android-api-11 routes: - 'index.buildbot.branches.{{project}}.android-api-11' diff --git a/testing/taskcluster/tasks/builds/dbg_linux64.yml b/testing/taskcluster/tasks/builds/dbg_linux64.yml index 7da97b765ac4..7d431be2412d 100644 --- a/testing/taskcluster/tasks/builds/dbg_linux64.yml +++ b/testing/taskcluster/tasks/builds/dbg_linux64.yml @@ -8,7 +8,7 @@ task: name: '[TC] Linux64 Dbg' description: 'Linux64 Dbg' - workerType: b2g-desktop-opt + workerType: dbg-linux64 payload: env: diff --git a/testing/taskcluster/tasks/builds/opt_linux64.yml b/testing/taskcluster/tasks/builds/opt_linux64.yml index 8261bc7095ac..c6c92eec1970 100644 --- a/testing/taskcluster/tasks/builds/opt_linux64.yml +++ b/testing/taskcluster/tasks/builds/opt_linux64.yml @@ -8,7 +8,7 @@ task: name: '[TC] Linux64 Opt' description: 'Linux64 Opt' - workerType: b2g-desktop-opt + workerType: opt-linux64 routes: - 'index.buildbot.branches.{{project}}.linux64' From 22b75ae28ff8259ab6e0721676700d153ca5cdd3 Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Wed, 17 Jun 2015 21:40:18 -0400 Subject: [PATCH 15/63] Bug 1178363 - make nsTimerImpl::SetDelayInternal a private method; r=poiru Nothing outside nsTimerImpl uses it, and with a name like "SetDelayInternal", nothing should. --- xpcom/threads/nsTimerImpl.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xpcom/threads/nsTimerImpl.h b/xpcom/threads/nsTimerImpl.h index 94ee968a440c..22fe0f1e017e 100644 --- a/xpcom/threads/nsTimerImpl.h +++ b/xpcom/threads/nsTimerImpl.h @@ -48,8 +48,6 @@ public: // If a failure is encountered, the reference is returned to the caller static already_AddRefed PostTimerEvent( already_AddRefed aTimerRef); - void SetDelayInternal(uint32_t aDelay); - NS_DECL_THREADSAFE_ISUPPORTS NS_DECL_NSITIMER @@ -66,6 +64,8 @@ public: virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override; private: + void SetDelayInternal(uint32_t aDelay); + enum class CallbackType : uint8_t { Unknown = 0, Interface = 1, From 4fea06a3a3fa96db2c6b87f889bcd6ac76058849 Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Thu, 18 Jun 2015 12:00:56 -0400 Subject: [PATCH 16/63] Bug 1178363 - make nsTimerImpl::Fire a private method; r=poiru This method is only called by nsTimerEvent, which is an implementation detail of nsTimerImpl. --- xpcom/threads/nsTimerImpl.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xpcom/threads/nsTimerImpl.h b/xpcom/threads/nsTimerImpl.h index 22fe0f1e017e..b2e64902cddc 100644 --- a/xpcom/threads/nsTimerImpl.h +++ b/xpcom/threads/nsTimerImpl.h @@ -43,8 +43,8 @@ public: friend class TimerThread; friend struct TimerAdditionComparator; + friend class nsTimerEvent; - void Fire(); // If a failure is encountered, the reference is returned to the caller static already_AddRefed PostTimerEvent( already_AddRefed aTimerRef); @@ -66,6 +66,8 @@ public: private: void SetDelayInternal(uint32_t aDelay); + void Fire(); + enum class CallbackType : uint8_t { Unknown = 0, Interface = 1, From 889fc1ad6196ade7ec80118f245091752e7372e8 Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Thu, 18 Jun 2015 12:02:23 -0400 Subject: [PATCH 17/63] Bug 1178363 - make MOZ_TASK_TRACER-dependent bits of nsTimerImpl private; r=poiru GetTracedTask() is only called from nsTimerImpl itself, so it doesn't need to be public. GetTLSTraceInfo() is called from the timer thread, which has access to our private members already. --- xpcom/threads/nsTimerImpl.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/xpcom/threads/nsTimerImpl.h b/xpcom/threads/nsTimerImpl.h index b2e64902cddc..e262eb5bb703 100644 --- a/xpcom/threads/nsTimerImpl.h +++ b/xpcom/threads/nsTimerImpl.h @@ -56,11 +56,6 @@ public: return mGeneration; } -#ifdef MOZ_TASK_TRACER - void GetTLSTraceInfo(); - mozilla::tasktracer::TracedTaskCommon GetTracedTask(); -#endif - virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override; private: @@ -68,6 +63,11 @@ private: void Fire(); +#ifdef MOZ_TASK_TRACER + void GetTLSTraceInfo(); + mozilla::tasktracer::TracedTaskCommon GetTracedTask(); +#endif + enum class CallbackType : uint8_t { Unknown = 0, Interface = 1, From ed7e987ecb909f338ab3c42c67770e851a4c4904 Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Mon, 29 Jun 2015 10:33:30 -0400 Subject: [PATCH 18/63] Bug 1178363 - make nsTimerImpl::PostTimerEvent a private method; r=poiru PostTimerEvent is only called by the timer thread, which is already able to access private members of nsTimerImpl; there's no reason for PostTimerEvent to be public. --- xpcom/threads/nsTimerImpl.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/xpcom/threads/nsTimerImpl.h b/xpcom/threads/nsTimerImpl.h index e262eb5bb703..399db2d93958 100644 --- a/xpcom/threads/nsTimerImpl.h +++ b/xpcom/threads/nsTimerImpl.h @@ -45,9 +45,6 @@ public: friend struct TimerAdditionComparator; friend class nsTimerEvent; - // If a failure is encountered, the reference is returned to the caller - static already_AddRefed PostTimerEvent( - already_AddRefed aTimerRef); NS_DECL_THREADSAFE_ISUPPORTS NS_DECL_NSITIMER @@ -68,6 +65,10 @@ private: mozilla::tasktracer::TracedTaskCommon GetTracedTask(); #endif + // If a failure is encountered, the reference is returned to the caller + static already_AddRefed PostTimerEvent( + already_AddRefed aTimerRef); + enum class CallbackType : uint8_t { Unknown = 0, Interface = 1, From 4d01d5109666d465daefc05a52493b8aec88ce2e Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Mon, 29 Jun 2015 13:09:11 -0400 Subject: [PATCH 19/63] Bug 1178363 - make nsTimerImpl::GetGeneration a private method; r=poiru Since GetGeneration() is only called by nsTimerEvent, it doesn't need to be public. --- xpcom/threads/nsTimerImpl.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/xpcom/threads/nsTimerImpl.h b/xpcom/threads/nsTimerImpl.h index 399db2d93958..49b7b194fbd0 100644 --- a/xpcom/threads/nsTimerImpl.h +++ b/xpcom/threads/nsTimerImpl.h @@ -48,11 +48,6 @@ public: NS_DECL_THREADSAFE_ISUPPORTS NS_DECL_NSITIMER - int32_t GetGeneration() - { - return mGeneration; - } - virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override; private: @@ -69,6 +64,11 @@ private: static already_AddRefed PostTimerEvent( already_AddRefed aTimerRef); + int32_t GetGeneration() + { + return mGeneration; + } + enum class CallbackType : uint8_t { Unknown = 0, Interface = 1, From 2c8aa842362f9b627eb110ebdbc08d6fee23db28 Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Mon, 29 Jun 2015 10:59:59 -0400 Subject: [PATCH 20/63] Bug 1178317 - eliminate large static constructor from ShimInterfaceInfo.cpp; r=poiru Constructing kComponentsInterfaceShimMap required a static constructor on some compilers, due to a non-constexpr constructor and the necessity of copying non-constexpr things like nsIID. This static constructor is large (several kilobytes of object code on x86-64) and completely unnecessary. To fix this, let's add a constexpr (well, MOZ_CONSTEXPR) constructor to ComponentsInterfaceShimEntry. This change alone doesn't completely solve our problem, because the nsIID member still needs to be copied. But doing that copying is silly: we only use the IID for constructing a ShimInterfaceInfo in ShimInterfaceInfo::MaybeConstruct, and the ShimInterfaceInfo constructor takes a const reference. So let's store a const reference in ComponentsInterfaceShimEntry, too, and make that structure significantly smaller in the process. --- xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp b/xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp index b12e29ffbecb..642d702358f9 100644 --- a/xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp +++ b/xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- * vim: set ts=8 sw=4 et tw=78: * * This Source Code Form is subject to the terms of the Mozilla Public @@ -280,9 +280,14 @@ using namespace mozilla; struct ComponentsInterfaceShimEntry { + MOZ_CONSTEXPR + ComponentsInterfaceShimEntry(const char* aName, const nsIID& aIID, + const dom::NativePropertyHooks* aNativePropHooks) + : geckoName(aName), iid(aIID), nativePropHooks(aNativePropHooks) {} + const char *geckoName; - nsIID iid; - const mozilla::dom::NativePropertyHooks* nativePropHooks; + const nsIID& iid; + const dom::NativePropertyHooks* nativePropHooks; }; #define DEFINE_SHIM_WITH_CUSTOM_INTERFACE(geckoName, domName) \ From f78320762c0bc2f5b7ebd704f3540c63c6d32d92 Mon Sep 17 00:00:00 2001 From: Ben Kelly Date: Mon, 29 Jun 2015 11:45:26 -0700 Subject: [PATCH 21/63] Bug 1177965 Remove browser.privatebrowing.autostart from browser_cache_pb_window.js r=ehsan --- dom/cache/test/mochitest/browser_cache_pb_window.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dom/cache/test/mochitest/browser_cache_pb_window.js b/dom/cache/test/mochitest/browser_cache_pb_window.js index 9f926c00b515..1d264496b309 100644 --- a/dom/cache/test/mochitest/browser_cache_pb_window.js +++ b/dom/cache/test/mochitest/browser_cache_pb_window.js @@ -62,8 +62,7 @@ function testKeys(win) { function test() { waitForExplicitFinish(); - SpecialPowers.pushPrefEnv({'set': [['browser.privatebrowing.autostart', true], - ['dom.caches.enabled', true], + SpecialPowers.pushPrefEnv({'set': [['dom.caches.enabled', true], ['dom.caches.testing.enabled', true]]}, function() { var privateWin = OpenBrowserWindow({private: true}); From b4b1e8538eb54fa41bbc4da83eabdd5f1087988c Mon Sep 17 00:00:00 2001 From: Kyle Machulis Date: Tue, 9 Jun 2015 14:03:04 -0700 Subject: [PATCH 22/63] Bug 1171180 - Remove trunc from jsmath; r=jorendorff --- js/src/configure.in | 2 +- js/src/jsmath.cpp | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/js/src/configure.in b/js/src/configure.in index 0a07acd7cd45..41f8c86816ab 100644 --- a/js/src/configure.in +++ b/js/src/configure.in @@ -2475,7 +2475,7 @@ fi dnl Checks for math functions. dnl ======================================================== AC_CHECK_LIB(m, sin) -AC_CHECK_FUNCS([log2 log1p expm1 sqrt1pm1 acosh asinh atanh trunc cbrt]) +AC_CHECK_FUNCS([log2 log1p expm1 sqrt1pm1 acosh asinh atanh cbrt]) dnl check for wcrtomb/mbrtowc diff --git a/js/src/jsmath.cpp b/js/src/jsmath.cpp index 533036403909..982dafde3713 100644 --- a/js/src/jsmath.cpp +++ b/js/src/jsmath.cpp @@ -1474,13 +1474,6 @@ js::math_hypot_handle(JSContext* cx, HandleValueArray args, MutableHandleValue r return true; } -#if !HAVE_TRUNC -double trunc(double x) -{ - return x > 0 ? floor(x) : ceil(x); -} -#endif - double js::math_trunc_impl(MathCache* cache, double x) { From a0a69372926b95913a03ff95a9f4b3ccd54b9659 Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Mon, 29 Jun 2015 15:22:51 -0400 Subject: [PATCH 23/63] Backed out 3 changesets (bug 917999) for Android x86 test bustage. Backed out changeset 58331e57de1c (bug 917999) Backed out changeset 50f9123412c7 (bug 917999) Backed out changeset 3b19643ec039 (bug 917999) CLOSED TREE --- build/gen_test_packages_manifest.py | 17 +----- .../mozharness/android_arm_4_3_config.py | 2 +- .../config/mozharness/android_panda_config.py | 2 +- .../config/mozharness/b2g_emulator_config.py | 2 +- testing/config/mozharness/linux_config.py | 2 +- testing/config/mozharness/mac_config.py | 2 +- testing/config/mozharness/windows_config.py | 2 +- testing/mozharness/mozharness.json | 2 +- testing/taskcluster/README.md | 2 +- testing/taskcluster/mach_commands.py | 22 ++------ .../scripts/builder/build-b2g-desktop.sh | 7 +-- .../scripts/builder/build-emulator-x86.sh | 2 +- .../scripts/builder/build-emulator.sh | 2 +- .../scripts/builder/build-mulet-linux.sh | 7 +-- .../taskcluster_graph/build_task.py | 5 +- .../tasks/builds/b2g_desktop_base.yml | 2 +- .../taskcluster/tasks/builds/mulet_linux.yml | 2 +- .../tasks/tests/b2g_build_test.yml | 2 +- .../tasks/tests/b2g_build_unit.yml | 2 +- .../tests/b2g_gaia_js_integration_tests.yml | 2 +- .../tests/b2g_gaia_ui_test_accessibility.yml | 2 +- .../tests/b2g_gaia_ui_test_functional.yml | 2 +- .../tasks/tests/b2g_gaia_ui_test_unit.yml | 2 +- .../taskcluster/tasks/tests/b2g_gaia_unit.yml | 2 +- .../taskcluster/tasks/tests/b2g_gip_oop.yml | 2 +- .../taskcluster/tasks/tests/b2g_linter.yml | 2 +- .../tasks/tests/mulet_mochitests.yml | 2 +- .../tasks/tests/mulet_reftests.yml | 2 +- testing/testsuite-targets.mk | 54 +++++-------------- toolkit/mozapps/installer/package-name.mk | 8 +-- toolkit/mozapps/installer/upload-files.mk | 5 -- 31 files changed, 49 insertions(+), 122 deletions(-) diff --git a/build/gen_test_packages_manifest.py b/build/gen_test_packages_manifest.py index e6437ec2b146..7d7e645a6ae4 100644 --- a/build/gen_test_packages_manifest.py +++ b/build/gen_test_packages_manifest.py @@ -17,15 +17,9 @@ ALL_HARNESSES = [ 'cppunittest', 'jittest', 'mozbase', - 'web-platform', ] PACKAGE_SPECIFIED_HARNESSES = [ - 'cppunittest', - 'mochitest', - 'reftest', - 'xpcshell', - 'web-platform', ] @@ -37,9 +31,6 @@ def parse_args(): parser.add_argument("--jsshell", required=True, action="store", dest="jsshell", help="Name of the jsshell zip.") - parser.add_argument("--use-short-names", action="store_true", - help="Use short names for packages (target.$name.tests.zip " - "instead of $(PACKAGE_BASENAME).$name.tests.zip)") for harness in PACKAGE_SPECIFIED_HARNESSES: parser.add_argument("--%s" % harness, required=True, action="store", dest=harness, @@ -57,18 +48,12 @@ def generate_package_data(args): # which will be an optimization once parts of the main zip are split to harness # specific zips. tests_common = args.tests_common - if args.use_short_names: - tests_common = 'target.common.tests.zip' - jsshell = args.jsshell harness_requirements = dict([(k, [tests_common]) for k in ALL_HARNESSES]) harness_requirements['jittest'].append(jsshell) for harness in PACKAGE_SPECIFIED_HARNESSES: - pkg_name = getattr(args, harness) - if args.use_short_names: - pkg_name = 'target.%s.tests.zip' % harness - harness_requirements[harness].append(pkg_name) + harness_requirements[harness].append(getattr(args, harness)) return harness_requirements if __name__ == '__main__': diff --git a/testing/config/mozharness/android_arm_4_3_config.py b/testing/config/mozharness/android_arm_4_3_config.py index 77cd6bba9794..dbe4e73d210e 100644 --- a/testing/config/mozharness/android_arm_4_3_config.py +++ b/testing/config/mozharness/android_arm_4_3_config.py @@ -99,7 +99,7 @@ config = { }, "cppunittest": { "run_filename": "remotecppunittests.py", - "testsdir": "cppunittest", + "testsdir": "cppunittests", "options": [ "--symbols-path=%(symbols_path)s", "--xre-path=%(xre_path)s", diff --git a/testing/config/mozharness/android_panda_config.py b/testing/config/mozharness/android_panda_config.py index 369a33ba3dad..f1c67492dfc4 100644 --- a/testing/config/mozharness/android_panda_config.py +++ b/testing/config/mozharness/android_panda_config.py @@ -15,7 +15,7 @@ config = { "--skip-manifest=../tests/cppunittests/android_cppunittest_manifest.txt" ], "run_filename": "remotecppunittests.py", - "testsdir": "cppunittest" + "testsdir": "cppunittests" }, "crashtest": { "options": [ diff --git a/testing/config/mozharness/b2g_emulator_config.py b/testing/config/mozharness/b2g_emulator_config.py index 7285f7bd8209..40aa6b008dbb 100644 --- a/testing/config/mozharness/b2g_emulator_config.py +++ b/testing/config/mozharness/b2g_emulator_config.py @@ -16,7 +16,7 @@ config = { "." ], "run_filename": "remotecppunittests.py", - "testsdir": "cppunittest" + "testsdir": "cppunittests" }, "crashtest": { "options": [ diff --git a/testing/config/mozharness/linux_config.py b/testing/config/mozharness/linux_config.py index dd8bc4066cc9..7f79e3bbc0a2 100644 --- a/testing/config/mozharness/linux_config.py +++ b/testing/config/mozharness/linux_config.py @@ -10,7 +10,7 @@ config = { "--xre-path=%(abs_app_dir)s" ], "run_filename": "runcppunittests.py", - "testsdir": "cppunittest" + "testsdir": "cppunittests" }, "jittest": { "options": [ diff --git a/testing/config/mozharness/mac_config.py b/testing/config/mozharness/mac_config.py index 5443e891f177..8d2cd095adea 100644 --- a/testing/config/mozharness/mac_config.py +++ b/testing/config/mozharness/mac_config.py @@ -10,7 +10,7 @@ config = { "--xre-path=%(abs_app_dir)s" ], "run_filename": "runcppunittests.py", - "testsdir": "cppunittest" + "testsdir": "cppunittests" }, "jittest": { "options": [ diff --git a/testing/config/mozharness/windows_config.py b/testing/config/mozharness/windows_config.py index 5443e891f177..8d2cd095adea 100644 --- a/testing/config/mozharness/windows_config.py +++ b/testing/config/mozharness/windows_config.py @@ -10,7 +10,7 @@ config = { "--xre-path=%(abs_app_dir)s" ], "run_filename": "runcppunittests.py", - "testsdir": "cppunittest" + "testsdir": "cppunittests" }, "jittest": { "options": [ diff --git a/testing/mozharness/mozharness.json b/testing/mozharness/mozharness.json index 89d4b76d8ba6..39f3525224cc 100644 --- a/testing/mozharness/mozharness.json +++ b/testing/mozharness/mozharness.json @@ -1,4 +1,4 @@ { "repo": "https://hg.mozilla.org/build/mozharness", - "revision": "94dbc2337e5f" + "revision": "30d82783408b" } diff --git a/testing/taskcluster/README.md b/testing/taskcluster/README.md index ee47c6c3af8b..2d77dc19b269 100644 --- a/testing/taskcluster/README.md +++ b/testing/taskcluster/README.md @@ -87,7 +87,7 @@ task: # need to provide an easy way to lookup the correct aritfact path. locations: build: 'public/name_i_made_up.tar.gz' - tests: 'public/some_tests.zip' or test_packages: 'public/test_packages.json' + tests: 'public/some_tests.zip' ``` #### Templates properties diff --git a/testing/taskcluster/mach_commands.py b/testing/taskcluster/mach_commands.py index 308556b64525..f5560d0ee893 100644 --- a/testing/taskcluster/mach_commands.py +++ b/testing/taskcluster/mach_commands.py @@ -280,19 +280,10 @@ class Graph(object): taskcluster_graph.build_task.validate(build_task) graph['tasks'].append(build_task) - test_packages_url, tests_url = None, None - - if 'test_packages' in build_task['task']['extra']['locations']: - test_packages_url = ARTIFACT_URL.format( - build_parameters['build_slugid'], - build_task['task']['extra']['locations']['test_packages'] - ) - - if 'tests' in build_task['task']['extra']['locations']: - tests_url = ARTIFACT_URL.format( - build_parameters['build_slugid'], - build_task['task']['extra']['locations']['tests'] - ) + tests_url = ARTIFACT_URL.format( + build_parameters['build_slugid'], + build_task['task']['extra']['locations']['tests'] + ) build_url = ARTIFACT_URL.format( build_parameters['build_slugid'], @@ -336,10 +327,7 @@ class Graph(object): test_parameters = copy.copy(build_parameters) test_parameters['build_url'] = build_url test_parameters['img_url'] = img_url - if tests_url: - test_parameters['tests_url'] = tests_url - if test_packages_url: - test_parameters['test_packages_url'] = test_packages_url + test_parameters['tests_url'] = tests_url test_definition = templates.load(test['task'], {})['task'] chunk_config = test_definition['extra']['chunks'] diff --git a/testing/taskcluster/scripts/builder/build-b2g-desktop.sh b/testing/taskcluster/scripts/builder/build-b2g-desktop.sh index c8f64ca46896..e3268706651f 100755 --- a/testing/taskcluster/scripts/builder/build-b2g-desktop.sh +++ b/testing/taskcluster/scripts/builder/build-b2g-desktop.sh @@ -27,7 +27,7 @@ cd $MOZ_OBJDIR/dist ls -lah $MOZ_OBJDIR/dist/ # Target names are cached so make sure we discard them first if found. -rm -f target.linux-x86_64.tar.bz2 target.linux-x86_64.json target*.tests.zip +rm -f target.linux-x86_64.tar.bz2 target.linux-x86_64.json target.tests.zip # Artifacts folder is outside of the cache. mkdir -p $HOME/artifacts/ @@ -36,10 +36,7 @@ mkdir -p $HOME/artifacts/ # the right filename in the task payload where artifacts are declared mv *.linux-x86_64.tar.bz2 $HOME/artifacts/target.linux-x86_64.tar.bz2 mv *.linux-x86_64.json $HOME/artifacts/target.linux-x86_64.json -for name in common cppunittest reftest mochitest xpcshell; do - mv *.$name.tests.zip $HOME/artifacts/target.$name.tests.zip ; -done -mv test_packages_tc.json $HOME/artifacts/test_packages.json +mv *.tests.zip $HOME/artifacts/target.tests.zip mv *.crashreporter-symbols.zip $HOME/artifacts/target.crashreporter-symbols.zip # If the simulator does not exist don't fail diff --git a/testing/taskcluster/scripts/builder/build-emulator-x86.sh b/testing/taskcluster/scripts/builder/build-emulator-x86.sh index 2b129163ab81..dbfb730c02bd 100755 --- a/testing/taskcluster/scripts/builder/build-emulator-x86.sh +++ b/testing/taskcluster/scripts/builder/build-emulator-x86.sh @@ -58,7 +58,7 @@ ls -lah $WORKSPACE/B2G/objdir-gecko/dist/ mv $WORKSPACE/B2G/sources.xml $HOME/artifacts/sources.xml mv $WORKSPACE/B2G/out/target/product/generic_x86/tests/gaia-tests.zip $HOME/artifacts/gaia-tests.zip -mv $WORKSPACE/B2G/out/target/product/generic_x86/tests/b2g-*.zip $HOME/artifacts +mv $WORKSPACE/B2G/out/target/product/generic_x86/tests/b2g-*tests.zip $HOME/artifacts/b2g-tests.zip mv $WORKSPACE/B2G/out/emulator.tar.gz $HOME/artifacts/emulator.tar.gz mv $WORKSPACE/B2G/objdir-gecko/dist/b2g-*.crashreporter-symbols.zip $HOME/artifacts/b2g-crashreporter-symbols.zip diff --git a/testing/taskcluster/scripts/builder/build-emulator.sh b/testing/taskcluster/scripts/builder/build-emulator.sh index e97de3723f50..41664dfb4bb0 100755 --- a/testing/taskcluster/scripts/builder/build-emulator.sh +++ b/testing/taskcluster/scripts/builder/build-emulator.sh @@ -64,7 +64,7 @@ ls -lah $WORKSPACE/B2G/objdir-gecko/dist/ mv $WORKSPACE/B2G/sources.xml $HOME/artifacts/sources.xml mv $WORKSPACE/B2G/out/target/product/generic/tests/gaia-tests.zip $HOME/artifacts/gaia-tests.zip -mv $WORKSPACE/B2G/out/target/product/generic/tests/b2g-*.zip $HOME/artifacts +mv $WORKSPACE/B2G/out/target/product/generic/tests/b2g-*tests.zip $HOME/artifacts/b2g-tests.zip mv $WORKSPACE/B2G/out/emulator.tar.gz $HOME/artifacts/emulator.tar.gz mv $WORKSPACE/B2G/objdir-gecko/dist/b2g-*.crashreporter-symbols.zip $HOME/artifacts/b2g-crashreporter-symbols.zip diff --git a/testing/taskcluster/scripts/builder/build-mulet-linux.sh b/testing/taskcluster/scripts/builder/build-mulet-linux.sh index 00193e789dd0..e7bd31310d59 100755 --- a/testing/taskcluster/scripts/builder/build-mulet-linux.sh +++ b/testing/taskcluster/scripts/builder/build-mulet-linux.sh @@ -21,7 +21,7 @@ cd $MOZ_OBJDIR/dist; ls -lah $MOZ_OBJDIR/dist/ # Target names are cached so make sure we discard them first if found. -rm -f target.linux-x86_64.tar.bz2 target.linux-x86_64.json target*.tests.zip +rm -f target.linux-x86_64.tar.bz2 target.linux-x86_64.json target.tests.zip # Artifacts folder is outside of the cache. mkdir -p $HOME/artifacts/ @@ -30,10 +30,7 @@ mkdir -p $HOME/artifacts/ # the right filename in the task payload where artifacts are declared mv *.linux-x86_64.tar.bz2 $HOME/artifacts/target.linux-x86_64.tar.bz2 mv *.linux-x86_64.json $HOME/artifacts/target.linux-x86_64.json -for name in common cppunittest reftest mochitest xpcshell; do - mv *.$name.tests.zip $HOME/artifacts/target.$name.tests.zip ; -done -mv test_packages_tc.json $HOME/artifacts/test_packages.json +mv *.tests.zip $HOME/artifacts/target.tests.zip mv *.crashreporter-symbols.zip $HOME/artifacts/target.crashreporter-symbols.zip mv jsshell-linux-x86_64.zip $HOME/artifacts/jsshell-linux-x86_64.zip diff --git a/testing/taskcluster/taskcluster_graph/build_task.py b/testing/taskcluster/taskcluster_graph/build_task.py index 5d8ed84c9e48..0b76631f027d 100644 --- a/testing/taskcluster/taskcluster_graph/build_task.py +++ b/testing/taskcluster/taskcluster_graph/build_task.py @@ -29,6 +29,5 @@ def validate(task): if 'build' not in locations: raise BuildTaskValidationException('task.extra.locations.build missing') - if 'tests' not in locations and 'test_packages' not in locations: - raise BuildTaskValidationException('task.extra.locations.tests or ' - 'task.extra.locations.tests_packages missing') + if 'tests' not in locations: + raise BuildTaskValidationException('task.extra.locations.tests missing') diff --git a/testing/taskcluster/tasks/builds/b2g_desktop_base.yml b/testing/taskcluster/tasks/builds/b2g_desktop_base.yml index b86b35f428fa..8e8b8a5b8008 100644 --- a/testing/taskcluster/tasks/builds/b2g_desktop_base.yml +++ b/testing/taskcluster/tasks/builds/b2g_desktop_base.yml @@ -35,4 +35,4 @@ task: # files are located. locations: build: 'public/build/target.linux-x86_64.tar.bz2' - test_packages: 'public/build/test_packages.json' + tests: 'public/build/target.tests.zip' diff --git a/testing/taskcluster/tasks/builds/mulet_linux.yml b/testing/taskcluster/tasks/builds/mulet_linux.yml index 860f5b4e25cb..687c5bac69c6 100644 --- a/testing/taskcluster/tasks/builds/mulet_linux.yml +++ b/testing/taskcluster/tasks/builds/mulet_linux.yml @@ -50,4 +50,4 @@ task: # files are located. locations: build: 'public/build/target.linux-x86_64.tar.bz2' - test_packages: 'public/build/test_packages.json' + tests: 'public/build/target.tests.zip' diff --git a/testing/taskcluster/tasks/tests/b2g_build_test.yml b/testing/taskcluster/tasks/tests/b2g_build_test.yml index 5862175a799c..2ccf9d11b37d 100644 --- a/testing/taskcluster/tasks/tests/b2g_build_test.yml +++ b/testing/taskcluster/tasks/tests/b2g_build_test.yml @@ -18,7 +18,7 @@ task: --config-file ./mozharness_configs/remove_executables.py --installer-url {{build_url}} --no-pull - --test-packages-url {{test_packages_url}} + --test-url {{tests_url}} --download-symbols ondemand --gaia-repo https://hg.mozilla.org/integration/gaia-central --gaia-dir /home/worker diff --git a/testing/taskcluster/tasks/tests/b2g_build_unit.yml b/testing/taskcluster/tasks/tests/b2g_build_unit.yml index a1abc4e8d9d3..cb82118c3f8b 100644 --- a/testing/taskcluster/tasks/tests/b2g_build_unit.yml +++ b/testing/taskcluster/tasks/tests/b2g_build_unit.yml @@ -20,7 +20,7 @@ task: --no-pull --download-symbols ondemand --installer-url {{build_url}} - --test-packages-url {{test_packages_url}} + --test-url {{tests_url}} --gaia-repo https://hg.mozilla.org/integration/gaia-central --gaia-dir /home/worker artifacts: diff --git a/testing/taskcluster/tasks/tests/b2g_gaia_js_integration_tests.yml b/testing/taskcluster/tasks/tests/b2g_gaia_js_integration_tests.yml index 8744b765e0dc..4c8095ee92c6 100644 --- a/testing/taskcluster/tasks/tests/b2g_gaia_js_integration_tests.yml +++ b/testing/taskcluster/tasks/tests/b2g_gaia_js_integration_tests.yml @@ -19,7 +19,7 @@ task: --config-file ./mozharness_configs/remove_executables.py --no-pull --installer-url {{build_url}} - --test-packages-url {{test_packages_url}} + --test-url {{tests_url}} --download-symbols ondemand --total-chunk {{total_chunks}} --this-chunk {{chunk}} diff --git a/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_accessibility.yml b/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_accessibility.yml index af9758450f18..743154c36483 100644 --- a/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_accessibility.yml +++ b/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_accessibility.yml @@ -19,7 +19,7 @@ task: --config-file ./mozharness_configs/remove_executables.py --no-pull --installer-url {{build_url}} - --test-packages-url {{test_packages_url}} + --test-url {{tests_url}} --download-symbols ondemand --gip-suite accessibility --gaia-repo https://hg.mozilla.org/integration/gaia-central diff --git a/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_functional.yml b/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_functional.yml index 7299c03a754b..927689ddb088 100644 --- a/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_functional.yml +++ b/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_functional.yml @@ -19,7 +19,7 @@ task: --config-file ./mozharness_configs/remove_executables.py --no-pull --installer-url {{build_url}} - --test-packages-url {{test_packages_url}} + --test-url {{tests_url}} --download-symbols ondemand --gip-suite functional --total-chunk {{total_chunks}} diff --git a/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_unit.yml b/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_unit.yml index a5f89d0a1f46..028ff1304464 100644 --- a/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_unit.yml +++ b/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_unit.yml @@ -19,7 +19,7 @@ task: --config-file ./mozharness_configs/remove_executables.py --installer-url {{build_url}} --no-pull - --test-packages-url {{test_packages_url}} + --test-url {{tests_url}} --download-symbols ondemand --gip-suite unit --gaia-repo https://hg.mozilla.org/integration/gaia-central diff --git a/testing/taskcluster/tasks/tests/b2g_gaia_unit.yml b/testing/taskcluster/tasks/tests/b2g_gaia_unit.yml index c3630df3a206..c346bd0b1291 100644 --- a/testing/taskcluster/tasks/tests/b2g_gaia_unit.yml +++ b/testing/taskcluster/tasks/tests/b2g_gaia_unit.yml @@ -20,7 +20,7 @@ task: --download-symbols ondemand --no-pull --installer-url {{build_url}} - --test-packages-url {{test_packages_url}} + --test-url {{tests_url}} --gaia-repo https://hg.mozilla.org/integration/gaia-central --gaia-dir /home/worker --xre-url https://queue.taskcluster.net/v1/task/wXAHAaxDQpqxoWF1iljJjg/runs/0/artifacts/public/cache/xulrunner-sdk-40.zip diff --git a/testing/taskcluster/tasks/tests/b2g_gip_oop.yml b/testing/taskcluster/tasks/tests/b2g_gip_oop.yml index fedcdde8b700..177e8343da52 100644 --- a/testing/taskcluster/tasks/tests/b2g_gip_oop.yml +++ b/testing/taskcluster/tasks/tests/b2g_gip_oop.yml @@ -20,7 +20,7 @@ task: --no-pull --app-arg -oop --installer-url {{build_url}} - --test-packages-url {{test_packages_url}} + --test-url {{tests_url}} --download-symbols ondemand --gaia-repo https://hg.mozilla.org/integration/gaia-central --gaia-dir /home/worker diff --git a/testing/taskcluster/tasks/tests/b2g_linter.yml b/testing/taskcluster/tasks/tests/b2g_linter.yml index 14863c136c72..e72f23494176 100644 --- a/testing/taskcluster/tasks/tests/b2g_linter.yml +++ b/testing/taskcluster/tasks/tests/b2g_linter.yml @@ -18,7 +18,7 @@ task: --download-symbols ondemand --no-pull --installer-url {{build_url}} - --test-packages-url {{test_packages_url}} + --test-url {{tests_url}} --gaia-repo https://hg.mozilla.org/integration/gaia-central --gaia-dir /home/worker artifacts: diff --git a/testing/taskcluster/tasks/tests/mulet_mochitests.yml b/testing/taskcluster/tasks/tests/mulet_mochitests.yml index 66ddb8caff40..1b7b63b90d53 100644 --- a/testing/taskcluster/tasks/tests/mulet_mochitests.yml +++ b/testing/taskcluster/tasks/tests/mulet_mochitests.yml @@ -14,7 +14,7 @@ task: --config-file ./mozharness/configs/unittests/linux_unittest.py --config-file ./mozharness_configs/remove_executables.py --installer-url {{build_url}} - --test-packages-url {{test_packages_url}} + --test-url {{tests_url}} --download-symbols ondemand --mochitest-suite plain-chunked --total-chunk={{total_chunks}} diff --git a/testing/taskcluster/tasks/tests/mulet_reftests.yml b/testing/taskcluster/tasks/tests/mulet_reftests.yml index b643291b8a82..901316d68d9a 100644 --- a/testing/taskcluster/tasks/tests/mulet_reftests.yml +++ b/testing/taskcluster/tasks/tests/mulet_reftests.yml @@ -19,7 +19,7 @@ task: --config-file ./mozharness_configs/remove_executables.py --no-pull --installer-url {{build_url}} - --test-packages-url {{test_packages_url}} + --test-url {{tests_url}} --download-symbols ondemand --test-suite reftest --test-manifest tests/layout/reftests/reftest.list diff --git a/testing/testsuite-targets.mk b/testing/testsuite-targets.mk index f4ac4b3d79cc..249c1984f2ba 100644 --- a/testing/testsuite-targets.mk +++ b/testing/testsuite-targets.mk @@ -407,7 +407,6 @@ package-tests: \ stage-web-platform-tests \ stage-luciddream \ test-packages-manifest \ - test-packages-manifest-tc \ $(NULL) ifdef MOZ_WEBRTC package-tests: stage-steeplechase @@ -417,45 +416,19 @@ else PKG_STAGE = $(DIST)/universal/test-stage endif -TEST_PKGS := \ - cppunittest \ - mochitest \ - reftest \ - xpcshell \ - web-platform \ - $(NULL) - -PKG_ARG = --$(1) $(PKG_BASENAME).$(1).tests.zip - -test-packages-manifest-tc: - $(PYTHON) $(topsrcdir)/build/gen_test_packages_manifest.py \ - --jsshell $(JSSHELL_NAME) \ - --dest-file $(MOZ_TEST_PACKAGES_FILE_TC) \ - --use-short-names \ - $(call PKG_ARG,common) \ - $(foreach pkg,$(TEST_PKGS),$(call PKG_ARG,$(pkg))) - test-packages-manifest: @rm -f $(MOZ_TEST_PACKAGES_FILE) - $(PYTHON) $(topsrcdir)/build/gen_test_packages_manifest.py \ - --jsshell $(JSSHELL_NAME) \ - --dest-file $(MOZ_TEST_PACKAGES_FILE) \ - $(call PKG_ARG,common) \ - $(foreach pkg,$(TEST_PKGS),$(call PKG_ARG,$(pkg))) + $(PYTHON) $(topsrcdir)/build/gen_test_packages_manifest.py --common $(TEST_PACKAGE) --jsshell $(JSSHELL_NAME) --dest-file $(MOZ_TEST_PACKAGES_FILE) package-tests: @rm -f '$(DIST)/$(PKG_PATH)$(TEST_PACKAGE)' ifndef UNIVERSAL_BINARY $(NSINSTALL) -D $(DIST)/$(PKG_PATH) endif -# Exclude harness specific directories when generating the common zip. $(MKDIR) -p $(abspath $(DIST))/$(PKG_PATH) && \ cd $(PKG_STAGE) && \ zip -rq9D '$(abspath $(DIST))/$(PKG_PATH)$(TEST_PACKAGE)' \ - * -x \*/.mkdir.done \*.pyc $(foreach name,$(TEST_PKGS),$(name)\*) && \ - $(foreach name,$(TEST_PKGS),rm -f '$(DIST)/$(PKG_PATH)$(PKG_BASENAME).'$(name)'.tests.zip' && \ - zip -rq9D '$(abspath $(DIST))/$(PKG_PATH)$(PKG_BASENAME).'$(name)'.tests.zip' \ - $(name) -x \*/.mkdir.done \*.pyc ;) + * -x \*/.mkdir.done \*.pyc ifeq ($(MOZ_WIDGET_TOOLKIT),android) package-tests: stage-android @@ -537,24 +510,24 @@ endif endif stage-cppunittests: make-stage-dir - $(NSINSTALL) -D $(PKG_STAGE)/cppunittest + $(NSINSTALL) -D $(PKG_STAGE)/cppunittests ifdef STRIP_CPP_TESTS - $(foreach bin,$(CPP_UNIT_TEST_BINS),$(OBJCOPY) $(or $(STRIP_FLAGS),--strip-unneeded) $(bin) $(bin:$(DIST)/cppunittests/%=$(PKG_STAGE)/cppunittest/%);) + $(foreach bin,$(CPP_UNIT_TEST_BINS),$(OBJCOPY) $(or $(STRIP_FLAGS),--strip-unneeded) $(bin) $(bin:$(DIST)/%=$(PKG_STAGE)/%);) else - cp -RL $(CPP_UNIT_TEST_BINS) $(PKG_STAGE)/cppunittest + cp -RL $(DIST)/cppunittests $(PKG_STAGE) endif - cp $(topsrcdir)/testing/runcppunittests.py $(PKG_STAGE)/cppunittest - cp $(topsrcdir)/testing/remotecppunittests.py $(PKG_STAGE)/cppunittest - cp $(topsrcdir)/testing/cppunittest.ini $(PKG_STAGE)/cppunittest - cp $(DEPTH)/mozinfo.json $(PKG_STAGE)/cppunittest + cp $(topsrcdir)/testing/runcppunittests.py $(PKG_STAGE)/cppunittests + cp $(topsrcdir)/testing/remotecppunittests.py $(PKG_STAGE)/cppunittests + cp $(topsrcdir)/testing/cppunittest.ini $(PKG_STAGE)/cppunittests + cp $(DEPTH)/mozinfo.json $(PKG_STAGE)/cppunittests ifeq ($(MOZ_DISABLE_STARTUPCACHE),) - cp $(topsrcdir)/startupcache/test/TestStartupCacheTelemetry.js $(PKG_STAGE)/cppunittest - cp $(topsrcdir)/startupcache/test/TestStartupCacheTelemetry.manifest $(PKG_STAGE)/cppunittest + cp $(topsrcdir)/startupcache/test/TestStartupCacheTelemetry.js $(PKG_STAGE)/cppunittests + cp $(topsrcdir)/startupcache/test/TestStartupCacheTelemetry.manifest $(PKG_STAGE)/cppunittests endif ifdef STRIP_CPP_TESTS - $(OBJCOPY) $(or $(STRIP_FLAGS),--strip-unneeded) $(DIST)/bin/jsapi-tests$(BIN_SUFFIX) $(PKG_STAGE)/cppunittest/jsapi-tests$(BIN_SUFFIX) + $(OBJCOPY) $(or $(STRIP_FLAGS),--strip-unneeded) $(DIST)/bin/jsapi-tests$(BIN_SUFFIX) $(PKG_STAGE)/cppunittests/jsapi-tests$(BIN_SUFFIX) else - cp -RL $(DIST)/bin/jsapi-tests$(BIN_SUFFIX) $(PKG_STAGE)/cppunittest + cp -RL $(DIST)/bin/jsapi-tests$(BIN_SUFFIX) $(PKG_STAGE)/cppunittests endif stage-jittest: make-stage-dir @@ -634,6 +607,5 @@ stage-instrumentation-tests: make-stage-dir stage-instrumentation-tests \ stage-luciddream \ test-packages-manifest \ - test-packages-manifest-tc \ $(NULL) diff --git a/toolkit/mozapps/installer/package-name.mk b/toolkit/mozapps/installer/package-name.mk index 4d3db732f52e..b5a7b2f9eeda 100644 --- a/toolkit/mozapps/installer/package-name.mk +++ b/toolkit/mozapps/installer/package-name.mk @@ -129,12 +129,7 @@ SYMBOL_ARCHIVE_BASENAME = $(PKG_BASENAME).crashreporter-symbols CODE_COVERAGE_ARCHIVE_BASENAME = $(PKG_BASENAME).code-coverage-gcno # Test package naming -TEST_PACKAGE = $(PKG_BASENAME).common.tests.zip -CPP_TEST_PACKAGE = $(PKG_BASENAME).cppunittest.tests.zip -XPC_TEST_PACKAGE = $(PKG_BASENAME).xpcshell.tests.zip -MOCHITEST_PACKAGE = $(PKG_BASENAME).mochitest.tests.zip -REFTEST_PACKAGE = $(PKG_BASENAME).reftest.tests.zip -WP_TEST_PACKAGE = $(PKG_BASENAME).web-platform.tests.zip +TEST_PACKAGE = $(PKG_BASENAME).tests.zip ifneq (,$(wildcard $(DIST)/bin/application.ini)) BUILDID = $(shell $(PYTHON) $(MOZILLA_DIR)/config/printconfigsetting.py $(DIST)/bin/application.ini App BuildID) @@ -161,7 +156,6 @@ MOZ_SOURCESTAMP_FILE = $(DIST)/$(PKG_PATH)/$(MOZ_INFO_BASENAME).txt MOZ_BUILDINFO_FILE = $(DIST)/$(PKG_PATH)/$(MOZ_INFO_BASENAME).json MOZ_MOZINFO_FILE = $(DIST)/$(PKG_PATH)/$(MOZ_INFO_BASENAME).mozinfo.json MOZ_TEST_PACKAGES_FILE = $(DIST)/$(PKG_PATH)/test_packages.json -MOZ_TEST_PACKAGES_FILE_TC = $(DIST)/$(PKG_PATH)/test_packages_tc.json # JavaScript Shell JSSHELL_NAME = jsshell-$(MOZ_PKG_PLATFORM).zip diff --git a/toolkit/mozapps/installer/upload-files.mk b/toolkit/mozapps/installer/upload-files.mk index 251b005ccdd9..7b646ede0fdd 100644 --- a/toolkit/mozapps/installer/upload-files.mk +++ b/toolkit/mozapps/installer/upload-files.mk @@ -726,11 +726,6 @@ UPLOAD_FILES= \ $(call QUOTED_WILDCARD,$(DIST)/$(LANGPACK)) \ $(call QUOTED_WILDCARD,$(wildcard $(DIST)/$(PARTIAL_MAR))) \ $(call QUOTED_WILDCARD,$(DIST)/$(PKG_PATH)$(TEST_PACKAGE)) \ - $(call QUOTED_WILDCARD,$(DIST)/$(PKG_PATH)$(CPP_TEST_PACKAGE)) \ - $(call QUOTED_WILDCARD,$(DIST)/$(PKG_PATH)$(XPC_TEST_PACKAGE)) \ - $(call QUOTED_WILDCARD,$(DIST)/$(PKG_PATH)$(MOCHITEST_PACKAGE)) \ - $(call QUOTED_WILDCARD,$(DIST)/$(PKG_PATH)$(REFTEST_PACKAGE)) \ - $(call QUOTED_WILDCARD,$(DIST)/$(PKG_PATH)$(WP_TEST_PACKAGE)) \ $(call QUOTED_WILDCARD,$(DIST)/$(PKG_PATH)$(SYMBOL_ARCHIVE_BASENAME).zip) \ $(call QUOTED_WILDCARD,$(DIST)/$(SDK)) \ $(call QUOTED_WILDCARD,$(MOZ_SOURCESTAMP_FILE)) \ From d443ce72902c3e8f75e32a83e3d7ad49ca688dc6 Mon Sep 17 00:00:00 2001 From: Morgan Phillips Date: Mon, 29 Jun 2015 13:43:20 -0500 Subject: [PATCH 24/63] Bug 1178161 - Base 32 bit builders on a base image that we control; r=dustin It's not secure to use a 3rd party image. --- testing/docker/desktop32-build/Dockerfile | 2 +- testing/docker/desktop32-build/VERSION | 2 +- testing/docker/ubuntu32-build/Dockerfile | 2 +- testing/docker/ubuntu32-build/VERSION | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/testing/docker/desktop32-build/Dockerfile b/testing/docker/desktop32-build/Dockerfile index e041841fefd1..edbd4dbe8069 100644 --- a/testing/docker/desktop32-build/Dockerfile +++ b/testing/docker/desktop32-build/Dockerfile @@ -1,4 +1,4 @@ -FROM quay.io/mrrrgn/ubuntu32-build:0.0.1 +FROM quay.io/mrrrgn/ubuntu32-build:0.0.2 MAINTAINER Morgan Reece Phillips # Add build scripts; these are the entry points from the taskcluster worker, and diff --git a/testing/docker/desktop32-build/VERSION b/testing/docker/desktop32-build/VERSION index 77d6f4ca2371..8acdd82b765e 100644 --- a/testing/docker/desktop32-build/VERSION +++ b/testing/docker/desktop32-build/VERSION @@ -1 +1 @@ -0.0.0 +0.0.1 diff --git a/testing/docker/ubuntu32-build/Dockerfile b/testing/docker/ubuntu32-build/Dockerfile index b96f83848f58..d30243bf4e1f 100644 --- a/testing/docker/ubuntu32-build/Dockerfile +++ b/testing/docker/ubuntu32-build/Dockerfile @@ -1,4 +1,4 @@ -FROM 32bit/ubuntu:14.04 +FROM quay.io/mrrrgn/ubuntu32:14.04 MAINTAINER Morgan Reece Phillips ### add worker user and setup its workspace diff --git a/testing/docker/ubuntu32-build/VERSION b/testing/docker/ubuntu32-build/VERSION index 8acdd82b765e..4e379d2bfeab 100644 --- a/testing/docker/ubuntu32-build/VERSION +++ b/testing/docker/ubuntu32-build/VERSION @@ -1 +1 @@ -0.0.1 +0.0.2 From c63eb7ac9a77732e14d19160dee18c74dae04bc3 Mon Sep 17 00:00:00 2001 From: Mason Chang Date: Mon, 29 Jun 2015 12:41:59 -0700 Subject: [PATCH 25/63] Bug 1177523 - Test Layers Acceleration in runtime sanity test. r=dvander --- toolkit/components/gfx/SanityTest.js | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/toolkit/components/gfx/SanityTest.js b/toolkit/components/gfx/SanityTest.js index b8a496714466..dfd1ee8fc914 100644 --- a/toolkit/components/gfx/SanityTest.js +++ b/toolkit/components/gfx/SanityTest.js @@ -26,10 +26,12 @@ const TEST_FAILED_VIDEO=2; const TEST_CRASHED=3; // GRAPHICS_SANITY_TEST_OS_SNAPSHOT histogram enumeration values -const SNAPSHOT_OK=0; -const SNAPSHOT_INCORRECT=1; +const SNAPSHOT_VIDEO_OK=0; +const SNAPSHOT_VIDEO_FAIL=1; const SNAPSHOT_ERROR=2; const SNAPSHOT_TIMEOUT=3; +const SNAPSHOT_LAYERS_OK=4; +const SNAPSHOT_LAYERS_FAIL=5; function testPixel(ctx, x, y, r, g, b, a, fuzz) { var data = ctx.getImageData(x, y, 1, 1); @@ -75,9 +77,15 @@ function testWidgetSnapshot(win, canvas, ctx) { try { takeWidgetSnapshot(win, canvas, ctx); if (verifyVideoRendering(ctx)) { - reportSnapshotResult(SNAPSHOT_OK); + reportSnapshotResult(SNAPSHOT_VIDEO_OK); } else { - reportSnapshotResult(SNAPSHOT_INCORRECT); + reportSnapshotResult(SNAPSHOT_VIDEO_FAIL); + } + + if (verifyLayersRendering(ctx)) { + reportSnapshotResult(SNAPSHOT_LAYERS_OK); + } else { + reportSnapshotResult(SNAPSHOT_LAYERS_FAIL); } } catch (e) { reportSnapshotResult(SNAPSHOT_ERROR); @@ -109,6 +117,13 @@ function verifyVideoRendering(ctx) { testPixel(ctx, 50, 114, 255, 0, 0, 255, 64); } +// Verify that the middle of the layers test is the color we expect. +// It's a red 64x64 square, test a pixel deep into the 64x64 square +// to prevent fuzzing. +function verifyLayersRendering(ctx) { + return testPixel(ctx, 18, 18, 255, 0, 0, 255, 64); +} + function testCompositor(win, ctx) { takeWindowSnapshot(win, ctx); @@ -118,6 +133,11 @@ function testCompositor(win, ctx) { return false; } + if (!verifyLayersRendering(ctx)) { + reportResult(TEST_FAILED_RENDER); + return false; + } + reportResult(TEST_PASSED); return true; } From 1c238e01b89f47e4644dcdfe17de865f452e0d13 Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Mon, 29 Jun 2015 16:36:25 -0400 Subject: [PATCH 26/63] Bug 1094323 - Skip script-src-1_2_1.html also on Windows. CLOSED TREE --HG-- extra : rebase_source : c6ce947b40a53a26fb6f37a52801ab4d454cdde3 --- .../script-src/script-src-1_2_1.html.ini | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 testing/web-platform/meta/content-security-policy/script-src/script-src-1_2_1.html.ini diff --git a/testing/web-platform/meta/content-security-policy/script-src/script-src-1_2_1.html.ini b/testing/web-platform/meta/content-security-policy/script-src/script-src-1_2_1.html.ini new file mode 100644 index 000000000000..68bb30a167a9 --- /dev/null +++ b/testing/web-platform/meta/content-security-policy/script-src/script-src-1_2_1.html.ini @@ -0,0 +1,4 @@ +[script-src-1_2_1.html] + type: testharness + disabled: + if os == "win": bug 1094323 From a99e96461428d0d0387215c584176974906bdc08 Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Fri, 26 Jun 2015 06:36:02 -0700 Subject: [PATCH 27/63] Bug 1094324 - Set browser.newtabpage.enhanced default in prefs. r=adw The current behavior is that if there is no user pref, it is set to true or false depending on the value of privacy.donottrackheader.enabled, but completely ignoring the global default. This patch changes the behavior such that: - browser.newtabpage.enhanced's default value is set as a global default - it is also set as sticky, so that even when the same value as the default is set, prefHasUserValue is true. - The introduction is not shown when the default for browser.newtabpage.enhanced is false. It is however shown when the pref is flipped for the first time. --- browser/app/profile/firefox.js | 3 +++ browser/base/content/newtab/intro.js | 4 ++++ browser/base/content/newtab/page.js | 1 + browser/modules/DirectoryLinksProvider.jsm | 2 +- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index c7e158c5fe81..4f0924340c33 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -1677,6 +1677,9 @@ pref("browser.newtabpage.updateIntroShown", false); // Toggles the content of 'about:newtab'. Shows the grid when enabled. pref("browser.newtabpage.enabled", true); +// Toggles the enhanced content of 'about:newtab'. Shows sponsored tiles. +sticky_pref("browser.newtabpage.enhanced", true); + // number of rows of newtab grid pref("browser.newtabpage.rows", 3); diff --git a/browser/base/content/newtab/intro.js b/browser/base/content/newtab/intro.js index 653f73d25e75..4589947dea16 100644 --- a/browser/base/content/newtab/intro.js +++ b/browser/base/content/newtab/intro.js @@ -6,6 +6,7 @@ const PREF_INTRO_SHOWN = "browser.newtabpage.introShown"; const PREF_UPDATE_INTRO_SHOWN = "browser.newtabpage.updateIntroShown"; +const PREF_NEWTAB_ENHANCED = "browser.newtabpage.enhanced"; // These consts indicate the type of intro/onboarding we show. const WELCOME = "welcome"; @@ -205,6 +206,9 @@ let gIntro = { }, showIfNecessary: function() { + if (!Services.prefs.getBoolPref(PREF_NEWTAB_ENHANCED)) { + return; + } if (!Services.prefs.getBoolPref(PREF_INTRO_SHOWN)) { this._onboardingType = WELCOME; this.showPanel(); diff --git a/browser/base/content/newtab/page.js b/browser/base/content/newtab/page.js index 7c02289eb05a..4ba3fb1c5848 100644 --- a/browser/base/content/newtab/page.js +++ b/browser/base/content/newtab/page.js @@ -54,6 +54,7 @@ let gPage = { // Update thumbnails to the new enhanced setting if (aData == "browser.newtabpage.enhanced") { this.update(); + gIntro.showIfNecessary(); } // Initialize the whole page if we haven't done that, yet. diff --git a/browser/modules/DirectoryLinksProvider.jsm b/browser/modules/DirectoryLinksProvider.jsm index 010e69fc9c5e..389b463fbede 100644 --- a/browser/modules/DirectoryLinksProvider.jsm +++ b/browser/modules/DirectoryLinksProvider.jsm @@ -388,7 +388,7 @@ let DirectoryLinksProvider = { */ _setDefaultEnhanced: function DirectoryLinksProvider_setDefaultEnhanced() { if (!Services.prefs.prefHasUserValue(PREF_NEWTAB_ENHANCED)) { - let enhanced = true; + let enhanced = Services.prefs.getBoolPref(PREF_NEWTAB_ENHANCED); try { // Default to not enhanced if DNT is set to tell websites to not track if (Services.prefs.getBoolPref("privacy.donottrackheader.enabled")) { From cb57b1ad8cd31af99cf96a7dad15b90ede8ec3a2 Mon Sep 17 00:00:00 2001 From: Daniel Holbert Date: Mon, 29 Jun 2015 13:02:21 -0700 Subject: [PATCH 28/63] Bug 1177925: Use range-based "for" loops for nsFrameList iteration, in various places in layout. r=tn --- layout/base/nsLayoutUtils.cpp | 6 +++--- layout/generic/nsAbsoluteContainingBlock.cpp | 4 +--- layout/generic/nsBlockFrame.cpp | 11 +++++------ layout/generic/nsContainerFrame.cpp | 9 +++------ layout/generic/nsFontInflationData.cpp | 6 ++---- layout/generic/nsFrameSetFrame.cpp | 3 +-- layout/generic/nsGfxScrollFrame.cpp | 2 +- layout/generic/nsHTMLReflowState.cpp | 2 +- layout/generic/nsInlineFrame.cpp | 2 +- layout/generic/nsTextFrame.cpp | 4 +--- layout/generic/nsVideoFrame.cpp | 8 ++------ layout/tables/nsTableRowFrame.cpp | 10 +++------- layout/tables/nsTableRowGroupFrame.cpp | 6 ++---- 13 files changed, 26 insertions(+), 47 deletions(-) diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp index f24fc6bb498b..88a4ae547615 100644 --- a/layout/base/nsLayoutUtils.cpp +++ b/layout/base/nsLayoutUtils.cpp @@ -3509,7 +3509,7 @@ AddBoxesForFrame(nsIFrame* aFrame, pseudoType == nsCSSAnonBoxes::mozAnonymousPositionedBlock || pseudoType == nsCSSAnonBoxes::mozMathMLAnonymousBlock || pseudoType == nsCSSAnonBoxes::mozXULAnonymousBlock) { - for (nsIFrame* kid = aFrame->GetFirstPrincipalChild(); kid; kid = kid->GetNextSibling()) { + for (nsIFrame* kid : aFrame->PrincipalChildList()) { AddBoxesForFrame(kid, aCallback); } } else { @@ -3548,7 +3548,7 @@ nsLayoutUtils::GetFirstNonAnonymousFrame(nsIFrame* aFrame) pseudoType == nsCSSAnonBoxes::mozAnonymousPositionedBlock || pseudoType == nsCSSAnonBoxes::mozMathMLAnonymousBlock || pseudoType == nsCSSAnonBoxes::mozXULAnonymousBlock) { - for (nsIFrame* kid = aFrame->GetFirstPrincipalChild(); kid; kid = kid->GetNextSibling()) { + for (nsIFrame* kid : aFrame->PrincipalChildList()) { nsIFrame* f = GetFirstNonAnonymousFrame(kid); if (f) { return f; @@ -6958,7 +6958,7 @@ nsLayoutUtils::GetEditableRootContentByContentEditable(nsIDocument* aDocument) nsLayoutUtils::AssertNoDuplicateContinuations(nsIFrame* aContainer, const nsFrameList& aFrameList) { - for (nsIFrame* f = aFrameList.FirstChild(); f ; f = f->GetNextSibling()) { + for (nsIFrame* f : aFrameList) { // Check only later continuations of f; we deal with checking the // earlier continuations when we hit those earlier continuations in // the frame list. diff --git a/layout/generic/nsAbsoluteContainingBlock.cpp b/layout/generic/nsAbsoluteContainingBlock.cpp index c8e23088be61..98064442be7e 100644 --- a/layout/generic/nsAbsoluteContainingBlock.cpp +++ b/layout/generic/nsAbsoluteContainingBlock.cpp @@ -331,9 +331,7 @@ nsAbsoluteContainingBlock::MarkAllFramesDirty() void nsAbsoluteContainingBlock::DoMarkFramesDirty(bool aMarkAllDirty) { - for (nsIFrame* kidFrame = mAbsoluteFrames.FirstChild(); - kidFrame; - kidFrame = kidFrame->GetNextSibling()) { + for (nsIFrame* kidFrame : mAbsoluteFrames) { if (aMarkAllDirty) { kidFrame->AddStateBits(NS_FRAME_IS_DIRTY); } else if (FrameDependsOnContainer(kidFrame, true, true)) { diff --git a/layout/generic/nsBlockFrame.cpp b/layout/generic/nsBlockFrame.cpp index f822ec9ee122..3d9d5f08f2f7 100644 --- a/layout/generic/nsBlockFrame.cpp +++ b/layout/generic/nsBlockFrame.cpp @@ -1279,15 +1279,14 @@ nsBlockFrame::Reflow(nsPresContext* aPresContext, line != end; line++) { UpdateLineContainerWidth(line, containerWidth); } - for (nsIFrame* f = mFloats.FirstChild(); f; f = f->GetNextSibling()) { + for (nsIFrame* f : mFloats) { nsPoint physicalDelta(deltaX, 0); f->MovePositionBy(physicalDelta); } nsFrameList* bulletList = GetOutsideBulletList(); if (bulletList) { nsPoint physicalDelta(deltaX, 0); - for (nsIFrame* f = bulletList->FirstChild(); f; - f = f->GetNextSibling()) { + for (nsIFrame* f : *bulletList) { f->MovePositionBy(physicalDelta); } } @@ -2001,7 +2000,7 @@ nsBlockFrame::ReparentFloats(nsIFrame* aFirstFrame, nsBlockFrame* aOldParent, nsFrameList list; aOldParent->CollectFloats(aFirstFrame, list, aReparentSiblings); if (list.NotEmpty()) { - for (nsIFrame* f = list.FirstChild(); f; f = f->GetNextSibling()) { + for (nsIFrame* f : list) { ReparentFrame(f, aOldParent, this); } mFloats.AppendFrames(nullptr, list); @@ -6361,7 +6360,7 @@ nsBlockFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, if (GetPrevInFlow()) { DisplayOverflowContainers(aBuilder, aDirtyRect, aLists); - for (nsIFrame* f = mFloats.FirstChild(); f; f = f->GetNextSibling()) { + for (nsIFrame* f : mFloats) { if (f->GetStateBits() & NS_FRAME_IS_PUSHED_FLOAT) BuildDisplayListForChild(aBuilder, f, aDirtyRect, aLists); } @@ -7119,7 +7118,7 @@ nsBlockFrame::CheckFloats(nsBlockReflowState& aState) nsAutoTArray storedFloats; bool equal = true; uint32_t i = 0; - for (nsIFrame* f = mFloats.FirstChild(); f; f = f->GetNextSibling()) { + for (nsIFrame* f : mFloats) { if (f->GetStateBits() & NS_FRAME_IS_PUSHED_FLOAT) continue; storedFloats.AppendElement(f); diff --git a/layout/generic/nsContainerFrame.cpp b/layout/generic/nsContainerFrame.cpp index e6e3aeccf59a..0f166dd5ecb8 100644 --- a/layout/generic/nsContainerFrame.cpp +++ b/layout/generic/nsContainerFrame.cpp @@ -860,8 +860,7 @@ nsContainerFrame::DoInlineIntrinsicISize(nsRenderingContext *aRenderingContext, if (aData->currentLine == 0) { aData->currentLine = clonePBM; } - for (nsIFrame *kid = nif->mFrames.FirstChild(); kid; - kid = kid->GetNextSibling()) { + for (nsIFrame* kid : nif->mFrames) { if (aType == nsLayoutUtils::MIN_ISIZE) kid->AddInlineMinISize(aRenderingContext, static_cast(aData)); @@ -1224,8 +1223,7 @@ nsContainerFrame::ReflowOverflowContainerChildren(nsPresContext* aPres nsOverflowContinuationTracker tracker(this, false, false); bool shouldReflowAllKids = aReflowState.ShouldReflowAllKids(); - for (nsIFrame* frame = overflowContainers->FirstChild(); frame; - frame = frame->GetNextSibling()) { + for (nsIFrame* frame : *overflowContainers) { if (frame->GetPrevInFlow()->GetParent() != GetPrevInFlow()) { // frame's prevInFlow has moved, skip reflowing this frame; // it will get reflowed once it's been placed @@ -1315,8 +1313,7 @@ nsContainerFrame::DisplayOverflowContainers(nsDisplayListBuilder* aBuilder, { nsFrameList* overflowconts = GetPropTableFrames(OverflowContainersProperty()); if (overflowconts) { - for (nsIFrame* frame = overflowconts->FirstChild(); frame; - frame = frame->GetNextSibling()) { + for (nsIFrame* frame : *overflowconts) { BuildDisplayListForChild(aBuilder, frame, aDirtyRect, aLists); } } diff --git a/layout/generic/nsFontInflationData.cpp b/layout/generic/nsFontInflationData.cpp index da9379dc6da4..a41b63cd5d83 100644 --- a/layout/generic/nsFontInflationData.cpp +++ b/layout/generic/nsFontInflationData.cpp @@ -289,16 +289,14 @@ static uint32_t DoCharCountOfLargestOption(nsIFrame *aContainer) { uint32_t result = 0; - for (nsIFrame* option = aContainer->GetFirstPrincipalChild(); - option; option = option->GetNextSibling()) { + for (nsIFrame* option : aContainer->PrincipalChildList()) { uint32_t optionResult; if (option->GetContent()->IsHTMLElement(nsGkAtoms::optgroup)) { optionResult = DoCharCountOfLargestOption(option); } else { // REVIEW: Check the frame structure for this! optionResult = 0; - for (nsIFrame *optionChild = option->GetFirstPrincipalChild(); - optionChild; optionChild = optionChild->GetNextSibling()) { + for (nsIFrame* optionChild : option->PrincipalChildList()) { if (optionChild->GetType() == nsGkAtoms::textFrame) { optionResult += nsTextFrameUtils:: ComputeApproximateLengthWithWhitespaceCompression( diff --git a/layout/generic/nsFrameSetFrame.cpp b/layout/generic/nsFrameSetFrame.cpp index c1509e1c35f8..6498104ec80a 100644 --- a/layout/generic/nsFrameSetFrame.cpp +++ b/layout/generic/nsFrameSetFrame.cpp @@ -674,8 +674,7 @@ void nsHTMLFramesetFrame::GetSizeOfChild(nsIFrame* aChild, // Reflow only creates children frames for and content. // this assumption is used here int i = 0; - for (nsIFrame* child = mFrames.FirstChild(); child; - child = child->GetNextSibling()) { + for (nsIFrame* child : mFrames) { if (aChild == child) { nsIntPoint ignore; GetSizeOfChildAt(i, aWM, aSize, ignore); diff --git a/layout/generic/nsGfxScrollFrame.cpp b/layout/generic/nsGfxScrollFrame.cpp index 0dc0a3847711..efe9a5d7880c 100644 --- a/layout/generic/nsGfxScrollFrame.cpp +++ b/layout/generic/nsGfxScrollFrame.cpp @@ -2543,7 +2543,7 @@ ScrollFrameHelper::AppendScrollPartsTo(nsDisplayListBuilder* aBuilder, LookAndFeel::GetInt(LookAndFeel::eIntID_UseOverlayScrollbars) != 0; nsAutoTArray scrollParts; - for (nsIFrame* kid = mOuter->GetFirstPrincipalChild(); kid; kid = kid->GetNextSibling()) { + for (nsIFrame* kid : mOuter->PrincipalChildList()) { if (kid == mScrolledFrame || (kid->IsAbsPosContaininingBlock() || overlayScrollbars) != aPositioned) continue; diff --git a/layout/generic/nsHTMLReflowState.cpp b/layout/generic/nsHTMLReflowState.cpp index 54088bbaf654..240bae82fa8a 100644 --- a/layout/generic/nsHTMLReflowState.cpp +++ b/layout/generic/nsHTMLReflowState.cpp @@ -1167,7 +1167,7 @@ static bool AreAllEarlierInFlowFramesEmpty(nsIFrame* aFrame, *aFound = false; return false; } - for (nsIFrame* f = aFrame->GetFirstPrincipalChild(); f; f = f->GetNextSibling()) { + for (nsIFrame* f : aFrame->PrincipalChildList()) { bool allEmpty = AreAllEarlierInFlowFramesEmpty(f, aDescendant, aFound); if (*aFound || !allEmpty) { return allEmpty; diff --git a/layout/generic/nsInlineFrame.cpp b/layout/generic/nsInlineFrame.cpp index c77122e8cbda..f82ac09acf62 100644 --- a/layout/generic/nsInlineFrame.cpp +++ b/layout/generic/nsInlineFrame.cpp @@ -165,7 +165,7 @@ nsInlineFrame::IsEmpty() return false; } - for (nsIFrame *kid = mFrames.FirstChild(); kid; kid = kid->GetNextSibling()) { + for (nsIFrame* kid : mFrames) { if (!kid->IsEmpty()) return false; } diff --git a/layout/generic/nsTextFrame.cpp b/layout/generic/nsTextFrame.cpp index cfbe500dc05e..85fb24e31653 100644 --- a/layout/generic/nsTextFrame.cpp +++ b/layout/generic/nsTextFrame.cpp @@ -1311,10 +1311,8 @@ BuildTextRuns(gfxContext* aContext, nsTextFrame* aForFrame, // just one line scanner.SetAtStartOfLine(); scanner.SetCommonAncestorWithLastFrame(nullptr); - nsIFrame* child = textRunContainer->GetFirstPrincipalChild(); - while (child) { + for (nsIFrame* child : textRunContainer->PrincipalChildList()) { scanner.ScanFrame(child); - child = child->GetNextSibling(); } // Set mStartOfLine so FlushFrames knows its textrun ends a line scanner.SetAtStartOfLine(); diff --git a/layout/generic/nsVideoFrame.cpp b/layout/generic/nsVideoFrame.cpp index 2d85db930d25..b4b908f73fd0 100644 --- a/layout/generic/nsVideoFrame.cpp +++ b/layout/generic/nsVideoFrame.cpp @@ -264,9 +264,7 @@ nsVideoFrame::Reflow(nsPresContext* aPresContext, // Reflow the child frames. We may have up to two, an image frame // which is the poster, and a box frame, which is the video controls. - for (nsIFrame *child = mFrames.FirstChild(); - child; - child = child->GetNextSibling()) { + for (nsIFrame* child : mFrames) { if (child->GetContent() == mPosterImage) { // Reflow the poster frame. nsImageFrame* imageFrame = static_cast(child); @@ -438,9 +436,7 @@ nsVideoFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, // Add child frames to display list. We expect various children, // but only want to draw mPosterImage conditionally. Others we // always add to the display list. - for (nsIFrame *child = mFrames.FirstChild(); - child; - child = child->GetNextSibling()) { + for (nsIFrame* child : mFrames) { if (child->GetContent() != mPosterImage || shouldDisplayPoster) { child->BuildDisplayListForStackingContext(aBuilder, aDirtyRect - child->GetOffsetTo(this), diff --git a/layout/tables/nsTableRowFrame.cpp b/layout/tables/nsTableRowFrame.cpp index 6211eb4a107c..5516caa0fc42 100644 --- a/layout/tables/nsTableRowFrame.cpp +++ b/layout/tables/nsTableRowFrame.cpp @@ -303,13 +303,11 @@ GetBSizeOfRowsSpannedBelowFirst(nsTableCellFrame& aTableCellFrame, nsTableCellFrame* nsTableRowFrame::GetFirstCell() { - nsIFrame* childFrame = mFrames.FirstChild(); - while (childFrame) { + for (nsIFrame* childFrame : mFrames) { nsTableCellFrame *cellFrame = do_QueryFrame(childFrame); if (cellFrame) { return cellFrame; } - childFrame = childFrame->GetNextSibling(); } return nullptr; } @@ -538,8 +536,7 @@ nsTableRowFrame::CalcBSize(const nsHTMLReflowState& aReflowState) } // calc() with percentages is treated like 'auto' on table rows. - for (nsIFrame* kidFrame = mFrames.FirstChild(); kidFrame; - kidFrame = kidFrame->GetNextSibling()) { + for (nsIFrame* kidFrame : mFrames) { nsTableCellFrame *cellFrame = do_QueryFrame(kidFrame); if (cellFrame) { MOZ_ASSERT(cellFrame->GetWritingMode() == wm); @@ -1394,8 +1391,7 @@ nsTableRowFrame::InsertCellFrame(nsTableCellFrame* aFrame, { // Find the cell frame where col index < aColIndex nsTableCellFrame* priorCell = nullptr; - for (nsIFrame* child = mFrames.FirstChild(); child; - child = child->GetNextSibling()) { + for (nsIFrame* child : mFrames) { nsTableCellFrame *cellFrame = do_QueryFrame(child); if (cellFrame) { int32_t colIndex; diff --git a/layout/tables/nsTableRowGroupFrame.cpp b/layout/tables/nsTableRowGroupFrame.cpp index 33eef8ca37cf..1a0d88c56701 100644 --- a/layout/tables/nsTableRowGroupFrame.cpp +++ b/layout/tables/nsTableRowGroupFrame.cpp @@ -83,8 +83,7 @@ int32_t nsTableRowGroupFrame::GetStartRowIndex() void nsTableRowGroupFrame::AdjustRowIndices(int32_t aRowIndex, int32_t anAdjustment) { - nsIFrame* rowFrame = GetFirstPrincipalChild(); - for ( ; rowFrame; rowFrame = rowFrame->GetNextSibling()) { + for (nsIFrame* rowFrame : mFrames) { if (NS_STYLE_DISPLAY_TABLE_ROW==rowFrame->StyleDisplay()->mDisplay) { int32_t index = ((nsTableRowFrame*)rowFrame)->GetRowIndex(); if (index >= aRowIndex) @@ -485,8 +484,7 @@ nsTableRowGroupFrame::ReflowChildren(nsPresContext* aPresContext, nsTableRowFrame* nsTableRowGroupFrame::GetFirstRow() { - for (nsIFrame* childFrame = mFrames.FirstChild(); childFrame; - childFrame = childFrame->GetNextSibling()) { + for (nsIFrame* childFrame : mFrames) { nsTableRowFrame *rowFrame = do_QueryFrame(childFrame); if (rowFrame) { return rowFrame; From 33b717d41402c038231bde7f789581f076e9c7ae Mon Sep 17 00:00:00 2001 From: Sean Stangl Date: Mon, 29 Jun 2015 13:14:58 -0700 Subject: [PATCH 29/63] Bug 1175556 - ARM64: Land miscellaneous changes. r=evilpie --- js/src/asmjs/AsmJSFrameIterator.cpp | 11 +++-- js/src/asmjs/AsmJSModule.cpp | 7 +++ js/src/asmjs/AsmJSSignalHandlers.cpp | 4 +- js/src/asmjs/AsmJSValidate.cpp | 3 +- js/src/builtin/TestingFunctions.cpp | 8 ++++ .../irregexp/NativeRegExpMacroAssembler.cpp | 8 +++- js/src/jit/AtomicOperations-inl.h | 4 +- js/src/jit/CodeGenerator.h | 2 + js/src/jit/IonCaches.h | 2 + js/src/jit/JitCommon.h | 4 +- js/src/jit/JitFrames.cpp | 6 +++ js/src/jit/LIR.h | 2 + js/src/jit/LOpcodes.h | 2 + js/src/jit/Lowering.h | 2 + js/src/jit/MacroAssembler.cpp | 14 +++--- js/src/jit/MacroAssembler.h | 17 +++++-- js/src/jit/MoveEmitter.h | 2 + js/src/jit/RegisterAllocator.h | 4 ++ js/src/jit/Registers.h | 5 +- js/src/jit/arm/Simulator-arm.h | 7 ++- js/src/jit/arm64/Assembler-arm64.cpp | 2 +- js/src/jit/arm64/Assembler-arm64.h | 4 +- js/src/jit/arm64/MacroAssembler-arm64.cpp | 2 +- js/src/jit/arm64/MacroAssembler-arm64.h | 21 ++++----- js/src/jit/arm64/vixl/Assembler-vixl.h | 46 ++++++++++++++++++- js/src/jit/arm64/vixl/MacroAssembler-vixl.cpp | 2 +- js/src/jit/arm64/vixl/MozAssembler-vixl.cpp | 43 +++++++++-------- js/src/jit/arm64/vixl/MozSimulator-vixl.cpp | 6 +-- js/src/jit/arm64/vixl/Simulator-vixl.h | 22 +++++++-- js/src/jit/mips/Simulator-mips.h | 7 ++- js/src/jit/shared/Assembler-shared.h | 12 +++-- js/src/jit/shared/CodeGenerator-shared-inl.h | 2 +- js/src/jit/shared/CodeGenerator-shared.cpp | 9 ++-- .../IonAssemblerBufferWithConstantPools.h | 2 +- js/src/jit/shared/Lowering-shared-inl.h | 2 +- js/src/vm/Runtime.cpp | 1 + js/src/vm/Runtime.h | 13 +++++- 37 files changed, 229 insertions(+), 81 deletions(-) diff --git a/js/src/asmjs/AsmJSFrameIterator.cpp b/js/src/asmjs/AsmJSFrameIterator.cpp index 43afbd6278da..a83946f49b08 100644 --- a/js/src/asmjs/AsmJSFrameIterator.cpp +++ b/js/src/asmjs/AsmJSFrameIterator.cpp @@ -131,6 +131,11 @@ static const unsigned PushedRetAddr = 4; static const unsigned PushedFP = 16; static const unsigned StoredFP = 20; static const unsigned PostStorePrePopFP = 4; +#elif defined(JS_CODEGEN_ARM64) +static const unsigned PushedRetAddr = 0; +static const unsigned PushedFP = 0; +static const unsigned StoredFP = 0; +static const unsigned PostStorePrePopFP = 0; #elif defined(JS_CODEGEN_MIPS) static const unsigned PushedRetAddr = 8; static const unsigned PushedFP = 24; @@ -216,7 +221,7 @@ GenerateProfilingEpilogue(MacroAssembler& masm, unsigned framePushed, AsmJSExit: Label* profilingReturn) { Register scratch = ABIArgGenerator::NonReturn_VolatileReg0; -#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS) +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || defined(JS_CODEGEN_MIPS) Register scratch2 = ABIArgGenerator::NonReturn_VolatileReg1; #endif @@ -240,11 +245,11 @@ GenerateProfilingEpilogue(MacroAssembler& masm, unsigned framePushed, AsmJSExit: // and the async interrupt exit. Since activation.fp can be read at any // time and still points to the current frame, be careful to only update // sp after activation.fp has been repointed to the caller's frame. -#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS) +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || defined(JS_CODEGEN_MIPS) masm.loadPtr(Address(masm.getStackPointer(), 0), scratch2); masm.storePtr(scratch2, Address(scratch, AsmJSActivation::offsetOfFP())); DebugOnly prePop = masm.currentOffset(); - masm.add32(Imm32(4), masm.getStackPointer()); + masm.addToStackPtr(Imm32(sizeof(void *))); MOZ_ASSERT(PostStorePrePopFP == masm.currentOffset() - prePop); #else masm.pop(Address(scratch, AsmJSActivation::offsetOfFP())); diff --git a/js/src/asmjs/AsmJSModule.cpp b/js/src/asmjs/AsmJSModule.cpp index 9977e2e0f275..ec73a204877a 100644 --- a/js/src/asmjs/AsmJSModule.cpp +++ b/js/src/asmjs/AsmJSModule.cpp @@ -1787,6 +1787,9 @@ AsmJSModule::setProfilingEnabled(bool enabled, JSContext* cx) BOffImm calleeOffset; callerInsn->as()->extractImm(&calleeOffset); void* callee = calleeOffset.getDest(callerInsn); +#elif defined(JS_CODEGEN_ARM64) + MOZ_CRASH(); + void* callee = nullptr; #elif defined(JS_CODEGEN_MIPS) Instruction* instr = (Instruction*)(callerRetAddr - 4 * sizeof(uint32_t)); void* callee = (void*)Assembler::ExtractLuiOriValue(instr, instr->next()); @@ -1811,6 +1814,8 @@ AsmJSModule::setProfilingEnabled(bool enabled, JSContext* cx) X86Encoding::SetRel32(callerRetAddr, newCallee); #elif defined(JS_CODEGEN_ARM) new (caller) InstBLImm(BOffImm(newCallee - caller), Assembler::Always); +#elif defined(JS_CODEGEN_ARM64) + MOZ_CRASH(); #elif defined(JS_CODEGEN_MIPS) Assembler::WriteLuiOriInstructions(instr, instr->next(), ScratchRegister, (uint32_t)newCallee); @@ -1874,6 +1879,8 @@ AsmJSModule::setProfilingEnabled(bool enabled, JSContext* cx) MOZ_ASSERT(reinterpret_cast(jump)->is()); new (jump) InstNOP(); } +#elif defined(JS_CODEGEN_ARM64) + MOZ_CRASH(); #elif defined(JS_CODEGEN_MIPS) Instruction* instr = (Instruction*)jump; if (enabled) { diff --git a/js/src/asmjs/AsmJSSignalHandlers.cpp b/js/src/asmjs/AsmJSSignalHandlers.cpp index 0443c368c466..77d477a2b68d 100644 --- a/js/src/asmjs/AsmJSSignalHandlers.cpp +++ b/js/src/asmjs/AsmJSSignalHandlers.cpp @@ -1164,8 +1164,8 @@ RedirectJitCodeToInterruptCheck(JSRuntime* rt, CONTEXT* context) const AsmJSModule& module = activation->module(); #ifdef JS_SIMULATOR - if (module.containsFunctionPC((void*)rt->simulator()->get_pc())) - rt->simulator()->set_resume_pc(int32_t(module.interruptExit())); + if (module.containsFunctionPC(rt->simulator()->get_pc_as())) + rt->simulator()->set_resume_pc(module.interruptExit()); #endif uint8_t** ppc = ContextToPC(context); diff --git a/js/src/asmjs/AsmJSValidate.cpp b/js/src/asmjs/AsmJSValidate.cpp index a531ec421432..bb5f5c5e483b 100644 --- a/js/src/asmjs/AsmJSValidate.cpp +++ b/js/src/asmjs/AsmJSValidate.cpp @@ -9112,7 +9112,8 @@ GenerateAsyncInterruptExit(ModuleCompiler& m, Label* throwLabel) masm.transferReg(lr); masm.finishDataTransfer(); masm.ret(); - +#elif defined(JS_CODEGEN_ARM64) + MOZ_CRASH(); #elif defined (JS_CODEGEN_NONE) MOZ_CRASH(); #else diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp index 9afaf4a08bca..92fd49a34a70 100644 --- a/js/src/builtin/TestingFunctions.cpp +++ b/js/src/builtin/TestingFunctions.cpp @@ -112,6 +112,14 @@ GetBuildConfiguration(JSContext* cx, unsigned argc, jsval* vp) if (!JS_SetProperty(cx, info, "arm-simulator", value)) return false; +#ifdef JS_SIMULATOR_ARM64 + value = BooleanValue(true); +#else + value = BooleanValue(false); +#endif + if (!JS_SetProperty(cx, info, "arm64-simulator", value)) + return false; + #ifdef MOZ_ASAN value = BooleanValue(true); #else diff --git a/js/src/irregexp/NativeRegExpMacroAssembler.cpp b/js/src/irregexp/NativeRegExpMacroAssembler.cpp index 660dce798f68..0da8cc0094fe 100644 --- a/js/src/irregexp/NativeRegExpMacroAssembler.cpp +++ b/js/src/irregexp/NativeRegExpMacroAssembler.cpp @@ -120,6 +120,12 @@ NativeRegExpMacroAssembler::GenerateCode(JSContext* cx, bool match_only) // registers we need. masm.bind(&entry_label_); +#ifdef JS_CODEGEN_ARM64 + // ARM64 communicates stack address via sp, but uses a pseudo-sp for addressing. + MOZ_ASSERT(!masm.GetStackPointer64().Is(sp)); + masm.moveStackPtrTo(masm.getStackPointer()); +#endif + // Push non-volatile registers which might be modified by jitcode. size_t pushedNonVolatileRegisters = 0; for (GeneralRegisterForwardIterator iter(savedNonVolatileRegisters); iter.more(); ++iter) { @@ -387,7 +393,7 @@ NativeRegExpMacroAssembler::GenerateCode(JSContext* cx, bool match_only) // Save registers before calling C function LiveGeneralRegisterSet volatileRegs(GeneralRegisterSet::Volatile()); -#if defined(JS_CODEGEN_ARM) +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) volatileRegs.add(Register::FromCode(Registers::lr)); #elif defined(JS_CODEGEN_MIPS) volatileRegs.add(Register::FromCode(Registers::ra)); diff --git a/js/src/jit/AtomicOperations-inl.h b/js/src/jit/AtomicOperations-inl.h index 37adf40a3125..5683ee3e9c71 100644 --- a/js/src/jit/AtomicOperations-inl.h +++ b/js/src/jit/AtomicOperations-inl.h @@ -9,6 +9,8 @@ #if defined(JS_CODEGEN_ARM) # include "jit/arm/AtomicOperations-arm.h" +#elif defined(JS_CODEGEN_ARM64) +# include "jit/arm64/AtomicOperations-arm64.h" #elif defined(JS_CODEGEN_MIPS) # include "jit/mips/AtomicOperations-mips.h" #elif defined(JS_CODEGEN_NONE) @@ -19,4 +21,4 @@ # error "Atomic operations must be defined for this platform" #endif -#endif // jit_AtomicOperations_inl_h +#endif // jit_AtomicOperations_inl_h diff --git a/js/src/jit/CodeGenerator.h b/js/src/jit/CodeGenerator.h index 4f704bb8788b..a09358b1ff58 100644 --- a/js/src/jit/CodeGenerator.h +++ b/js/src/jit/CodeGenerator.h @@ -18,6 +18,8 @@ # include "jit/x64/CodeGenerator-x64.h" #elif defined(JS_CODEGEN_ARM) # include "jit/arm/CodeGenerator-arm.h" +#elif defined(JS_CODEGEN_ARM64) +# include "jit/arm64/CodeGenerator-arm64.h" #elif defined(JS_CODEGEN_MIPS) # include "jit/mips/CodeGenerator-mips.h" #elif defined(JS_CODEGEN_NONE) diff --git a/js/src/jit/IonCaches.h b/js/src/jit/IonCaches.h index cbe999cf6bb9..a5f6c0cb54a6 100644 --- a/js/src/jit/IonCaches.h +++ b/js/src/jit/IonCaches.h @@ -9,6 +9,8 @@ #if defined(JS_CODEGEN_ARM) # include "jit/arm/Assembler-arm.h" +#elif defined(JS_CODEGEN_ARM64) +# include "jit/arm64/Assembler-arm64.h" #elif defined(JS_CODEGEN_MIPS) # include "jit/mips/Assembler-mips.h" #endif diff --git a/js/src/jit/JitCommon.h b/js/src/jit/JitCommon.h index 98cf78a830f7..0a6a3fd81282 100644 --- a/js/src/jit/JitCommon.h +++ b/js/src/jit/JitCommon.h @@ -11,11 +11,13 @@ #if defined(JS_SIMULATOR_ARM) #include "jit/arm/Simulator-arm.h" +#elif defined(JS_SIMULATOR_ARM64) +# include "jit/arm64/vixl/Simulator-vixl.h" #elif defined(JS_SIMULATOR_MIPS) #include "jit/mips/Simulator-mips.h" #endif -#if defined(JS_SIMULATOR_ARM) || defined(JS_SIMULATOR_MIPS) +#ifdef JS_SIMULATOR // Call into cross-jitted code by following the ABI of the simulated architecture. #define CALL_GENERATED_CODE(entry, p0, p1, p2, p3, p4, p5, p6, p7) \ (js::jit::Simulator::Current()->call( \ diff --git a/js/src/jit/JitFrames.cpp b/js/src/jit/JitFrames.cpp index d59953dd2684..dd091abb7a00 100644 --- a/js/src/jit/JitFrames.cpp +++ b/js/src/jit/JitFrames.cpp @@ -2593,6 +2593,12 @@ MachineState::FromBailout(RegisterDump::GPRArray& regs, RegisterDump::FPUArray& machine.setRegisterLocation(FloatRegister(i, FloatRegisters::Int32x4), &fpregs[i]); machine.setRegisterLocation(FloatRegister(i, FloatRegisters::Float32x4), &fpregs[i]); } +#elif defined(JS_CODEGEN_ARM64) + for (unsigned i = 0; i < FloatRegisters::TotalPhys; i++) { + machine.setRegisterLocation(FloatRegister(i, FloatRegisters::Single), &fpregs[i]); + machine.setRegisterLocation(FloatRegister(i, FloatRegisters::Double), &fpregs[i]); + } + #elif defined(JS_CODEGEN_NONE) MOZ_CRASH(); #else diff --git a/js/src/jit/LIR.h b/js/src/jit/LIR.h index edd18c70b9a5..2521c2672e70 100644 --- a/js/src/jit/LIR.h +++ b/js/src/jit/LIR.h @@ -1825,6 +1825,8 @@ LAllocation::toRegister() const # include "jit/x86-shared/LIR-x86-shared.h" #elif defined(JS_CODEGEN_ARM) # include "jit/arm/LIR-arm.h" +#elif defined(JS_CODEGEN_ARM64) +# include "jit/arm64/LIR-arm64.h" #elif defined(JS_CODEGEN_MIPS) # include "jit/mips/LIR-mips.h" #elif defined(JS_CODEGEN_NONE) diff --git a/js/src/jit/LOpcodes.h b/js/src/jit/LOpcodes.h index b387b1705f61..692a405b2cad 100644 --- a/js/src/jit/LOpcodes.h +++ b/js/src/jit/LOpcodes.h @@ -359,6 +359,8 @@ # include "jit/x64/LOpcodes-x64.h" #elif defined(JS_CODEGEN_ARM) # include "jit/arm/LOpcodes-arm.h" +#elif defined(JS_CODEGEN_ARM64) +# include "jit/arm64/LOpcodes-arm64.h" #elif defined(JS_CODEGEN_MIPS) # include "jit/mips/LOpcodes-mips.h" #elif defined(JS_CODEGEN_NONE) diff --git a/js/src/jit/Lowering.h b/js/src/jit/Lowering.h index 1e05ff1b5a76..b4f2fefad499 100644 --- a/js/src/jit/Lowering.h +++ b/js/src/jit/Lowering.h @@ -17,6 +17,8 @@ # include "jit/x64/Lowering-x64.h" #elif defined(JS_CODEGEN_ARM) # include "jit/arm/Lowering-arm.h" +#elif defined(JS_CODEGEN_ARM64) +# include "jit/arm64/Lowering-arm64.h" #elif defined(JS_CODEGEN_MIPS) # include "jit/mips/Lowering-mips.h" #elif defined(JS_CODEGEN_NONE) diff --git a/js/src/jit/MacroAssembler.cpp b/js/src/jit/MacroAssembler.cpp index 3377a89fb96c..cd12114ea4c4 100644 --- a/js/src/jit/MacroAssembler.cpp +++ b/js/src/jit/MacroAssembler.cpp @@ -1594,8 +1594,7 @@ MacroAssembler::generateBailoutTail(Register scratch, Register bailoutInfo) regs.take(bailoutInfo); // Reset SP to the point where clobbering starts. - loadPtr(Address(bailoutInfo, offsetof(BaselineBailoutInfo, incomingStack)), - BaselineStackReg); + loadStackPtr(Address(bailoutInfo, offsetof(BaselineBailoutInfo, incomingStack))); Register copyCur = regs.takeAny(); Register copyEnd = regs.takeAny(); @@ -1610,7 +1609,7 @@ MacroAssembler::generateBailoutTail(Register scratch, Register bailoutInfo) bind(©Loop); branchPtr(Assembler::BelowOrEqual, copyCur, copyEnd, &endOfCopy); subPtr(Imm32(4), copyCur); - subPtr(Imm32(4), BaselineStackReg); + subFromStackPtr(Imm32(4)); load32(Address(copyCur, 0), temp); store32(temp, Address(BaselineStackReg, 0)); jump(©Loop); @@ -2510,9 +2509,12 @@ MacroAssembler::MacroAssembler(JSContext* cx, IonScript* ion, jitContext_.emplace(cx, (js::jit::TempAllocator*)nullptr); alloc_.emplace(cx); moveResolver_.setAllocator(*jitContext_->temp); -#ifdef JS_CODEGEN_ARM +#if defined(JS_CODEGEN_ARM) initWithAllocator(); m_buffer.id = GetJitContext()->getNextAssemblerId(); +#elif defined(JS_CODEGEN_ARM64) + initWithAllocator(); + armbuffer_.id = GetJitContext()->getNextAssemblerId(); #endif if (ion) { setFramePushed(ion->frameSize()); @@ -2707,12 +2709,12 @@ MacroAssembler::freeStack(uint32_t amount) { MOZ_ASSERT(amount <= framePushed_); if (amount) - addPtr(Imm32(amount), StackPointer); + addToStackPtr(Imm32(amount)); framePushed_ -= amount; } void MacroAssembler::freeStack(Register amount) { - addPtr(amount, StackPointer); + addToStackPtr(amount); } diff --git a/js/src/jit/MacroAssembler.h b/js/src/jit/MacroAssembler.h index 9495d69616a7..6941d5c18dc8 100644 --- a/js/src/jit/MacroAssembler.h +++ b/js/src/jit/MacroAssembler.h @@ -17,6 +17,8 @@ # include "jit/x64/MacroAssembler-x64.h" #elif defined(JS_CODEGEN_ARM) # include "jit/arm/MacroAssembler-arm.h" +#elif defined(JS_CODEGEN_ARM64) +# include "jit/arm64/MacroAssembler-arm64.h" #elif defined(JS_CODEGEN_MIPS) # include "jit/mips/MacroAssembler-mips.h" #elif defined(JS_CODEGEN_NONE) @@ -44,6 +46,8 @@ # define ONLY_X86_X64 #elif defined(JS_CODEGEN_ARM) # define ONLY_X86_X64 = delete +#elif defined(JS_CODEGEN_ARM64) +# define ONLY_X86_X64 = delete #elif defined(JS_CODEGEN_MIPS) # define ONLY_X86_X64 = delete #elif defined(JS_CODEGEN_NONE) @@ -233,9 +237,13 @@ class MacroAssembler : public MacroAssemblerSpecific } moveResolver_.setAllocator(*jcx->temp); -#ifdef JS_CODEGEN_ARM + +#if defined(JS_CODEGEN_ARM) initWithAllocator(); m_buffer.id = jcx->getNextAssemblerId(); +#elif defined(JS_CODEGEN_ARM64) + initWithAllocator(); + armbuffer_.id = jcx->getNextAssemblerId(); #endif } @@ -250,9 +258,12 @@ class MacroAssembler : public MacroAssemblerSpecific : emitProfilingInstrumentation_(false), framePushed_(0) { -#ifdef JS_CODEGEN_ARM +#if defined(JS_CODEGEN_ARM) initWithAllocator(); m_buffer.id = 0; +#elif defined(JS_CODEGEN_ARM64) + initWithAllocator(); + armbuffer_.id = 0; #endif } @@ -572,7 +583,7 @@ class MacroAssembler : public MacroAssemblerSpecific } #elif defined(JS_PUNBOX64) if (dest.valueReg() != JSReturnReg) - movq(JSReturnReg, dest.valueReg()); + mov(JSReturnReg, dest.valueReg()); #else #error "Bad architecture" #endif diff --git a/js/src/jit/MoveEmitter.h b/js/src/jit/MoveEmitter.h index 4264c930ed54..501680997787 100644 --- a/js/src/jit/MoveEmitter.h +++ b/js/src/jit/MoveEmitter.h @@ -11,6 +11,8 @@ # include "jit/x86-shared/MoveEmitter-x86-shared.h" #elif defined(JS_CODEGEN_ARM) # include "jit/arm/MoveEmitter-arm.h" +#elif defined(JS_CODEGEN_ARM64) +// # include "jit/arm64/MoveEmitter-arm64.h" #elif defined(JS_CODEGEN_MIPS) # include "jit/mips/MoveEmitter-mips.h" #elif defined(JS_CODEGEN_NONE) diff --git a/js/src/jit/RegisterAllocator.h b/js/src/jit/RegisterAllocator.h index 3ea2bc70e56e..549d94711878 100644 --- a/js/src/jit/RegisterAllocator.h +++ b/js/src/jit/RegisterAllocator.h @@ -278,6 +278,10 @@ class RegisterAllocator #elif defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS) allRegisters_.take(AnyRegister(HeapReg)); allRegisters_.take(AnyRegister(GlobalReg)); +#elif defined(JS_CODEGEN_ARM64) + allRegisters_.take(AnyRegister(HeapReg)); + allRegisters_.take(AnyRegister(HeapLenReg)); + allRegisters_.take(AnyRegister(GlobalReg)); #endif } else { if (FramePointer != InvalidReg && mir->instrumentedProfiling()) diff --git a/js/src/jit/Registers.h b/js/src/jit/Registers.h index 272d5de61e06..ade485fa44d3 100644 --- a/js/src/jit/Registers.h +++ b/js/src/jit/Registers.h @@ -14,6 +14,8 @@ # include "jit/x86-shared/Architecture-x86-shared.h" #elif defined(JS_CODEGEN_ARM) # include "jit/arm/Architecture-arm.h" +#elif defined(JS_CODEGEN_ARM64) +# include "jit/arm64/Architecture-arm64.h" #elif defined(JS_CODEGEN_MIPS) # include "jit/mips/Architecture-mips.h" #elif defined(JS_CODEGEN_NONE) @@ -42,8 +44,7 @@ struct Register { Register r = { Encoding(code) }; return r; } - Code code() const { - MOZ_ASSERT(Code(reg_) < Registers::Total); + MOZ_CONSTEXPR Code code() const { return Code(reg_); } Encoding encoding() const { diff --git a/js/src/jit/arm/Simulator-arm.h b/js/src/jit/arm/Simulator-arm.h index fa7ed03bf4df..fb31caecc934 100644 --- a/js/src/jit/arm/Simulator-arm.h +++ b/js/src/jit/arm/Simulator-arm.h @@ -161,8 +161,11 @@ class Simulator void set_pc(int32_t value); int32_t get_pc() const; - void set_resume_pc(int32_t value) { - resume_pc_ = value; + template + T get_pc_as() const { return reinterpret_cast(get_pc()); } + + void set_resume_pc(void* value) { + resume_pc_ = int32_t(value); } void enable_single_stepping(SingleStepCallback cb, void* arg); diff --git a/js/src/jit/arm64/Assembler-arm64.cpp b/js/src/jit/arm64/Assembler-arm64.cpp index e0c7a9b8082e..fdeb72df5406 100644 --- a/js/src/jit/arm64/Assembler-arm64.cpp +++ b/js/src/jit/arm64/Assembler-arm64.cpp @@ -323,7 +323,7 @@ Assembler::addPatchableJump(BufferOffset src, Relocation::Kind reloc) } void -PatchJump(CodeLocationJump& jump_, CodeLocationLabel label) +PatchJump(CodeLocationJump& jump_, CodeLocationLabel label, ReprotectCode reprotect) { MOZ_CRASH("PatchJump"); } diff --git a/js/src/jit/arm64/Assembler-arm64.h b/js/src/jit/arm64/Assembler-arm64.h index 62d166397782..a130217ac5b8 100644 --- a/js/src/jit/arm64/Assembler-arm64.h +++ b/js/src/jit/arm64/Assembler-arm64.h @@ -553,10 +553,10 @@ GetTempRegForIntArg(uint32_t usedIntArgs, uint32_t usedFloatArgs, Register* out) return false; *out = CallTempNonArgRegs[usedIntArgs]; return true; - } -void PatchJump(CodeLocationJump& jump_, CodeLocationLabel label); +void PatchJump(CodeLocationJump& jump_, CodeLocationLabel label, + ReprotectCode reprotect = DontReprotect); static inline void PatchBackedge(CodeLocationJump& jump_, CodeLocationLabel label, JitRuntime::BackedgeTarget target) diff --git a/js/src/jit/arm64/MacroAssembler-arm64.cpp b/js/src/jit/arm64/MacroAssembler-arm64.cpp index 338d6dbdbe6b..7c3cd3229b01 100644 --- a/js/src/jit/arm64/MacroAssembler-arm64.cpp +++ b/js/src/jit/arm64/MacroAssembler-arm64.cpp @@ -6,7 +6,7 @@ #include "jit/arm64/MacroAssembler-arm64.h" -// TODO #include "jit/arm64/MoveEmitter-arm64.h" +// #include "jit/arm64/MoveEmitter-arm64.h" XXX TODO FIXME Bug 1173969 #include "jit/arm64/SharedICRegisters-arm64.h" #include "jit/Bailouts.h" #include "jit/BaselineFrame.h" diff --git a/js/src/jit/arm64/MacroAssembler-arm64.h b/js/src/jit/arm64/MacroAssembler-arm64.h index c2a6bd9481ff..5f4ab40f248a 100644 --- a/js/src/jit/arm64/MacroAssembler-arm64.h +++ b/js/src/jit/arm64/MacroAssembler-arm64.h @@ -179,9 +179,6 @@ class MacroAssemblerCompat : public vixl::MacroAssembler vixl::MacroAssembler::Push(scratch64); } } - void push(ImmMaybeNurseryPtr imm) { - push(noteMaybeNurseryPtr(imm)); - } void push(ARMRegister reg) { vixl::MacroAssembler::Push(reg); } @@ -809,13 +806,19 @@ class MacroAssemblerCompat : public vixl::MacroAssembler BufferOffset load = movePatchablePtr(ImmPtr(imm.value), dest); writeDataRelocation(imm, load); } - void movePtr(ImmMaybeNurseryPtr imm, Register dest) { - movePtr(noteMaybeNurseryPtr(imm), dest); - } void mov(ImmWord imm, Register dest) { movePtr(imm, dest); } + void mov(ImmPtr imm, Register dest) { + movePtr(imm, dest); + } + void mov(AsmJSImmPtr imm, Register dest) { + movePtr(imm, dest); + } + void mov(Register src, Register dest) { + movePtr(src, dest); + } void move32(Imm32 imm, Register dest) { Mov(ARMRegister(dest, 32), (int64_t)imm.value); @@ -1218,9 +1221,6 @@ class MacroAssemblerCompat : public vixl::MacroAssembler movePtr(rhs, scratch); cmpPtr(lhs, scratch); } - void cmpPtr(Register lhs, ImmMaybeNurseryPtr rhs) { - cmpPtr(lhs, noteMaybeNurseryPtr(rhs)); - } void cmpPtr(const Address& lhs, Register rhs) { vixl::UseScratchRegisterScope temps(this); @@ -1794,9 +1794,6 @@ class MacroAssemblerCompat : public vixl::MacroAssembler B(cond, label); } - void branchPtr(Condition cond, Address lhs, ImmMaybeNurseryPtr ptr, Label* label) { - branchPtr(cond, lhs, noteMaybeNurseryPtr(ptr), label); - } void branchPtr(Condition cond, Register lhs, Register rhs, Label* label) { Cmp(ARMRegister(lhs, 64), ARMRegister(rhs, 64)); B(label, cond); diff --git a/js/src/jit/arm64/vixl/Assembler-vixl.h b/js/src/jit/arm64/vixl/Assembler-vixl.h index 51ce8b433d01..175284ecb689 100644 --- a/js/src/jit/arm64/vixl/Assembler-vixl.h +++ b/js/src/jit/arm64/vixl/Assembler-vixl.h @@ -215,6 +215,12 @@ class Register : public CPURegister { return IsValidRegister(); } + js::jit::Register asUnsized() const { + if (code_ == kSPRegInternalCode) + return js::jit::Register::FromCode((js::jit::Register::Code)kZeroRegCode); + return js::jit::Register::FromCode((js::jit::Register::Code)code_); + } + static const Register& WRegFromCode(unsigned code); static const Register& XRegFromCode(unsigned code); @@ -497,6 +503,19 @@ class Operand { // is uint2_t. explicit Operand(Register reg, Extend extend, unsigned shift_amount = 0); + // FIXME: Temporary constructors for compilation. + // FIXME: These should be removed -- Operand should not leak into shared code. + // FIXME: Something like an LAllocationUnion for {gpreg, fpreg, Address} is wanted. + explicit Operand(js::jit::Register) { + MOZ_CRASH("Operand with Register"); + } + explicit Operand(js::jit::FloatRegister) { + MOZ_CRASH("Operand with FloatRegister"); + } + explicit Operand(js::jit::Register, int32_t) { + MOZ_CRASH("Operand with implicit Address"); + } + bool IsImmediate() const; bool IsShiftedRegister() const; bool IsExtendedRegister() const; @@ -565,8 +584,10 @@ class MemOperand { AddrMode addrmode = Offset); // Adapter constructors using C++11 delegating. + // TODO: If sp == kSPRegInternalCode, the xzr check isn't necessary. explicit MemOperand(js::jit::Address addr) - : MemOperand(Register(addr.base, 64), (ptrdiff_t)addr.offset) { + : MemOperand(addr.base.code() == 31 ? sp : Register(addr.base, 64), + (ptrdiff_t)addr.offset) { } const Register& base() const { @@ -673,6 +694,29 @@ class Assembler : public MozBaseAssembler { // called before executing or copying code from the buffer. void FinalizeCode(); +#define COPYENUM(v) static const Condition v = vixl::v +#define COPYENUM_(v) static const Condition v = vixl::v##_ + COPYENUM(Equal); + COPYENUM(Zero); + COPYENUM(NotEqual); + COPYENUM(NonZero); + COPYENUM(AboveOrEqual); + COPYENUM(Below); + COPYENUM(Signed); + COPYENUM(NotSigned); + COPYENUM(Overflow); + COPYENUM(NoOverflow); + COPYENUM(Above); + COPYENUM(BelowOrEqual); + COPYENUM_(GreaterThanOrEqual); + COPYENUM_(LessThan); + COPYENUM_(GreaterThan); + COPYENUM_(LessThanOrEqual); + COPYENUM(Always); + COPYENUM(Never); +#undef COPYENUM +#undef COPYENUM_ + // Bit set when a DoubleCondition does not map to a single ARM condition. // The MacroAssembler must special-case these conditions, or else // ConditionFromDoubleCondition will complain. diff --git a/js/src/jit/arm64/vixl/MacroAssembler-vixl.cpp b/js/src/jit/arm64/vixl/MacroAssembler-vixl.cpp index f1cc9a13242a..e9537be46a1d 100644 --- a/js/src/jit/arm64/vixl/MacroAssembler-vixl.cpp +++ b/js/src/jit/arm64/vixl/MacroAssembler-vixl.cpp @@ -1204,7 +1204,7 @@ void MacroAssembler::PrintfNoPreserve(const char * format, const CPURegister& ar Adr(x0, &format_address); // Emit the format string directly in the instruction stream. - { + { flushBuffer(); Label after_data; B(&after_data); diff --git a/js/src/jit/arm64/vixl/MozAssembler-vixl.cpp b/js/src/jit/arm64/vixl/MozAssembler-vixl.cpp index 59729d9ad27e..4c8efcef2dd8 100644 --- a/js/src/jit/arm64/vixl/MozAssembler-vixl.cpp +++ b/js/src/jit/arm64/vixl/MozAssembler-vixl.cpp @@ -61,16 +61,16 @@ ptrdiff_t Assembler::LinkAndGetOffsetTo(BufferOffset branch, Label* label) { if (armbuffer_.oom()) return js::jit::LabelBase::INVALID_OFFSET; - // The label is bound: all uses are already linked. if (label->bound()) { + // The label is bound: all uses are already linked. ptrdiff_t branch_offset = ptrdiff_t(branch.getOffset() / element_size); ptrdiff_t label_offset = ptrdiff_t(label->offset() / element_size); return label_offset - branch_offset; } - // The label is unbound and unused: store the offset in the label itself - // for patching by bind(). if (!label->used()) { + // The label is unbound and unused: store the offset in the label itself + // for patching by bind(). label->use(branch.getOffset()); return js::jit::LabelBase::INVALID_OFFSET; } @@ -120,7 +120,7 @@ void Assembler::b(Instruction* at, int imm19, Condition cond) { BufferOffset Assembler::b(Label* label) { - // Flush the instruction buffer before calculating relative offset. + // Flush the instruction buffer if necessary before getting an offset. BufferOffset branch = b(0); Instruction* ins = getInstructionAt(branch); VIXL_ASSERT(ins->IsUncondBranchImm()); @@ -132,7 +132,7 @@ BufferOffset Assembler::b(Label* label) { BufferOffset Assembler::b(Label* label, Condition cond) { - // Flush the instruction buffer before calculating relative offset. + // Flush the instruction buffer if necessary before getting an offset. BufferOffset branch = b(0, Always); Instruction* ins = getInstructionAt(branch); VIXL_ASSERT(ins->IsCondBranchImm()); @@ -154,7 +154,7 @@ void Assembler::bl(Instruction* at, int imm26) { void Assembler::bl(Label* label) { - // Flush the instruction buffer before calculating relative offset. + // Flush the instruction buffer if necessary before getting an offset. BufferOffset branch = b(0); Instruction* ins = getInstructionAt(branch); @@ -174,7 +174,7 @@ void Assembler::cbz(Instruction* at, const Register& rt, int imm19) { void Assembler::cbz(const Register& rt, Label* label) { - // Flush the instruction buffer before calculating relative offset. + // Flush the instruction buffer if necessary before getting an offset. BufferOffset branch = b(0); Instruction* ins = getInstructionAt(branch); @@ -194,7 +194,7 @@ void Assembler::cbnz(Instruction* at, const Register& rt, int imm19) { void Assembler::cbnz(const Register& rt, Label* label) { - // Flush the instruction buffer before calculating relative offset. + // Flush the instruction buffer if necessary before getting an offset. BufferOffset branch = b(0); Instruction* ins = getInstructionAt(branch); @@ -216,7 +216,7 @@ void Assembler::tbz(Instruction* at, const Register& rt, unsigned bit_pos, int i void Assembler::tbz(const Register& rt, unsigned bit_pos, Label* label) { - // Flush the instruction buffer before calculating relative offset. + // Flush the instruction buffer if necessary before getting an offset. BufferOffset branch = b(0); Instruction* ins = getInstructionAt(branch); @@ -238,7 +238,7 @@ void Assembler::tbnz(Instruction* at, const Register& rt, unsigned bit_pos, int void Assembler::tbnz(const Register& rt, unsigned bit_pos, Label* label) { - // Flush the instruction buffer before calculating relative offset. + // Flush the instruction buffer if necessary before getting an offset. BufferOffset branch = b(0); Instruction* ins = getInstructionAt(branch); @@ -260,8 +260,8 @@ void Assembler::adr(Instruction* at, const Register& rd, int imm21) { void Assembler::adr(const Register& rd, Label* label) { - // Flush the instruction buffer before calculating relative offset. - // ADR is not a branch. + // Flush the instruction buffer if necessary before getting an offset. + // Note that ADR is not a branch, but it encodes an offset like a branch. BufferOffset offset = Emit(0); Instruction* ins = getInstructionAt(offset); @@ -285,6 +285,7 @@ void Assembler::adrp(Instruction* at, const Register& rd, int imm21) { void Assembler::adrp(const Register& rd, Label* label) { VIXL_ASSERT(AllowPageOffsetDependentCode()); + // Flush the instruction buffer if necessary before getting an offset. BufferOffset offset = Emit(0); Instruction* ins = getInstructionAt(offset); @@ -401,7 +402,8 @@ bool MozBaseAssembler::PatchConstantPoolLoad(void* loadAddr, void* constPoolAddr // as written by InsertIndexIntoTag(). uint32_t index = load->ImmLLiteral(); - // Each entry in the literal pool is uint32_t-sized. + // Each entry in the literal pool is uint32_t-sized, + // but literals may use multiple entries. uint32_t* constPool = reinterpret_cast(constPoolAddr); Instruction* source = reinterpret_cast(&constPool[index]); @@ -424,6 +426,10 @@ struct PoolHeader { union { struct { uint32_t size : 15; + + // "Natural" guards are part of the normal instruction stream, + // while "non-natural" guards are inserted for the sole purpose + // of skipping around a pool. bool isNatural : 1; uint32_t ONES : 16; }; @@ -469,14 +475,13 @@ void MozBaseAssembler::WritePoolHeader(uint8_t* start, js::jit::Pool* p, bool is JS_STATIC_ASSERT(sizeof(PoolHeader) == 4); // Get the total size of the pool. - uint8_t* pool = start + sizeof(PoolHeader) + p->getPoolSize(); + const uintptr_t totalPoolSize = sizeof(PoolHeader) + p->getPoolSize(); + const uintptr_t totalPoolInstructions = totalPoolSize / sizeof(Instruction); - uintptr_t size = pool - start; - VIXL_ASSERT((size & 3) == 0); - size = size >> 2; - VIXL_ASSERT(size < (1 << 15)); + VIXL_ASSERT((totalPoolSize & 0x3) == 0); + VIXL_ASSERT(totalPoolInstructions < (1 << 15)); - PoolHeader header(size, isNatural); + PoolHeader header(totalPoolInstructions, isNatural); *(PoolHeader*)start = header; } diff --git a/js/src/jit/arm64/vixl/MozSimulator-vixl.cpp b/js/src/jit/arm64/vixl/MozSimulator-vixl.cpp index 4254c81a66cb..ee6158ebffe7 100644 --- a/js/src/jit/arm64/vixl/MozSimulator-vixl.cpp +++ b/js/src/jit/arm64/vixl/MozSimulator-vixl.cpp @@ -157,7 +157,7 @@ Simulator* Simulator::Create() { sim->init(decoder, stdout); return sim; -} +} void Simulator::Destroy(Simulator* sim) { @@ -207,8 +207,8 @@ bool Simulator::overRecursedWithExtra(uint32_t extra) const { } -void Simulator::set_resume_pc(const Instruction* new_resume_pc) { - resume_pc_ = AddressUntag(new_resume_pc); +void Simulator::set_resume_pc(void* new_resume_pc) { + resume_pc_ = AddressUntag(reinterpret_cast(new_resume_pc)); } diff --git a/js/src/jit/arm64/vixl/Simulator-vixl.h b/js/src/jit/arm64/vixl/Simulator-vixl.h index e16924de2063..235249b816e2 100644 --- a/js/src/jit/arm64/vixl/Simulator-vixl.h +++ b/js/src/jit/arm64/vixl/Simulator-vixl.h @@ -27,6 +27,10 @@ #ifndef VIXL_A64_SIMULATOR_A64_H_ #define VIXL_A64_SIMULATOR_A64_H_ +#include "js-config.h" + +#ifdef JS_SIMULATOR_ARM64 + #include "mozilla/Vector.h" #include "jsalloc.h" @@ -40,6 +44,7 @@ #include "jit/IonTypes.h" #include "vm/PosixNSPR.h" + #define JS_CHECK_SIMULATOR_RECURSION_WITH_EXTRA(cx, extra, onerror) \ JS_BEGIN_MACRO \ if (cx->mainThread().simulator()->overRecursedWithExtra(extra)) { \ @@ -338,17 +343,26 @@ class Simulator : public DecoderVisitor { void ResetState(); + static inline uintptr_t StackLimit() { + return Simulator::Current()->stackLimit(); + } + // Run the simulator. virtual void Run(); void RunFrom(const Instruction* first); // Simulation helpers. const Instruction* pc() const { return pc_; } + const Instruction* get_pc() const { return pc_; } + + template + T get_pc_as() const { return reinterpret_cast(const_cast(pc())); } + void set_pc(const Instruction* new_pc) { pc_ = AddressUntag(new_pc); pc_modified_ = true; } - void set_resume_pc(const Instruction* new_resume_pc); + void set_resume_pc(void* new_resume_pc); void increment_pc() { if (!pc_modified_) { @@ -930,9 +944,8 @@ class Simulator : public DecoderVisitor { // Stack byte* stack_; - static const int stack_protection_size_ = 256; - // 2 KB stack. - static const int stack_size_ = 2 * 1024 + 2 * stack_protection_size_; + static const int stack_protection_size_ = 128 * KBytes; + static const int stack_size_ = (2 * MBytes) + (2 * stack_protection_size_); byte* stack_limit_; Decoder* decoder_; @@ -974,4 +987,5 @@ class Simulator : public DecoderVisitor { }; } // namespace vixl +#endif // JS_SIMULATOR_ARM64 #endif // VIXL_A64_SIMULATOR_A64_H_ diff --git a/js/src/jit/mips/Simulator-mips.h b/js/src/jit/mips/Simulator-mips.h index a17b0838595f..29a72ef312ec 100644 --- a/js/src/jit/mips/Simulator-mips.h +++ b/js/src/jit/mips/Simulator-mips.h @@ -184,8 +184,11 @@ class Simulator { void set_pc(int32_t value); int32_t get_pc() const; - void set_resume_pc(int32_t value) { - resume_pc_ = value; + template + T get_pc_as() const { return reinterpret_cast(get_pc()); } + + void set_resume_pc(void* value) { + resume_pc_ = int32_t(value); } // Accessor to the internal simulator stack area. diff --git a/js/src/jit/shared/Assembler-shared.h b/js/src/jit/shared/Assembler-shared.h index 542d5e4e1614..8a2d71eb153a 100644 --- a/js/src/jit/shared/Assembler-shared.h +++ b/js/src/jit/shared/Assembler-shared.h @@ -18,15 +18,17 @@ #include "jit/RegisterSets.h" #include "vm/HelperThreads.h" -#if defined(JS_CODEGEN_ARM) -#define JS_USE_LINK_REGISTER +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) +// Push return addresses callee-side. +# define JS_USE_LINK_REGISTER #endif -#if defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_ARM) +#if defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) // JS_SMALL_BRANCH means the range on a branch instruction // is smaller than the whole address space -# define JS_SMALL_BRANCH +# define JS_SMALL_BRANCH #endif + namespace js { namespace jit { @@ -769,7 +771,7 @@ class AsmJSHeapAccess cmpDelta_ = cmp == NoLengthCheck ? 0 : insnOffset - cmp; MOZ_ASSERT(offsetWithinWholeSimdVector_ == offsetWithinWholeSimdVector); } -#elif defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS) +#elif defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || defined(JS_CODEGEN_MIPS) explicit AsmJSHeapAccess(uint32_t insnOffset) { mozilla::PodZero(this); // zero padding for Valgrind diff --git a/js/src/jit/shared/CodeGenerator-shared-inl.h b/js/src/jit/shared/CodeGenerator-shared-inl.h index 3cf91a4681ba..b7899fe88994 100644 --- a/js/src/jit/shared/CodeGenerator-shared-inl.h +++ b/js/src/jit/shared/CodeGenerator-shared-inl.h @@ -221,7 +221,7 @@ CodeGeneratorShared::ToOperand(const LAllocation& a) return Operand(a.toGeneralReg()->reg()); if (a.isFloatReg()) return Operand(a.toFloatReg()->reg()); - return Operand(StackPointer, ToStackOffset(&a)); + return Operand(masm.getStackPointer(), ToStackOffset(&a)); } Operand diff --git a/js/src/jit/shared/CodeGenerator-shared.cpp b/js/src/jit/shared/CodeGenerator-shared.cpp index bcad52b41b7b..2a0f7a329d5c 100644 --- a/js/src/jit/shared/CodeGenerator-shared.cpp +++ b/js/src/jit/shared/CodeGenerator-shared.cpp @@ -1385,12 +1385,12 @@ CodeGeneratorShared::visitOutOfLineTruncateSlow(OutOfLineTruncateSlow* ool) Register dest = ool->dest(); saveVolatile(dest); -#if defined(JS_CODEGEN_ARM) + +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) if (ool->needFloat32Conversion()) { masm.convertFloat32ToDouble(src, ScratchDoubleReg); src = ScratchDoubleReg; } - #else FloatRegister srcSingle = src.asSingle(); if (ool->needFloat32Conversion()) { @@ -1400,6 +1400,7 @@ CodeGeneratorShared::visitOutOfLineTruncateSlow(OutOfLineTruncateSlow* ool) src = src.asDouble(); } #endif + masm.setupUnalignedABICall(1, dest); masm.passABIArg(src, MoveOp::DOUBLE); if (gen->compilingAsmJS()) @@ -1408,12 +1409,12 @@ CodeGeneratorShared::visitOutOfLineTruncateSlow(OutOfLineTruncateSlow* ool) masm.callWithABI(BitwiseCast(JS::ToInt32)); masm.storeCallResult(dest); -#if !defined(JS_CODEGEN_ARM) +#if !defined(JS_CODEGEN_ARM) && !defined(JS_CODEGEN_ARM64) if (ool->needFloat32Conversion()) masm.pop(srcSingle); #endif - restoreVolatile(dest); + restoreVolatile(dest); masm.jump(ool->rejoin()); } diff --git a/js/src/jit/shared/IonAssemblerBufferWithConstantPools.h b/js/src/jit/shared/IonAssemblerBufferWithConstantPools.h index da6e61d0c91c..9b8fc7481c13 100644 --- a/js/src/jit/shared/IonAssemblerBufferWithConstantPools.h +++ b/js/src/jit/shared/IonAssemblerBufferWithConstantPools.h @@ -823,7 +823,7 @@ struct AssemblerBufferWithConstantPools : public AssemblerBuffer 0) { - while (curpool < numDumps_ && poolInfo_[curpool].offset <= destOffset) { + while (curpool < numDumps_ && poolInfo_[curpool].offset <= (size_t)destOffset) { offset += poolInfo_[curpool].size; curpool++; } diff --git a/js/src/jit/shared/Lowering-shared-inl.h b/js/src/jit/shared/Lowering-shared-inl.h index 48bc023eeac4..76bc8723c689 100644 --- a/js/src/jit/shared/Lowering-shared-inl.h +++ b/js/src/jit/shared/Lowering-shared-inl.h @@ -311,7 +311,7 @@ LIRGeneratorShared::useRegisterOrNonDoubleConstant(MDefinition* mir) return useRegister(mir); } -#if defined(JS_CODEGEN_ARM) +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) LAllocation LIRGeneratorShared::useAnyOrConstant(MDefinition* mir) { diff --git a/js/src/vm/Runtime.cpp b/js/src/vm/Runtime.cpp index 83fff183bb93..9facde2d4a78 100644 --- a/js/src/vm/Runtime.cpp +++ b/js/src/vm/Runtime.cpp @@ -32,6 +32,7 @@ #include "asmjs/AsmJSSignalHandlers.h" #include "jit/arm/Simulator-arm.h" +#include "jit/arm64/vixl/Simulator-vixl.h" #include "jit/JitCompartment.h" #include "jit/mips/Simulator-mips.h" #include "jit/PcScriptCache.h" diff --git a/js/src/vm/Runtime.h b/js/src/vm/Runtime.h index 8f92305366b3..84ad9799cabb 100644 --- a/js/src/vm/Runtime.h +++ b/js/src/vm/Runtime.h @@ -65,6 +65,12 @@ extern mozilla::ThreadLocal TlsPerThreadData; struct DtoaState; +#ifdef JS_SIMULATOR_ARM64 +namespace vixl { +class Simulator; +} +#endif + namespace js { extern MOZ_COLD void @@ -86,9 +92,14 @@ namespace jit { class JitRuntime; class JitActivation; struct PcScriptCache; -class Simulator; struct AutoFlushICache; class CompileRuntime; + +#ifdef JS_SIMULATOR_ARM64 +typedef vixl::Simulator Simulator; +#elif defined(JS_SIMULATOR) +class Simulator; +#endif } /* From 21a25d857535af490d5e9cefae4899c4ebbeaaf5 Mon Sep 17 00:00:00 2001 From: Sean Stangl Date: Thu, 11 Jun 2015 14:08:03 -0700 Subject: [PATCH 30/63] Bug 1173969 - Add ARM64 Trampoline and MoveEmitter. r=jandem --- js/src/jit/MoveEmitter.h | 2 +- js/src/jit/arm64/Bailouts-arm64.cpp | 67 ++ js/src/jit/arm64/MacroAssembler-arm64.cpp | 2 +- js/src/jit/arm64/MoveEmitter-arm64.cpp | 289 +++++ js/src/jit/arm64/MoveEmitter-arm64.h | 92 ++ js/src/jit/arm64/Trampoline-arm64.cpp | 1193 +++++++++++++++++++++ 6 files changed, 1643 insertions(+), 2 deletions(-) create mode 100644 js/src/jit/arm64/Bailouts-arm64.cpp create mode 100644 js/src/jit/arm64/MoveEmitter-arm64.cpp create mode 100644 js/src/jit/arm64/MoveEmitter-arm64.h create mode 100644 js/src/jit/arm64/Trampoline-arm64.cpp diff --git a/js/src/jit/MoveEmitter.h b/js/src/jit/MoveEmitter.h index 501680997787..4d365ade84dd 100644 --- a/js/src/jit/MoveEmitter.h +++ b/js/src/jit/MoveEmitter.h @@ -12,7 +12,7 @@ #elif defined(JS_CODEGEN_ARM) # include "jit/arm/MoveEmitter-arm.h" #elif defined(JS_CODEGEN_ARM64) -// # include "jit/arm64/MoveEmitter-arm64.h" +# include "jit/arm64/MoveEmitter-arm64.h" #elif defined(JS_CODEGEN_MIPS) # include "jit/mips/MoveEmitter-mips.h" #elif defined(JS_CODEGEN_NONE) diff --git a/js/src/jit/arm64/Bailouts-arm64.cpp b/js/src/jit/arm64/Bailouts-arm64.cpp new file mode 100644 index 000000000000..af764e8f7630 --- /dev/null +++ b/js/src/jit/arm64/Bailouts-arm64.cpp @@ -0,0 +1,67 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * vim: set ts=8 sts=4 et sw=4 tw=99: + * 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/. */ + +#include "jit/Bailouts.h" + +using namespace js; +using namespace js::jit; + +namespace js { +namespace jit { + +class BailoutStack +{ + RegisterDump::FPUArray fpregs_; + RegisterDump::GPRArray regs_; + uintptr_t frameSize_; + uintptr_t snapshotOffset_; + + public: + MachineState machineState() { + return MachineState::FromBailout(regs_, fpregs_); + } + uint32_t snapshotOffset() const { + return snapshotOffset_; + } + uint32_t frameSize() const { + return frameSize_; + } + uint8_t* parentStackPointer() { + return (uint8_t*)this + sizeof(BailoutStack); + } +}; + +} // namespace jit +} // namespace js + +BailoutFrameInfo::BailoutFrameInfo(const JitActivationIterator& activations, + BailoutStack* bailout) + : machine_(bailout->machineState()) +{ + uint8_t* sp = bailout->parentStackPointer(); + framePointer_ = sp + bailout->frameSize(); + topFrameSize_ = framePointer_ - sp; + + JSScript* script = ScriptFromCalleeToken(((JitFrameLayout*) framePointer_)->calleeToken()); + topIonScript_ = script->ionScript(); + + attachOnJitActivation(activations); + snapshotOffset_ = bailout->snapshotOffset(); +} + +BailoutFrameInfo::BailoutFrameInfo(const JitActivationIterator& activations, + InvalidationBailoutStack* bailout) + : machine_(bailout->machine()) +{ + framePointer_ = (uint8_t*) bailout->fp(); + topFrameSize_ = framePointer_ - bailout->sp(); + topIonScript_ = bailout->ionScript(); + attachOnJitActivation(activations); + + uint8_t* returnAddressToFp_ = bailout->osiPointReturnAddress(); + const OsiIndex* osiIndex = topIonScript_->getOsiIndex(returnAddressToFp_); + snapshotOffset_ = osiIndex->snapshotOffset(); +} diff --git a/js/src/jit/arm64/MacroAssembler-arm64.cpp b/js/src/jit/arm64/MacroAssembler-arm64.cpp index 7c3cd3229b01..010184db7031 100644 --- a/js/src/jit/arm64/MacroAssembler-arm64.cpp +++ b/js/src/jit/arm64/MacroAssembler-arm64.cpp @@ -6,7 +6,7 @@ #include "jit/arm64/MacroAssembler-arm64.h" -// #include "jit/arm64/MoveEmitter-arm64.h" XXX TODO FIXME Bug 1173969 +#include "jit/arm64/MoveEmitter-arm64.h" #include "jit/arm64/SharedICRegisters-arm64.h" #include "jit/Bailouts.h" #include "jit/BaselineFrame.h" diff --git a/js/src/jit/arm64/MoveEmitter-arm64.cpp b/js/src/jit/arm64/MoveEmitter-arm64.cpp new file mode 100644 index 000000000000..2eaffc14689e --- /dev/null +++ b/js/src/jit/arm64/MoveEmitter-arm64.cpp @@ -0,0 +1,289 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * vim: set ts=8 sts=4 et sw=4 tw=99: + * 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/. */ + +#include "jit/arm64/MoveEmitter-arm64.h" + +using namespace js; +using namespace js::jit; + +void +MoveEmitterARM64::emit(const MoveResolver& moves) +{ + if (moves.numCycles()) { + masm.reserveStack(sizeof(void*)); + pushedAtCycle_ = masm.framePushed(); + } + + for (size_t i = 0; i < moves.numMoves(); i++) + emitMove(moves.getMove(i)); +} + +void +MoveEmitterARM64::finish() +{ + assertDone(); + masm.freeStack(masm.framePushed() - pushedAtStart_); + MOZ_ASSERT(masm.framePushed() == pushedAtStart_); +} + +void +MoveEmitterARM64::emitMove(const MoveOp& move) +{ + const MoveOperand& from = move.from(); + const MoveOperand& to = move.to(); + + if (move.isCycleBegin()) { + MOZ_ASSERT(!inCycle_ && !move.isCycleEnd()); + breakCycle(from, to, move.endCycleType()); + inCycle_ = true; + } else if (move.isCycleEnd()) { + MOZ_ASSERT(inCycle_); + completeCycle(from, to, move.type()); + inCycle_ = false; + return; + } + + switch (move.type()) { + case MoveOp::FLOAT32: + emitFloat32Move(from, to); + break; + case MoveOp::DOUBLE: + emitDoubleMove(from, to); + break; + case MoveOp::INT32: + emitInt32Move(from, to); + break; + case MoveOp::GENERAL: + emitGeneralMove(from, to); + break; + default: + MOZ_CRASH("Unexpected move type"); + } +} + +void +MoveEmitterARM64::emitFloat32Move(const MoveOperand& from, const MoveOperand& to) +{ + if (from.isFloatReg()) { + if (to.isFloatReg()) + masm.Fmov(toFPReg(to, MoveOp::FLOAT32), toFPReg(from, MoveOp::FLOAT32)); + else + masm.Str(toFPReg(from, MoveOp::FLOAT32), toMemOperand(to)); + return; + } + + if (to.isFloatReg()) { + masm.Ldr(toFPReg(to, MoveOp::FLOAT32), toMemOperand(from)); + return; + } + + vixl::UseScratchRegisterScope temps(&masm.asVIXL()); + const ARMFPRegister scratch32 = temps.AcquireS(); + masm.Ldr(scratch32, toMemOperand(from)); + masm.Str(scratch32, toMemOperand(to)); +} + +void +MoveEmitterARM64::emitDoubleMove(const MoveOperand& from, const MoveOperand& to) +{ + if (from.isFloatReg()) { + if (to.isFloatReg()) + masm.Fmov(toFPReg(to, MoveOp::DOUBLE), toFPReg(from, MoveOp::DOUBLE)); + else + masm.Str(toFPReg(from, MoveOp::DOUBLE), toMemOperand(to)); + return; + } + + if (to.isFloatReg()) { + masm.Ldr(toFPReg(to, MoveOp::DOUBLE), toMemOperand(from)); + return; + } + + vixl::UseScratchRegisterScope temps(&masm.asVIXL()); + const ARMFPRegister scratch = temps.AcquireD(); + masm.Ldr(scratch, toMemOperand(from)); + masm.Str(scratch, toMemOperand(to)); +} + +void +MoveEmitterARM64::emitInt32Move(const MoveOperand& from, const MoveOperand& to) +{ + if (from.isGeneralReg()) { + if (to.isGeneralReg()) + masm.Mov(toARMReg32(to), toARMReg32(from)); + else + masm.Str(toARMReg32(from), toMemOperand(to)); + return; + } + + if (to.isGeneralReg()) { + masm.Ldr(toARMReg32(to), toMemOperand(from)); + return; + } + + vixl::UseScratchRegisterScope temps(&masm.asVIXL()); + const ARMRegister scratch32 = temps.AcquireW(); + masm.Ldr(scratch32, toMemOperand(from)); + masm.Str(scratch32, toMemOperand(to)); +} + +void +MoveEmitterARM64::emitGeneralMove(const MoveOperand& from, const MoveOperand& to) +{ + if (from.isGeneralReg()) { + MOZ_ASSERT(to.isGeneralReg() || to.isMemory()); + if (to.isGeneralReg()) + masm.Mov(toARMReg64(to), toARMReg64(from)); + else + masm.Str(toARMReg64(from), toMemOperand(to)); + return; + } + + // {Memory OR EffectiveAddress} -> Register move. + if (to.isGeneralReg()) { + MOZ_ASSERT(from.isMemoryOrEffectiveAddress()); + if (from.isMemory()) + masm.Ldr(toARMReg64(to), toMemOperand(from)); + else + masm.Add(toARMReg64(to), toARMReg64(from), Operand(from.disp())); + return; + } + + vixl::UseScratchRegisterScope temps(&masm.asVIXL()); + const ARMRegister scratch64 = temps.AcquireX(); + + // Memory -> Memory move. + if (from.isMemory()) { + MOZ_ASSERT(to.isMemory()); + masm.Ldr(scratch64, toMemOperand(from)); + masm.Str(scratch64, toMemOperand(to)); + return; + } + + // EffectiveAddress -> Memory move. + MOZ_ASSERT(from.isEffectiveAddress()); + MOZ_ASSERT(to.isMemory()); + masm.Add(scratch64, toARMReg64(from), Operand(from.disp())); + masm.Str(scratch64, toMemOperand(to)); +} + +MemOperand +MoveEmitterARM64::cycleSlot() +{ + // Using SP as stack pointer requires alignment preservation below. + MOZ_ASSERT(!masm.GetStackPointer64().Is(sp)); + + // emit() already allocated a slot for resolving the cycle. + MOZ_ASSERT(pushedAtCycle_ != -1); + + return MemOperand(masm.GetStackPointer64(), masm.framePushed() - pushedAtCycle_); +} + +void +MoveEmitterARM64::breakCycle(const MoveOperand& from, const MoveOperand& to, MoveOp::Type type) +{ + switch (type) { + case MoveOp::FLOAT32: + if (to.isMemory()) { + vixl::UseScratchRegisterScope temps(&masm.asVIXL()); + const ARMFPRegister scratch32 = temps.AcquireS(); + masm.Ldr(scratch32, toMemOperand(to)); + masm.Str(scratch32, cycleSlot()); + } else { + masm.Str(toFPReg(to, type), cycleSlot()); + } + break; + + case MoveOp::DOUBLE: + if (to.isMemory()) { + vixl::UseScratchRegisterScope temps(&masm.asVIXL()); + const ARMFPRegister scratch64 = temps.AcquireD(); + masm.Ldr(scratch64, toMemOperand(to)); + masm.Str(scratch64, cycleSlot()); + } else { + masm.Str(toFPReg(to, type), cycleSlot()); + } + break; + + case MoveOp::INT32: + if (to.isMemory()) { + vixl::UseScratchRegisterScope temps(&masm.asVIXL()); + const ARMRegister scratch32 = temps.AcquireW(); + masm.Ldr(scratch32, toMemOperand(to)); + masm.Str(scratch32, cycleSlot()); + } else { + masm.Str(toARMReg32(to), cycleSlot()); + } + break; + + case MoveOp::GENERAL: + if (to.isMemory()) { + vixl::UseScratchRegisterScope temps(&masm.asVIXL()); + const ARMRegister scratch64 = temps.AcquireX(); + masm.Ldr(scratch64, toMemOperand(to)); + masm.Str(scratch64, cycleSlot()); + } else { + masm.Str(toARMReg64(to), cycleSlot()); + } + break; + + default: + MOZ_CRASH("Unexpected move type"); + } +} + +void +MoveEmitterARM64::completeCycle(const MoveOperand& from, const MoveOperand& to, MoveOp::Type type) +{ + switch (type) { + case MoveOp::FLOAT32: + if (to.isMemory()) { + vixl::UseScratchRegisterScope temps(&masm.asVIXL()); + const ARMFPRegister scratch32 = temps.AcquireS(); + masm.Ldr(scratch32, cycleSlot()); + masm.Str(scratch32, toMemOperand(to)); + } else { + masm.Ldr(toFPReg(to, type), cycleSlot()); + } + break; + + case MoveOp::DOUBLE: + if (to.isMemory()) { + vixl::UseScratchRegisterScope temps(&masm.asVIXL()); + const ARMFPRegister scratch = temps.AcquireD(); + masm.Ldr(scratch, cycleSlot()); + masm.Str(scratch, toMemOperand(to)); + } else { + masm.Ldr(toFPReg(to, type), cycleSlot()); + } + break; + + case MoveOp::INT32: + if (to.isMemory()) { + vixl::UseScratchRegisterScope temps(&masm.asVIXL()); + const ARMRegister scratch32 = temps.AcquireW(); + masm.Ldr(scratch32, cycleSlot()); + masm.Str(scratch32, toMemOperand(to)); + } else { + masm.Ldr(toARMReg64(to), cycleSlot()); + } + break; + + case MoveOp::GENERAL: + if (to.isMemory()) { + vixl::UseScratchRegisterScope temps(&masm.asVIXL()); + const ARMRegister scratch64 = temps.AcquireX(); + masm.Ldr(scratch64, cycleSlot()); + masm.Str(scratch64, toMemOperand(to)); + } else { + masm.Ldr(toARMReg64(to), cycleSlot()); + } + break; + + default: + MOZ_CRASH("Unexpected move type"); + } +} diff --git a/js/src/jit/arm64/MoveEmitter-arm64.h b/js/src/jit/arm64/MoveEmitter-arm64.h new file mode 100644 index 000000000000..cd8dcf2495a5 --- /dev/null +++ b/js/src/jit/arm64/MoveEmitter-arm64.h @@ -0,0 +1,92 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * vim: set ts=8 sts=4 et sw=4 tw=99: + * 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/. */ + +#ifndef jit_arm64_MoveEmitter_arm64_h +#define jit_arm64_MoveEmitter_arm64_h + +#include "jit/arm64/Assembler-arm64.h" +#include "jit/MacroAssembler.h" +#include "jit/MoveResolver.h" + +namespace js { +namespace jit { + +class CodeGenerator; + +class MoveEmitterARM64 +{ + bool inCycle_; + MacroAssembler& masm; + + // Original stack push value. + uint32_t pushedAtStart_; + + // These store stack offsets to spill locations, snapshotting + // codegen->framePushed_ at the time they were allocated. They are -1 if no + // stack space has been allocated for that particular spill. + int32_t pushedAtCycle_; + int32_t pushedAtSpill_; + + void assertDone() { + MOZ_ASSERT(!inCycle_); + } + + MemOperand cycleSlot(); + MemOperand toMemOperand(const MoveOperand& operand) const { + MOZ_ASSERT(operand.isMemory()); + ARMRegister base(operand.base(), 64); + if (operand.base() == masm.getStackPointer()) + return MemOperand(base, operand.disp() + (masm.framePushed() - pushedAtStart_)); + return MemOperand(base, operand.disp()); + } + ARMRegister toARMReg32(const MoveOperand& operand) const { + MOZ_ASSERT(operand.isGeneralReg()); + return ARMRegister(operand.reg(), 32); + } + ARMRegister toARMReg64(const MoveOperand& operand) const { + if (operand.isGeneralReg()) + return ARMRegister(operand.reg(), 64); + else + return ARMRegister(operand.base(), 64); + } + ARMFPRegister toFPReg(const MoveOperand& operand, MoveOp::Type t) const { + MOZ_ASSERT(operand.isFloatReg()); + return ARMFPRegister(operand.floatReg().encoding(), t == MoveOp::FLOAT32 ? 32 : 64); + } + + void emitFloat32Move(const MoveOperand& from, const MoveOperand& to); + void emitDoubleMove(const MoveOperand& from, const MoveOperand& to); + void emitInt32Move(const MoveOperand& from, const MoveOperand& to); + void emitGeneralMove(const MoveOperand& from, const MoveOperand& to); + + void emitMove(const MoveOp& move); + void breakCycle(const MoveOperand& from, const MoveOperand& to, MoveOp::Type type); + void completeCycle(const MoveOperand& from, const MoveOperand& to, MoveOp::Type type); + + public: + MoveEmitterARM64(MacroAssembler& masm) + : inCycle_(false), + masm(masm), + pushedAtStart_(masm.framePushed()), + pushedAtCycle_(-1), + pushedAtSpill_(-1) + { } + + ~MoveEmitterARM64() { + assertDone(); + } + + void emit(const MoveResolver& moves); + void finish(); + void setScratchRegister(Register reg) {} +}; + +typedef MoveEmitterARM64 MoveEmitter; + +} // namespace jit +} // namespace js + +#endif /* jit_arm64_MoveEmitter_arm64_h */ diff --git a/js/src/jit/arm64/Trampoline-arm64.cpp b/js/src/jit/arm64/Trampoline-arm64.cpp new file mode 100644 index 000000000000..ac5c7282bf23 --- /dev/null +++ b/js/src/jit/arm64/Trampoline-arm64.cpp @@ -0,0 +1,1193 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * vim: set ts=8 sts=4 et sw=4 tw=99: + * 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/. */ + +#include "jit/Bailouts.h" +#include "jit/JitCompartment.h" +#include "jit/JitFrames.h" +#include "jit/Linker.h" +#ifdef JS_ION_PERF +# include "jit/PerfSpewer.h" +#endif +#include "jit/arm64/SharedICHelpers-arm64.h" +#include "jit/VMFunctions.h" + +using namespace js; +using namespace js::jit; + +// All registers to save and restore. This includes the stack pointer, since we +// use the ability to reference register values on the stack by index. +static const LiveRegisterSet AllRegs = + LiveRegisterSet(GeneralRegisterSet(Registers::AllMask & ~(1 << 31 | 1 << 30 | 1 << 29| 1 << 28)), + FloatRegisterSet(FloatRegisters::AllMask)); + +/* This method generates a trampoline on ARM64 for a c++ function with + * the following signature: + * bool blah(void* code, int argc, Value* argv, JSObject* scopeChain, Value* vp) + * ...using standard AArch64 calling convention + */ +JitCode* +JitRuntime::generateEnterJIT(JSContext* cx, EnterJitType type) +{ + MacroAssembler masm(cx); + + const Register reg_code = IntArgReg0; // EnterJitData::jitcode. + const Register reg_argc = IntArgReg1; // EnterJitData::maxArgc. + const Register reg_argv = IntArgReg2; // EnterJitData::maxArgv. + const Register reg_osrFrame = IntArgReg3; // EnterJitData::osrFrame. + const Register reg_callee = IntArgReg4; // EnterJitData::calleeToken. + const Register reg_scope = IntArgReg5; // EnterJitData::scopeChain. + const Register reg_osrNStack = IntArgReg6; // EnterJitData::osrNumStackValues. + const Register reg_vp = IntArgReg7; // Address of EnterJitData::result. + + MOZ_ASSERT(OsrFrameReg == IntArgReg3); + + // During the pushes below, use the normal stack pointer. + masm.SetStackPointer64(sp); + + // Save old frame pointer and return address; set new frame pointer. + masm.push(r29, r30); + masm.moveStackPtrTo(r29); + + // Save callee-save integer registers. + // Also save x7 (reg_vp) and x30 (lr), for use later. + masm.push(r19, r20, r21, r22); + masm.push(r23, r24, r25, r26); + masm.push(r27, r28, r7, r30); + + // Save callee-save floating-point registers. + // AArch64 ABI specifies that only the lower 64 bits must be saved. + masm.push(d8, d9, d10, d11); + masm.push(d12, d13, d14, d15); + +#ifdef DEBUG + // Emit stack canaries. + masm.movePtr(ImmWord(0xdeadd00d), r23); + masm.movePtr(ImmWord(0xdeadd11d), r24); + masm.push(r23, r24); +#endif + + // Common code below attempts to push single registers at a time, + // which breaks the stack pointer's 16-byte alignment requirement. + // Note that movePtr() is invalid because StackPointer is treated as xzr. + // + // FIXME: After testing, this entire function should be rewritten to not + // use the PseudoStackPointer: since the amount of data pushed is precalculated, + // we can just allocate the whole frame header at once and index off sp. + // This will save a significant number of instructions where Push() updates sp. + masm.Mov(PseudoStackPointer64, sp); + masm.SetStackPointer64(PseudoStackPointer64); + + // Save the stack pointer at this point for Baseline OSR. + masm.moveStackPtrTo(BaselineFrameReg); + // Remember stack depth without padding and arguments. + masm.moveStackPtrTo(r19); + + // If constructing, include newTarget. + // TODO: ARM64 support must be written. + // Refer to git commit 7180509ff, Bug 1141865 Part 2. + { + Label noNewTarget; + Imm32 constructingToken(CalleeToken_FunctionConstructing); + masm.branchTest32(Assembler::Zero, reg_callee, constructingToken, &noNewTarget); + masm.breakpoint(); // TODO: include newTarget in the vector accounting. + masm.bind(&noNewTarget); + } + + // JitFrameLayout is as follows (higher is higher in memory): + // N*8 - [ JS argument vector ] (base 16-byte aligned) + // 8 - numActualArgs + // 8 - calleeToken (16-byte aligned) + // 8 - frameDescriptor + // 8 - returnAddress (16-byte aligned, pushed by callee) + + // Push the argument vector onto the stack. + // WARNING: destructively modifies reg_argv + { + vixl::UseScratchRegisterScope temps(&masm.asVIXL()); + + const ARMRegister tmp_argc = temps.AcquireX(); + const ARMRegister tmp_sp = temps.AcquireX(); + + Label noArguments; + Label loopHead; + + masm.movePtr(reg_argc, tmp_argc.asUnsized()); + + // sp -= 8 + // Since we're using PostIndex Str below, this is necessary to avoid overwriting + // the SPS mark pushed above. + masm.subFromStackPtr(Imm32(8)); + + // sp -= 8 * argc + masm.Sub(PseudoStackPointer64, PseudoStackPointer64, Operand(tmp_argc, vixl::SXTX, 3)); + + // Give sp 16-byte alignment and sync stack pointers. + masm.andToStackPtr(Imm32(~0xff)); + masm.moveStackPtrTo(tmp_sp.asUnsized()); + + masm.branchTestPtr(Assembler::Zero, reg_argc, reg_argc, &noArguments); + + // Begin argument-pushing loop. + // This could be optimized using Ldp and Stp. + { + masm.bind(&loopHead); + + // Load an argument from argv, then increment argv by 8. + masm.Ldr(x24, MemOperand(ARMRegister(reg_argv, 64), Operand(8), vixl::PostIndex)); + + // Store the argument to tmp_sp, then increment tmp_sp by 8. + masm.Str(x24, MemOperand(tmp_sp, Operand(8), vixl::PostIndex)); + + // Set the condition codes for |cmp tmp_argc, 2| (using the old value). + masm.Subs(tmp_argc, tmp_argc, Operand(1)); + + // Branch if arguments remain. + masm.B(&loopHead, vixl::Condition::ge); + } + + masm.bind(&noArguments); + } + masm.checkStackAlignment(); + + // Push the number of actual arguments and the calleeToken. + // The result address is used to store the actual number of arguments + // without adding an argument to EnterJIT. + masm.unboxInt32(Address(reg_vp, 0x0), ip0); + masm.push(ip0, reg_callee); + masm.checkStackAlignment(); + + // Calculate the number of bytes pushed so far. + masm.subStackPtrFrom(r19); + + // Push the frameDescriptor. + masm.makeFrameDescriptor(r19, JitFrame_Entry); + masm.Push(r19); + + Label osrReturnPoint; + if (type == EnterJitBaseline) { + // Check for OSR. + Label notOsr; + masm.branchTestPtr(Assembler::Zero, OsrFrameReg, OsrFrameReg, ¬Osr); + + // Push return address and previous frame pointer. + masm.Adr(ScratchReg2_64, &osrReturnPoint); + masm.push(ScratchReg2, BaselineFrameReg); + + // Reserve frame. + masm.subFromStackPtr(Imm32(BaselineFrame::Size())); + masm.moveStackPtrTo(BaselineFrameReg); + + // Reserve space for locals and stack values. + masm.Lsl(w19, ARMRegister(reg_osrNStack, 32), 3); // w19 = num_stack_values * sizeof(Value). + masm.subFromStackPtr(r19); + + // Enter exit frame. + masm.addPtr(Imm32(BaselineFrame::Size() + BaselineFrame::FramePointerOffset), r19); + masm.makeFrameDescriptor(r19, JitFrame_BaselineJS); + masm.asVIXL().Push(x19, xzr); // Push xzr for a fake return address. + // No GC things to mark: push a bare token. + masm.enterFakeExitFrame(ExitFrameLayout::BareToken()); + + masm.push(BaselineFrameReg, reg_code); + + // Initialize the frame, including filling in the slots. + masm.setupUnalignedABICall(3, r19); + masm.passABIArg(BaselineFrameReg); // BaselineFrame. + masm.passABIArg(reg_osrFrame); // InterpreterFrame. + masm.passABIArg(reg_osrNStack); + masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, jit::InitBaselineFrameForOsr)); + + masm.pop(r19, BaselineFrameReg); + MOZ_ASSERT(r19 != ReturnReg); + + masm.addToStackPtr(Imm32(ExitFrameLayout::SizeWithFooter())); + masm.addPtr(Imm32(BaselineFrame::Size()), BaselineFrameReg); + + Label error; + masm.branchIfFalseBool(ReturnReg, &error); + + masm.jump(r19); + + // OOM: load error value, discard return address and previous frame + // pointer, and return. + masm.bind(&error); + masm.Add(masm.GetStackPointer64(), BaselineFrameReg64, Operand(2 * sizeof(uintptr_t))); + masm.syncStackPtr(); + masm.moveValue(MagicValue(JS_ION_ERROR), JSReturnOperand); + masm.B(&osrReturnPoint); + + masm.bind(¬Osr); + masm.movePtr(reg_scope, R1_); + } + + // Call function. + // Since AArch64 doesn't have the pc register available, the callee must push lr. + masm.call(reg_code); + + // Baseline OSR will return here. + if (type == EnterJitBaseline) + masm.bind(&osrReturnPoint); + + // Return back to SP. + masm.Pop(r19); + masm.Add(masm.GetStackPointer64(), masm.GetStackPointer64(), + Operand(x19, vixl::LSR, FRAMESIZE_SHIFT)); + masm.syncStackPtr(); + masm.SetStackPointer64(sp); + +#ifdef DEBUG + // Check that canaries placed on function entry are still present. + masm.pop(r24, r23); + Label x23OK, x24OK; + + masm.branchPtr(Assembler::Equal, r23, ImmWord(0xdeadd00d), &x23OK); + masm.breakpoint(); + masm.bind(&x23OK); + + masm.branchPtr(Assembler::Equal, r24, ImmWord(0xdeadd11d), &x24OK); + masm.breakpoint(); + masm.bind(&x24OK); +#endif + + // Restore callee-save floating-point registers. + masm.pop(d15, d14, d13, d12); + masm.pop(d11, d10, d9, d8); + + // Restore callee-save integer registers. + // Also restore x7 (reg_vp) and x30 (lr). + masm.pop(r30, r7, r28, r27); + masm.pop(r26, r25, r24, r23); + masm.pop(r22, r21, r20, r19); + + // Store return value (in JSReturnReg = x2 to just-popped reg_vp). + masm.storeValue(JSReturnOperand, Address(reg_vp, 0)); + + // Restore old frame pointer. + masm.pop(r30, r29); + + // Return using the value popped into x30. + masm.abiret(); + + Linker linker(masm); + JitCode* code = linker.newCode(cx, OTHER_CODE); + +#ifdef JS_ION_PERF + writePerfSpewerJitCodeProfile(code, "EnterJIT"); +#endif + + return code; +} + +JitCode* +JitRuntime::generateInvalidator(JSContext* cx) +{ + MacroAssembler masm; + + masm.push(r0, r1, r2, r3); + + masm.PushRegsInMask(AllRegs); + masm.moveStackPtrTo(r0); + + masm.Sub(x1, masm.GetStackPointer64(), Operand(sizeof(size_t))); + masm.Sub(x2, masm.GetStackPointer64(), Operand(sizeof(size_t) + sizeof(void*))); + masm.moveToStackPtr(r2); + + masm.setupUnalignedABICall(3, r10); + masm.passABIArg(r0); + masm.passABIArg(r1); + masm.passABIArg(r2); + + masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, InvalidationBailout)); + + masm.pop(r2, r1); + + masm.Add(masm.GetStackPointer64(), masm.GetStackPointer64(), x1); + masm.Add(masm.GetStackPointer64(), masm.GetStackPointer64(), + Operand(sizeof(InvalidationBailoutStack))); + masm.syncStackPtr(); + + JitCode* bailoutTail = cx->runtime()->jitRuntime()->getBailoutTail(); + masm.branch(bailoutTail); + + Linker linker(masm); + return linker.newCode(cx, OTHER_CODE); +} + +JitCode* +JitRuntime::generateArgumentsRectifier(JSContext* cx, void** returnAddrOut) +{ + MacroAssembler masm; + + // Save the return address for later. + masm.push(lr); + + // Load the information that the rectifier needs from the stack. + masm.Ldr(w0, MemOperand(masm.GetStackPointer64(), RectifierFrameLayout::offsetOfNumActualArgs())); + masm.Ldr(x1, MemOperand(masm.GetStackPointer64(), RectifierFrameLayout::offsetOfCalleeToken())); + + // Extract a JSFunction pointer from the callee token. + masm.And(x6, x1, Operand(CalleeTokenMask)); + + // Get the arguments from the function object. + masm.Ldrh(x6, MemOperand(x6, JSFunction::offsetOfNargs())); + masm.Mov(x7, x6); + + // Calculate the position that our arguments are at before sp gets modified. + masm.Add(x3, masm.GetStackPointer64(), Operand(x8, vixl::LSL, 3)); + masm.Add(x3, x3, Operand(sizeof(RectifierFrameLayout))); + + // Pad to a multiple of 16 bytes. + Label noPadding; + masm.Tbnz(x6, 0, &noPadding); + masm.asVIXL().Push(xzr); + masm.Add(x7, x7, Operand(1)); + masm.bind(&noPadding); + + // Calculate the number of undefineds that need to be pushed. + masm.Sub(w2, w6, w8); + + // Put an undefined in a register so it can be pushed. + masm.moveValue(UndefinedValue(), r4); + + // Push undefined N times. + { + Label undefLoopTop; + masm.bind(&undefLoopTop); + masm.Push(r4); + masm.Subs(w2, w2, Operand(1)); + masm.B(&undefLoopTop, Assembler::NonZero); + } + + // Arguments copy loop. + { + Label copyLoopTop; + masm.bind(©LoopTop); + masm.Ldr(x4, MemOperand(x3, -sizeof(Value), vixl::PostIndex)); + masm.Push(r4); + masm.Subs(x8, x8, Operand(1)); + masm.B(©LoopTop, Assembler::NotSigned); + } + + // Fix up the size of the stack frame. + masm.Add(x6, x7, Operand(1)); + masm.Lsl(x6, x6, 3); + + // Make that into a frame descriptor. + masm.makeFrameDescriptor(r6, JitFrame_Rectifier); + + masm.push(r0, // Number of actual arguments. + r1, // Callee token. + r6); // Frame descriptor. + + // Didn't we just compute this? Can't we just stick that value in one of our 30 GPR's? + // Load the address of the code that is getting called. + masm.And(x1, x1, Operand(CalleeTokenMask)); + masm.Ldr(x3, MemOperand(x1, JSFunction::offsetOfNativeOrScript())); + masm.loadBaselineOrIonRaw(r3, r3, nullptr); + masm.call(r3); + uint32_t returnOffset = masm.currentOffset(); + + // Clean up! + // Get the size of the stack frame, and clean up the later fixed frame. + masm.Ldr(x4, MemOperand(masm.GetStackPointer64(), 24, vixl::PostIndex)); + + // Now that the size of the stack frame sans the fixed frame has been loaded, + // add that onto the stack pointer. + masm.Add(masm.GetStackPointer64(), masm.GetStackPointer64(), + Operand(x4, vixl::LSR, FRAMESIZE_SHIFT)); + + // Pop the return address from earlier and branch. + masm.ret(); + + Linker linker(masm); + JitCode* code = linker.newCode(cx, OTHER_CODE); + + if (returnAddrOut) { + CodeOffsetLabel returnLabel(returnOffset); + returnLabel.fixup(&masm); + *returnAddrOut = (void*) (code->raw() + returnLabel.offset()); + } + + return code; +} + +static void +PushBailoutFrame(MacroAssembler& masm, uint32_t frameClass, Register spArg) +{ + // the stack should look like: + // [IonFrame] + // bailoutFrame.registersnapshot + // bailoutFrame.fpsnapshot + // bailoutFrame.snapshotOffset + // bailoutFrame.frameSize + + // STEP 1a: Save our register sets to the stack so Bailout() can read + // everything. + // sp % 8 == 0 + + // We don't have to push everything, but this is likely easier. + // Setting regs_. + masm.subFromStackPtr(Imm32(Registers::TotalPhys * sizeof(void*))); + for (uint32_t i = 0; i < Registers::TotalPhys; i += 2) { + masm.Stp(ARMRegister::XRegFromCode(i), + ARMRegister::XRegFromCode(i + 1), + MemOperand(masm.GetStackPointer64(), i * sizeof(void*))); + } + + // Since our datastructures for stack inspection are compile-time fixed, + // if there are only 16 double registers, then we need to reserve + // space on the stack for the missing 16. + masm.subFromStackPtr(Imm32(FloatRegisters::TotalPhys * sizeof(double))); + for (uint32_t i = 0; i < FloatRegisters::TotalPhys; i += 2) { + masm.Stp(ARMFPRegister::DRegFromCode(i), + ARMFPRegister::DRegFromCode(i + 1), + MemOperand(masm.GetStackPointer64(), i * sizeof(void*))); + } + + // STEP 1b: Push both the "return address" of the function call (the address + // of the instruction after the call that we used to get here) as + // well as the callee token onto the stack. The return address is + // currently in r14. We will proceed by loading the callee token + // into a sacrificial register <= r14, then pushing both onto the + // stack. + + // Now place the frameClass onto the stack, via a register. + masm.Mov(x9, frameClass); + + // And onto the stack. Since the stack is full, we need to put this one past + // the end of the current stack. Sadly, the ABI says that we need to always + // point to the lowest place that has been written. The OS is free to do + // whatever it wants below sp. + masm.push(r30, r9); + masm.moveStackPtrTo(spArg); +} + +static void +GenerateBailoutThunk(JSContext* cx, MacroAssembler& masm, uint32_t frameClass) +{ + PushBailoutFrame(masm, frameClass, r0); + + // SP % 8 == 4 + // STEP 1c: Call the bailout function, giving a pointer to the + // structure we just blitted onto the stack. + // Make space for the BaselineBailoutInfo* outparam. + const int sizeOfBailoutInfo = sizeof(void*) * 2; + masm.reserveStack(sizeOfBailoutInfo); + masm.moveStackPtrTo(r1); + + masm.setupUnalignedABICall(2, r2); + masm.passABIArg(r0); + masm.passABIArg(r1); + masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, Bailout)); + + masm.Ldr(x2, MemOperand(masm.GetStackPointer64(), 0)); + masm.addToStackPtr(Imm32(sizeOfBailoutInfo)); + + static const uint32_t BailoutDataSize = sizeof(void*) * Registers::Total + + sizeof(double) * FloatRegisters::TotalPhys; + + if (frameClass == NO_FRAME_SIZE_CLASS_ID) { + vixl::UseScratchRegisterScope temps(&masm.asVIXL()); + const ARMRegister scratch64 = temps.AcquireX(); + + masm.Ldr(scratch64, MemOperand(masm.GetStackPointer64(), sizeof(uintptr_t))); + masm.addToStackPtr(Imm32(BailoutDataSize + 32)); + masm.addToStackPtr(scratch64.asUnsized()); + } else { + uint32_t frameSize = FrameSizeClass::FromClass(frameClass).frameSize(); + masm.addToStackPtr(Imm32(frameSize + BailoutDataSize + sizeof(void*))); + } + + // Jump to shared bailout tail. The BailoutInfo pointer has to be in r9. + JitCode* bailoutTail = cx->runtime()->jitRuntime()->getBailoutTail(); + masm.branch(bailoutTail); +} + +JitCode* +JitRuntime::generateBailoutTable(JSContext* cx, uint32_t frameClass) +{ + // FIXME: Implement. + MacroAssembler masm; + masm.breakpoint(); + Linker linker(masm); + return linker.newCode(cx, OTHER_CODE); +} + +JitCode* +JitRuntime::generateBailoutHandler(JSContext* cx) +{ + MacroAssembler masm(cx); + GenerateBailoutThunk(cx, masm, NO_FRAME_SIZE_CLASS_ID); + +#ifdef JS_ION_PERF + writePerfSpewerJitCodeProfile(code, "BailoutHandler"); +#endif + + Linker linker(masm); + return linker.newCode(cx, OTHER_CODE); +} + +JitCode* +JitRuntime::generateVMWrapper(JSContext* cx, const VMFunction& f) +{ + MOZ_ASSERT(functionWrappers_); + MOZ_ASSERT(functionWrappers_->initialized()); + VMWrapperMap::AddPtr p = functionWrappers_->lookupForAdd(&f); + if (p) + return p->value(); + + MacroAssembler masm(cx); + + // Avoid conflicts with argument registers while discarding the result after + // the function call. + AllocatableGeneralRegisterSet regs(Register::Codes::WrapperMask); + + // Wrapper register set is a superset of the Volatile register set. + JS_STATIC_ASSERT((Register::Codes::VolatileMask & ~Register::Codes::WrapperMask) == 0); + + // Unlike on other platforms, it is the responsibility of the VM *callee* to + // push the return address, while the caller must ensure that the address + // is stored in lr on entry. This allows the VM wrapper to work with both direct + // calls and tail calls. + masm.push(lr); + + // First argument is the JSContext. + Register reg_cx = IntArgReg0; + regs.take(reg_cx); + + // Stack is: + // ... frame ... + // +12 [args] + // +8 descriptor + // +0 returnAddress (pushed by this function, caller sets as lr) + // + // We're aligned to an exit frame, so link it up. + masm.enterExitFrame(&f); + masm.loadJSContext(reg_cx); + + // Save the current stack pointer as the base for copying arguments. + Register argsBase = InvalidReg; + if (f.explicitArgs) { + // argsBase can't be an argument register. Bad things would happen if + // the MoveResolver didn't throw an assertion failure first. + argsBase = r8; + regs.take(argsBase); + masm.Add(ARMRegister(argsBase, 64), masm.GetStackPointer64(), + Operand(ExitFrameLayout::SizeWithFooter())); + } + + // Reserve space for any outparameter. + Register outReg = InvalidReg; + switch (f.outParam) { + case Type_Value: + outReg = regs.takeAny(); + masm.reserveStack(sizeof(Value)); + masm.moveStackPtrTo(outReg); + break; + + case Type_Handle: + outReg = regs.takeAny(); + masm.PushEmptyRooted(f.outParamRootType); + masm.moveStackPtrTo(outReg); + break; + + case Type_Int32: + case Type_Bool: + outReg = regs.takeAny(); + masm.reserveStack(sizeof(int64_t)); + masm.moveStackPtrTo(outReg); + break; + + case Type_Double: + outReg = regs.takeAny(); + masm.reserveStack(sizeof(double)); + masm.moveStackPtrTo(outReg); + break; + + case Type_Pointer: + outReg = regs.takeAny(); + masm.reserveStack(sizeof(uintptr_t)); + masm.moveStackPtrTo(outReg); + break; + + default: + MOZ_ASSERT(f.outParam == Type_Void); + break; + } + + masm.setupUnalignedABICall(f.argc(), regs.getAny()); + masm.passABIArg(reg_cx); + + size_t argDisp = 0; + + // Copy arguments. + for (uint32_t explicitArg = 0; explicitArg < f.explicitArgs; explicitArg++) { + MoveOperand from; + switch (f.argProperties(explicitArg)) { + case VMFunction::WordByValue: + masm.passABIArg(MoveOperand(argsBase, argDisp), + (f.argPassedInFloatReg(explicitArg) ? MoveOp::DOUBLE : MoveOp::GENERAL)); + argDisp += sizeof(void*); + break; + + case VMFunction::WordByRef: + masm.passABIArg(MoveOperand(argsBase, argDisp, MoveOperand::EFFECTIVE_ADDRESS), + MoveOp::GENERAL); + argDisp += sizeof(void*); + break; + + case VMFunction::DoubleByValue: + case VMFunction::DoubleByRef: + MOZ_CRASH("NYI: AArch64 callVM should not be used with 128bit values."); + } + } + + // Copy the semi-implicit outparam, if any. + // It is not a C++-abi outparam, which would get passed in the + // outparam register, but a real parameter to the function, which + // was stack-allocated above. + if (outReg != InvalidReg) + masm.passABIArg(outReg); + + masm.callWithABI(f.wrapped); + + // SP is used to transfer stack across call boundaries. + if (!masm.GetStackPointer64().Is(vixl::sp)) + masm.Mov(masm.GetStackPointer64(), vixl::sp); + + // Test for failure. + switch (f.failType()) { + case Type_Object: + masm.branchTestPtr(Assembler::Zero, r0, r0, masm.failureLabel()); + break; + case Type_Bool: + masm.branchIfFalseBool(r0, masm.failureLabel()); + break; + default: + MOZ_CRASH("unknown failure kind"); + } + + // Load the outparam and free any allocated stack. + switch (f.outParam) { + case Type_Value: + masm.Ldr(ARMRegister(JSReturnReg, 64), MemOperand(masm.GetStackPointer64())); + masm.freeStack(sizeof(Value)); + break; + + case Type_Handle: + masm.popRooted(f.outParamRootType, ReturnReg, JSReturnOperand); + break; + + case Type_Int32: + masm.Ldr(ARMRegister(ReturnReg, 32), MemOperand(masm.GetStackPointer64())); + masm.freeStack(sizeof(int64_t)); + break; + + case Type_Bool: + masm.Ldrb(ARMRegister(ReturnReg, 32), MemOperand(masm.GetStackPointer64())); + masm.freeStack(sizeof(int64_t)); + break; + + case Type_Double: + MOZ_ASSERT(cx->runtime()->jitSupportsFloatingPoint); + masm.Ldr(ARMFPRegister(ReturnDoubleReg, 64), MemOperand(masm.GetStackPointer64())); + masm.freeStack(sizeof(double)); + break; + + case Type_Pointer: + masm.Ldr(ARMRegister(ReturnReg, 64), MemOperand(masm.GetStackPointer64())); + masm.freeStack(sizeof(uintptr_t)); + break; + + default: + MOZ_ASSERT(f.outParam == Type_Void); + break; + } + + masm.leaveExitFrame(); + masm.retn(Imm32(sizeof(ExitFrameLayout) + + f.explicitStackSlots() * sizeof(void*) + + f.extraValuesToPop * sizeof(Value))); + + Linker linker(masm); + JitCode* wrapper = linker.newCode(cx, OTHER_CODE); + if (!wrapper) + return nullptr; + +#ifdef JS_ION_PERF + writePerfSpewerJitCodeProfile(wrapper, "VMWrapper"); +#endif + + // linker.newCode may trigger a GC and sweep functionWrappers_ so we have to + // use relookupOrAdd instead of add. + if (!functionWrappers_->relookupOrAdd(p, &f, wrapper)) + return nullptr; + + return wrapper; +} + +JitCode* +JitRuntime::generatePreBarrier(JSContext* cx, MIRType type) +{ + MacroAssembler masm(cx); + + LiveRegisterSet regs = LiveRegisterSet(GeneralRegisterSet(Registers::VolatileMask), + FloatRegisterSet(FloatRegisters::VolatileMask)); + + // Also preserve the return address. + regs.add(lr); + + masm.PushRegsInMask(regs); + + MOZ_ASSERT(PreBarrierReg == r1); + masm.movePtr(ImmPtr(cx->runtime()), r3); + + masm.setupUnalignedABICall(2, r0); + masm.passABIArg(r3); + masm.passABIArg(PreBarrierReg); + masm.callWithABI(IonMarkFunction(type)); + + // Pop the volatile regs and restore LR. + masm.PopRegsInMask(regs); + + masm.abiret(); + + Linker linker(masm); + return linker.newCode(cx, OTHER_CODE); +} + +typedef bool (*HandleDebugTrapFn)(JSContext*, BaselineFrame*, uint8_t*, bool*); +static const VMFunction HandleDebugTrapInfo = FunctionInfo(HandleDebugTrap); + +JitCode* +JitRuntime::generateDebugTrapHandler(JSContext* cx) +{ + MacroAssembler masm(cx); + + Register scratch1 = r0; + Register scratch2 = r1; + + // Load BaselineFrame pointer into scratch1. + masm.Sub(ARMRegister(scratch1, 64), BaselineFrameReg64, Operand(BaselineFrame::Size())); + + // Enter a stub frame and call the HandleDebugTrap VM function. Ensure the + // stub frame has a nullptr ICStub pointer, since this pointer is marked + // during GC. + masm.movePtr(ImmPtr(nullptr), ICStubReg); + EmitEnterStubFrame(masm, scratch2); + + JitCode* code = cx->runtime()->jitRuntime()->getVMWrapper(HandleDebugTrapInfo); + if (!code) + return nullptr; + + masm.asVIXL().Push(vixl::lr, ARMRegister(scratch1, 64)); + EmitCallVM(code, masm); + + EmitLeaveStubFrame(masm); + + // If the stub returns |true|, we have to perform a forced return (return + // from the JS frame). If the stub returns |false|, just return from the + // trap stub so that execution continues at the current pc. + Label forcedReturn; + masm.branchTest32(Assembler::NonZero, ReturnReg, ReturnReg, &forcedReturn); + masm.abiret(); + + masm.bind(&forcedReturn); + masm.loadValue(Address(BaselineFrameReg, BaselineFrame::reverseOffsetOfReturnValue()), + JSReturnOperand); + masm.Mov(masm.GetStackPointer64(), BaselineFrameReg64); + + masm.pop(BaselineFrameReg, lr); + masm.syncStackPtr(); + masm.abiret(); + + Linker linker(masm); + JitCode* codeDbg = linker.newCode(cx, OTHER_CODE); + +#ifdef JS_ION_PERF + writePerfSpewerJitCodeProfile(codeDbg, "DebugTrapHandler"); +#endif + + return codeDbg; +} + +JitCode* +JitRuntime::generateExceptionTailStub(JSContext* cx, void* handler) +{ + MacroAssembler masm(cx); + + masm.handleFailureWithHandlerTail(handler); + + Linker linker(masm); + JitCode* code = linker.newCode(cx, OTHER_CODE); + +#ifdef JS_ION_PERF + writePerfSpewerJitCodeProfile(code, "ExceptionTailStub"); +#endif + + return code; +} + +JitCode* +JitRuntime::generateBailoutTailStub(JSContext* cx) +{ + MacroAssembler masm(cx); + + masm.generateBailoutTail(r1, r2); + + Linker linker(masm); + JitCode* code = linker.newCode(cx, OTHER_CODE); + +#ifdef JS_ION_PERF + writePerfSpewerJitCodeProfile(code, "BailoutTailStub"); +#endif + + return code; +} +JitCode* +JitRuntime::generateProfilerExitFrameTailStub(JSContext* cx) +{ + MacroAssembler masm; + + Register scratch1 = r8; + Register scratch2 = r9; + Register scratch3 = r10; + Register scratch4 = r11; + + // + // The code generated below expects that the current stack pointer points + // to an Ion or Baseline frame, at the state it would be immediately + // before a ret(). Thus, after this stub's business is done, it executes + // a ret() and returns directly to the caller script, on behalf of the + // callee script that jumped to this code. + // + // Thus the expected stack is: + // + // StackPointer ----+ + // v + // ..., ActualArgc, CalleeToken, Descriptor, ReturnAddr + // MEM-HI MEM-LOW + // + // + // The generated jitcode is responsible for overwriting the + // jitActivation->lastProfilingFrame field with a pointer to the previous + // Ion or Baseline jit-frame that was pushed before this one. It is also + // responsible for overwriting jitActivation->lastProfilingCallSite with + // the return address into that frame. The frame could either be an + // immediate "caller" frame, or it could be a frame in a previous + // JitActivation (if the current frame was entered from C++, and the C++ + // was entered by some caller jit-frame further down the stack). + // + // So this jitcode is responsible for "walking up" the jit stack, finding + // the previous Ion or Baseline JS frame, and storing its address and the + // return address into the appropriate fields on the current jitActivation. + // + // There are a fixed number of different path types that can lead to the + // current frame, which is either a baseline or ion frame: + // + // + // ^ + // | + // ^--- Ion + // | + // ^--- Baseline Stub <---- Baseline + // | + // ^--- Argument Rectifier + // | ^ + // | | + // | ^--- Ion + // | | + // | ^--- Baseline Stub <---- Baseline + // | + // ^--- Entry Frame (From C++) + // + Register actReg = scratch4; + AbsoluteAddress activationAddr(GetJitContext()->runtime->addressOfProfilingActivation()); + masm.loadPtr(activationAddr, actReg); + + Address lastProfilingFrame(actReg, JitActivation::offsetOfLastProfilingFrame()); + Address lastProfilingCallSite(actReg, JitActivation::offsetOfLastProfilingCallSite()); + +#ifdef DEBUG + // Ensure that frame we are exiting is current lastProfilingFrame + { + masm.loadPtr(lastProfilingFrame, scratch1); + Label checkOk; + masm.branchPtr(Assembler::Equal, scratch1, ImmWord(0), &checkOk); + masm.branchStackPtr(Assembler::Equal, scratch1, &checkOk); + masm.assumeUnreachable("Mismatch between stored lastProfilingFrame and current stack pointer."); + masm.bind(&checkOk); + } +#endif + + // Load the frame descriptor into |scratch1|, figure out what to do depending on its type. + masm.loadPtr(Address(masm.getStackPointer(), JitFrameLayout::offsetOfDescriptor()), scratch1); + + // Going into the conditionals, we will have: + // FrameDescriptor.size in scratch1 + // FrameDescriptor.type in scratch2 + masm.and32(Imm32((1 << FRAMESIZE_SHIFT) - 1), scratch1, scratch2); + masm.rshiftPtr(Imm32(FRAMESIZE_SHIFT), scratch1); + + // Handling of each case is dependent on FrameDescriptor.type + Label handle_IonJS; + Label handle_BaselineStub; + Label handle_Rectifier; + Label handle_IonAccessorIC; + Label handle_Entry; + Label end; + + masm.branch32(Assembler::Equal, scratch2, Imm32(JitFrame_IonJS), &handle_IonJS); + masm.branch32(Assembler::Equal, scratch2, Imm32(JitFrame_BaselineJS), &handle_IonJS); + masm.branch32(Assembler::Equal, scratch2, Imm32(JitFrame_BaselineStub), &handle_BaselineStub); + masm.branch32(Assembler::Equal, scratch2, Imm32(JitFrame_Rectifier), &handle_Rectifier); + masm.branch32(Assembler::Equal, scratch2, Imm32(JitFrame_IonAccessorIC), &handle_IonAccessorIC); + masm.branch32(Assembler::Equal, scratch2, Imm32(JitFrame_Entry), &handle_Entry); + + masm.assumeUnreachable("Invalid caller frame type when exiting from Ion frame."); + + // + // JitFrame_IonJS + // + // Stack layout: + // ... + // Ion-Descriptor + // Prev-FP ---> Ion-ReturnAddr + // ... previous frame data ... |- Descriptor.Size + // ... arguments ... | + // ActualArgc | + // CalleeToken |- JitFrameLayout::Size() + // Descriptor | + // FP -----> ReturnAddr | + // + masm.bind(&handle_IonJS); + { + // |scratch1| contains Descriptor.size + + // returning directly to an IonJS frame. Store return addr to frame + // in lastProfilingCallSite. + masm.loadPtr(Address(masm.getStackPointer(), JitFrameLayout::offsetOfReturnAddress()), + scratch2); + masm.storePtr(scratch2, lastProfilingCallSite); + + // Store return frame in lastProfilingFrame. + // scratch2 := masm.getStackPointer() + Descriptor.size*1 + JitFrameLayout::Size(); + masm.addPtr(masm.getStackPointer(), scratch1, scratch2); + masm.syncStackPtr(); + masm.addPtr(Imm32(JitFrameLayout::Size()), scratch2, scratch2); + masm.storePtr(scratch2, lastProfilingFrame); + masm.ret(); + } + + // + // JitFrame_BaselineStub + // + // Look past the stub and store the frame pointer to + // the baselineJS frame prior to it. + // + // Stack layout: + // ... + // BL-Descriptor + // Prev-FP ---> BL-ReturnAddr + // +-----> BL-PrevFramePointer + // | ... BL-FrameData ... + // | BLStub-Descriptor + // | BLStub-ReturnAddr + // | BLStub-StubPointer | + // +------ BLStub-SavedFramePointer |- Descriptor.Size + // ... arguments ... | + // ActualArgc | + // CalleeToken |- JitFrameLayout::Size() + // Descriptor | + // FP -----> ReturnAddr | + // + // We take advantage of the fact that the stub frame saves the frame + // pointer pointing to the baseline frame, so a bunch of calculation can + // be avoided. + // + masm.bind(&handle_BaselineStub); + { + masm.addPtr(masm.getStackPointer(), scratch1, scratch3); + masm.syncStackPtr(); + Address stubFrameReturnAddr(scratch3, + JitFrameLayout::Size() + + BaselineStubFrameLayout::offsetOfReturnAddress()); + masm.loadPtr(stubFrameReturnAddr, scratch2); + masm.storePtr(scratch2, lastProfilingCallSite); + + Address stubFrameSavedFramePtr(scratch3, + JitFrameLayout::Size() - (2 * sizeof(void*))); + masm.loadPtr(stubFrameSavedFramePtr, scratch2); + masm.addPtr(Imm32(sizeof(void*)), scratch2); // Skip past BL-PrevFramePtr. + masm.storePtr(scratch2, lastProfilingFrame); + masm.ret(); + } + + + // + // JitFrame_Rectifier + // + // The rectifier frame can be preceded by either an IonJS or a + // BaselineStub frame. + // + // Stack layout if caller of rectifier was Ion: + // + // Ion-Descriptor + // Ion-ReturnAddr + // ... ion frame data ... |- Rect-Descriptor.Size + // < COMMON LAYOUT > + // + // Stack layout if caller of rectifier was Baseline: + // + // BL-Descriptor + // Prev-FP ---> BL-ReturnAddr + // +-----> BL-SavedFramePointer + // | ... baseline frame data ... + // | BLStub-Descriptor + // | BLStub-ReturnAddr + // | BLStub-StubPointer | + // +------ BLStub-SavedFramePointer |- Rect-Descriptor.Size + // ... args to rectifier ... | + // < COMMON LAYOUT > + // + // Common stack layout: + // + // ActualArgc | + // CalleeToken |- IonRectitiferFrameLayout::Size() + // Rect-Descriptor | + // Rect-ReturnAddr | + // ... rectifier data & args ... |- Descriptor.Size + // ActualArgc | + // CalleeToken |- JitFrameLayout::Size() + // Descriptor | + // FP -----> ReturnAddr | + // + masm.bind(&handle_Rectifier); + { + // scratch2 := StackPointer + Descriptor.size*1 + JitFrameLayout::Size(); + masm.addPtr(masm.getStackPointer(), scratch1, scratch2); + masm.syncStackPtr(); + masm.add32(Imm32(JitFrameLayout::Size()), scratch2); + masm.loadPtr(Address(scratch2, RectifierFrameLayout::offsetOfDescriptor()), scratch3); + masm.rshiftPtr(Imm32(FRAMESIZE_SHIFT), scratch3, scratch1); + masm.and32(Imm32((1 << FRAMETYPE_BITS) - 1), scratch3); + + // Now |scratch1| contains Rect-Descriptor.Size + // and |scratch2| points to Rectifier frame + // and |scratch3| contains Rect-Descriptor.Type + + // Check for either Ion or BaselineStub frame. + Label handle_Rectifier_BaselineStub; + masm.branch32(Assembler::NotEqual, scratch3, Imm32(JitFrame_IonJS), + &handle_Rectifier_BaselineStub); + + // Handle Rectifier <- IonJS + // scratch3 := RectFrame[ReturnAddr] + masm.loadPtr(Address(scratch2, RectifierFrameLayout::offsetOfReturnAddress()), scratch3); + masm.storePtr(scratch3, lastProfilingCallSite); + + // scratch3 := RectFrame + Rect-Descriptor.Size + RectifierFrameLayout::Size() + masm.addPtr(scratch2, scratch1, scratch3); + masm.add32(Imm32(RectifierFrameLayout::Size()), scratch3); + masm.storePtr(scratch3, lastProfilingFrame); + masm.ret(); + + // Handle Rectifier <- BaselineStub <- BaselineJS + masm.bind(&handle_Rectifier_BaselineStub); +#ifdef DEBUG + { + Label checkOk; + masm.branch32(Assembler::Equal, scratch3, Imm32(JitFrame_BaselineStub), &checkOk); + masm.assumeUnreachable("Unrecognized frame preceding baselineStub."); + masm.bind(&checkOk); + } +#endif + masm.addPtr(scratch2, scratch1, scratch3); + Address stubFrameReturnAddr(scratch3, RectifierFrameLayout::Size() + + BaselineStubFrameLayout::offsetOfReturnAddress()); + masm.loadPtr(stubFrameReturnAddr, scratch2); + masm.storePtr(scratch2, lastProfilingCallSite); + + Address stubFrameSavedFramePtr(scratch3, + RectifierFrameLayout::Size() - (2 * sizeof(void*))); + masm.loadPtr(stubFrameSavedFramePtr, scratch2); + masm.addPtr(Imm32(sizeof(void*)), scratch2); + masm.storePtr(scratch2, lastProfilingFrame); + masm.ret(); + } + + // JitFrame_IonAccessorIC + // + // The caller is always an IonJS frame. + // + // Ion-Descriptor + // Ion-ReturnAddr + // ... ion frame data ... |- AccFrame-Descriptor.Size + // StubCode | + // AccFrame-Descriptor |- IonAccessorICFrameLayout::Size() + // AccFrame-ReturnAddr | + // ... accessor frame data & args ... |- Descriptor.Size + // ActualArgc | + // CalleeToken |- JitFrameLayout::Size() + // Descriptor | + // FP -----> ReturnAddr | + masm.bind(&handle_IonAccessorIC); + { + // scratch2 := StackPointer + Descriptor.size + JitFrameLayout::Size() + masm.addPtr(masm.getStackPointer(), scratch1, scratch2); + masm.syncStackPtr(); + masm.addPtr(Imm32(JitFrameLayout::Size()), scratch2); + + // scratch3 := AccFrame-Descriptor.Size + masm.loadPtr(Address(scratch2, IonAccessorICFrameLayout::offsetOfDescriptor()), scratch3); +#ifdef DEBUG + // Assert previous frame is an IonJS frame. + masm.movePtr(scratch3, scratch1); + masm.and32(Imm32((1 << FRAMETYPE_BITS) - 1), scratch1); + { + Label checkOk; + masm.branch32(Assembler::Equal, scratch1, Imm32(JitFrame_IonJS), &checkOk); + masm.assumeUnreachable("IonAccessorIC frame must be preceded by IonJS frame"); + masm.bind(&checkOk); + } +#endif + masm.rshiftPtr(Imm32(FRAMESIZE_SHIFT), scratch3); + + // lastProfilingCallSite := AccFrame-ReturnAddr + masm.loadPtr(Address(scratch2, IonAccessorICFrameLayout::offsetOfReturnAddress()), scratch1); + masm.storePtr(scratch1, lastProfilingCallSite); + + // lastProfilingFrame := AccessorFrame + AccFrame-Descriptor.Size + + // IonAccessorICFrameLayout::Size() + masm.addPtr(scratch2, scratch3, scratch1); + masm.addPtr(Imm32(IonAccessorICFrameLayout::Size()), scratch1); + masm.storePtr(scratch1, lastProfilingFrame); + masm.ret(); + } + + // + // JitFrame_Entry + // + // If at an entry frame, store null into both fields. + // + masm.bind(&handle_Entry); + { + masm.movePtr(ImmPtr(nullptr), scratch1); + masm.storePtr(scratch1, lastProfilingCallSite); + masm.storePtr(scratch1, lastProfilingFrame); + masm.ret(); + } + + Linker linker(masm); + AutoFlushICache afc("ProfilerExitFrameTailStub"); + JitCode* code = linker.newCode(cx, OTHER_CODE); + +#ifdef JS_ION_PERF + writePerfSpewerJitCodeProfile(code, "ProfilerExitFrameStub"); +#endif + + return code; +} From 0fbacfc43d891bd3e739672ec768fc3f94a201cc Mon Sep 17 00:00:00 2001 From: Kyle Machulis Date: Mon, 9 Mar 2015 17:19:21 -0700 Subject: [PATCH 31/63] Bug 1159469 - Add public jsapi ES6 Map delete method; r=jorendorff --- js/src/builtin/MapObject.cpp | 28 ++++++++++++++++++++++++++-- js/src/builtin/MapObject.h | 13 +++++++------ js/src/jsapi.h | 3 +++ 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/js/src/builtin/MapObject.cpp b/js/src/builtin/MapObject.cpp index 1b2308eb9152..53ae80329c2f 100644 --- a/js/src/builtin/MapObject.cpp +++ b/js/src/builtin/MapObject.cpp @@ -1469,7 +1469,23 @@ MapObject::set(JSContext* cx, unsigned argc, Value* vp) } bool -MapObject::delete_impl(JSContext* cx, CallArgs args) +MapObject::delete_(JSContext *cx, HandleObject obj, HandleValue key, bool *rval) +{ + ValueMap &map = extract(obj); + AutoHashableValueRooter k(cx); + + if (!k.setValue(cx, key)) + return false; + + if (!map.remove(k, rval)) { + ReportOutOfMemory(cx); + return false; + } + return true; +} + +bool +MapObject::delete_impl(JSContext *cx, CallArgs args) { // MapObject::mark does not mark deleted entries. Incremental GC therefore // requires that no RelocatableValue objects pointing to heap values be @@ -2160,7 +2176,15 @@ JS::MapHas(JSContext* cx, HandleObject obj, HandleValue key, bool* rval) } JS_PUBLIC_API(bool) -JS::MapSet(JSContext* cx, HandleObject obj, +JS::MapDelete(JSContext *cx, HandleObject obj, HandleValue key, bool *rval) +{ + CHECK_REQUEST(cx); + assertSameCompartment(cx, key); + return MapObject::delete_(cx, obj, key, rval); +} + +JS_PUBLIC_API(bool) +JS::MapSet(JSContext *cx, HandleObject obj, HandleValue key, HandleValue val) { CHECK_REQUEST(cx); diff --git a/js/src/builtin/MapObject.h b/js/src/builtin/MapObject.h index abf1b6ffe42d..385e21a73730 100644 --- a/js/src/builtin/MapObject.h +++ b/js/src/builtin/MapObject.h @@ -98,12 +98,13 @@ class MapObject : public NativeObject { static bool has(JSContext* cx, unsigned argc, Value* vp); static MapObject* create(JSContext* cx); - static uint32_t size(JSContext* cx, HandleObject obj); - static bool get(JSContext* cx, HandleObject obj, HandleValue key, MutableHandleValue rval); - static bool has(JSContext* cx, HandleObject obj, HandleValue key, bool* rval); - static bool set(JSContext* cx, HandleObject obj, HandleValue key, HandleValue val); - static bool clear(JSContext* cx, HandleObject obj); - static bool iterator(JSContext* cx, IteratorKind kind, HandleObject obj, MutableHandleValue iter); + static uint32_t size(JSContext *cx, HandleObject obj); + static bool get(JSContext *cx, HandleObject obj, HandleValue key, MutableHandleValue rval); + static bool has(JSContext *cx, HandleObject obj, HandleValue key, bool* rval); + static bool delete_(JSContext *cx, HandleObject obj, HandleValue key, bool* rval); + static bool set(JSContext *cx, HandleObject obj, HandleValue key, HandleValue val); + static bool clear(JSContext *cx, HandleObject obj); + static bool iterator(JSContext *cx, IteratorKind kind, HandleObject obj, MutableHandleValue iter); private: static const JSPropertySpec properties[]; diff --git a/js/src/jsapi.h b/js/src/jsapi.h index 49843e4f6420..76680cccb9d6 100644 --- a/js/src/jsapi.h +++ b/js/src/jsapi.h @@ -4709,6 +4709,9 @@ MapHas(JSContext* cx, HandleObject obj, HandleValue key, bool* rval); extern JS_PUBLIC_API(bool) MapSet(JSContext* cx, HandleObject obj, HandleValue key, HandleValue val); +extern JS_PUBLIC_API(bool) +MapDelete(JSContext *cx, HandleObject obj, HandleValue key, bool *rval); + extern JS_PUBLIC_API(bool) MapClear(JSContext* cx, HandleObject obj); From 44d09acbf0172a0f5bc2b46af522ce5cb850a8ac Mon Sep 17 00:00:00 2001 From: Kyle Machulis Date: Mon, 9 Mar 2015 17:38:44 -0700 Subject: [PATCH 32/63] Bug 1159469 - Add public jsapi ES6 Set convenience functions; r=jorendorff --- js/src/builtin/MapObject.cpp | 162 ++++++++++++++++++++++++++++++++--- js/src/builtin/MapObject.h | 18 ++-- js/src/jsapi.h | 30 +++++++ 3 files changed, 193 insertions(+), 17 deletions(-) diff --git a/js/src/builtin/MapObject.cpp b/js/src/builtin/MapObject.cpp index 53ae80329c2f..836f6c555bf6 100644 --- a/js/src/builtin/MapObject.cpp +++ b/js/src/builtin/MapObject.cpp @@ -1354,7 +1354,6 @@ MapObject::extract(CallReceiver call) uint32_t MapObject::size(JSContext* cx, HandleObject obj) { - MOZ_ASSERT(MapObject::is(obj)); ValueMap& map = extract(obj); static_assert(sizeof(map.count()) <= sizeof(uint32_t), "map count must be precisely representable as a JS number"); @@ -1380,8 +1379,6 @@ bool MapObject::get(JSContext* cx, HandleObject obj, HandleValue key, MutableHandleValue rval) { - MOZ_ASSERT(MapObject::is(obj)); - ValueMap& map = extract(obj); AutoHashableValueRooter k(cx); @@ -1413,8 +1410,6 @@ MapObject::get(JSContext* cx, unsigned argc, Value* vp) bool MapObject::has(JSContext* cx, HandleObject obj, HandleValue key, bool* rval) { - MOZ_ASSERT(MapObject::is(obj)); - ValueMap& map = extract(obj); AutoHashableValueRooter k(cx); @@ -1520,7 +1515,6 @@ bool MapObject::iterator(JSContext* cx, IteratorKind kind, HandleObject obj, MutableHandleValue iter) { - MOZ_ASSERT(MapObject::is(obj)); ValueMap& map = extract(obj); Rooted iterobj(cx, MapIteratorObject::create(cx, obj, &map, kind)); return iterobj && (iter.setObject(*iterobj), true); @@ -1590,7 +1584,6 @@ MapObject::clear(JSContext* cx, unsigned argc, Value* vp) bool MapObject::clear(JSContext* cx, HandleObject obj) { - MOZ_ASSERT(MapObject::is(obj)); ValueMap& map = extract(obj); if (!map.clear()) { ReportOutOfMemory(cx); @@ -1977,7 +1970,20 @@ SetObject::is(HandleValue v) return v.isObject() && v.toObject().hasClass(&class_) && v.toObject().as().getPrivate(); } -ValueSet& +bool +SetObject::is(HandleObject o) +{ + return o->hasClass(&class_) && o->as().getPrivate(); +} + +ValueSet & +SetObject::extract(HandleObject o) +{ + MOZ_ASSERT(o->hasClass(&SetObject::class_)); + return *o->as().getData(); +} + +ValueSet & SetObject::extract(CallReceiver call) { MOZ_ASSERT(call.thisv().isObject()); @@ -1985,6 +1991,16 @@ SetObject::extract(CallReceiver call) return *static_cast(call.thisv().toObject()).getData(); } +uint32_t +SetObject::size(JSContext *cx, HandleObject obj) +{ + MOZ_ASSERT(SetObject::is(obj)); + ValueSet &set = extract(obj); + static_assert(sizeof(set.count()) <= sizeof(uint32_t), + "set count must be precisely representable as a JS number"); + return set.count(); +} + bool SetObject::size_impl(JSContext* cx, CallArgs args) { @@ -2016,7 +2032,22 @@ SetObject::has_impl(JSContext* cx, CallArgs args) } bool -SetObject::has(JSContext* cx, unsigned argc, Value* vp) +SetObject::has(JSContext *cx, HandleObject obj, HandleValue key, bool *rval) +{ + MOZ_ASSERT(SetObject::is(obj)); + + ValueSet &set = extract(obj); + AutoHashableValueRooter k(cx); + + if (!k.setValue(cx, key)) + return false; + + *rval = set.has(k); + return true; +} + +bool +SetObject::has(JSContext *cx, unsigned argc, Value *vp) { CallArgs args = CallArgsFromVp(argc, vp); return CallNonGenericMethod(cx, args); @@ -2046,7 +2077,25 @@ SetObject::add(JSContext* cx, unsigned argc, Value* vp) } bool -SetObject::delete_impl(JSContext* cx, CallArgs args) +SetObject::delete_(JSContext *cx, HandleObject obj, HandleValue key, bool *rval) +{ + MOZ_ASSERT(SetObject::is(obj)); + + ValueSet &set = extract(obj); + AutoHashableValueRooter k(cx); + + if (!k.setValue(cx, key)) + return false; + + if (!set.remove(k, rval)) { + ReportOutOfMemory(cx); + return false; + } + return true; +} + +bool +SetObject::delete_impl(JSContext *cx, CallArgs args) { MOZ_ASSERT(is(args.thisv())); @@ -2069,7 +2118,17 @@ SetObject::delete_(JSContext* cx, unsigned argc, Value* vp) } bool -SetObject::iterator_impl(JSContext* cx, CallArgs args, IteratorKind kind) +SetObject::iterator(JSContext *cx, IteratorKind kind, + HandleObject obj, MutableHandleValue iter) +{ + MOZ_ASSERT(SetObject::is(obj)); + ValueSet &set = extract(obj); + Rooted iterobj(cx, SetIteratorObject::create(cx, obj, &set, kind)); + return iterobj && (iter.setObject(*iterobj), true); +} + +bool +SetObject::iterator_impl(JSContext *cx, CallArgs args, IteratorKind kind) { Rooted setobj(cx, &args.thisv().toObject().as()); ValueSet& set = *setobj->getData(); @@ -2107,7 +2166,19 @@ SetObject::entries(JSContext* cx, unsigned argc, Value* vp) } bool -SetObject::clear_impl(JSContext* cx, CallArgs args) +SetObject::clear(JSContext *cx, HandleObject obj) +{ + MOZ_ASSERT(SetObject::is(obj)); + ValueSet &set = extract(obj); + if (!set.clear()) { + ReportOutOfMemory(cx); + return false; + } + return true; +} + +bool +SetObject::clear_impl(JSContext *cx, CallArgs args) { Rooted setobj(cx, &args.thisv().toObject().as()); if (!setobj->getData()->clear()) { @@ -2222,3 +2293,70 @@ JS::MapEntries(JSContext* cx, HandleObject obj, MutableHandleValue rval) assertSameCompartment(cx, rval); return MapObject::iterator(cx, MapObject::Entries, obj, rval); } + +JS_PUBLIC_API(JSObject *) +JS::NewSetObject(JSContext *cx) +{ + return SetObject::create(cx); +} + +JS_PUBLIC_API(uint32_t) +JS::SetSize(JSContext *cx, HandleObject obj) +{ + CHECK_REQUEST(cx); + return SetObject::size(cx, obj); +} + +JS_PUBLIC_API(bool) +JS::SetHas(JSContext *cx, HandleObject obj, HandleValue key, bool *rval) +{ + CHECK_REQUEST(cx); + assertSameCompartment(cx, key); + return SetObject::has(cx, obj, key, rval); +} + +JS_PUBLIC_API(bool) +JS::SetDelete(JSContext *cx, HandleObject obj, HandleValue key, bool *rval) +{ + CHECK_REQUEST(cx); + assertSameCompartment(cx, key); + return SetObject::delete_(cx, obj, key, rval); +} + +JS_PUBLIC_API(bool) +JS::SetAdd(JSContext *cx, HandleObject obj, + HandleValue key) +{ + CHECK_REQUEST(cx); + assertSameCompartment(cx, key); + return SetObject::add(cx, obj, key); +} + +JS_PUBLIC_API(bool) +JS::SetClear(JSContext *cx, HandleObject obj) +{ + CHECK_REQUEST(cx); + return SetObject::clear(cx, obj); +} + +JS_PUBLIC_API(bool) +JS::SetKeys(JSContext *cx, HandleObject obj, MutableHandleValue rval) +{ + return SetValues(cx, obj, rval); +} + +JS_PUBLIC_API(bool) +JS::SetValues(JSContext *cx, HandleObject obj, MutableHandleValue rval) +{ + CHECK_REQUEST(cx); + assertSameCompartment(cx, rval); + return SetObject::iterator(cx, SetObject::Values, obj, rval); +} + +JS_PUBLIC_API(bool) +JS::SetEntries(JSContext *cx, HandleObject obj, MutableHandleValue rval) +{ + CHECK_REQUEST(cx); + assertSameCompartment(cx, rval); + return SetObject::iterator(cx, SetObject::Entries, obj, rval); +} diff --git a/js/src/builtin/MapObject.h b/js/src/builtin/MapObject.h index 385e21a73730..419c9fc06927 100644 --- a/js/src/builtin/MapObject.h +++ b/js/src/builtin/MapObject.h @@ -146,23 +146,31 @@ class SetObject : public NativeObject { static JSObject* initClass(JSContext* cx, JSObject* obj); static const Class class_; - static bool keys(JSContext* cx, HandleObject obj, JS::AutoValueVector* keys); - static bool values(JSContext* cx, unsigned argc, Value* vp); - static bool add(JSContext* cx, HandleObject obj, HandleValue key); - static bool has(JSContext* cx, unsigned argc, Value* vp); - static SetObject* create(JSContext* cx); + static bool keys(JSContext *cx, HandleObject obj, JS::AutoValueVector *keys); + static bool values(JSContext *cx, unsigned argc, Value *vp); + static bool add(JSContext *cx, HandleObject obj, HandleValue key); + static bool has(JSContext *cx, unsigned argc, Value *vp); + + static SetObject* create(JSContext *cx); + static uint32_t size(JSContext *cx, HandleObject obj); + static bool has(JSContext *cx, HandleObject obj, HandleValue key, bool* rval); + static bool clear(JSContext *cx, HandleObject obj); + static bool iterator(JSContext *cx, IteratorKind kind, HandleObject obj, MutableHandleValue iter); + static bool delete_(JSContext *cx, HandleObject obj, HandleValue key, bool *rval); private: static const JSPropertySpec properties[]; static const JSFunctionSpec methods[]; static const JSPropertySpec staticProperties[]; ValueSet* getData() { return static_cast(getPrivate()); } + static ValueSet & extract(HandleObject o); static ValueSet & extract(CallReceiver call); static void mark(JSTracer* trc, JSObject* obj); static void finalize(FreeOp* fop, JSObject* obj); static bool construct(JSContext* cx, unsigned argc, Value* vp); static bool is(HandleValue v); + static bool is(HandleObject o); static bool iterator_impl(JSContext* cx, CallArgs args, IteratorKind kind); diff --git a/js/src/jsapi.h b/js/src/jsapi.h index 76680cccb9d6..ab0d378b2c6c 100644 --- a/js/src/jsapi.h +++ b/js/src/jsapi.h @@ -4724,6 +4724,36 @@ MapValues(JSContext* cx, HandleObject obj, MutableHandleValue rval); extern JS_PUBLIC_API(bool) MapEntries(JSContext* cx, HandleObject obj, MutableHandleValue rval); +/* + * Set + */ +extern JS_PUBLIC_API(JSObject *) +NewSetObject(JSContext *cx); + +extern JS_PUBLIC_API(uint32_t) +SetSize(JSContext *cx, HandleObject obj); + +extern JS_PUBLIC_API(bool) +SetHas(JSContext *cx, HandleObject obj, HandleValue key, bool *rval); + +extern JS_PUBLIC_API(bool) +SetDelete(JSContext *cx, HandleObject obj, HandleValue key, bool *rval); + +extern JS_PUBLIC_API(bool) +SetAdd(JSContext *cx, HandleObject obj, HandleValue key); + +extern JS_PUBLIC_API(bool) +SetClear(JSContext *cx, HandleObject obj); + +extern JS_PUBLIC_API(bool) +SetKeys(JSContext *cx, HandleObject obj, MutableHandleValue rval); + +extern JS_PUBLIC_API(bool) +SetValues(JSContext *cx, HandleObject obj, MutableHandleValue rval); + +extern JS_PUBLIC_API(bool) +SetEntries(JSContext *cx, HandleObject obj, MutableHandleValue rval); + } /* namespace JS */ /* From 0ee2012d959a0efdd682b6b81f93f083e7b46050 Mon Sep 17 00:00:00 2001 From: Kyle Machulis Date: Fri, 29 May 2015 15:27:52 -0700 Subject: [PATCH 33/63] Bug 1159469 - Add ForEach C++ public function for ES6 Maps/Sets; r=jorendorff --- js/src/builtin/MapObject.cpp | 32 ++++++++++++++++++++++++++++++++ js/src/jsapi.h | 6 ++++++ js/src/vm/CommonPropertyNames.h | 1 + 3 files changed, 39 insertions(+) diff --git a/js/src/builtin/MapObject.cpp b/js/src/builtin/MapObject.cpp index 836f6c555bf6..e576bc6dac12 100644 --- a/js/src/builtin/MapObject.cpp +++ b/js/src/builtin/MapObject.cpp @@ -2214,6 +2214,26 @@ js::InitSelfHostingCollectionIteratorFunctions(JSContext* cx, HandleObject obj) return JS_DefineFunctions(cx, obj, selfhosting_collection_iterator_methods); } +/*** JS static utility functions *********************************************/ + +static +bool +forEach(const char* funcName, JSContext *cx, HandleObject obj, HandleValue callbackFn, HandleValue thisArg) +{ + RootedId forEachId(cx, NameToId(cx->names().forEach)); + RootedFunction forEachFunc(cx, JS::GetSelfHostedFunction(cx, funcName, forEachId, 2)); + if (!forEachFunc) + return false; + InvokeArgs args(cx); + if (!args.init(2)) + return false; + args.setCallee(JS::ObjectValue(*forEachFunc)); + args.setThis(JS::ObjectValue(*obj)); + args[0].set(callbackFn); + args[1].set(thisArg); + return Invoke(cx, args); +} + /*** JS public APIs **********************************************************/ JS_PUBLIC_API(JSObject*) @@ -2292,6 +2312,12 @@ JS::MapEntries(JSContext* cx, HandleObject obj, MutableHandleValue rval) CHECK_REQUEST(cx); assertSameCompartment(cx, rval); return MapObject::iterator(cx, MapObject::Entries, obj, rval); + +JS_PUBLIC_API(bool) +JS::MapForEach(JSContext *cx, HandleObject obj, HandleValue callbackFn, HandleValue thisVal) +{ + CHECK_REQUEST(cx); + return forEach("MapForEach", cx, obj, callbackFn, thisVal); } JS_PUBLIC_API(JSObject *) @@ -2359,4 +2385,10 @@ JS::SetEntries(JSContext *cx, HandleObject obj, MutableHandleValue rval) CHECK_REQUEST(cx); assertSameCompartment(cx, rval); return SetObject::iterator(cx, SetObject::Entries, obj, rval); + +JS_PUBLIC_API(bool) +JS::SetForEach(JSContext *cx, HandleObject obj, HandleValue callbackFn, HandleValue thisVal) +{ + CHECK_REQUEST(cx); + return forEach("SetForEach", cx, obj, callbackFn, thisVal); } diff --git a/js/src/jsapi.h b/js/src/jsapi.h index ab0d378b2c6c..3a486d401f69 100644 --- a/js/src/jsapi.h +++ b/js/src/jsapi.h @@ -4724,6 +4724,9 @@ MapValues(JSContext* cx, HandleObject obj, MutableHandleValue rval); extern JS_PUBLIC_API(bool) MapEntries(JSContext* cx, HandleObject obj, MutableHandleValue rval); +extern JS_PUBLIC_API(bool) +MapForEach(JSContext *cx, HandleObject obj, HandleValue callbackFn, HandleValue thisVal); + /* * Set */ @@ -4754,6 +4757,9 @@ SetValues(JSContext *cx, HandleObject obj, MutableHandleValue rval); extern JS_PUBLIC_API(bool) SetEntries(JSContext *cx, HandleObject obj, MutableHandleValue rval); +extern JS_PUBLIC_API(bool) +SetForEach(JSContext *cx, HandleObject obj, HandleValue callbackFn, HandleValue thisVal); + } /* namespace JS */ /* diff --git a/js/src/vm/CommonPropertyNames.h b/js/src/vm/CommonPropertyNames.h index 2721b47ff7e7..bf4fcd1263ef 100644 --- a/js/src/vm/CommonPropertyNames.h +++ b/js/src/vm/CommonPropertyNames.h @@ -85,6 +85,7 @@ macro(float64, float64, "float64") \ macro(float64x2, float64x2, "float64x2") \ macro(forceInterpreter, forceInterpreter, "forceInterpreter") \ + macro(forEach, forEach, "forEach") \ macro(format, format, "format") \ macro(frame, frame, "frame") \ macro(from, from, "from") \ From ff70a2d668d46019b435951fa329471708c5e909 Mon Sep 17 00:00:00 2001 From: Kyle Machulis Date: Mon, 27 Apr 2015 19:27:55 -0700 Subject: [PATCH 34/63] Bug 1159469 - Add get function to JSJitCallArguments; r=jorendorff --- js/src/jsfriendapi.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h index 8477610b0059..32b342b03aea 100644 --- a/js/src/jsfriendapi.h +++ b/js/src/jsfriendapi.h @@ -2263,7 +2263,9 @@ class JSJitMethodCallArgs : protected JS::detail::CallArgsBase Date: Fri, 29 May 2015 15:31:36 -0700 Subject: [PATCH 35/63] Bug 1159469 - Make sure public jsapi Map/Set calls deal with compartments/proxies; r=bz r=jorendorff --- js/src/builtin/MapObject.cpp | 232 +++++++++++++++++++++++++---------- js/src/builtin/MapObject.h | 8 ++ 2 files changed, 176 insertions(+), 64 deletions(-) diff --git a/js/src/builtin/MapObject.cpp b/js/src/builtin/MapObject.cpp index e576bc6dac12..a9b8084c81b1 100644 --- a/js/src/builtin/MapObject.cpp +++ b/js/src/builtin/MapObject.cpp @@ -2220,6 +2220,7 @@ static bool forEach(const char* funcName, JSContext *cx, HandleObject obj, HandleValue callbackFn, HandleValue thisArg) { + CHECK_REQUEST(cx); RootedId forEachId(cx, NameToId(cx->names().forEach)); RootedFunction forEachFunc(cx, JS::GetSelfHostedFunction(cx, funcName, forEachId, 2)); if (!forEachFunc) @@ -2234,6 +2235,77 @@ forEach(const char* funcName, JSContext *cx, HandleObject obj, HandleValue callb return Invoke(cx, args); } +// Handles Clear/Size for public jsapi map/set access +template +RetT +CallObjFunc(RetT(*ObjFunc)(JSContext*, HandleObject), JSContext* cx, HandleObject obj) +{ + CHECK_REQUEST(cx); + assertSameCompartment(cx, obj); + + // Always unwrap, in case this is an xray or cross-compartment wrapper. + RootedObject unwrappedObj(cx); + unwrappedObj = UncheckedUnwrap(obj); + + // Enter the compartment of the backing object before calling functions on + // it. + JSAutoCompartment ac(cx, unwrappedObj); + return ObjFunc(cx, unwrappedObj); +} + +// Handles Has/Delete for public jsapi map/set access +bool +CallObjFunc(bool(*ObjFunc)(JSContext *cx, HandleObject obj, HandleValue key, bool *rval), + JSContext *cx, HandleObject obj, HandleValue key, bool *rval) +{ + CHECK_REQUEST(cx); + assertSameCompartment(cx, obj, key); + + // Always unwrap, in case this is an xray or cross-compartment wrapper. + RootedObject unwrappedObj(cx); + unwrappedObj = UncheckedUnwrap(obj); + JSAutoCompartment ac(cx, unwrappedObj); + + // If we're working with a wrapped map/set, rewrap the key into the + // compartment of the unwrapped map/set. + RootedValue wrappedKey(cx, key); + if (obj != unwrappedObj) { + if (!JS_WrapValue(cx, &wrappedKey)) + return false; + } + return ObjFunc(cx, unwrappedObj, wrappedKey, rval); +} + +// Handles iterator generation for public jsapi map/set access +template +bool +CallObjFunc(bool(*ObjFunc)(JSContext* cx, Iter kind, + HandleObject obj, MutableHandleValue iter), + JSContext *cx, Iter iterType, HandleObject obj, MutableHandleValue rval) +{ + CHECK_REQUEST(cx); + assertSameCompartment(cx, obj); + + // Always unwrap, in case this is an xray or cross-compartment wrapper. + RootedObject unwrappedObj(cx); + unwrappedObj = UncheckedUnwrap(obj); + { + // Retrieve the iterator while in the unwrapped map/set's compartment, + // otherwise we'll crash on a compartment assert. + JSAutoCompartment ac(cx, unwrappedObj); + if (!ObjFunc(cx, iterType, unwrappedObj, rval)) + return false; + } + + // If the caller is in a different compartment than the map/set, rewrap the + // iterator object into the caller's compartment. + if (obj != unwrappedObj) { + if (!JS_WrapValue(cx, rval)) + return false; + } + return true; +} + /*** JS public APIs **********************************************************/ JS_PUBLIC_API(JSObject*) @@ -2245,78 +2317,106 @@ JS::NewMapObject(JSContext* cx) JS_PUBLIC_API(uint32_t) JS::MapSize(JSContext* cx, HandleObject obj) { - CHECK_REQUEST(cx); - return MapObject::size(cx, obj); + return CallObjFunc(&MapObject::size, cx, obj); } JS_PUBLIC_API(bool) -JS::MapGet(JSContext* cx, HandleObject obj, - HandleValue key, MutableHandleValue rval) +JS::MapGet(JSContext* cx, HandleObject obj, HandleValue key, MutableHandleValue rval) { CHECK_REQUEST(cx); - assertSameCompartment(cx, key, rval); - return MapObject::get(cx, obj, key, rval); + assertSameCompartment(cx, obj, key, rval); + + // Unwrap the object, and enter its compartment. If object isn't wrapped, + // this is essentially a noop. + RootedObject unwrappedObj(cx); + unwrappedObj = UncheckedUnwrap(obj); + { + JSAutoCompartment ac(cx, unwrappedObj); + RootedValue wrappedKey(cx, key); + + // If we passed in a wrapper, wrap our key into its compartment now. + if (obj != unwrappedObj) { + if (!JS_WrapValue(cx, &wrappedKey)) + return false; + } + if (!MapObject::get(cx, unwrappedObj, wrappedKey, rval)) + return false; + } + + // If we passed in a wrapper, wrap our return value on the way out. + if (obj != unwrappedObj) { + if (!JS_WrapValue(cx, rval)) + return false; + } + return true; +} + +JS_PUBLIC_API(bool) +JS::MapSet(JSContext *cx, HandleObject obj, HandleValue key, HandleValue val) +{ + CHECK_REQUEST(cx); + assertSameCompartment(cx, obj, key, val); + + // Unwrap the object, and enter its compartment. If object isn't wrapped, + // this is essentially a noop. + RootedObject unwrappedObj(cx); + unwrappedObj = UncheckedUnwrap(obj); + { + JSAutoCompartment ac(cx, unwrappedObj); + + // If we passed in a wrapper, wrap both key and value before adding to + // the map + RootedValue wrappedKey(cx, key); + RootedValue wrappedValue(cx, val); + if (obj != unwrappedObj) { + if (!JS_WrapValue(cx, &wrappedKey) || + !JS_WrapValue(cx, &wrappedValue)) { + return false; + } + } + return MapObject::set(cx, unwrappedObj, wrappedKey, wrappedValue); + } } JS_PUBLIC_API(bool) JS::MapHas(JSContext* cx, HandleObject obj, HandleValue key, bool* rval) { - CHECK_REQUEST(cx); - assertSameCompartment(cx, key); - return MapObject::has(cx, obj, key, rval); + return CallObjFunc(MapObject::has, cx, obj, key, rval); } JS_PUBLIC_API(bool) -JS::MapDelete(JSContext *cx, HandleObject obj, HandleValue key, bool *rval) +JS::MapDelete(JSContext *cx, HandleObject obj, HandleValue key, bool* rval) { - CHECK_REQUEST(cx); - assertSameCompartment(cx, key); - return MapObject::delete_(cx, obj, key, rval); -} - -JS_PUBLIC_API(bool) -JS::MapSet(JSContext *cx, HandleObject obj, - HandleValue key, HandleValue val) -{ - CHECK_REQUEST(cx); - assertSameCompartment(cx, key, val); - return MapObject::set(cx, obj, key, val); + return CallObjFunc(MapObject::delete_, cx, obj, key, rval); } JS_PUBLIC_API(bool) JS::MapClear(JSContext* cx, HandleObject obj) { - CHECK_REQUEST(cx); - return MapObject::clear(cx, obj); + return CallObjFunc(&MapObject::clear, cx, obj); } JS_PUBLIC_API(bool) JS::MapKeys(JSContext* cx, HandleObject obj, MutableHandleValue rval) { - CHECK_REQUEST(cx); - assertSameCompartment(cx, rval); - return MapObject::iterator(cx, MapObject::Keys, obj, rval); + return CallObjFunc(&MapObject::iterator, cx, MapObject::Keys, obj, rval); } JS_PUBLIC_API(bool) JS::MapValues(JSContext* cx, HandleObject obj, MutableHandleValue rval) { - CHECK_REQUEST(cx); - assertSameCompartment(cx, rval); - return MapObject::iterator(cx, MapObject::Values, obj, rval); + return CallObjFunc(&MapObject::iterator, cx, MapObject::Values, obj, rval); } JS_PUBLIC_API(bool) JS::MapEntries(JSContext* cx, HandleObject obj, MutableHandleValue rval) { - CHECK_REQUEST(cx); - assertSameCompartment(cx, rval); - return MapObject::iterator(cx, MapObject::Entries, obj, rval); + return CallObjFunc(&MapObject::iterator, cx, MapObject::Entries, obj, rval); +} JS_PUBLIC_API(bool) JS::MapForEach(JSContext *cx, HandleObject obj, HandleValue callbackFn, HandleValue thisVal) { - CHECK_REQUEST(cx); return forEach("MapForEach", cx, obj, callbackFn, thisVal); } @@ -2329,66 +2429,70 @@ JS::NewSetObject(JSContext *cx) JS_PUBLIC_API(uint32_t) JS::SetSize(JSContext *cx, HandleObject obj) { - CHECK_REQUEST(cx); - return SetObject::size(cx, obj); + return CallObjFunc(&SetObject::size, cx, obj); } JS_PUBLIC_API(bool) -JS::SetHas(JSContext *cx, HandleObject obj, HandleValue key, bool *rval) +JS::SetAdd(JSContext *cx, HandleObject obj, HandleValue key) { CHECK_REQUEST(cx); - assertSameCompartment(cx, key); - return SetObject::has(cx, obj, key, rval); + assertSameCompartment(cx, obj, key); + + // Unwrap the object, and enter its compartment. If object isn't wrapped, + // this is essentially a noop. + RootedObject unwrappedObj(cx); + unwrappedObj = UncheckedUnwrap(obj); + { + JSAutoCompartment ac(cx, unwrappedObj); + + // If we passed in a wrapper, wrap key before adding to the set + RootedValue wrappedKey(cx, key); + if (obj != unwrappedObj) { + if (!JS_WrapValue(cx, &wrappedKey)) + return false; + } + return SetObject::add(cx, unwrappedObj, wrappedKey); + } +} + +JS_PUBLIC_API(bool) +JS::SetHas(JSContext* cx, HandleObject obj, HandleValue key, bool* rval) +{ + return CallObjFunc(SetObject::has, cx, obj, key, rval); } JS_PUBLIC_API(bool) JS::SetDelete(JSContext *cx, HandleObject obj, HandleValue key, bool *rval) { - CHECK_REQUEST(cx); - assertSameCompartment(cx, key); - return SetObject::delete_(cx, obj, key, rval); + return CallObjFunc(SetObject::delete_, cx, obj, key, rval); } JS_PUBLIC_API(bool) -JS::SetAdd(JSContext *cx, HandleObject obj, - HandleValue key) +JS::SetClear(JSContext* cx, HandleObject obj) { - CHECK_REQUEST(cx); - assertSameCompartment(cx, key); - return SetObject::add(cx, obj, key); + return CallObjFunc(&SetObject::clear, cx, obj); } JS_PUBLIC_API(bool) -JS::SetClear(JSContext *cx, HandleObject obj) -{ - CHECK_REQUEST(cx); - return SetObject::clear(cx, obj); -} - -JS_PUBLIC_API(bool) -JS::SetKeys(JSContext *cx, HandleObject obj, MutableHandleValue rval) +JS::SetKeys(JSContext* cx, HandleObject obj, MutableHandleValue rval) { return SetValues(cx, obj, rval); } JS_PUBLIC_API(bool) -JS::SetValues(JSContext *cx, HandleObject obj, MutableHandleValue rval) +JS::SetValues(JSContext* cx, HandleObject obj, MutableHandleValue rval) { - CHECK_REQUEST(cx); - assertSameCompartment(cx, rval); - return SetObject::iterator(cx, SetObject::Values, obj, rval); + return CallObjFunc(&SetObject::iterator, cx, SetObject::Values, obj, rval); } JS_PUBLIC_API(bool) -JS::SetEntries(JSContext *cx, HandleObject obj, MutableHandleValue rval) +JS::SetEntries(JSContext* cx, HandleObject obj, MutableHandleValue rval) { - CHECK_REQUEST(cx); - assertSameCompartment(cx, rval); - return SetObject::iterator(cx, SetObject::Entries, obj, rval); + return CallObjFunc(&SetObject::iterator, cx, SetObject::Entries, obj, rval); +} JS_PUBLIC_API(bool) JS::SetForEach(JSContext *cx, HandleObject obj, HandleValue callbackFn, HandleValue thisVal) { - CHECK_REQUEST(cx); return forEach("SetForEach", cx, obj, callbackFn, thisVal); } diff --git a/js/src/builtin/MapObject.h b/js/src/builtin/MapObject.h index 419c9fc06927..9919011afddc 100644 --- a/js/src/builtin/MapObject.h +++ b/js/src/builtin/MapObject.h @@ -98,10 +98,16 @@ class MapObject : public NativeObject { static bool has(JSContext* cx, unsigned argc, Value* vp); static MapObject* create(JSContext* cx); + // Publicly exposed Map calls for JSAPI access (webidl maplike/setlike + // interfaces, etc.) static uint32_t size(JSContext *cx, HandleObject obj); static bool get(JSContext *cx, HandleObject obj, HandleValue key, MutableHandleValue rval); static bool has(JSContext *cx, HandleObject obj, HandleValue key, bool* rval); static bool delete_(JSContext *cx, HandleObject obj, HandleValue key, bool* rval); + + // Set call for public JSAPI exposure. Does not actually return map object + // as stated in spec, expects caller to return a value. for instance, with + // webidl maplike/setlike, should return interface object. static bool set(JSContext *cx, HandleObject obj, HandleValue key, HandleValue val); static bool clear(JSContext *cx, HandleObject obj); static bool iterator(JSContext *cx, IteratorKind kind, HandleObject obj, MutableHandleValue iter); @@ -151,6 +157,8 @@ class SetObject : public NativeObject { static bool add(JSContext *cx, HandleObject obj, HandleValue key); static bool has(JSContext *cx, unsigned argc, Value *vp); + // Publicly exposed Set calls for JSAPI access (webidl maplike/setlike + // interfaces, etc.) static SetObject* create(JSContext *cx); static uint32_t size(JSContext *cx, HandleObject obj); static bool has(JSContext *cx, HandleObject obj, HandleValue key, bool* rval); From 907dea7e413beb9e6ea8efbee34abb9b7a10f846 Mon Sep 17 00:00:00 2001 From: Kyle Machulis Date: Mon, 9 Mar 2015 13:19:44 -0700 Subject: [PATCH 36/63] Bug 1123516 - Implement maplike/setlike in WebIDL parser; r=bz --- dom/bindings/parser/WebIDL.py | 413 +++++++++++++- .../tests/test_interface_maplikesetlike.py | 528 ++++++++++++++++++ 2 files changed, 910 insertions(+), 31 deletions(-) create mode 100644 dom/bindings/parser/tests/test_interface_maplikesetlike.py diff --git a/dom/bindings/parser/WebIDL.py b/dom/bindings/parser/WebIDL.py index a831924ed2f2..4ff1937a5e64 100644 --- a/dom/bindings/parser/WebIDL.py +++ b/dom/bindings/parser/WebIDL.py @@ -619,6 +619,7 @@ class IDLInterface(IDLObjectWithScope, IDLExposureMixins): self._callback = False self._finished = False self.members = [] + self.maplikeOrSetlike = None self._partialInterfaces = [] self._extendedAttrDict = {} # namedConstructors needs deterministic ordering because bindings code @@ -692,6 +693,27 @@ class IDLInterface(IDLObjectWithScope, IDLExposureMixins): self.addExtendedAttributes(partial.propagatedExtendedAttrs) self.members.extend(partial.members) + # Generate maplike/setlike interface members. Since generated members + # need to be treated like regular interface members, do this before + # things like exposure setting. + for member in self.members: + if member.isMaplikeOrSetlike(): + # Check that we only have one interface declaration (currently + # there can only be one maplike/setlike declaration per + # interface) + if self.maplikeOrSetlike: + raise WebIDLError("%s declaration used on " + "interface that already has %s " + "declaration" % + (member.maplikeOrSetlikeType, + self.maplikeOrSetlike.maplikeOrSetlikeType), + [self.maplikeOrSetlike.location, + member.location]) + self.maplikeOrSetlike = member + # If we've got a maplike or setlike declaration, we'll be building all of + # our required methods in Codegen. Generate members now. + self.maplikeOrSetlike.expand(self.members, self.isJSImplemented()) + # Now that we've merged in our partial interfaces, set the # _exposureGlobalNames on any members that don't have it set yet. Note # that any partial interfaces that had [Exposed] set have already set up @@ -721,7 +743,6 @@ class IDLInterface(IDLObjectWithScope, IDLExposureMixins): if self.parent: self.parent.finish(scope) - self.parent._hasChildInterfaces = True self.totalMembersInSlots = self.parent.totalMembersInSlots @@ -839,6 +860,17 @@ class IDLInterface(IDLObjectWithScope, IDLExposureMixins): "consequential interface %s is not exposed." % (self.identifier.name, iface.identifier.name), [self.location, iface.location]) + + # If we have a maplike or setlike, and the consequential interface + # also does, throw an error. + if iface.maplikeOrSetlike and self.maplikeOrSetlike: + raise WebIDLError("Maplike/setlike interface %s cannot have " + "maplike/setlike interface %s as a " + "consequential interface" % + (self.identifier.name, + iface.identifier.name), + [self.maplikeOrSetlike.location, + iface.maplikeOrSetlike.location]) additionalMembers = iface.originalMembers; for additionalMember in additionalMembers: for member in self.members: @@ -852,6 +884,15 @@ class IDLInterface(IDLObjectWithScope, IDLExposureMixins): for ancestor in self.getInheritedInterfaces(): ancestor.interfacesBasedOnSelf.add(self) + if (ancestor.maplikeOrSetlike is not None and + self.maplikeOrSetlike is not None): + raise WebIDLError("Cannot have maplike/setlike on %s that " + "inherits %s, which is already " + "maplike/setlike" % + (self.identifier.name, + ancestor.identifier.name), + [self.maplikeOrSetlike.location, + ancestor.maplikeOrSetlike.location]) for ancestorConsequential in ancestor.getConsequentialInterfaces(): ancestorConsequential.interfacesBasedOnSelf.add(self) @@ -888,12 +929,14 @@ class IDLInterface(IDLObjectWithScope, IDLExposureMixins): not hasattr(member, "originatingInterface")): member.originatingInterface = self - # Compute slot indices for our members before we pull in - # unforgeable members from our parent. + # Compute slot indices for our members before we pull in unforgeable + # members from our parent. Also, maplike/setlike declarations get a + # slot to hold their backing object. for member in self.members: - if (member.isAttr() and - (member.getExtendedAttribute("StoreInSlot") or - member.getExtendedAttribute("Cached"))): + if ((member.isAttr() and + (member.getExtendedAttribute("StoreInSlot") or + member.getExtendedAttribute("Cached"))) or + member.isMaplikeOrSetlike()): member.slotIndex = self.totalMembersInSlots self.totalMembersInSlots += 1 if member.getExtendedAttribute("StoreInSlot"): @@ -930,6 +973,18 @@ class IDLInterface(IDLObjectWithScope, IDLExposureMixins): # complicated and seems unnecessary. self.members.append(unforgeableMember) + # At this point, we have all of our members. If the current interface + # uses maplike/setlike, check for collisions anywhere in the current + # interface or higher in the inheritance chain. + if self.maplikeOrSetlike: + testInterface = self + isAncestor = False + while testInterface: + self.maplikeOrSetlike.checkCollisions(testInterface.members, + isAncestor) + isAncestor = True + testInterface = testInterface.parent + # Ensure that there's at most one of each {named,indexed} # {getter,setter,creator,deleter}, at most one stringifier, # and at most one legacycaller. Note that this last is not @@ -3242,7 +3297,8 @@ class IDLInterfaceMember(IDLObjectWithIdentifier, IDLExposureMixins): Tags = enum( 'Const', 'Attr', - 'Method' + 'Method', + 'MaplikeOrSetlike' ) Special = enum( @@ -3268,6 +3324,9 @@ class IDLInterfaceMember(IDLObjectWithIdentifier, IDLExposureMixins): def isConst(self): return self.tag == IDLInterfaceMember.Tags.Const + def isMaplikeOrSetlike(self): + return self.tag == IDLInterfaceMember.Tags.MaplikeOrSetlike + def addExtendedAttributes(self, attrs): for attr in attrs: self.handleExtendedAttribute(attr) @@ -3340,6 +3399,249 @@ class IDLInterfaceMember(IDLObjectWithIdentifier, IDLExposureMixins): [self.location]) self.aliases.append(alias) +# MaplikeOrSetlike adds a trait to an interface, like map or iteration +# functions. To handle them while still getting all of the generated binding +# code taken care of, we treat them as macros that are expanded into members +# based on parsed values. +class IDLMaplikeOrSetlike(IDLInterfaceMember): + + MaplikeOrSetlikeTypes = enum( + 'maplike', + 'setlike' + ) + + def __init__(self, location, identifier, maplikeOrSetlikeType, + readonly, keyType, valueType): + IDLInterfaceMember.__init__(self, location, identifier, + IDLInterfaceMember.Tags.MaplikeOrSetlike) + + assert isinstance(keyType, IDLType) + assert isinstance(valueType, IDLType) + self.maplikeOrSetlikeType = maplikeOrSetlikeType + self.readonly = readonly + self.keyType = keyType + self.valueType = valueType + self.slotIndex = None + self.disallowedMemberNames = [] + self.disallowedNonMethodNames = [] + + + def __str__(self): + return "declared '%s' with key '%s'" % (self.maplikeOrSetlikeType, self.keyType) + + def isMaplike(self): + return self.maplikeOrSetlikeType == "maplike" + + def isSetlike(self): + return self.maplikeOrSetlikeType == "setlike" + + def checkCollisions(self, members, isAncestor): + for member in members: + # Check that there are no disallowed members + if (member.identifier.name in self.disallowedMemberNames and + not ((member.isMethod() and member.isMaplikeOrSetlikeMethod()) or + (member.isAttr() and member.isMaplikeOrSetlikeAttr()))): + raise WebIDLError("Member '%s' conflicts " + "with reserved %s name." % + (member.identifier.name, + self.maplikeOrSetlikeType), + [self.location, member.location]) + # Check that there are no disallowed non-method members + if (isAncestor or (member.isAttr() or member.isConst()) and + member.identifier.name in self.disallowedNonMethodNames): + raise WebIDLError("Member '%s' conflicts " + "with reserved %s method." % + (member.identifier.name, + self.maplikeOrSetlikeType), + [self.location, member.location]) + + def expand(self, members, isJSImplemented): + """ + In order to take advantage of all of the method machinery in Codegen, + we generate our functions as if they were part of the interface + specification during parsing. + """ + def addMethod(name, allowExistingOperations, returnType, args=[], + chromeOnly=False, isPure=False, affectsNothing=False): + """ + Create an IDLMethod based on the parameters passed in. chromeOnly is only + True for read-only js implemented classes, to implement underscore + prefixed convenience functions would otherwise not be available, + unlike the case of C++ bindings. isPure is only True for + idempotent functions, so it is not valid for things like keys, + values, etc. that return a new object every time. + + """ + + # Only add name to lists for collision checks if it's not chrome + # only. + if chromeOnly: + name = "__" + name + else: + if not allowExistingOperations: + self.disallowedMemberNames.append(name) + else: + self.disallowedNonMethodNames.append(name) + + # If allowExistingOperations is True, and another operation exists + # with the same name as the one we're trying to add, don't add the + # maplike/setlike operation. However, if the operation is static, + # then fail by way of creating the function, which will cause a + # naming conflict, per the spec. + if allowExistingOperations: + for m in members: + if m.identifier.name == name and m.isMethod() and not m.isStatic(): + return + + method = IDLMethod(self.location, + IDLUnresolvedIdentifier(self.location, name, allowDoubleUnderscore=chromeOnly), + returnType, args, maplikeOrSetlike=self) + + # We need to be able to throw from declaration methods + method.addExtendedAttributes( + [IDLExtendedAttribute(self.location, ("Throws",))]) + if chromeOnly: + method.addExtendedAttributes( + [IDLExtendedAttribute(self.location, ("ChromeOnly",))]) + if isPure: + method.addExtendedAttributes( + [IDLExtendedAttribute(self.location, ("Pure",))]) + # Following attributes are used for keys/values/entries. Can't mark + # them pure, since they return a new object each time they are run. + if affectsNothing: + method.addExtendedAttributes( + [IDLExtendedAttribute(self.location, ("DependsOn", "Everything")), + IDLExtendedAttribute(self.location, ("Affects", "Nothing"))]) + members.append(method) + + # Both maplike and setlike have a size attribute + members.append(IDLAttribute(self.location, + IDLUnresolvedIdentifier(BuiltinLocation(""), "size"), + BuiltinTypes[IDLBuiltinType.Types.unsigned_long], + True, + maplikeOrSetlike=self)) + self.reserved_ro_names = ["size"] + + # object entries() + addMethod("entries", False, BuiltinTypes[IDLBuiltinType.Types.object], + affectsNothing=True) + # object keys() + addMethod("keys", False, BuiltinTypes[IDLBuiltinType.Types.object], + affectsNothing=True) + # object values() + addMethod("values", False, BuiltinTypes[IDLBuiltinType.Types.object], + affectsNothing=True) + + # void forEach(callback(valueType, keyType), thisVal) + foreachArguments = [IDLArgument(self.location, + IDLUnresolvedIdentifier(BuiltinLocation(""), + "callback"), + BuiltinTypes[IDLBuiltinType.Types.object]), + IDLArgument(self.location, + IDLUnresolvedIdentifier(BuiltinLocation(""), + "thisArg"), + BuiltinTypes[IDLBuiltinType.Types.any], + optional=True)] + addMethod("forEach", False, BuiltinTypes[IDLBuiltinType.Types.void], + foreachArguments) + + def getKeyArg(): + return IDLArgument(self.location, + IDLUnresolvedIdentifier(self.location, "key"), + self.keyType) + + # boolean has(keyType key) + addMethod("has", False, BuiltinTypes[IDLBuiltinType.Types.boolean], + [getKeyArg()], isPure=True) + + if not self.readonly: + # void clear() + addMethod("clear", True, BuiltinTypes[IDLBuiltinType.Types.void], + []) + # boolean delete(keyType key) + addMethod("delete", True, + BuiltinTypes[IDLBuiltinType.Types.boolean], [getKeyArg()]) + + # Always generate underscored functions (e.g. __add, __clear) for js + # implemented interfaces as convenience functions. + if isJSImplemented: + # void clear() + addMethod("clear", True, BuiltinTypes[IDLBuiltinType.Types.void], + [], chromeOnly=True) + # boolean delete(keyType key) + addMethod("delete", True, + BuiltinTypes[IDLBuiltinType.Types.boolean], [getKeyArg()], + chromeOnly=True) + + if self.isSetlike(): + if not self.readonly: + # Add returns the set object it just added to. + # object add(keyType key) + + addMethod("add", True, + BuiltinTypes[IDLBuiltinType.Types.object], [getKeyArg()]) + if isJSImplemented: + addMethod("add", True, + BuiltinTypes[IDLBuiltinType.Types.object], [getKeyArg()], + chromeOnly=True) + return + + # If we get this far, we're a maplike declaration. + + # valueType get(keyType key) + # + # Note that instead of the value type, we're using any here. The + # validity checks should happen as things are inserted into the map, + # and using any as the return type makes code generation much simpler. + # + # TODO: Bug 1155340 may change this to use specific type to provide + # more info to JIT. + addMethod("get", False, BuiltinTypes[IDLBuiltinType.Types.any], + [getKeyArg()], isPure=True) + + def getValueArg(): + return IDLArgument(self.location, + IDLUnresolvedIdentifier(self.location, "value"), + self.valueType) + + + if not self.readonly: + addMethod("set", True, BuiltinTypes[IDLBuiltinType.Types.object], + [getKeyArg(), getValueArg()]) + if isJSImplemented: + addMethod("set", True, BuiltinTypes[IDLBuiltinType.Types.object], + [getKeyArg(), getValueArg()], chromeOnly=True) + + def resolve(self, parentScope): + self.keyType.resolveType(parentScope) + self.valueType.resolveType(parentScope) + + def finish(self, scope): + IDLInterfaceMember.finish(self, scope) + if not self.keyType.isComplete(): + t = self.keyType.complete(scope) + + assert not isinstance(t, IDLUnresolvedType) + assert not isinstance(t, IDLTypedefType) + assert not isinstance(t.name, IDLUnresolvedIdentifier) + self.keyType = t + if not self.valueType.isComplete(): + t = self.valueType.complete(scope) + + assert not isinstance(t, IDLUnresolvedType) + assert not isinstance(t, IDLTypedefType) + assert not isinstance(t.name, IDLUnresolvedIdentifier) + self.valueType = t + + def validate(self): + IDLInterfaceMember.validate(self) + + def handleExtendedAttribute(self, attr): + IDLInterfaceMember.handleExtendedAttribute(self, attr) + + def _getDependentObjects(self): + return set([self.keyType, self.valueType]) + class IDLConst(IDLInterfaceMember): def __init__(self, location, identifier, type, value): IDLInterfaceMember.__init__(self, location, identifier, @@ -3403,7 +3705,7 @@ class IDLConst(IDLInterfaceMember): class IDLAttribute(IDLInterfaceMember): def __init__(self, location, identifier, type, readonly, inherit=False, - static=False, stringifier=False): + static=False, stringifier=False, maplikeOrSetlike=None): IDLInterfaceMember.__init__(self, location, identifier, IDLInterfaceMember.Tags.Attr) @@ -3418,6 +3720,8 @@ class IDLAttribute(IDLInterfaceMember): self.enforceRange = False self.clamp = False self.slotIndex = None + assert maplikeOrSetlike is None or isinstance(maplikeOrSetlike, IDLMaplikeOrSetlike) + self.maplikeOrSetlike = maplikeOrSetlike self.dependsOn = "Everything" self.affects = "Everything" @@ -3676,6 +3980,14 @@ class IDLAttribute(IDLInterfaceMember): def hasLenientThis(self): return self.lenientThis + def isMaplikeOrSetlikeAttr(self): + """ + True if this attribute was generated from an interface with + maplike/setlike (e.g. this is the size attribute for + maplike/setlike) + """ + return self.maplikeOrSetlike is not None + def isUnforgeable(self): return self._unforgeable @@ -3914,7 +4226,8 @@ class IDLMethod(IDLInterfaceMember, IDLScope): def __init__(self, location, identifier, returnType, arguments, static=False, getter=False, setter=False, creator=False, deleter=False, specialType=NamedOrIndexed.Neither, - legacycaller=False, stringifier=False, jsonifier=False): + legacycaller=False, stringifier=False, jsonifier=False, + maplikeOrSetlike=None): # REVIEW: specialType is NamedOrIndexed -- wow, this is messed up. IDLInterfaceMember.__init__(self, location, identifier, IDLInterfaceMember.Tags.Method) @@ -3942,6 +4255,8 @@ class IDLMethod(IDLInterfaceMember, IDLScope): self._stringifier = stringifier assert isinstance(jsonifier, bool) self._jsonifier = jsonifier + assert maplikeOrSetlike is None or isinstance(maplikeOrSetlike, IDLMaplikeOrSetlike) + self.maplikeOrSetlike = maplikeOrSetlike self._specialType = specialType self._unforgeable = False self.dependsOn = "Everything" @@ -4023,6 +4338,13 @@ class IDLMethod(IDLInterfaceMember, IDLScope): def isJsonifier(self): return self._jsonifier + def isMaplikeOrSetlikeMethod(self): + """ + True if this method was generated as part of a + maplike/setlike/etc interface (e.g. has/get methods) + """ + return self.maplikeOrSetlike is not None + def hasOverloads(self): return self._hasOverloads @@ -4517,7 +4839,9 @@ class Tokenizer(object): ">": "GT", "ArrayBuffer": "ARRAYBUFFER", "SharedArrayBuffer": "SHAREDARRAYBUFFER", - "or": "OR" + "or": "OR", + "maplike": "MAPLIKE", + "setlike": "SETLIKE" } tokens.extend(keywords.values()) @@ -4753,7 +5077,7 @@ class Parser(Tokenizer): def p_InterfaceMember(self, p): """ InterfaceMember : Const - | AttributeOrOperation + | AttributeOrOperationOrMaplikeOrSetlike """ p[0] = p[1] @@ -4968,13 +5292,43 @@ class Parser(Tokenizer): """ p[0] = False - def p_AttributeOrOperation(self, p): + def p_AttributeOrOperationOrMaplikeOrSetlike(self, p): """ - AttributeOrOperation : Attribute - | Operation + AttributeOrOperationOrMaplikeOrSetlike : Attribute + | Maplike + | Setlike + | Operation """ p[0] = p[1] + def p_Setlike(self, p): + """ + Setlike : ReadOnly SETLIKE LT Type GT SEMICOLON + """ + readonly = p[1] + maplikeOrSetlikeType = p[2] + location = self.getLocation(p, 2) + identifier = IDLUnresolvedIdentifier(location, "__setlike", + allowDoubleUnderscore=True) + keyType = p[4] + valueType = keyType + p[0] = IDLMaplikeOrSetlike(location, identifier, maplikeOrSetlikeType, + readonly, keyType, valueType) + + def p_Maplike(self, p): + """ + Maplike : ReadOnly MAPLIKE LT Type COMMA Type GT SEMICOLON + """ + readonly = p[1] + maplikeOrSetlikeType = p[2] + location = self.getLocation(p, 2) + identifier = IDLUnresolvedIdentifier(location, "__maplike", + allowDoubleUnderscore=True) + keyType = p[4] + valueType = p[6] + p[0] = IDLMaplikeOrSetlike(location, identifier, maplikeOrSetlikeType, + readonly, keyType, valueType) + def p_AttributeWithQualifier(self, p): """ Attribute : Qualifier AttributeRest @@ -4982,15 +5336,22 @@ class Parser(Tokenizer): static = IDLInterfaceMember.Special.Static in p[1] stringifier = IDLInterfaceMember.Special.Stringifier in p[1] (location, identifier, type, readonly) = p[2] - p[0] = IDLAttribute(location, identifier, type, readonly, static=static, - stringifier=stringifier) + p[0] = IDLAttribute(location, identifier, type, readonly, + static=static, stringifier=stringifier) + + def p_AttributeInherited(self, p): + """ + Attribute : INHERIT AttributeRest + """ + (location, identifier, type, readonly) = p[2] + p[0] = IDLAttribute(location, identifier, type, readonly, inherit=True) def p_Attribute(self, p): """ - Attribute : Inherit AttributeRest + Attribute : AttributeRest """ - (location, identifier, type, readonly) = p[2] - p[0] = IDLAttribute(location, identifier, type, readonly, inherit=p[1]) + (location, identifier, type, readonly) = p[1] + p[0] = IDLAttribute(location, identifier, type, readonly, inherit=False) def p_AttributeRest(self, p): """ @@ -5014,18 +5375,6 @@ class Parser(Tokenizer): """ p[0] = False - def p_Inherit(self, p): - """ - Inherit : INHERIT - """ - p[0] = True - - def p_InheritEmpty(self, p): - """ - Inherit : - """ - p[0] = False - def p_Operation(self, p): """ Operation : Qualifiers OperationRest @@ -5322,9 +5671,11 @@ class Parser(Tokenizer): | INHERIT | INTERFACE | LEGACYCALLER + | MAPLIKE | PARTIAL | REQUIRED | SERIALIZER + | SETLIKE | SETTER | STATIC | STRINGIFIER diff --git a/dom/bindings/parser/tests/test_interface_maplikesetlike.py b/dom/bindings/parser/tests/test_interface_maplikesetlike.py new file mode 100644 index 000000000000..fa1e9e565fb6 --- /dev/null +++ b/dom/bindings/parser/tests/test_interface_maplikesetlike.py @@ -0,0 +1,528 @@ +import WebIDL +import traceback +def WebIDLTest(parser, harness): + + def shouldPass(prefix, iface, expectedMembers, numProductions=1): + p = parser.reset() + p.parse(iface) + results = p.finish() + harness.check(len(results), numProductions, + "%s - Should have production count %d" % (prefix, numProductions)) + harness.ok(isinstance(results[0], WebIDL.IDLInterface), + "%s - Should be an IDLInterface" % (prefix)) + harness.check(len(results[0].members), len(expectedMembers), + "%s - Should be %d members" % (prefix, + len(expectedMembers))) + for m in results[0].members: + name = m.identifier.name + if (name, type(m)) in expectedMembers: + harness.ok(True, "%s - %s - Should be a %s" % (prefix, name, + type(m))) + elif isinstance(m, WebIDL.IDLMaplikeOrSetlike): + harness.ok(True, "%s - %s - Should be a MaplikeOrSetlike" % + (prefix, name)) + else: + harness.ok(False, "%s - %s - Unknown symbol of type %s" % + (prefix, name, type(m))) + return results + + def shouldFail(prefix, iface): + try: + p = parser.reset() + p.parse(iface) + p.finish() + harness.ok(False, + prefix + " - Interface passed when should've failed") + except WebIDL.WebIDLError, e: + harness.ok(True, + prefix + " - Interface failed as expected") + except Exception, e: + harness.ok(False, + prefix + " - Interface failed but not as a WebIDLError exception") + + iterableMembers = [(x, WebIDL.IDLMethod) for x in ["entries", "keys", + "values", "forEach"]] + iterableMembers.extend([("size", WebIDL.IDLAttribute)]) + setROMembers = ([(x, WebIDL.IDLMethod) for x in ["has"]] + + [("__setlike", WebIDL.IDLMaplikeOrSetlike)] + + iterableMembers) + setRWMembers = ([(x, WebIDL.IDLMethod) for x in ["add", + "clear", + "delete"]] + + setROMembers) + setROChromeMembers = ([(x, WebIDL.IDLMethod) for x in ["__add", + "__clear", + "__delete"]] + + setROMembers) + setRWChromeMembers = ([(x, WebIDL.IDLMethod) for x in ["__add", + "__clear", + "__delete"]] + + setRWMembers) + mapROMembers = ([(x, WebIDL.IDLMethod) for x in ["get", "has"]] + + [("__maplike", WebIDL.IDLMaplikeOrSetlike)] + + iterableMembers) + mapRWMembers = ([(x, WebIDL.IDLMethod) for x in ["set", + "clear", + "delete"]] + mapROMembers) + mapRWChromeMembers = ([(x, WebIDL.IDLMethod) for x in ["__set", + "__clear", + "__delete"]] + + mapRWMembers) + + disallowedMemberNames = ["keys", "entries", "values", "forEach", "has", + "size"] + mapDisallowedMemberNames = ["get"] + disallowedMemberNames + disallowedNonMethodNames = ["clear", "delete"] + mapDisallowedNonMethodNames = ["set"] + disallowedNonMethodNames + setDisallowedNonMethodNames = ["add"] + disallowedNonMethodNames + + # + # Simple Usage Tests + # + + shouldPass("Maplike (readwrite)", + """ + interface Foo1 { + maplike; + }; + """, mapRWMembers) + + shouldPass("Maplike (readonly)", + """ + interface Foo1 { + readonly maplike; + }; + """, mapROMembers) + + shouldPass("Setlike (readwrite)", + """ + interface Foo1 { + setlike; + }; + """, setRWMembers) + + shouldPass("Setlike (readonly)", + """ + interface Foo1 { + readonly setlike; + }; + """, setROMembers) + + shouldPass("Inheritance of maplike/setlike", + """ + interface Foo1 { + maplike; + }; + interface Foo2 : Foo1 { + }; + """, mapRWMembers, numProductions=2) + + shouldPass("Implements with maplike/setlike", + """ + interface Foo1 { + maplike; + }; + interface Foo2 { + }; + Foo2 implements Foo1; + """, mapRWMembers, numProductions=3) + + shouldPass("JS Implemented maplike interface", + """ + [JSImplementation="@mozilla.org/dom/test-interface-js-maplike;1", + Constructor()] + interface Foo1 { + setlike; + }; + """, setRWChromeMembers) + + shouldPass("JS Implemented maplike interface", + """ + [JSImplementation="@mozilla.org/dom/test-interface-js-maplike;1", + Constructor()] + interface Foo1 { + maplike; + }; + """, mapRWChromeMembers) + + # + # Multiple maplike/setlike tests + # + + shouldFail("Two maplike/setlikes on same interface", + """ + interface Foo1 { + setlike; + maplike; + }; + """) + + shouldFail("Two maplike/setlikes in partials", + """ + interface Foo1 { + maplike; + }; + partial interface Foo1 { + setlike; + }; + """) + + shouldFail("Conflicting maplike/setlikes across inheritance", + """ + interface Foo1 { + maplike; + }; + interface Foo2 : Foo1 { + setlike; + }; + """) + + shouldFail("Conflicting maplike/setlikes across multistep inheritance", + """ + interface Foo1 { + maplike; + }; + interface Foo2 : Foo1 { + }; + interface Foo3 : Foo2 { + setlike; + }; + """) + + shouldFail("Consequential interface with conflicting maplike/setlike", + """ + interface Foo1 { + maplike; + }; + interface Foo2 { + setlike; + }; + Foo2 implements Foo1; + """) + + shouldFail("Consequential interfaces with conflicting maplike/setlike", + """ + interface Foo1 { + maplike; + }; + interface Foo2 { + setlike; + }; + interface Foo3 { + }; + Foo3 implements Foo1; + Foo3 implements Foo2; + """) + + # + # Member name collision tests + # + + def testConflictingMembers(likeMember, conflictName, expectedMembers, methodPasses): + """ + Tests for maplike/setlike member generation against conflicting member + names. If methodPasses is True, this means we expect the interface to + pass in the case of method shadowing, and expectedMembers should be the + list of interface members to check against on the passing interface. + + """ + if methodPasses: + shouldPass("Conflicting method: %s and %s" % (likeMember, conflictName), + """ + interface Foo1 { + %s; + [Throws] + void %s(long test1, double test2, double test3); + }; + """ % (likeMember, conflictName), expectedMembers) + else: + shouldFail("Conflicting method: %s and %s" % (likeMember, conflictName), + """ + interface Foo1 { + %s; + [Throws] + void %s(long test1, double test2, double test3); + }; + """ % (likeMember, conflictName)) + # Inherited conflicting methods should ALWAYS fail + shouldFail("Conflicting inherited method: %s and %s" % (likeMember, conflictName), + """ + interface Foo1 { + void %s(long test1, double test2, double test3); + }; + interface Foo2 : Foo1 { + %s; + }; + """ % (conflictName, likeMember)) + shouldFail("Conflicting static method: %s and %s" % (likeMember, conflictName), + """ + interface Foo1 { + %s; + static void %s(long test1, double test2, double test3); + }; + """ % (likeMember, conflictName)) + shouldFail("Conflicting attribute: %s and %s" % (likeMember, conflictName), + """ + interface Foo1 { + %s + attribute double %s; + }; + """ % (likeMember, conflictName)) + shouldFail("Conflicting const: %s and %s" % (likeMember, conflictName), + """ + interface Foo1 { + %s; + const double %s = 0; + }; + """ % (likeMember, conflictName)) + shouldFail("Conflicting static attribute: %s and %s" % (likeMember, conflictName), + """ + interface Foo1 { + %s; + static attribute long %s; + }; + """ % (likeMember, conflictName)) + + for member in mapDisallowedMemberNames: + testConflictingMembers("maplike", member, mapRWMembers, False) + for member in disallowedMemberNames: + testConflictingMembers("setlike", member, setRWMembers, False) + for member in mapDisallowedNonMethodNames: + testConflictingMembers("maplike", member, mapRWMembers, True) + for member in setDisallowedNonMethodNames: + testConflictingMembers("setlike", member, setRWMembers, True) + + shouldPass("Inheritance of maplike/setlike with child member collision", + """ + interface Foo1 { + maplike; + }; + interface Foo2 : Foo1 { + void entries(); + }; + """, mapRWMembers, numProductions=2) + + shouldPass("Inheritance of multi-level maplike/setlike with child member collision", + """ + interface Foo1 { + maplike; + }; + interface Foo2 : Foo1 { + }; + interface Foo3 : Foo2 { + void entries(); + }; + """, mapRWMembers, numProductions=3) + + shouldFail("Interface with consequential maplike/setlike interface member collision", + """ + interface Foo1 { + void entries(); + }; + interface Foo2 { + maplike; + }; + Foo1 implements Foo2; + """) + + shouldFail("Maplike interface with consequential interface member collision", + """ + interface Foo1 { + maplike; + }; + interface Foo2 { + void entries(); + }; + Foo1 implements Foo2; + """) + + shouldPass("Consequential Maplike interface with inherited interface member collision", + """ + interface Foo1 { + maplike; + }; + interface Foo2 { + void entries(); + }; + interface Foo3 : Foo2 { + }; + Foo3 implements Foo1; + """, mapRWMembers, numProductions=4) + + shouldPass("Inherited Maplike interface with consequential interface member collision", + """ + interface Foo1 { + maplike; + }; + interface Foo2 { + void entries(); + }; + interface Foo3 : Foo1 { + }; + Foo3 implements Foo2; + """, mapRWMembers, numProductions=4) + + shouldFail("Inheritance of name collision with child maplike/setlike", + """ + interface Foo1 { + void entries(); + }; + interface Foo2 : Foo1 { + maplike; + }; + """) + + shouldFail("Inheritance of multi-level name collision with child maplike/setlike", + """ + interface Foo1 { + void entries(); + }; + interface Foo2 : Foo1 { + }; + interface Foo3 : Foo2 { + maplike; + }; + """) + + shouldPass("Inheritance of attribute collision with parent maplike/setlike", + """ + interface Foo1 { + maplike; + }; + interface Foo2 : Foo1 { + attribute double size; + }; + """, mapRWMembers, numProductions=2) + + shouldPass("Inheritance of multi-level attribute collision with parent maplike/setlike", + """ + interface Foo1 { + maplike; + }; + interface Foo2 : Foo1 { + }; + interface Foo3 : Foo2 { + attribute double size; + }; + """, mapRWMembers, numProductions=3) + + shouldFail("Inheritance of attribute collision with child maplike/setlike", + """ + interface Foo1 { + attribute double size; + }; + interface Foo2 : Foo1 { + maplike; + }; + """) + + shouldFail("Inheritance of multi-level attribute collision with child maplike/setlike", + """ + interface Foo1 { + attribute double size; + }; + interface Foo2 : Foo1 { + }; + interface Foo3 : Foo2 { + maplike; + }; + """) + + shouldFail("Inheritance of attribute/rw function collision with child maplike/setlike", + """ + interface Foo1 { + attribute double set; + }; + interface Foo2 : Foo1 { + maplike; + }; + """) + + shouldFail("Inheritance of const/rw function collision with child maplike/setlike", + """ + interface Foo1 { + const double set = 0; + }; + interface Foo2 : Foo1 { + maplike; + }; + """) + + shouldPass("Inheritance of rw function with same name in child maplike/setlike", + """ + interface Foo1 { + maplike; + }; + interface Foo2 : Foo1 { + void clear(); + }; + """, mapRWMembers, numProductions=2) + + shouldFail("Inheritance of unforgeable attribute collision with child maplike/setlike", + """ + interface Foo1 { + [Unforgeable] + attribute double size; + }; + interface Foo2 : Foo1 { + maplike; + }; + """) + + shouldFail("Inheritance of multi-level unforgeable attribute collision with child maplike/setlike", + """ + interface Foo1 { + [Unforgeable] + attribute double size; + }; + interface Foo2 : Foo1 { + }; + interface Foo3 : Foo2 { + maplike; + }; + """) + + shouldPass("Implemented interface with readonly allowable overrides", + """ + interface Foo1 { + readonly setlike; + readonly attribute boolean clear; + }; + """, setROMembers + [("clear", WebIDL.IDLAttribute)]) + + shouldPass("JS Implemented read-only interface with readonly allowable overrides", + """ + [JSImplementation="@mozilla.org/dom/test-interface-js-maplike;1", + Constructor()] + interface Foo1 { + readonly setlike; + readonly attribute boolean clear; + }; + """, setROChromeMembers + [("clear", WebIDL.IDLAttribute)]) + + shouldFail("JS Implemented read-write interface with non-readwrite allowable overrides", + """ + [JSImplementation="@mozilla.org/dom/test-interface-js-maplike;1", + Constructor()] + interface Foo1 { + setlike; + readonly attribute boolean clear; + }; + """) + + r = shouldPass("Check proper override of clear/delete/set", + """ + interface Foo1 { + maplike; + long clear(long a, long b, double c, double d); + long set(long a, long b, double c, double d); + long delete(long a, long b, double c, double d); + }; + """, mapRWMembers) + + for m in r[0].members: + if m.identifier.name in ["clear", "set", "delete"]: + harness.ok(m.isMethod(), "%s should be a method" % m.identifier.name) + harness.check(m.maxArgCount, 4, "%s should have 4 arguments" % m.identifier.name) + harness.ok(not m.isMaplikeOrSetlikeMethod(), + "%s should not be a maplike/setlike function" % m.identifier.name) From c0355434582acd6a63912b2f252b58e3d0d3d16e Mon Sep 17 00:00:00 2001 From: Kyle Machulis Date: Tue, 5 May 2015 23:42:27 -0700 Subject: [PATCH 37/63] Bug 1123516 - Implement maplike/setlike in WebIDL Codegen; r=bz --- b2g/installer/package-manifest.in | 1 + browser/installer/package-manifest.in | 1 + dom/bindings/BindingUtils.cpp | 84 +++ dom/bindings/BindingUtils.h | 23 + dom/bindings/Codegen.py | 640 +++++++++++++++++- dom/bindings/ToJSValue.h | 9 + dom/bindings/moz.build | 19 + dom/bindings/parser/WebIDL.py | 17 +- dom/bindings/test/TestInterfaceJS.manifest | 2 + dom/bindings/test/TestInterfaceJSMaplike.js | 38 ++ dom/bindings/test/TestInterfaceMaplike.cpp | 84 +++ dom/bindings/test/TestInterfaceMaplike.h | 52 ++ .../test/TestInterfaceMaplikeObject.cpp | 88 +++ .../test/TestInterfaceMaplikeObject.h | 52 ++ dom/bindings/test/TestInterfaceSetlike.cpp | 58 ++ dom/bindings/test/TestInterfaceSetlike.h | 46 ++ .../test/TestInterfaceSetlikeNode.cpp | 58 ++ dom/bindings/test/TestInterfaceSetlikeNode.h | 46 ++ dom/bindings/test/chrome.ini | 2 + dom/bindings/test/mochitest.ini | 2 + dom/bindings/test/moz.build | 1 + .../test/test_bug1123516_maplikesetlike.html | 270 ++++++++ .../test_bug1123516_maplikesetlikechrome.xul | 68 ++ .../chrome/test_sandbox_bindings.xul | 3 + .../TestInterfaceJSMaplikeSetlike.webidl | 47 ++ dom/webidl/moz.build | 4 +- mobile/android/installer/package-manifest.in | 1 + 27 files changed, 1690 insertions(+), 26 deletions(-) create mode 100644 dom/bindings/test/TestInterfaceJSMaplike.js create mode 100644 dom/bindings/test/TestInterfaceMaplike.cpp create mode 100644 dom/bindings/test/TestInterfaceMaplike.h create mode 100644 dom/bindings/test/TestInterfaceMaplikeObject.cpp create mode 100644 dom/bindings/test/TestInterfaceMaplikeObject.h create mode 100644 dom/bindings/test/TestInterfaceSetlike.cpp create mode 100644 dom/bindings/test/TestInterfaceSetlike.h create mode 100644 dom/bindings/test/TestInterfaceSetlikeNode.cpp create mode 100644 dom/bindings/test/TestInterfaceSetlikeNode.h create mode 100644 dom/bindings/test/test_bug1123516_maplikesetlike.html create mode 100644 dom/bindings/test/test_bug1123516_maplikesetlikechrome.xul create mode 100644 dom/webidl/TestInterfaceJSMaplikeSetlike.webidl diff --git a/b2g/installer/package-manifest.in b/b2g/installer/package-manifest.in index 8447fdb36eee..ae9775314767 100644 --- a/b2g/installer/package-manifest.in +++ b/b2g/installer/package-manifest.in @@ -696,6 +696,7 @@ #ifdef MOZ_DEBUG @RESPATH@/components/TestInterfaceJS.js @RESPATH@/components/TestInterfaceJS.manifest +@RESPATH@/components/TestInterfaceJSMaplike.js #endif @RESPATH@/components/PACGenerator.js diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in index b13939fbaee6..30821b133309 100644 --- a/browser/installer/package-manifest.in +++ b/browser/installer/package-manifest.in @@ -623,6 +623,7 @@ #ifdef MOZ_DEBUG @RESPATH@/components/TestInterfaceJS.js @RESPATH@/components/TestInterfaceJS.manifest +@RESPATH@/components/TestInterfaceJSMaplike.js #endif @RESPATH@/components/PACGenerator.js diff --git a/dom/bindings/BindingUtils.cpp b/dom/bindings/BindingUtils.cpp index d3297fa89759..aad5d2038cff 100644 --- a/dom/bindings/BindingUtils.cpp +++ b/dom/bindings/BindingUtils.cpp @@ -2816,5 +2816,89 @@ SystemGlobalEnumerate(JSContext* cx, JS::Handle obj) ResolveSystemBinding(cx, obj, JSID_VOIDHANDLE, &ignored); } +template +bool +GetMaplikeSetlikeBackingObject(JSContext* aCx, JS::Handle aObj, + size_t aSlotIndex, + JS::MutableHandle aBackingObj, + bool* aBackingObjCreated) +{ + JS::Rooted reflector(aCx); + reflector = IsDOMObject(aObj) ? aObj : js::UncheckedUnwrap(aObj, + /* stopAtOuter = */ false); + + // Retrieve the backing object from the reserved slot on the maplike/setlike + // object. If it doesn't exist yet, create it. + JS::Rooted slotValue(aCx); + slotValue = js::GetReservedSlot(reflector, aSlotIndex); + if (slotValue.isUndefined()) { + // Since backing object access can happen in non-originating compartments, + // make sure to create the backing object in reflector compartment. + { + JSAutoCompartment ac(aCx, reflector); + JS::Rooted newBackingObj(aCx); + newBackingObj.set(Method(aCx)); + if (NS_WARN_IF(!newBackingObj)) { + return false; + } + js::SetReservedSlot(reflector, aSlotIndex, JS::ObjectValue(*newBackingObj)); + } + slotValue = js::GetReservedSlot(reflector, aSlotIndex); + *aBackingObjCreated = true; + } else { + *aBackingObjCreated = false; + } + if (!MaybeWrapNonDOMObjectValue(aCx, &slotValue)) { + return false; + } + aBackingObj.set(&slotValue.toObject()); + return true; +} + +bool +GetMaplikeBackingObject(JSContext* aCx, JS::Handle aObj, + size_t aSlotIndex, + JS::MutableHandle aBackingObj, + bool* aBackingObjCreated) +{ + return GetMaplikeSetlikeBackingObject(aCx, aObj, aSlotIndex, + aBackingObj, + aBackingObjCreated); +} + +bool +GetSetlikeBackingObject(JSContext* aCx, JS::Handle aObj, + size_t aSlotIndex, + JS::MutableHandle aBackingObj, + bool* aBackingObjCreated) +{ + return GetMaplikeSetlikeBackingObject(aCx, aObj, aSlotIndex, + aBackingObj, + aBackingObjCreated); +} + +bool +ForEachHandler(JSContext* aCx, unsigned aArgc, JS::Value* aVp) +{ + JS::CallArgs args = CallArgsFromVp(aArgc, aVp); + // Unpack callback and object from slots + JS::Rooted + callbackFn(aCx, js::GetFunctionNativeReserved(&args.callee(), + FOREACH_CALLBACK_SLOT)); + JS::Rooted + maplikeOrSetlikeObj(aCx, + js::GetFunctionNativeReserved(&args.callee(), + FOREACH_MAPLIKEORSETLIKEOBJ_SLOT)); + MOZ_ASSERT(aArgc == 3); + JS::AutoValueVector newArgs(aCx); + // Arguments are passed in as value, key, object. Keep value and key, replace + // object with the maplike/setlike object. + newArgs.append(args.get(0)); + newArgs.append(args.get(1)); + newArgs.append(maplikeOrSetlikeObj); + JS::Rooted rval(aCx, JS::UndefinedValue()); + // Now actually call the user specified callback + return JS::Call(aCx, args.thisv(), callbackFn, newArgs, &rval); +} } // namespace dom } // namespace mozilla diff --git a/dom/bindings/BindingUtils.h b/dom/bindings/BindingUtils.h index 00af88abfeda..b66477717b17 100644 --- a/dom/bindings/BindingUtils.h +++ b/dom/bindings/BindingUtils.h @@ -3248,6 +3248,29 @@ bool SystemGlobalResolve(JSContext* cx, JS::Handle obj, // thrown. bool SystemGlobalEnumerate(JSContext* cx, JS::Handle obj); +// Slot indexes for maplike/setlike forEach functions +#define FOREACH_CALLBACK_SLOT 0 +#define FOREACH_MAPLIKEORSETLIKEOBJ_SLOT 1 + +// Backing function for running .forEach() on maplike/setlike interfaces. +// Unpacks callback and maplike/setlike object from reserved slots, then runs +// callback for each key (and value, for maplikes) +bool ForEachHandler(JSContext* aCx, unsigned aArgc, JS::Value* aVp); + +// Unpacks backing object (ES6 map/set) from the reserved slot of a reflector +// for a maplike/setlike interface. If backing object does not exist, creates +// backing object in the compartment of the reflector involved, making this safe +// to use across compartments/via xrays. Return values of these methods will +// always be in the context compartment. +bool GetMaplikeBackingObject(JSContext* aCx, JS::Handle aObj, + size_t aSlotIndex, + JS::MutableHandle aBackingObj, + bool* aBackingObjCreated); +bool GetSetlikeBackingObject(JSContext* aCx, JS::Handle aObj, + size_t aSlotIndex, + JS::MutableHandle aBackingObj, + bool* aBackingObjCreated); + } // namespace dom } // namespace mozilla diff --git a/dom/bindings/Codegen.py b/dom/bindings/Codegen.py index 4e8e09774443..4253a759c47b 100644 --- a/dom/bindings/Codegen.py +++ b/dom/bindings/Codegen.py @@ -1143,6 +1143,18 @@ class CGHeaders(CGWrapper): if funcList is not None: addHeaderForFunc(funcList[0]) + for desc in descriptors: + if desc.interface.maplikeOrSetlike: + # We need ToJSValue.h for maplike/setlike type conversions + bindingHeaders.add("mozilla/dom/ToJSValue.h") + # Add headers for the key and value types of the maplike, since + # they'll be needed for convenience functions + addHeadersForType((desc.interface.maplikeOrSetlike.keyType, + desc, None)) + if desc.interface.maplikeOrSetlike.valueType: + addHeadersForType((desc.interface.maplikeOrSetlike.valueType, + desc, None)) + for d in dictionaries: if d.parent: declareIncludes.add(self.getDeclarationFilename(d.parent)) @@ -2164,7 +2176,9 @@ class MethodDefiner(PropertyDefiner): "name": m.identifier.name, "methodInfo": not m.isStatic(), "length": methodLength(m), - "flags": "JSPROP_ENUMERATE", + # Methods generated for a maplike/setlike declaration are not + # enumerable. + "flags": "JSPROP_ENUMERATE" if not m.isMaplikeOrSetlikeMethod() else "0", "condition": PropertyDefiner.getControllingCondition(m, descriptor), "allowCrossOriginThis": m.getExtendedAttribute("CrossOriginCallable"), "returnsPromise": m.returnsPromise(), @@ -2175,9 +2189,21 @@ class MethodDefiner(PropertyDefiner): else: self.regular.append(method) - # FIXME Check for an existing iterator on the interface first. - if (any(m.isGetter() and m.isIndexed() for m in methods) and - not any("@@iterator" in m.aliases for m in methods)): + # TODO: Once iterable is implemented, use tiebreak rules instead of + # failing. Also, may be more tiebreak rules to implement once spec bug + # is resolved. + # https://www.w3.org/Bugs/Public/show_bug.cgi?id=28592 + def hasIterator(methods, regular): + return (any("@@iterator" in m.aliases for m in methods) or + any("@@iterator" == r["name"] for r in regular)) + + if (any(m.isGetter() and m.isIndexed() for m in methods)): + if hasIterator(methods, self.regular): + raise TypeError("Cannot have indexed getter/attr on " + "interface %s with other members " + "that generate @@iterator, such as " + "maplike/setlike or aliased functions." % + self.descriptor.interface.identifier.name) self.regular.append({ "name": "@@iterator", "methodInfo": False, @@ -2187,6 +2213,31 @@ class MethodDefiner(PropertyDefiner): "condition": MemberCondition(None, None) }) + # Generate the maplike/setlike iterator, if one wasn't already + # generated by a method. If we already have an @@iterator symbol, fail. + if descriptor.interface.maplikeOrSetlike: + if hasIterator(methods, self.regular): + raise TypeError("Cannot have maplike/setlike interface with " + "other members that generate @@iterator " + "on interface %s, such as indexed getters " + "or aliased functions." % + self.descriptor.interface.identifier.name) + for m in methods: + if (m.isMaplikeOrSetlikeMethod() and + ((m.maplikeOrSetlike.isMaplike() and + m.identifier.name == "entries") or + (m.maplikeOrSetlike.isSetlike() and + m.identifier.name == "values"))): + self.regular.append({ + "name": "@@iterator", + "methodName": m.identifier.name, + "length": methodLength(m), + "flags": "0", + "condition": PropertyDefiner.getControllingCondition(m, + descriptor), + }) + break + if not static: stringifier = descriptor.operations['Stringifier'] if (stringifier and @@ -2284,7 +2335,9 @@ class MethodDefiner(PropertyDefiner): jitinfo = "nullptr" else: selfHostedName = "nullptr" - accessor = m.get("nativeName", IDLToCIdentifier(m["name"])) + # When defining symbols, function name may not match symbol name + methodName = m.get("methodName", m["name"]) + accessor = m.get("nativeName", IDLToCIdentifier(methodName)) if m.get("methodInfo", True): # Cast this in case the methodInfo is a # JSTypedMethodJitInfo. @@ -2377,8 +2430,10 @@ class AttrDefiner(PropertyDefiner): def flags(attr): unforgeable = " | JSPROP_PERMANENT" if self.unforgeable else "" - return ("JSPROP_SHARED | JSPROP_ENUMERATE" + - unforgeable) + # Attributes generated as part of a maplike/setlike declaration are + # not enumerable. + enumerable = " | JSPROP_ENUMERATE" if not attr.isMaplikeOrSetlikeAttr() else "" + return ("JSPROP_SHARED" + enumerable + unforgeable) def getter(attr): if self.static: @@ -5539,7 +5594,7 @@ class CGArgumentConverter(CGThing): will be automatically uppercased. """ def __init__(self, argument, index, descriptorProvider, - argDescription, + argDescription, member, invalidEnumValueFatal=True, lenientFloatCode=None): CGThing.__init__(self) self.argument = argument @@ -5556,8 +5611,16 @@ class CGArgumentConverter(CGThing): "obj": "obj", "passedToJSImpl": toStringBool(isJSImplementedDescriptor(descriptorProvider)) } - self.replacementVariables["val"] = string.Template( - "args[${index}]").substitute(replacer) + # If we have a method generated by the maplike/setlike portion of an + # interface, arguments can possibly be undefined, but will need to be + # converted to the key/value type of the backing object. In this case, + # use .get() instead of direct access to the argument. + if member.isMethod() and member.isMaplikeOrSetlikeMethod(): + self.replacementVariables["val"] = string.Template( + "args.get(${index})").substitute(replacer) + else: + self.replacementVariables["val"] = string.Template( + "args[${index}]").substitute(replacer) haveValueCheck = string.Template( "args.hasDefined(${index})").substitute(replacer) self.replacementVariables["haveValue"] = haveValueCheck @@ -6795,7 +6858,7 @@ class CGPerSignatureCall(CGThing): cgThings.append( CGArgumentConverter(arguments[i], i, self.descriptor, argDescription % {"index": i + 1}, - invalidEnumValueFatal=not setter, + idlNode, invalidEnumValueFatal=not setter, lenientFloatCode=lenientFloatCode)) if needsUnwrap: @@ -6832,11 +6895,19 @@ class CGPerSignatureCall(CGThing): CGIfWrapper(CGList(xraySteps), "objIsXray")) - cgThings.append(CGCallGenerator( - self.getErrorReport() if self.isFallible() else None, - self.getArguments(), argsPre, returnType, - self.extendedAttributes, descriptor, nativeMethodName, - static, argsPost=argsPost, resultVar=resultVar)) + # If this is a method that was generated by a maplike/setlike + # interface, use the maplike/setlike generator to fill in the body. + # Otherwise, use CGCallGenerator to call the native method. + if idlNode.isMethod() and idlNode.isMaplikeOrSetlikeMethod(): + cgThings.append(CGMaplikeOrSetlikeMethodGenerator(descriptor, + idlNode.maplikeOrSetlike, + idlNode.identifier.name)) + else: + cgThings.append(CGCallGenerator( + self.getErrorReport() if self.isFallible() else None, + self.getArguments(), argsPre, returnType, + self.extendedAttributes, descriptor, nativeMethodName, + static, argsPost=argsPost, resultVar=resultVar)) self.cgRoot = CGList(cgThings) def getArguments(self): @@ -7051,7 +7122,10 @@ class CGMethodCall(CGThing): self.cgRoot = CGList([getPerSignatureCall(signature)]) requiredArgs = requiredArgCount(signature) - if requiredArgs > 0: + # Skip required arguments check for maplike/setlike interfaces, as + # they can have arguments which are not passed, and are treated as + # if undefined had been explicitly passed. + if requiredArgs > 0 and not method.isMaplikeOrSetlikeMethod(): code = fill( """ if (MOZ_UNLIKELY(args.length() < ${requiredArgs})) { @@ -7146,7 +7220,7 @@ class CGMethodCall(CGThing): # possibleSignatures[0] caseBody = [CGArgumentConverter(possibleSignatures[0][1][i], i, descriptor, - argDesc % (i + 1)) + argDesc % (i + 1), method) for i in range(0, distinguishingIndex)] # Select the right overload from our set. @@ -7438,7 +7512,12 @@ class FakeArgument(): self.variadic = False self.defaultValue = None self._allowTreatNonCallableAsNull = allowTreatNonCallableAsNull - self.treatNullAs = interfaceMember.treatNullAs + # For FakeArguments generated by maplike/setlike convenience functions, + # we won't have an interfaceMember to pass in. + if interfaceMember: + self.treatNullAs = interfaceMember.treatNullAs + else: + self.treatNullAs = "Default" if isinstance(interfaceMember, IDLAttribute): self.enforceRange = interfaceMember.enforceRange self.clamp = interfaceMember.clamp @@ -8008,6 +8087,12 @@ class CGSpecializedGetter(CGAbstractStaticMethod): CGAbstractStaticMethod.__init__(self, descriptor, name, "bool", args) def definition_body(self): + if self.attr.maplikeOrSetlike: + # If the interface is maplike/setlike, there will be one getter + # method for the size property of the backing object. Due to having + # to unpack the backing object from the slot, this requires its own + # generator. + return getMaplikeOrSetlikeSizeGetterBody(self.descriptor, self.attr) nativeName = CGSpecializedGetter.makeNativeName(self.descriptor, self.attr) if self.attr.slotIndex is not None: @@ -11263,6 +11348,10 @@ class CGDescriptor(CGThing): crossOriginMethods.add(m.identifier.name) if m.getExtendedAttribute("MethodIdentityTestable"): cgThings.append(CGMethodIdentityTest(descriptor, m)) + # If we've hit the maplike/setlike member itself, go ahead and + # generate its convenience functions. + elif m.isMaplikeOrSetlike(): + cgThings.append(CGMaplikeOrSetlikeHelperGenerator(descriptor, m)) elif m.isAttr(): if m.stringifier: raise TypeError("Stringifier attributes not supported yet. " @@ -12438,6 +12527,15 @@ class CGForwardDeclarations(CGWrapper): # Needed for at least Wrap. for d in descriptors: builder.add(d.nativeType) + # If we're an interface and we have a maplike/setlike declaration, + # we'll have helper functions exposed to the native side of our + # bindings, which will need to show up in the header. If either of + # our key/value types are interfaces, they'll be passed as + # arguments to helper functions, and they'll need to be forward + # declared in the header. + if d.interface.maplikeOrSetlike: + forwardDeclareForType(d.interface.maplikeOrSetlike.keyType) + forwardDeclareForType(d.interface.maplikeOrSetlike.valueType) # We just about always need NativePropertyHooks builder.addInMozillaDom("NativePropertyHooks", isStruct=True) @@ -14070,8 +14168,12 @@ class FakeMember(): class CallbackMember(CGNativeMember): + # XXXbz It's OK to use CallbackPreserveColor for wrapScope because + # CallSetup already handled the unmark-gray bits for us. we don't have + # anything better to use for 'obj', really... def __init__(self, sig, name, descriptorProvider, needThisHandling, - rethrowContentException=False, typedArraysAreStructs=False): + rethrowContentException=False, typedArraysAreStructs=False, + wrapScope='CallbackPreserveColor()'): """ needThisHandling is True if we need to be able to accept a specified thisObj, False otherwise. @@ -14095,6 +14197,8 @@ class CallbackMember(CGNativeMember): # will handle generating public versions that handle the "this" stuff. visibility = "private" if needThisHandling else "public" self.rethrowContentException = rethrowContentException + + self.wrapScope = wrapScope # We don't care, for callback codegen, whether our original member was # a method or attribute or whatnot. Just always pass FakeMember() # here. @@ -14214,10 +14318,7 @@ class CallbackMember(CGNativeMember): 'successCode': "continue;\n" if arg.variadic else "break;\n", 'jsvalRef': "argv[%s]" % jsvalIndex, 'jsvalHandle': "argv[%s]" % jsvalIndex, - # XXXbz we don't have anything better to use for 'obj', - # really... It's OK to use CallbackPreserveColor because - # CallSetup already handled the unmark-gray bits for us. - 'obj': 'CallbackPreserveColor()', + 'obj': self.wrapScope, 'returnsNewObject': False, 'exceptionCode': self.exceptionCode, 'typedArraysAreStructs': self.typedArraysAreStructs @@ -14546,6 +14647,497 @@ class CGJSImplInitOperation(CallbackOperationBase): return "__init" +def getMaplikeOrSetlikeErrorReturn(helperImpl): + """ + Generate return values based on whether a maplike or setlike generated + method is an interface method (which returns bool) or a helper function + (which uses ErrorResult). + """ + if helperImpl: + return dedent( + """ + aRv.Throw(NS_ERROR_UNEXPECTED); + return%s; + """ % helperImpl.getDefaultRetval()) + return "return false;\n" + + +def getMaplikeOrSetlikeBackingObject(descriptor, maplikeOrSetlike, helperImpl=None): + """ + Generate code to get/create a JS backing object for a maplike/setlike + declaration from the declaration slot. + """ + func_prefix = maplikeOrSetlike.maplikeOrSetlikeType.title() + ret = fill( + """ + JS::Rooted backingObj(cx); + bool created = false; + if (!Get${func_prefix}BackingObject(cx, obj, ${slot}, &backingObj, &created)) { + $*{errorReturn} + } + if (created) { + PreserveWrapper<${selfType}>(self); + } + """, + slot=memberReservedSlot(maplikeOrSetlike), + func_prefix=func_prefix, + errorReturn=getMaplikeOrSetlikeErrorReturn(helperImpl), + selfType=descriptor.nativeType) + return ret + + +def getMaplikeOrSetlikeSizeGetterBody(descriptor, attr): + """ + Creates the body for the size getter method of maplike/setlike interfaces. + """ + # We should only have one declaration attribute currently + assert attr.identifier.name == "size" + assert attr.isMaplikeOrSetlikeAttr() + return fill( + """ + $*{getBackingObj} + uint32_t result = JS::${funcPrefix}Size(cx, backingObj); + MOZ_ASSERT(!JS_IsExceptionPending(cx)); + args.rval().setNumber(result); + return true; + """, + getBackingObj=getMaplikeOrSetlikeBackingObject(descriptor, + attr.maplikeOrSetlike), + funcPrefix=attr.maplikeOrSetlike.prefix) + + +class CGMaplikeOrSetlikeMethodGenerator(CGThing): + """ + Creates methods for maplike/setlike interfaces. It is expected that all + methods will be have a maplike/setlike object attached. Unwrapping/wrapping + will be taken care of by the usual method generation machinery in + CGMethodCall/CGPerSignatureCall. Functionality is filled in here instead of + using CGCallGenerator. + """ + def __init__(self, descriptor, maplikeOrSetlike, methodName, + helperImpl=None): + CGThing.__init__(self) + # True if this will be the body of a C++ helper function. + self.helperImpl = helperImpl + self.descriptor = descriptor + self.maplikeOrSetlike = maplikeOrSetlike + self.cgRoot = CGList([]) + impl_method_name = methodName + if impl_method_name[0] == "_": + # double underscore means this is a js-implemented chrome only rw + # function. Truncate the double underscore so calling the right + # underlying JSAPI function still works. + impl_method_name = impl_method_name[2:] + self.cgRoot.append(CGGeneric( + getMaplikeOrSetlikeBackingObject(self.descriptor, + self.maplikeOrSetlike, + self.helperImpl))) + self.returnStmt = getMaplikeOrSetlikeErrorReturn(self.helperImpl) + + # Generates required code for the method. Method descriptions included + # in definitions below. Throw if we don't have a method to fill in what + # we're looking for. + try: + methodGenerator = getattr(self, impl_method_name) + except AttributeError: + raise TypeError("Missing %s method definition '%s'" % + (self.maplikeOrSetlike.maplikeOrSetlikeType, + methodName)) + # Method generator returns tuple, containing: + # + # - a list of CGThings representing setup code for preparing to call + # the JS API function + # - a list of arguments needed for the JS API function we're calling + # - list of code CGThings needed for return value conversion. + (setupCode, arguments, setResult) = methodGenerator() + + # Create the actual method call, and then wrap it with the code to + # return the value if needed. + funcName = (self.maplikeOrSetlike.prefix + + MakeNativeName(impl_method_name)) + # Append the list of setup code CGThings + self.cgRoot.append(CGList(setupCode)) + # Create the JS API call + self.cgRoot.append(CGWrapper( + CGGeneric(fill( + """ + if (!JS::${funcName}(${args})) { + $*{errorReturn} + } + """, + funcName=funcName, + args=", ".join(["cx", "backingObj"] + arguments), + errorReturn=self.returnStmt)))) + # Append result conversion + self.cgRoot.append(CGList(setResult)) + + def mergeTuples(self, a, b): + """ + Expecting to take 2 tuples were all elements are lists, append the lists in + the second tuple to the lists in the first. + """ + return tuple([x + y for x, y in zip(a, b)]) + + def appendArgConversion(self, name): + """ + Generate code to convert arguments to JS::Values, so they can be + passed into JSAPI functions. + """ + return CGGeneric(fill( + """ + JS::Rooted ${name}Val(cx); + if (!ToJSValue(cx, ${name}, &${name}Val)) { + $*{errorReturn} + } + """, + name=name, + errorReturn=self.returnStmt)) + + def appendKeyArgConversion(self): + """ + Generates the key argument for methods. Helper functions will use + an AutoValueVector, while interface methods have seperate JS::Values. + """ + if self.helperImpl: + return ([], ["argv[0]"], []) + return ([self.appendArgConversion("arg0")], ["arg0Val"], []) + + def appendKeyAndValueArgConversion(self): + """ + Generates arguments for methods that require a key and value. Helper + functions will use an AutoValueVector, while interface methods have + seperate JS::Values. + """ + r = self.appendKeyArgConversion() + if self.helperImpl: + return self.mergeTuples(r, ([], ["argv[1]"], [])) + return self.mergeTuples(r, ([self.appendArgConversion("arg1")], + ["arg1Val"], + [])) + + def appendIteratorResult(self): + """ + Generate code to output JSObject* return values, needed for functions that + return iterators. Iterators cannot currently be wrapped via Xrays. If + something that would return an iterator is called via Xray, fail early. + """ + # TODO: Bug 1173651 - Remove check once bug 1023984 is fixed. + code = CGGeneric(dedent( + """ + // TODO (Bug 1173651): Xrays currently cannot wrap iterators. Change + // after bug 1023984 is fixed. + if (xpc::WrapperFactory::IsXrayWrapper(obj)) { + JS_ReportError(cx, "Xray wrapping of iterators not supported."); + return false; + } + JS::Rooted result(cx); + JS::Rooted v(cx); + """)) + arguments = "&v" + setResult = CGGeneric(dedent( + """ + result = &v.toObject(); + """)) + return ([code], [arguments], [setResult]) + + def appendSelfResult(self): + """ + Generate code to return the interface object itself. + """ + code = CGGeneric(dedent( + """ + JS::Rooted result(cx); + """)) + setResult = CGGeneric(dedent( + """ + result = obj; + """)) + return ([code], [], [setResult]) + + def appendBoolResult(self): + if self.helperImpl: + return ([CGGeneric()], ["&aRetVal"], []) + return ([CGGeneric("bool result;\n")], ["&result"], []) + + def forEach(self): + """ + void forEach(callback c, any thisval); + + ForEach takes a callback, and a possible value to use as 'this'. The + callback needs to take value, key, and the interface object + implementing maplike/setlike. In order to make sure that the third arg + is our interface object instead of the map/set backing object, we + create a js function with the callback and original object in its + storage slots, then use a helper function in BindingUtils to make sure + the callback is called correctly. + """ + assert(not self.helperImpl) + code = [CGGeneric(dedent( + """ + // Create a wrapper function. + JSFunction* func = js::NewFunctionWithReserved(cx, ForEachHandler, 3, 0, nullptr); + if (!func) { + return false; + } + JS::Rooted funcObj(cx, JS_GetFunctionObject(func)); + JS::Rooted funcVal(cx, JS::ObjectValue(*funcObj)); + js::SetFunctionNativeReserved(funcObj, FOREACH_CALLBACK_SLOT, + JS::ObjectValue(*arg0)); + js::SetFunctionNativeReserved(funcObj, FOREACH_MAPLIKEORSETLIKEOBJ_SLOT, + JS::ObjectValue(*obj)); + """))] + arguments = ["funcVal", "arg1"] + return (code, arguments, []) + + def set(self): + """ + object set(key, value); + + Maplike only function, takes key and sets value to it, returns + interface object unless being called from a C++ helper. + """ + assert self.maplikeOrSetlike.isMaplike() + r = self.appendKeyAndValueArgConversion() + if self.helperImpl: + return r + return self.mergeTuples(r, self.appendSelfResult()) + + def add(self): + """ + object add(value); + + Setlike only function, adds value to set, returns interface object + unless being called from a C++ helper + """ + assert self.maplikeOrSetlike.isSetlike() + r = self.appendKeyArgConversion() + if self.helperImpl: + return r + return self.mergeTuples(r, self.appendSelfResult()) + + def get(self): + """ + type? get(key); + + Retrieves a value from a backing object based on the key. Returns value + if key is in backing object, undefined otherwise. + """ + assert self.maplikeOrSetlike.isMaplike() + r = self.appendKeyArgConversion() + code = [CGGeneric(dedent( + """ + JS::Rooted result(cx); + """))] + arguments = ["&result"] + return self.mergeTuples(r, (code, arguments, [])) + + def has(self): + """ + bool has(key); + + Check if an entry exists in the backing object. Returns true if value + exists in backing object, false otherwise. + """ + return self.mergeTuples(self.appendKeyArgConversion(), + self.appendBoolResult()) + + def keys(self): + """ + object keys(); + + Returns new object iterator with all keys from backing object. + """ + return self.appendIteratorResult() + + def values(self): + """ + object values(); + + Returns new object iterator with all values from backing object. + """ + return self.appendIteratorResult() + + def entries(self): + """ + object entries(); + + Returns new object iterator with all keys and values from backing + object. Keys will be null for set. + """ + return self.appendIteratorResult() + + def clear(self): + """ + void clear(); + + Removes all entries from map/set. + """ + return ([], [], []) + + def delete(self): + """ + bool delete(key); + + Deletes an entry from the backing object. Returns true if value existed + in backing object, false otherwise. + """ + return self.mergeTuples(self.appendKeyArgConversion(), + self.appendBoolResult()) + + def define(self): + return self.cgRoot.define() + + +class CGMaplikeOrSetlikeHelperFunctionGenerator(CallbackMember): + """ + Generates code to allow C++ to perform operations on backing objects. Gets + a context from the binding wrapper, turns arguments into JS::Values (via + CallbackMember/CGNativeMember argument conversion), then uses + CGMaplikeOrSetlikeMethodGenerator to generate the body. + + """ + + class HelperFunction(CGAbstractMethod): + """ + Generates context retrieval code and rooted JSObject for interface for + CGMaplikeOrSetlikeMethodGenerator to use + """ + def __init__(self, descriptor, name, args, code, needsBoolReturn=False): + self.code = code + CGAbstractMethod.__init__(self, descriptor, name, + "bool" if needsBoolReturn else "void", + args) + + def definition_body(self): + return self.code + + def __init__(self, descriptor, maplikeOrSetlike, name, needsKeyArg=False, + needsValueArg=False, needsBoolReturn=False): + args = [] + self.maplikeOrSetlike = maplikeOrSetlike + self.needsBoolReturn = needsBoolReturn + if needsKeyArg: + args.append(FakeArgument(maplikeOrSetlike.keyType, None, 'aKey')) + if needsValueArg: + assert needsKeyArg + args.append(FakeArgument(maplikeOrSetlike.valueType, None, 'aValue')) + # Run CallbackMember init function to generate argument conversion code. + # wrapScope is set to 'obj' when generating maplike or setlike helper + # functions, as we don't have access to the CallbackPreserveColor + # method. + CallbackMember.__init__(self, + [BuiltinTypes[IDLBuiltinType.Types.void], args], + name, descriptor, False, + wrapScope='obj') + # Wrap CallbackMember body code into a CGAbstractMethod to make + # generation easier. + self.implMethod = CGMaplikeOrSetlikeHelperFunctionGenerator.HelperFunction( + descriptor, name, self.args, self.body, needsBoolReturn) + + def getCallSetup(self): + return dedent( + """ + MOZ_ASSERT(self); + AutoJSAPI jsapi; + jsapi.Init(); + jsapi.TakeOwnershipOfErrorReporting(); + JSContext* cx = jsapi.cx(); + JSAutoCompartment tempCompartment(cx, xpc::UnprivilegedJunkScope()); + JS::Rooted v(cx); + if(!ToJSValue(cx, self, &v)) { + aRv.Throw(NS_ERROR_UNEXPECTED); + return%s; + } + // This is a reflector, but due to trying to name things + // similarly across method generators, it's called obj here. + JS::Rooted obj(cx); + obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtOuter = */ false); + JSAutoCompartment reflectorCompartment(cx, obj); + """ % self.getDefaultRetval()) + + def getArgs(self, returnType, argList): + # We don't need the context or the value. We'll generate those instead. + args = CGNativeMember.getArgs(self, returnType, argList) + # Prepend a pointer to the binding object onto the arguments + return [Argument(self.descriptorProvider.nativeType + "*", "self")] + args + + def getResultConversion(self): + if self.needsBoolReturn: + return "return aRetVal;\n" + return "return;\n" + + def getRvalDecl(self): + if self.needsBoolReturn: + return "bool aRetVal;\n" + return "" + + def getArgcDecl(self): + # Don't need argc for anything. + return None + + def getDefaultRetval(self): + if self.needsBoolReturn: + return " false" + return "" + + + def getCall(self): + return CGMaplikeOrSetlikeMethodGenerator(self.descriptorProvider, + self.maplikeOrSetlike, + self.name.lower(), + helperImpl=self).define() + + def getPrettyName(self): + return self.name + + def declare(self): + return self.implMethod.declare() + + def define(self): + return self.implMethod.define() + + +class CGMaplikeOrSetlikeHelperGenerator(CGNamespace): + """ + Declares and defines convenience methods for accessing backing objects on + setlike/maplike interface. Generates function signatures, un/packs + backing objects from slot, etc. + """ + def __init__(self, descriptor, maplikeOrSetlike): + self.descriptor = descriptor + self.maplikeOrSetlike = maplikeOrSetlike + self.namespace = "%sHelpers" % (self.maplikeOrSetlike.maplikeOrSetlikeType.title()) + self.helpers = [ + CGMaplikeOrSetlikeHelperFunctionGenerator(descriptor, + maplikeOrSetlike, + "Clear"), + CGMaplikeOrSetlikeHelperFunctionGenerator(descriptor, + maplikeOrSetlike, + "Delete", + needsKeyArg=True, + needsBoolReturn=True), + CGMaplikeOrSetlikeHelperFunctionGenerator(descriptor, + maplikeOrSetlike, + "Has", + needsKeyArg=True, + needsBoolReturn=True)] + if self.maplikeOrSetlike.isMaplike(): + self.helpers.append( + CGMaplikeOrSetlikeHelperFunctionGenerator(descriptor, + maplikeOrSetlike, + "Set", + needsKeyArg=True, + needsValueArg=True)) + else: + assert(self.maplikeOrSetlike.isSetlike()) + self.helpers.append( + CGMaplikeOrSetlikeHelperFunctionGenerator(descriptor, + maplikeOrSetlike, + "Add", + needsKeyArg=True)) + CGNamespace.__init__(self, self.namespace, CGList(self.helpers)) + + class GlobalGenRoots(): """ Roots for global codegen. diff --git a/dom/bindings/ToJSValue.h b/dom/bindings/ToJSValue.h index f80652e2c58f..d72fee023d22 100644 --- a/dom/bindings/ToJSValue.h +++ b/dom/bindings/ToJSValue.h @@ -209,6 +209,15 @@ ToJSValue(JSContext* aCx, return ToJSValue(aCx, *aArgument.get(), aValue); } +template +MOZ_WARN_UNUSED_RESULT bool +ToJSValue(JSContext* aCx, + const NonNull& aArgument, + JS::MutableHandle aValue) +{ + return ToJSValue(aCx, *aArgument.get(), aValue); +} + // Accept WebIDL dictionaries template MOZ_WARN_UNUSED_RESULT diff --git a/dom/bindings/moz.build b/dom/bindings/moz.build index 58a4a7e39afb..ed17373e5f48 100644 --- a/dom/bindings/moz.build +++ b/dom/bindings/moz.build @@ -84,6 +84,25 @@ SOURCES += [ 'StructuredClone.cpp', ] +# Tests for maplike and setlike require bindings to be built, which means they +# must be included in libxul. This breaks the "no test classes are exported" +# rule stated in the test/ directory, but it's the only way this will work. +# Test classes are only built in debug mode, and all tests requiring use of +# them are only run in debug mode. +if CONFIG['MOZ_DEBUG']: + EXPORTS.mozilla.dom += [ + "test/TestInterfaceMaplike.h", + "test/TestInterfaceMaplikeObject.h", + "test/TestInterfaceSetlike.h", + "test/TestInterfaceSetlikeNode.h" + ] + UNIFIED_SOURCES += [ + "test/TestInterfaceMaplike.cpp", + "test/TestInterfaceMaplikeObject.cpp", + "test/TestInterfaceSetlike.cpp", + "test/TestInterfaceSetlikeNode.cpp", + ] + include('/ipc/chromium/chromium-config.mozbuild') if CONFIG['MOZ_AUDIO_CHANNEL_MANAGER']: diff --git a/dom/bindings/parser/WebIDL.py b/dom/bindings/parser/WebIDL.py index 4ff1937a5e64..0b288e8df6e6 100644 --- a/dom/bindings/parser/WebIDL.py +++ b/dom/bindings/parser/WebIDL.py @@ -3399,6 +3399,7 @@ class IDLInterfaceMember(IDLObjectWithIdentifier, IDLExposureMixins): [self.location]) self.aliases.append(alias) + # MaplikeOrSetlike adds a trait to an interface, like map or iteration # functions. To handle them while still getting all of the generated binding # code taken care of, we treat them as macros that are expanded into members @@ -3425,6 +3426,12 @@ class IDLMaplikeOrSetlike(IDLInterfaceMember): self.disallowedMemberNames = [] self.disallowedNonMethodNames = [] + # When generating JSAPI access code, we need to know the backing object + # type prefix to create the correct function. Generate here for reuse. + if self.isMaplike(): + self.prefix = 'Map' + elif self.isSetlike(): + self.prefix = 'Set' def __str__(self): return "declared '%s' with key '%s'" % (self.maplikeOrSetlikeType, self.keyType) @@ -4349,7 +4356,15 @@ class IDLMethod(IDLInterfaceMember, IDLScope): return self._hasOverloads def isIdentifierLess(self): - return self.identifier.name[:2] == "__" + """ + True if the method name started with __, and if the method is not a + maplike/setlike method. Interfaces with maplike/setlike will generate + methods starting with __ for chrome only backing object access in JS + implemented interfaces, so while these functions use what is considered + an non-identifier name, they actually DO have an identifier. + """ + return (self.identifier.name[:2] == "__" and + not self.isMaplikeOrSetlikeMethod()) def resolve(self, parentScope): assert isinstance(parentScope, IDLScope) diff --git a/dom/bindings/test/TestInterfaceJS.manifest b/dom/bindings/test/TestInterfaceJS.manifest index 8aa0feaabc01..161a42156085 100644 --- a/dom/bindings/test/TestInterfaceJS.manifest +++ b/dom/bindings/test/TestInterfaceJS.manifest @@ -1,2 +1,4 @@ component {2ac4e026-cf25-47d5-b067-78d553c3cad8} TestInterfaceJS.js contract @mozilla.org/dom/test-interface-js;1 {2ac4e026-cf25-47d5-b067-78d553c3cad8} +component {4bc6f6f3-e005-4f0a-b42d-4d1663a9013a} TestInterfaceJSMaplike.js +contract @mozilla.org/dom/test-interface-js-maplike;1 {4bc6f6f3-e005-4f0a-b42d-4d1663a9013a} diff --git a/dom/bindings/test/TestInterfaceJSMaplike.js b/dom/bindings/test/TestInterfaceJSMaplike.js new file mode 100644 index 000000000000..b108ef5b6123 --- /dev/null +++ b/dom/bindings/test/TestInterfaceJSMaplike.js @@ -0,0 +1,38 @@ +/* -*- Mode: JavaScript; 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/. */ + +"use strict"; +const Cu = Components.utils; +const Ci = Components.interfaces; + +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +Cu.import("resource://gre/modules/Services.jsm"); + +function TestInterfaceJSMaplike() {} + +TestInterfaceJSMaplike.prototype = { + classID: Components.ID("{4bc6f6f3-e005-4f0a-b42d-4d1663a9013a}"), + contractID: "@mozilla.org/dom/test-interface-js-maplike;1", + QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports, + Ci.nsIDOMGlobalPropertyInitializer]), + + init: function(win) { this._win = win; }, + + __init: function () {}, + + setInternal: function(aKey, aValue) { + return this.__DOM_IMPL__.__set(aKey, aValue); + }, + + deleteInternal: function(aKey) { + return this.__DOM_IMPL__.__delete(aKey); + }, + + clearInternal: function() { + return this.__DOM_IMPL__.__clear(); + } +}; + +this.NSGetFactory = XPCOMUtils.generateNSGetFactory([TestInterfaceJSMaplike]) diff --git a/dom/bindings/test/TestInterfaceMaplike.cpp b/dom/bindings/test/TestInterfaceMaplike.cpp new file mode 100644 index 000000000000..934867c1aa91 --- /dev/null +++ b/dom/bindings/test/TestInterfaceMaplike.cpp @@ -0,0 +1,84 @@ +/* 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/. */ + +#include "mozilla/dom/TestInterfaceMaplike.h" +#include "mozilla/dom/TestInterfaceJSMaplikeSetlikeBinding.h" +#include "nsPIDOMWindow.h" +#include "mozilla/dom/BindingUtils.h" + +namespace mozilla { +namespace dom { + +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TestInterfaceMaplike, mParent) + +NS_IMPL_CYCLE_COLLECTING_ADDREF(TestInterfaceMaplike) +NS_IMPL_CYCLE_COLLECTING_RELEASE(TestInterfaceMaplike) + +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TestInterfaceMaplike) +NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY +NS_INTERFACE_MAP_ENTRY(nsISupports) +NS_INTERFACE_MAP_END + +TestInterfaceMaplike::TestInterfaceMaplike(nsPIDOMWindow* aParent) +: mParent(aParent) +{ +} + +//static +already_AddRefed +TestInterfaceMaplike::Constructor(const GlobalObject& aGlobal, + ErrorResult& aRv) +{ + nsCOMPtr window = do_QueryInterface(aGlobal.GetAsSupports()); + if (!window) { + aRv.Throw(NS_ERROR_FAILURE); + return nullptr; + } + + nsRefPtr r = new TestInterfaceMaplike(window); + return r.forget(); +} + +JSObject* +TestInterfaceMaplike::WrapObject(JSContext* aCx, JS::Handle aGivenProto) +{ + return TestInterfaceMaplikeBinding::Wrap(aCx, this, aGivenProto); +} + +nsPIDOMWindow* +TestInterfaceMaplike::GetParentObject() const +{ + return mParent; +} + +void +TestInterfaceMaplike::SetInternal(const nsAString& aKey, int32_t aValue) +{ + ErrorResult rv; + TestInterfaceMaplikeBinding::MaplikeHelpers::Set(this, aKey, aValue, rv); +} + +void +TestInterfaceMaplike::ClearInternal() +{ + ErrorResult rv; + TestInterfaceMaplikeBinding::MaplikeHelpers::Clear(this, rv); +} + +bool +TestInterfaceMaplike::DeleteInternal(const nsAString& aKey) +{ + ErrorResult rv; + return TestInterfaceMaplikeBinding::MaplikeHelpers::Delete(this, aKey, rv); +} + +bool +TestInterfaceMaplike::HasInternal(const nsAString& aKey) +{ + ErrorResult rv; + return TestInterfaceMaplikeBinding::MaplikeHelpers::Has(this, aKey, rv); +} + +} +} diff --git a/dom/bindings/test/TestInterfaceMaplike.h b/dom/bindings/test/TestInterfaceMaplike.h new file mode 100644 index 000000000000..f266e2d6bf9d --- /dev/null +++ b/dom/bindings/test/TestInterfaceMaplike.h @@ -0,0 +1,52 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:set ts=2 sw=2 sts=2 et cindent: */ +/* 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/. */ + +#ifndef mozilla_dom_TestInterfaceMaplike_h +#define mozilla_dom_TestInterfaceMaplike_h + +#include "nsWrapperCache.h" +#include "nsCOMPtr.h" + +class nsPIDOMWindow; + +namespace mozilla { + +class ErrorResult; + +namespace dom { + +class GlobalObject; + +// Implementation of test binding for webidl maplike interfaces, using +// primitives for key and value types. +class TestInterfaceMaplike final : public nsISupports, + public nsWrapperCache +{ +public: + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceMaplike) + + explicit TestInterfaceMaplike(nsPIDOMWindow* aParent); + nsPIDOMWindow* GetParentObject() const; + virtual JSObject* WrapObject(JSContext* aCx, + JS::Handle aGivenProto) override; + static already_AddRefed + Constructor(const GlobalObject& aGlobal, ErrorResult& rv); + + // External access for testing internal convenience functions. + void SetInternal(const nsAString& aKey, int32_t aValue); + void ClearInternal(); + bool DeleteInternal(const nsAString& aKey); + bool HasInternal(const nsAString& aKey); +private: + virtual ~TestInterfaceMaplike() {} + nsCOMPtr mParent; +}; + +} // namespace dom +} // namespace mozilla + +#endif // mozilla_dom_TestInterfaceMaplike_h diff --git a/dom/bindings/test/TestInterfaceMaplikeObject.cpp b/dom/bindings/test/TestInterfaceMaplikeObject.cpp new file mode 100644 index 000000000000..564c99f9e43a --- /dev/null +++ b/dom/bindings/test/TestInterfaceMaplikeObject.cpp @@ -0,0 +1,88 @@ +/* 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/. */ + +#include "mozilla/dom/TestInterfaceMaplikeObject.h" +#include "mozilla/dom/TestInterfaceMaplike.h" +#include "mozilla/dom/TestInterfaceJSMaplikeSetlikeBinding.h" +#include "nsPIDOMWindow.h" +#include "mozilla/dom/BindingUtils.h" + +namespace mozilla { +namespace dom { + +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TestInterfaceMaplikeObject, mParent) + +NS_IMPL_CYCLE_COLLECTING_ADDREF(TestInterfaceMaplikeObject) +NS_IMPL_CYCLE_COLLECTING_RELEASE(TestInterfaceMaplikeObject) + +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TestInterfaceMaplikeObject) +NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY +NS_INTERFACE_MAP_ENTRY(nsISupports) +NS_INTERFACE_MAP_END + +TestInterfaceMaplikeObject::TestInterfaceMaplikeObject(nsPIDOMWindow* aParent) +: mParent(aParent) +{ +} + +//static +already_AddRefed +TestInterfaceMaplikeObject::Constructor(const GlobalObject& aGlobal, + ErrorResult& aRv) +{ + nsCOMPtr window = do_QueryInterface(aGlobal.GetAsSupports()); + if (!window) { + aRv.Throw(NS_ERROR_FAILURE); + return nullptr; + } + + nsRefPtr r = + new TestInterfaceMaplikeObject(window); + return r.forget(); +} + +JSObject* +TestInterfaceMaplikeObject::WrapObject(JSContext* aCx, + JS::Handle aGivenProto) +{ + return TestInterfaceMaplikeObjectBinding::Wrap(aCx, this, aGivenProto); +} + +nsPIDOMWindow* +TestInterfaceMaplikeObject::GetParentObject() const +{ + return mParent; +} + +void +TestInterfaceMaplikeObject::SetInternal(const nsAString& aKey) +{ + nsRefPtr p(new TestInterfaceMaplike(mParent)); + ErrorResult rv; + TestInterfaceMaplikeObjectBinding::MaplikeHelpers::Set(this, aKey, *p, rv); +} + +void +TestInterfaceMaplikeObject::ClearInternal() +{ + ErrorResult rv; + TestInterfaceMaplikeObjectBinding::MaplikeHelpers::Clear(this, rv); +} + +bool +TestInterfaceMaplikeObject::DeleteInternal(const nsAString& aKey) +{ + ErrorResult rv; + return TestInterfaceMaplikeObjectBinding::MaplikeHelpers::Delete(this, aKey, rv); +} + +bool +TestInterfaceMaplikeObject::HasInternal(const nsAString& aKey) +{ + ErrorResult rv; + return TestInterfaceMaplikeObjectBinding::MaplikeHelpers::Has(this, aKey, rv); +} + +} +} diff --git a/dom/bindings/test/TestInterfaceMaplikeObject.h b/dom/bindings/test/TestInterfaceMaplikeObject.h new file mode 100644 index 000000000000..4b69ef70cba5 --- /dev/null +++ b/dom/bindings/test/TestInterfaceMaplikeObject.h @@ -0,0 +1,52 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:set ts=2 sw=2 sts=2 et cindent: */ +/* 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/. */ + +#ifndef mozilla_dom_TestInterfaceMaplikeObject_h +#define mozilla_dom_TestInterfaceMaplikeObject_h + +#include "nsWrapperCache.h" +#include "nsCOMPtr.h" + +class nsPIDOMWindow; + +namespace mozilla { + +class ErrorResult; + +namespace dom { + +class GlobalObject; + +// Implementation of test binding for webidl maplike interfaces, using +// primitives for key types and objects for value types. +class TestInterfaceMaplikeObject final : public nsISupports, + public nsWrapperCache +{ +public: + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceMaplikeObject) + + explicit TestInterfaceMaplikeObject(nsPIDOMWindow* aParent); + nsPIDOMWindow* GetParentObject() const; + virtual JSObject* WrapObject(JSContext* aCx, + JS::Handle aGivenProto) override; + static already_AddRefed + Constructor(const GlobalObject& aGlobal,ErrorResult& rv); + + // External access for testing internal convenience functions. + void SetInternal(const nsAString& aKey); + void ClearInternal(); + bool DeleteInternal(const nsAString& aKey); + bool HasInternal(const nsAString& aKey); +private: + virtual ~TestInterfaceMaplikeObject() {} + nsCOMPtr mParent; +}; + +} // namespace dom +} // namespace mozilla + +#endif // mozilla_dom_TestInterfaceMaplikeObject_h diff --git a/dom/bindings/test/TestInterfaceSetlike.cpp b/dom/bindings/test/TestInterfaceSetlike.cpp new file mode 100644 index 000000000000..abd3ab3fa129 --- /dev/null +++ b/dom/bindings/test/TestInterfaceSetlike.cpp @@ -0,0 +1,58 @@ +/* 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/. */ + +#include "mozilla/dom/TestInterfaceSetlike.h" +#include "mozilla/dom/TestInterfaceJSMaplikeSetlikeBinding.h" +#include "nsPIDOMWindow.h" +#include "mozilla/dom/BindingUtils.h" + +namespace mozilla { +namespace dom { + +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TestInterfaceSetlike, mParent) + +NS_IMPL_CYCLE_COLLECTING_ADDREF(TestInterfaceSetlike) +NS_IMPL_CYCLE_COLLECTING_RELEASE(TestInterfaceSetlike) + +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TestInterfaceSetlike) +NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY +NS_INTERFACE_MAP_ENTRY(nsISupports) +NS_INTERFACE_MAP_END + +TestInterfaceSetlike::TestInterfaceSetlike(JSContext* aCx, + nsPIDOMWindow* aParent) +: mParent(aParent) +{ +} + +//static +already_AddRefed +TestInterfaceSetlike::Constructor(const GlobalObject& aGlobal, + ErrorResult& aRv) +{ + nsCOMPtr window = do_QueryInterface(aGlobal.GetAsSupports()); + if (!window) { + aRv.Throw(NS_ERROR_FAILURE); + return nullptr; + } + + nsRefPtr r = new TestInterfaceSetlike(nullptr, window); + return r.forget(); +} + +JSObject* +TestInterfaceSetlike::WrapObject(JSContext* aCx, + JS::Handle aGivenProto) +{ + return TestInterfaceSetlikeBinding::Wrap(aCx, this, aGivenProto); +} + +nsPIDOMWindow* +TestInterfaceSetlike::GetParentObject() const +{ + return mParent; +} + +} +} diff --git a/dom/bindings/test/TestInterfaceSetlike.h b/dom/bindings/test/TestInterfaceSetlike.h new file mode 100644 index 000000000000..291a828e4abf --- /dev/null +++ b/dom/bindings/test/TestInterfaceSetlike.h @@ -0,0 +1,46 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:set ts=2 sw=2 sts=2 et cindent: */ +/* 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/. */ + +#ifndef mozilla_dom_TestInterfaceSetlike_h +#define mozilla_dom_TestInterfaceSetlike_h + +#include "nsWrapperCache.h" +#include "nsCOMPtr.h" + +class nsPIDOMWindow; + +namespace mozilla { + +class ErrorResult; + +namespace dom { + +class GlobalObject; + +// Implementation of test binding for webidl setlike interfaces, using +// primitives for key type. +class TestInterfaceSetlike final : public nsISupports, + public nsWrapperCache +{ +public: + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceSetlike) + explicit TestInterfaceSetlike(JSContext* aCx, + nsPIDOMWindow* aParent); + nsPIDOMWindow* GetParentObject() const; + virtual JSObject* WrapObject(JSContext* aCx, + JS::Handle aGivenProto) override; + static already_AddRefed + Constructor(const GlobalObject& aGlobal, ErrorResult& rv); +private: + virtual ~TestInterfaceSetlike() {} + nsCOMPtr mParent; +}; + +} // namespace dom +} // namespace mozilla + +#endif // mozilla_dom_TestInterfaceSetlike_h diff --git a/dom/bindings/test/TestInterfaceSetlikeNode.cpp b/dom/bindings/test/TestInterfaceSetlikeNode.cpp new file mode 100644 index 000000000000..d57a883339b3 --- /dev/null +++ b/dom/bindings/test/TestInterfaceSetlikeNode.cpp @@ -0,0 +1,58 @@ +/* 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/. */ + +#include "mozilla/dom/TestInterfaceSetlikeNode.h" +#include "mozilla/dom/TestInterfaceJSMaplikeSetlikeBinding.h" +#include "nsPIDOMWindow.h" +#include "mozilla/dom/BindingUtils.h" + +namespace mozilla { +namespace dom { + +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TestInterfaceSetlikeNode, mParent) + +NS_IMPL_CYCLE_COLLECTING_ADDREF(TestInterfaceSetlikeNode) +NS_IMPL_CYCLE_COLLECTING_RELEASE(TestInterfaceSetlikeNode) + +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TestInterfaceSetlikeNode) +NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY +NS_INTERFACE_MAP_ENTRY(nsISupports) +NS_INTERFACE_MAP_END + +TestInterfaceSetlikeNode::TestInterfaceSetlikeNode(JSContext* aCx, + nsPIDOMWindow* aParent) +: mParent(aParent) +{ +} + +//static +already_AddRefed +TestInterfaceSetlikeNode::Constructor(const GlobalObject& aGlobal, + ErrorResult& aRv) +{ + nsCOMPtr window = do_QueryInterface(aGlobal.GetAsSupports()); + if (!window) { + aRv.Throw(NS_ERROR_FAILURE); + return nullptr; + } + + nsRefPtr r = new TestInterfaceSetlikeNode(nullptr, window); + return r.forget(); +} + +JSObject* +TestInterfaceSetlikeNode::WrapObject(JSContext* aCx, + JS::Handle aGivenProto) +{ + return TestInterfaceSetlikeNodeBinding::Wrap(aCx, this, aGivenProto); +} + +nsPIDOMWindow* +TestInterfaceSetlikeNode::GetParentObject() const +{ + return mParent; +} + +} +} diff --git a/dom/bindings/test/TestInterfaceSetlikeNode.h b/dom/bindings/test/TestInterfaceSetlikeNode.h new file mode 100644 index 000000000000..bdf577a60a38 --- /dev/null +++ b/dom/bindings/test/TestInterfaceSetlikeNode.h @@ -0,0 +1,46 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:set ts=2 sw=2 sts=2 et cindent: */ +/* 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/. */ + +#ifndef mozilla_dom_TestInterfaceSetlikeNode_h +#define mozilla_dom_TestInterfaceSetlikeNode_h + +#include "nsWrapperCache.h" +#include "nsCOMPtr.h" + +class nsPIDOMWindow; + +namespace mozilla { + +class ErrorResult; + +namespace dom { + +class GlobalObject; + +// Implementation of test binding for webidl setlike interfaces, using +// primitives for key type. +class TestInterfaceSetlikeNode final : public nsISupports, + public nsWrapperCache +{ +public: + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceSetlikeNode) + explicit TestInterfaceSetlikeNode(JSContext* aCx, + nsPIDOMWindow* aParent); + nsPIDOMWindow* GetParentObject() const; + virtual JSObject* WrapObject(JSContext* aCx, + JS::Handle aGivenProto) override; + static already_AddRefed + Constructor(const GlobalObject& aGlobal, ErrorResult& rv); +private: + virtual ~TestInterfaceSetlikeNode() {} + nsCOMPtr mParent; +}; + +} // namespace dom +} // namespace mozilla + +#endif // mozilla_dom_TestInterfaceSetlikeNode_h diff --git a/dom/bindings/test/chrome.ini b/dom/bindings/test/chrome.ini index e4c8caf75e77..2cdc5bb5ee42 100644 --- a/dom/bindings/test/chrome.ini +++ b/dom/bindings/test/chrome.ini @@ -14,3 +14,5 @@ support-files = skip-if = e10s # prerendering doesn't work in e10s yet [test_kill_longrunning_prerendered_content.xul] skip-if = e10s # prerendering doesn't work in e10s yet +[test_bug1123516_maplikesetlikechrome.xul] +skip-if = debug == false diff --git a/dom/bindings/test/mochitest.ini b/dom/bindings/test/mochitest.ini index f9b64bede895..749a62581774 100644 --- a/dom/bindings/test/mochitest.ini +++ b/dom/bindings/test/mochitest.ini @@ -61,3 +61,5 @@ skip-if = debug == false [test_worker_UnwrapArg.html] [test_unforgeablesonexpando.html] [test_crossOriginWindowSymbolAccess.html] +[test_bug1123516_maplikesetlike.html] +skip-if = debug == false \ No newline at end of file diff --git a/dom/bindings/test/moz.build b/dom/bindings/test/moz.build index afa87cc7e4ee..1b81ad3e6e35 100644 --- a/dom/bindings/test/moz.build +++ b/dom/bindings/test/moz.build @@ -17,6 +17,7 @@ Library('dombindings_test_s') EXTRA_COMPONENTS += [ 'TestInterfaceJS.js', 'TestInterfaceJS.manifest', + 'TestInterfaceJSMaplike.js' ] MOCHITEST_MANIFESTS += ['mochitest.ini'] diff --git a/dom/bindings/test/test_bug1123516_maplikesetlike.html b/dom/bindings/test/test_bug1123516_maplikesetlike.html new file mode 100644 index 000000000000..b5a74c0d4df9 --- /dev/null +++ b/dom/bindings/test/test_bug1123516_maplikesetlike.html @@ -0,0 +1,270 @@ + + + + + Test Maplike Interface + + + + + + + diff --git a/dom/bindings/test/test_bug1123516_maplikesetlikechrome.xul b/dom/bindings/test/test_bug1123516_maplikesetlikechrome.xul new file mode 100644 index 000000000000..4bc45cdddcde --- /dev/null +++ b/dom/bindings/test/test_bug1123516_maplikesetlikechrome.xul @@ -0,0 +1,68 @@ + + + + + + + + + + + Mozilla Bug 1123516 + + + + + diff --git a/dom/tests/mochitest/chrome/test_sandbox_bindings.xul b/dom/tests/mochitest/chrome/test_sandbox_bindings.xul index 4d472a31bf04..f58e1717b2c1 100644 --- a/dom/tests/mochitest/chrome/test_sandbox_bindings.xul +++ b/dom/tests/mochitest/chrome/test_sandbox_bindings.xul @@ -7,7 +7,10 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=741267 diff --git a/dom/webidl/TestInterfaceJSMaplikeSetlike.webidl b/dom/webidl/TestInterfaceJSMaplikeSetlike.webidl new file mode 100644 index 000000000000..22966a3f1b75 --- /dev/null +++ b/dom/webidl/TestInterfaceJSMaplikeSetlike.webidl @@ -0,0 +1,47 @@ +/* -*- 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/. + */ + +[Constructor(), + Pref="dom.expose_test_interfaces"] +interface TestInterfaceMaplike { + maplike; + void setInternal(DOMString aKey, long aValue); + void clearInternal(); + boolean deleteInternal(DOMString aKey); + boolean hasInternal(DOMString aKey); +}; + +[Constructor(), + Pref="dom.expose_test_interfaces"] +interface TestInterfaceMaplikeObject { + readonly maplike; + void setInternal(DOMString aKey); + void clearInternal(); + boolean deleteInternal(DOMString aKey); + boolean hasInternal(DOMString aKey); +}; + +[Pref="dom.expose_test_interfaces", + JSImplementation="@mozilla.org/dom/test-interface-js-maplike;1", + Constructor()] +interface TestInterfaceJSMaplike { + readonly maplike; + void setInternal(DOMString aKey, long aValue); + void clearInternal(); + boolean deleteInternal(DOMString aKey); +}; + +[Constructor(), + Pref="dom.expose_test_interfaces"] +interface TestInterfaceSetlike { + setlike; +}; + +[Constructor(), + Pref="dom.expose_test_interfaces"] +interface TestInterfaceSetlikeNode { + setlike; +}; diff --git a/dom/webidl/moz.build b/dom/webidl/moz.build index 6acc41aead29..058a08693570 100644 --- a/dom/webidl/moz.build +++ b/dom/webidl/moz.build @@ -643,7 +643,9 @@ WEBIDL_FILES += [ # We only expose our prefable test interfaces in debug builds, just to be on # the safe side. if CONFIG['MOZ_DEBUG']: - WEBIDL_FILES += ['TestInterfaceJS.webidl', 'TestInterfaceJSDictionaries.webidl'] + WEBIDL_FILES += ['TestInterfaceJS.webidl', + 'TestInterfaceJSDictionaries.webidl', + 'TestInterfaceJSMaplikeSetlike.webidl'] if CONFIG['MOZ_B2G_BT']: if CONFIG['MOZ_B2G_BT_API_V1']: diff --git a/mobile/android/installer/package-manifest.in b/mobile/android/installer/package-manifest.in index ae186b4285ff..1530c1ef7e57 100644 --- a/mobile/android/installer/package-manifest.in +++ b/mobile/android/installer/package-manifest.in @@ -449,6 +449,7 @@ #ifdef MOZ_DEBUG @BINPATH@/components/TestInterfaceJS.js @BINPATH@/components/TestInterfaceJS.manifest +@BINPATH@/components/TestInterfaceJSMaplike.js #endif @BINPATH@/components/nsAsyncShutdown.manifest From e09f6209c45730d01cedc764a9a37352a116a037 Mon Sep 17 00:00:00 2001 From: David Keeler Date: Fri, 12 Jun 2015 14:56:07 -0700 Subject: [PATCH 38/63] bug 1174292 - convert test_cert_version.js to generate certificates at build time r=Cykesiopka Also remove redundant test-cases. --- security/manager/ssl/tests/unit/moz.build | 1 + security/manager/ssl/tests/unit/pycert.py | 36 +- .../ssl/tests/unit/test_cert_version.js | 563 +++++------------- .../unit/test_cert_version/ca.pem.certspec | 4 + .../ee-v1-BC-cA_ca.pem.certspec | 4 + .../ee-v1-BC-not-cA_ca.pem.certspec | 4 + .../ee-v1-noBC_ca.pem.certspec | 3 + .../ee-v2-BC-cA_ca.pem.certspec | 4 + .../ee-v2-BC-not-cA_ca.pem.certspec | 4 + .../ee-v2-noBC_ca.pem.certspec | 3 + .../ee-v3-BC-cA_ca.pem.certspec | 4 + .../ee-v3-BC-not-cA_ca.pem.certspec | 4 + .../ee-v3-noBC_ca.pem.certspec | 3 + .../ee-v4-BC-cA_ca.pem.certspec | 4 + .../ee-v4-BC-not-cA_ca.pem.certspec | 4 + .../ee-v4-noBC_ca.pem.certspec | 3 + .../ee_int-v1-BC-cA.pem.certspec | 2 + .../ee_int-v1-BC-not-cA.pem.certspec | 2 + .../ee_int-v1-noBC.pem.certspec | 2 + .../ee_int-v2-BC-cA.pem.certspec | 2 + .../ee_int-v2-BC-not-cA.pem.certspec | 2 + .../ee_int-v2-noBC.pem.certspec | 2 + .../ee_int-v3-BC-cA.pem.certspec | 2 + .../ee_int-v3-BC-not-cA.pem.certspec | 2 + .../ee_int-v3-noBC.pem.certspec | 2 + .../ee_int-v4-BC-cA.pem.certspec | 2 + .../ee_int-v4-BC-not-cA.pem.certspec | 2 + .../ee_int-v4-noBC.pem.certspec | 2 + .../tests/unit/test_cert_version/generate.py | 147 +++-- .../int-v1-BC-cA_ca.pem.certspec | 5 + .../int-v1-BC-not-cA_ca.pem.certspec | 5 + .../int-v1-noBC_ca.pem.certspec | 4 + .../int-v2-BC-cA_ca.pem.certspec | 5 + .../int-v2-BC-not-cA_ca.pem.certspec | 5 + .../int-v2-noBC_ca.pem.certspec | 4 + .../int-v3-BC-cA_ca.pem.certspec | 5 + .../int-v3-BC-not-cA_ca.pem.certspec | 5 + .../int-v3-noBC_ca.pem.certspec | 4 + .../int-v4-BC-cA_ca.pem.certspec | 5 + .../int-v4-BC-not-cA_ca.pem.certspec | 5 + .../int-v4-noBC_ca.pem.certspec | 4 + .../tests/unit/test_cert_version/moz.build | 65 ++ .../ss-v1-BC-cA.pem.certspec | 4 + .../ss-v1-BC-not-cA.pem.certspec | 4 + .../test_cert_version/ss-v1-noBC.pem.certspec | 3 + .../ss-v2-BC-cA.pem.certspec | 4 + .../ss-v2-BC-not-cA.pem.certspec | 4 + .../test_cert_version/ss-v2-noBC.pem.certspec | 3 + .../ss-v3-BC-cA.pem.certspec | 4 + .../ss-v3-BC-not-cA.pem.certspec | 4 + .../test_cert_version/ss-v3-noBC.pem.certspec | 3 + .../ss-v4-BC-cA.pem.certspec | 4 + .../ss-v4-BC-not-cA.pem.certspec | 4 + .../test_cert_version/ss-v4-noBC.pem.certspec | 3 + .../v1_bc_ee-v1_int-v1_ca.der | Bin 864 -> 0 bytes .../v1_bc_ee-v1_int-v1_ca_bc.der | Bin 871 -> 0 bytes .../v1_bc_ee-v1_int-v2_ca.der | Bin 865 -> 0 bytes .../v1_bc_ee-v1_int-v2_ca_bc.der | Bin 871 -> 0 bytes .../v1_bc_ee-v1_int-v3_ca.der | Bin 864 -> 0 bytes .../v1_bc_ee-v1_int-v3_ca_missing_bc.der | Bin 886 -> 0 bytes .../v1_bc_ee-v1_int_bc-v1_ca.der | Bin 871 -> 0 bytes .../v1_bc_ee-v1_int_bc-v1_ca_bc.der | Bin 877 -> 0 bytes .../v1_bc_ee-v1_int_bc-v2_ca.der | Bin 870 -> 0 bytes .../v1_bc_ee-v1_int_bc-v2_ca_bc.der | Bin 877 -> 0 bytes .../v1_bc_ee-v1_int_bc-v3_ca.der | Bin 871 -> 0 bytes .../v1_bc_ee-v1_int_bc-v3_ca_missing_bc.der | Bin 893 -> 0 bytes .../v1_bc_ee-v2_int-v1_ca.der | Bin 865 -> 0 bytes .../v1_bc_ee-v2_int-v1_ca_bc.der | Bin 870 -> 0 bytes .../v1_bc_ee-v2_int-v2_ca.der | Bin 864 -> 0 bytes .../v1_bc_ee-v2_int-v2_ca_bc.der | Bin 871 -> 0 bytes .../v1_bc_ee-v2_int-v3_ca.der | Bin 865 -> 0 bytes .../v1_bc_ee-v2_int-v3_ca_missing_bc.der | Bin 886 -> 0 bytes .../v1_bc_ee-v2_int_bc-v1_ca.der | Bin 870 -> 0 bytes .../v1_bc_ee-v2_int_bc-v1_ca_bc.der | Bin 877 -> 0 bytes .../v1_bc_ee-v2_int_bc-v2_ca.der | Bin 870 -> 0 bytes .../v1_bc_ee-v2_int_bc-v2_ca_bc.der | Bin 877 -> 0 bytes .../v1_bc_ee-v2_int_bc-v3_ca.der | Bin 871 -> 0 bytes .../v1_bc_ee-v2_int_bc-v3_ca_missing_bc.der | Bin 892 -> 0 bytes .../v1_bc_ee-v3_int-v1_ca.der | Bin 865 -> 0 bytes .../v1_bc_ee-v3_int-v1_ca_bc.der | Bin 870 -> 0 bytes .../v1_bc_ee-v3_int-v2_ca.der | Bin 865 -> 0 bytes .../v1_bc_ee-v3_int-v2_ca_bc.der | Bin 871 -> 0 bytes .../v1_bc_ee-v3_int-v3_ca.der | Bin 865 -> 0 bytes .../v1_bc_ee-v3_int-v3_ca_missing_bc.der | Bin 887 -> 0 bytes .../v1_bc_ee-v3_int_missing_bc-v1_ca.der | Bin 887 -> 0 bytes .../v1_bc_ee-v3_int_missing_bc-v1_ca_bc.der | Bin 893 -> 0 bytes .../v1_bc_ee-v3_int_missing_bc-v2_ca.der | Bin 886 -> 0 bytes .../v1_bc_ee-v3_int_missing_bc-v2_ca_bc.der | Bin 893 -> 0 bytes .../v1_bc_ee-v3_int_missing_bc-v3_ca.der | Bin 887 -> 0 bytes ..._ee-v3_int_missing_bc-v3_ca_missing_bc.der | Bin 910 -> 0 bytes .../tests/unit/test_cert_version/v1_ca.der | Bin 828 -> 0 bytes .../tests/unit/test_cert_version/v1_ca_bc.der | Bin 852 -> 0 bytes .../test_cert_version/v1_ee-v1_int-v1_ca.der | Bin 847 -> 0 bytes .../v1_ee-v1_int-v1_ca_bc.der | Bin 853 -> 0 bytes .../test_cert_version/v1_ee-v1_int-v2_ca.der | Bin 847 -> 0 bytes .../v1_ee-v1_int-v2_ca_bc.der | Bin 853 -> 0 bytes .../test_cert_version/v1_ee-v1_int-v3_ca.der | Bin 847 -> 0 bytes .../v1_ee-v1_int-v3_ca_missing_bc.der | Bin 869 -> 0 bytes .../v1_ee-v1_int_bc-v1_ca.der | Bin 852 -> 0 bytes .../v1_ee-v1_int_bc-v1_ca_bc.der | Bin 859 -> 0 bytes .../v1_ee-v1_int_bc-v2_ca.der | Bin 852 -> 0 bytes .../v1_ee-v1_int_bc-v2_ca_bc.der | Bin 859 -> 0 bytes .../v1_ee-v1_int_bc-v3_ca.der | Bin 853 -> 0 bytes .../v1_ee-v1_int_bc-v3_ca_missing_bc.der | Bin 875 -> 0 bytes .../test_cert_version/v1_ee-v2_int-v1_ca.der | Bin 846 -> 0 bytes .../v1_ee-v2_int-v1_ca_bc.der | Bin 852 -> 0 bytes .../test_cert_version/v1_ee-v2_int-v2_ca.der | Bin 847 -> 0 bytes .../v1_ee-v2_int-v2_ca_bc.der | Bin 853 -> 0 bytes .../test_cert_version/v1_ee-v2_int-v3_ca.der | Bin 847 -> 0 bytes .../v1_ee-v2_int-v3_ca_missing_bc.der | Bin 869 -> 0 bytes .../v1_ee-v2_int_bc-v1_ca.der | Bin 853 -> 0 bytes .../v1_ee-v2_int_bc-v1_ca_bc.der | Bin 858 -> 0 bytes .../v1_ee-v2_int_bc-v2_ca.der | Bin 853 -> 0 bytes .../v1_ee-v2_int_bc-v2_ca_bc.der | Bin 858 -> 0 bytes .../v1_ee-v2_int_bc-v3_ca.der | Bin 852 -> 0 bytes .../v1_ee-v2_int_bc-v3_ca_missing_bc.der | Bin 874 -> 0 bytes .../test_cert_version/v1_ee-v3_int-v1_ca.der | Bin 846 -> 0 bytes .../v1_ee-v3_int-v1_ca_bc.der | Bin 853 -> 0 bytes .../test_cert_version/v1_ee-v3_int-v2_ca.der | Bin 847 -> 0 bytes .../v1_ee-v3_int-v2_ca_bc.der | Bin 853 -> 0 bytes .../test_cert_version/v1_ee-v3_int-v3_ca.der | Bin 847 -> 0 bytes .../v1_ee-v3_int-v3_ca_missing_bc.der | Bin 869 -> 0 bytes .../v1_ee-v3_int_missing_bc-v1_ca.der | Bin 869 -> 0 bytes .../v1_ee-v3_int_missing_bc-v1_ca_bc.der | Bin 874 -> 0 bytes .../v1_ee-v3_int_missing_bc-v2_ca.der | Bin 868 -> 0 bytes .../v1_ee-v3_int_missing_bc-v2_ca_bc.der | Bin 875 -> 0 bytes .../v1_ee-v3_int_missing_bc-v3_ca.der | Bin 868 -> 0 bytes ..._ee-v3_int_missing_bc-v3_ca_missing_bc.der | Bin 892 -> 0 bytes .../unit/test_cert_version/v1_int-v1_ca.der | Bin 834 -> 0 bytes .../test_cert_version/v1_int-v1_ca_bc.der | Bin 840 -> 0 bytes .../unit/test_cert_version/v1_int-v2_ca.der | Bin 834 -> 0 bytes .../test_cert_version/v1_int-v2_ca_bc.der | Bin 840 -> 0 bytes .../unit/test_cert_version/v1_int-v3_ca.der | Bin 833 -> 0 bytes .../v1_int-v3_ca_missing_bc.der | Bin 856 -> 0 bytes .../test_cert_version/v1_int_bc-v1_ca.der | Bin 854 -> 0 bytes .../test_cert_version/v1_int_bc-v1_ca_bc.der | Bin 861 -> 0 bytes .../test_cert_version/v1_int_bc-v2_ca.der | Bin 854 -> 0 bytes .../test_cert_version/v1_int_bc-v2_ca_bc.der | Bin 861 -> 0 bytes .../test_cert_version/v1_int_bc-v3_ca.der | Bin 855 -> 0 bytes .../v1_int_bc-v3_ca_missing_bc.der | Bin 877 -> 0 bytes .../unit/test_cert_version/v1_self_signed.der | Bin 846 -> 0 bytes .../test_cert_version/v1_self_signed_bc.der | Bin 867 -> 0 bytes .../v2_bc_ee-v1_int-v1_ca.der | Bin 870 -> 0 bytes .../v2_bc_ee-v1_int-v1_ca_bc.der | Bin 876 -> 0 bytes .../v2_bc_ee-v1_int-v2_ca.der | Bin 870 -> 0 bytes .../v2_bc_ee-v1_int-v2_ca_bc.der | Bin 876 -> 0 bytes .../v2_bc_ee-v1_int-v3_ca.der | Bin 869 -> 0 bytes .../v2_bc_ee-v1_int-v3_ca_missing_bc.der | Bin 891 -> 0 bytes .../v2_bc_ee-v1_int_bc-v1_ca.der | Bin 876 -> 0 bytes .../v2_bc_ee-v1_int_bc-v1_ca_bc.der | Bin 882 -> 0 bytes .../v2_bc_ee-v1_int_bc-v2_ca.der | Bin 876 -> 0 bytes .../v2_bc_ee-v1_int_bc-v2_ca_bc.der | Bin 882 -> 0 bytes .../v2_bc_ee-v1_int_bc-v3_ca.der | Bin 876 -> 0 bytes .../v2_bc_ee-v1_int_bc-v3_ca_missing_bc.der | Bin 898 -> 0 bytes .../v2_bc_ee-v2_int-v1_ca.der | Bin 870 -> 0 bytes .../v2_bc_ee-v2_int-v1_ca_bc.der | Bin 876 -> 0 bytes .../v2_bc_ee-v2_int-v2_ca.der | Bin 870 -> 0 bytes .../v2_bc_ee-v2_int-v2_ca_bc.der | Bin 875 -> 0 bytes .../v2_bc_ee-v2_int-v3_ca.der | Bin 870 -> 0 bytes .../v2_bc_ee-v2_int-v3_ca_missing_bc.der | Bin 891 -> 0 bytes .../v2_bc_ee-v2_int_bc-v1_ca.der | Bin 876 -> 0 bytes .../v2_bc_ee-v2_int_bc-v1_ca_bc.der | Bin 881 -> 0 bytes .../v2_bc_ee-v2_int_bc-v2_ca.der | Bin 876 -> 0 bytes .../v2_bc_ee-v2_int_bc-v2_ca_bc.der | Bin 881 -> 0 bytes .../v2_bc_ee-v2_int_bc-v3_ca.der | Bin 876 -> 0 bytes .../v2_bc_ee-v2_int_bc-v3_ca_missing_bc.der | Bin 898 -> 0 bytes .../v2_bc_ee-v3_int-v1_ca.der | Bin 870 -> 0 bytes .../v2_bc_ee-v3_int-v1_ca_bc.der | Bin 876 -> 0 bytes .../v2_bc_ee-v3_int-v2_ca.der | Bin 870 -> 0 bytes .../v2_bc_ee-v3_int-v2_ca_bc.der | Bin 876 -> 0 bytes .../v2_bc_ee-v3_int-v3_ca.der | Bin 869 -> 0 bytes .../v2_bc_ee-v3_int-v3_ca_missing_bc.der | Bin 891 -> 0 bytes .../v2_bc_ee-v3_int_missing_bc-v1_ca.der | Bin 892 -> 0 bytes .../v2_bc_ee-v3_int_missing_bc-v1_ca_bc.der | Bin 898 -> 0 bytes .../v2_bc_ee-v3_int_missing_bc-v2_ca.der | Bin 892 -> 0 bytes .../v2_bc_ee-v3_int_missing_bc-v2_ca_bc.der | Bin 898 -> 0 bytes .../v2_bc_ee-v3_int_missing_bc-v3_ca.der | Bin 892 -> 0 bytes ..._ee-v3_int_missing_bc-v3_ca_missing_bc.der | Bin 915 -> 0 bytes .../tests/unit/test_cert_version/v2_ca.der | Bin 833 -> 0 bytes .../tests/unit/test_cert_version/v2_ca_bc.der | Bin 857 -> 0 bytes .../test_cert_version/v2_ee-v1_int-v1_ca.der | Bin 852 -> 0 bytes .../v2_ee-v1_int-v1_ca_bc.der | Bin 858 -> 0 bytes .../test_cert_version/v2_ee-v1_int-v2_ca.der | Bin 852 -> 0 bytes .../v2_ee-v1_int-v2_ca_bc.der | Bin 858 -> 0 bytes .../test_cert_version/v2_ee-v1_int-v3_ca.der | Bin 851 -> 0 bytes .../v2_ee-v1_int-v3_ca_missing_bc.der | Bin 873 -> 0 bytes .../v2_ee-v1_int_bc-v1_ca.der | Bin 858 -> 0 bytes .../v2_ee-v1_int_bc-v1_ca_bc.der | Bin 864 -> 0 bytes .../v2_ee-v1_int_bc-v2_ca.der | Bin 858 -> 0 bytes .../v2_ee-v1_int_bc-v2_ca_bc.der | Bin 863 -> 0 bytes .../v2_ee-v1_int_bc-v3_ca.der | Bin 858 -> 0 bytes .../v2_ee-v1_int_bc-v3_ca_missing_bc.der | Bin 879 -> 0 bytes .../test_cert_version/v2_ee-v2_int-v1_ca.der | Bin 852 -> 0 bytes .../v2_ee-v2_int-v1_ca_bc.der | Bin 857 -> 0 bytes .../test_cert_version/v2_ee-v2_int-v2_ca.der | Bin 852 -> 0 bytes .../v2_ee-v2_int-v2_ca_bc.der | Bin 858 -> 0 bytes .../test_cert_version/v2_ee-v2_int-v3_ca.der | Bin 852 -> 0 bytes .../v2_ee-v2_int-v3_ca_missing_bc.der | Bin 874 -> 0 bytes .../v2_ee-v2_int_bc-v1_ca.der | Bin 857 -> 0 bytes .../v2_ee-v2_int_bc-v1_ca_bc.der | Bin 864 -> 0 bytes .../v2_ee-v2_int_bc-v2_ca.der | Bin 858 -> 0 bytes .../v2_ee-v2_int_bc-v2_ca_bc.der | Bin 863 -> 0 bytes .../v2_ee-v2_int_bc-v3_ca.der | Bin 858 -> 0 bytes .../v2_ee-v2_int_bc-v3_ca_missing_bc.der | Bin 880 -> 0 bytes .../test_cert_version/v2_ee-v3_int-v1_ca.der | Bin 852 -> 0 bytes .../v2_ee-v3_int-v1_ca_bc.der | Bin 858 -> 0 bytes .../test_cert_version/v2_ee-v3_int-v2_ca.der | Bin 852 -> 0 bytes .../v2_ee-v3_int-v2_ca_bc.der | Bin 857 -> 0 bytes .../test_cert_version/v2_ee-v3_int-v3_ca.der | Bin 852 -> 0 bytes .../v2_ee-v3_int-v3_ca_missing_bc.der | Bin 874 -> 0 bytes .../v2_ee-v3_int_missing_bc-v1_ca.der | Bin 874 -> 0 bytes .../v2_ee-v3_int_missing_bc-v1_ca_bc.der | Bin 880 -> 0 bytes .../v2_ee-v3_int_missing_bc-v2_ca.der | Bin 873 -> 0 bytes .../v2_ee-v3_int_missing_bc-v2_ca_bc.der | Bin 879 -> 0 bytes .../v2_ee-v3_int_missing_bc-v3_ca.der | Bin 874 -> 0 bytes ..._ee-v3_int_missing_bc-v3_ca_missing_bc.der | Bin 897 -> 0 bytes .../unit/test_cert_version/v2_int-v1_ca.der | Bin 838 -> 0 bytes .../test_cert_version/v2_int-v1_ca_bc.der | Bin 844 -> 0 bytes .../unit/test_cert_version/v2_int-v2_ca.der | Bin 839 -> 0 bytes .../test_cert_version/v2_int-v2_ca_bc.der | Bin 845 -> 0 bytes .../unit/test_cert_version/v2_int-v3_ca.der | Bin 839 -> 0 bytes .../v2_int-v3_ca_missing_bc.der | Bin 860 -> 0 bytes .../test_cert_version/v2_int_bc-v1_ca.der | Bin 860 -> 0 bytes .../test_cert_version/v2_int_bc-v1_ca_bc.der | Bin 866 -> 0 bytes .../test_cert_version/v2_int_bc-v2_ca.der | Bin 860 -> 0 bytes .../test_cert_version/v2_int_bc-v2_ca_bc.der | Bin 866 -> 0 bytes .../test_cert_version/v2_int_bc-v3_ca.der | Bin 860 -> 0 bytes .../v2_int_bc-v3_ca_missing_bc.der | Bin 882 -> 0 bytes .../unit/test_cert_version/v2_self_signed.der | Bin 719 -> 0 bytes .../test_cert_version/v2_self_signed_bc.der | Bin 740 -> 0 bytes .../v3_bc_ee-v1_int-v1_ca.der | Bin 870 -> 0 bytes .../v3_bc_ee-v1_int-v1_ca_bc.der | Bin 876 -> 0 bytes .../v3_bc_ee-v1_int-v2_ca.der | Bin 868 -> 0 bytes .../v3_bc_ee-v1_int-v2_ca_bc.der | Bin 876 -> 0 bytes .../v3_bc_ee-v1_int-v3_ca.der | Bin 870 -> 0 bytes .../v3_bc_ee-v1_int-v3_ca_missing_bc.der | Bin 891 -> 0 bytes .../v3_bc_ee-v1_int_bc-v1_ca.der | Bin 876 -> 0 bytes .../v3_bc_ee-v1_int_bc-v1_ca_bc.der | Bin 882 -> 0 bytes .../v3_bc_ee-v1_int_bc-v2_ca.der | Bin 876 -> 0 bytes .../v3_bc_ee-v1_int_bc-v2_ca_bc.der | Bin 882 -> 0 bytes .../v3_bc_ee-v1_int_bc-v3_ca.der | Bin 876 -> 0 bytes .../v3_bc_ee-v1_int_bc-v3_ca_missing_bc.der | Bin 898 -> 0 bytes .../v3_bc_ee-v2_int-v1_ca.der | Bin 870 -> 0 bytes .../v3_bc_ee-v2_int-v1_ca_bc.der | Bin 876 -> 0 bytes .../v3_bc_ee-v2_int-v2_ca.der | Bin 870 -> 0 bytes .../v3_bc_ee-v2_int-v2_ca_bc.der | Bin 876 -> 0 bytes .../v3_bc_ee-v2_int-v3_ca.der | Bin 870 -> 0 bytes .../v3_bc_ee-v2_int-v3_ca_missing_bc.der | Bin 892 -> 0 bytes .../v3_bc_ee-v2_int_bc-v1_ca.der | Bin 875 -> 0 bytes .../v3_bc_ee-v2_int_bc-v1_ca_bc.der | Bin 882 -> 0 bytes .../v3_bc_ee-v2_int_bc-v2_ca.der | Bin 876 -> 0 bytes .../v3_bc_ee-v2_int_bc-v2_ca_bc.der | Bin 882 -> 0 bytes .../v3_bc_ee-v2_int_bc-v3_ca.der | Bin 876 -> 0 bytes .../v3_bc_ee-v2_int_bc-v3_ca_missing_bc.der | Bin 898 -> 0 bytes .../v3_bc_ee-v3_int-v1_ca.der | Bin 870 -> 0 bytes .../v3_bc_ee-v3_int-v1_ca_bc.der | Bin 876 -> 0 bytes .../v3_bc_ee-v3_int-v2_ca.der | Bin 870 -> 0 bytes .../v3_bc_ee-v3_int-v2_ca_bc.der | Bin 876 -> 0 bytes .../v3_bc_ee-v3_int-v3_ca.der | Bin 870 -> 0 bytes .../v3_bc_ee-v3_int-v3_ca_missing_bc.der | Bin 892 -> 0 bytes .../v3_bc_ee-v3_int_missing_bc-v1_ca.der | Bin 892 -> 0 bytes .../v3_bc_ee-v3_int_missing_bc-v1_ca_bc.der | Bin 898 -> 0 bytes .../v3_bc_ee-v3_int_missing_bc-v2_ca.der | Bin 892 -> 0 bytes .../v3_bc_ee-v3_int_missing_bc-v2_ca_bc.der | Bin 898 -> 0 bytes .../v3_bc_ee-v3_int_missing_bc-v3_ca.der | Bin 892 -> 0 bytes ..._ee-v3_int_missing_bc-v3_ca_missing_bc.der | Bin 915 -> 0 bytes .../tests/unit/test_cert_version/v3_ca.der | Bin 851 -> 0 bytes .../test_cert_version/v3_ca_missing_bc.der | Bin 855 -> 0 bytes .../unit/test_cert_version/v3_int-v1_ca.der | Bin 857 -> 0 bytes .../test_cert_version/v3_int-v1_ca_bc.der | Bin 863 -> 0 bytes .../unit/test_cert_version/v3_int-v2_ca.der | Bin 857 -> 0 bytes .../test_cert_version/v3_int-v2_ca_bc.der | Bin 863 -> 0 bytes .../unit/test_cert_version/v3_int-v3_ca.der | Bin 857 -> 0 bytes .../v3_int-v3_ca_missing_bc.der | Bin 879 -> 0 bytes .../v3_int_missing_bc-v1_ca.der | Bin 850 -> 0 bytes .../v3_int_missing_bc-v1_ca_bc.der | Bin 855 -> 0 bytes .../v3_int_missing_bc-v2_ca.der | Bin 850 -> 0 bytes .../v3_int_missing_bc-v2_ca_bc.der | Bin 856 -> 0 bytes .../v3_int_missing_bc-v3_ca.der | Bin 850 -> 0 bytes .../v3_int_missing_bc-v3_ca_missing_bc.der | Bin 872 -> 0 bytes .../v3_missing_bc_ee-v1_int-v1_ca.der | Bin 863 -> 0 bytes .../v3_missing_bc_ee-v1_int-v1_ca_bc.der | Bin 869 -> 0 bytes .../v3_missing_bc_ee-v1_int-v2_ca.der | Bin 863 -> 0 bytes .../v3_missing_bc_ee-v1_int-v2_ca_bc.der | Bin 869 -> 0 bytes .../v3_missing_bc_ee-v1_int-v3_ca.der | Bin 863 -> 0 bytes ..._missing_bc_ee-v1_int-v3_ca_missing_bc.der | Bin 886 -> 0 bytes .../v3_missing_bc_ee-v1_int_bc-v1_ca.der | Bin 869 -> 0 bytes .../v3_missing_bc_ee-v1_int_bc-v1_ca_bc.der | Bin 875 -> 0 bytes .../v3_missing_bc_ee-v1_int_bc-v2_ca.der | Bin 868 -> 0 bytes .../v3_missing_bc_ee-v1_int_bc-v2_ca_bc.der | Bin 874 -> 0 bytes .../v3_missing_bc_ee-v1_int_bc-v3_ca.der | Bin 869 -> 0 bytes ...ssing_bc_ee-v1_int_bc-v3_ca_missing_bc.der | Bin 892 -> 0 bytes .../v3_missing_bc_ee-v2_int-v1_ca.der | Bin 863 -> 0 bytes .../v3_missing_bc_ee-v2_int-v1_ca_bc.der | Bin 869 -> 0 bytes .../v3_missing_bc_ee-v2_int-v2_ca.der | Bin 863 -> 0 bytes .../v3_missing_bc_ee-v2_int-v2_ca_bc.der | Bin 869 -> 0 bytes .../v3_missing_bc_ee-v2_int-v3_ca.der | Bin 863 -> 0 bytes ..._missing_bc_ee-v2_int-v3_ca_missing_bc.der | Bin 886 -> 0 bytes .../v3_missing_bc_ee-v2_int_bc-v1_ca.der | Bin 869 -> 0 bytes .../v3_missing_bc_ee-v2_int_bc-v1_ca_bc.der | Bin 875 -> 0 bytes .../v3_missing_bc_ee-v2_int_bc-v2_ca.der | Bin 869 -> 0 bytes .../v3_missing_bc_ee-v2_int_bc-v2_ca_bc.der | Bin 875 -> 0 bytes .../v3_missing_bc_ee-v2_int_bc-v3_ca.der | Bin 869 -> 0 bytes ...ssing_bc_ee-v2_int_bc-v3_ca_missing_bc.der | Bin 892 -> 0 bytes .../v3_missing_bc_ee-v3_int-v1_ca.der | Bin 863 -> 0 bytes .../v3_missing_bc_ee-v3_int-v1_ca_bc.der | Bin 868 -> 0 bytes .../v3_missing_bc_ee-v3_int-v2_ca.der | Bin 863 -> 0 bytes .../v3_missing_bc_ee-v3_int-v2_ca_bc.der | Bin 869 -> 0 bytes .../v3_missing_bc_ee-v3_int-v3_ca.der | Bin 863 -> 0 bytes ..._missing_bc_ee-v3_int-v3_ca_missing_bc.der | Bin 886 -> 0 bytes ..._missing_bc_ee-v3_int_missing_bc-v1_ca.der | Bin 885 -> 0 bytes ...ssing_bc_ee-v3_int_missing_bc-v1_ca_bc.der | Bin 891 -> 0 bytes ..._missing_bc_ee-v3_int_missing_bc-v2_ca.der | Bin 885 -> 0 bytes ...ssing_bc_ee-v3_int_missing_bc-v2_ca_bc.der | Bin 892 -> 0 bytes ..._missing_bc_ee-v3_int_missing_bc-v3_ca.der | Bin 886 -> 0 bytes ..._ee-v3_int_missing_bc-v3_ca_missing_bc.der | Bin 908 -> 0 bytes .../unit/test_cert_version/v3_self_signed.der | Bin 851 -> 0 bytes .../test_cert_version/v3_self_signed_bc.der | Bin 872 -> 0 bytes .../v4_bc_ee-v1_int-v1_ca.der | Bin 870 -> 0 bytes .../v4_bc_ee-v1_int-v1_ca_bc.der | Bin 876 -> 0 bytes .../v4_bc_ee-v1_int-v2_ca.der | Bin 870 -> 0 bytes .../v4_bc_ee-v1_int-v2_ca_bc.der | Bin 876 -> 0 bytes .../v4_bc_ee-v1_int-v3_ca.der | Bin 870 -> 0 bytes .../v4_bc_ee-v1_int-v3_ca_missing_bc.der | Bin 892 -> 0 bytes .../v4_bc_ee-v1_int_bc-v1_ca.der | Bin 875 -> 0 bytes .../v4_bc_ee-v1_int_bc-v1_ca_bc.der | Bin 881 -> 0 bytes .../v4_bc_ee-v1_int_bc-v2_ca.der | Bin 876 -> 0 bytes .../v4_bc_ee-v1_int_bc-v2_ca_bc.der | Bin 882 -> 0 bytes .../v4_bc_ee-v1_int_bc-v3_ca.der | Bin 876 -> 0 bytes .../v4_bc_ee-v1_int_bc-v3_ca_missing_bc.der | Bin 898 -> 0 bytes .../v4_bc_ee-v2_int-v1_ca.der | Bin 870 -> 0 bytes .../v4_bc_ee-v2_int-v1_ca_bc.der | Bin 876 -> 0 bytes .../v4_bc_ee-v2_int-v2_ca.der | Bin 869 -> 0 bytes .../v4_bc_ee-v2_int-v2_ca_bc.der | Bin 875 -> 0 bytes .../v4_bc_ee-v2_int-v3_ca.der | Bin 870 -> 0 bytes .../v4_bc_ee-v2_int-v3_ca_missing_bc.der | Bin 892 -> 0 bytes .../v4_bc_ee-v2_int_bc-v1_ca.der | Bin 875 -> 0 bytes .../v4_bc_ee-v2_int_bc-v1_ca_bc.der | Bin 882 -> 0 bytes .../v4_bc_ee-v2_int_bc-v2_ca.der | Bin 876 -> 0 bytes .../v4_bc_ee-v2_int_bc-v2_ca_bc.der | Bin 882 -> 0 bytes .../v4_bc_ee-v2_int_bc-v3_ca.der | Bin 876 -> 0 bytes .../v4_bc_ee-v2_int_bc-v3_ca_missing_bc.der | Bin 898 -> 0 bytes .../v4_bc_ee-v3_int-v1_ca.der | Bin 870 -> 0 bytes .../v4_bc_ee-v3_int-v1_ca_bc.der | Bin 875 -> 0 bytes .../v4_bc_ee-v3_int-v2_ca.der | Bin 869 -> 0 bytes .../v4_bc_ee-v3_int-v2_ca_bc.der | Bin 876 -> 0 bytes .../v4_bc_ee-v3_int-v3_ca.der | Bin 870 -> 0 bytes .../v4_bc_ee-v3_int-v3_ca_missing_bc.der | Bin 892 -> 0 bytes .../v4_bc_ee-v3_int_missing_bc-v1_ca.der | Bin 892 -> 0 bytes .../v4_bc_ee-v3_int_missing_bc-v1_ca_bc.der | Bin 898 -> 0 bytes .../v4_bc_ee-v3_int_missing_bc-v2_ca.der | Bin 892 -> 0 bytes .../v4_bc_ee-v3_int_missing_bc-v2_ca_bc.der | Bin 898 -> 0 bytes .../v4_bc_ee-v3_int_missing_bc-v3_ca.der | Bin 892 -> 0 bytes ..._ee-v3_int_missing_bc-v3_ca_missing_bc.der | Bin 914 -> 0 bytes .../unit/test_cert_version/v4_self_signed.der | Bin 851 -> 0 bytes .../test_cert_version/v4_self_signed_bc.der | Bin 872 -> 0 bytes 356 files changed, 473 insertions(+), 511 deletions(-) create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee-v1-BC-cA_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee-v1-BC-not-cA_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee-v1-noBC_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee-v2-BC-cA_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee-v2-BC-not-cA_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee-v2-noBC_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee-v3-BC-cA_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee-v3-BC-not-cA_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee-v3-noBC_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee-v4-BC-cA_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee-v4-BC-not-cA_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee-v4-noBC_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee_int-v1-BC-cA.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee_int-v1-BC-not-cA.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee_int-v1-noBC.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee_int-v2-BC-cA.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee_int-v2-BC-not-cA.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee_int-v2-noBC.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee_int-v3-BC-cA.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee_int-v3-BC-not-cA.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee_int-v3-noBC.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee_int-v4-BC-cA.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee_int-v4-BC-not-cA.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ee_int-v4-noBC.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/int-v1-BC-cA_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/int-v1-BC-not-cA_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/int-v1-noBC_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/int-v2-BC-cA_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/int-v2-BC-not-cA_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/int-v2-noBC_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/int-v3-BC-cA_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/int-v3-BC-not-cA_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/int-v3-noBC_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/int-v4-BC-cA_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/int-v4-BC-not-cA_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/int-v4-noBC_ca.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/moz.build create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ss-v1-BC-cA.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ss-v1-BC-not-cA.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ss-v1-noBC.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ss-v2-BC-cA.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ss-v2-BC-not-cA.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ss-v2-noBC.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ss-v3-BC-cA.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ss-v3-BC-not-cA.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ss-v3-noBC.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ss-v4-BC-cA.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ss-v4-BC-not-cA.pem.certspec create mode 100644 security/manager/ssl/tests/unit/test_cert_version/ss-v4-noBC.pem.certspec delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int_missing_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int_missing_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int_missing_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int_missing_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int_missing_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int_missing_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int_missing_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int_missing_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int_missing_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int_missing_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int_missing_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_int_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_int_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_int_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_int_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_int_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_int_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_self_signed.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v1_self_signed_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int_missing_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int_missing_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int_missing_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int_missing_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int_missing_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int_missing_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int_missing_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int_missing_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int_missing_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int_missing_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int_missing_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_int_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_int_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_int_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_int_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_int_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_int_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_self_signed.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v2_self_signed_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int_missing_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int_missing_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int_missing_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int_missing_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int_missing_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_int_missing_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_int_missing_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_int_missing_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_int_missing_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_int_missing_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_int_missing_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int_missing_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int_missing_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int_missing_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int_missing_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int_missing_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_self_signed.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v3_self_signed_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int_missing_bc-v1_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int_missing_bc-v1_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int_missing_bc-v2_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int_missing_bc-v2_ca_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int_missing_bc-v3_ca.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_self_signed.der delete mode 100644 security/manager/ssl/tests/unit/test_cert_version/v4_self_signed_bc.der diff --git a/security/manager/ssl/tests/unit/moz.build b/security/manager/ssl/tests/unit/moz.build index e840e6de15f7..85bea2f51150 100644 --- a/security/manager/ssl/tests/unit/moz.build +++ b/security/manager/ssl/tests/unit/moz.build @@ -9,6 +9,7 @@ TEST_DIRS += [ 'test_cert_eku', 'test_cert_keyUsage', 'test_cert_trust', + 'test_cert_version', 'test_intermediate_basic_usage_constraints', 'test_pinning_dynamic', ] diff --git a/security/manager/ssl/tests/unit/pycert.py b/security/manager/ssl/tests/unit/pycert.py index cde47b42be8a..bf8b7c8734d1 100755 --- a/security/manager/ssl/tests/unit/pycert.py +++ b/security/manager/ssl/tests/unit/pycert.py @@ -12,6 +12,7 @@ The input format is as follows: issuer: subject: +[version:<{1,2,3,4}>] [issuerKey:alternate] [subjectKey:alternate] [extension:>] @@ -26,6 +27,16 @@ extKeyUsage:[serverAuth,clientAuth,codeSigning,emailProtection OCSPSigning,timeStamping] subjectAlternativeName:[,...] +Where: + [] indicates an optional field or component of a field + <> indicates a required component of a field + {} indicates choice among a set of values + [a,b,c] indicates a list of potential values, of which more than one + may be used + +For instance, the version field is optional. However, if it is +specified, it must have exactly one value from the set {1,2,3,4}. + In the future it will be possible to specify other properties of the generated certificate (for example, its validity period, signature algorithm, etc.). For now, those fields have reasonable default values. @@ -104,6 +115,14 @@ class UnknownKeyTargetError(UnknownBaseError): self.category = 'key target' +class UnknownVersionError(UnknownBaseError): + """Helper exception type to handle unknown specified versions.""" + + def __init__(self, value): + UnknownBaseError.__init__(self, value) + self.category = 'version' + + def getASN1Tag(asn1Type): """Helper function for returning the base tag value of a given type from the pyasn1 package""" @@ -239,7 +258,7 @@ class Certificate: 'd039ba01adf328ebc5', 16) def __init__(self, paramStream, now=datetime.datetime.utcnow()): - self.version = 'v3' + self.versionValue = 2 # a value of 2 is X509v3 self.signature = 'sha256WithRSAEncryption' self.issuer = 'Default Issuer' oneYear = datetime.timedelta(days=365) @@ -264,7 +283,7 @@ class Certificate: the build system on OS X (see the comment above main, later in this file).""" hasher = hashlib.sha256() - hasher.update(self.version) + hasher.update(str(self.versionValue)) hasher.update(self.signature) hasher.update(self.issuer) hasher.update(str(self.notBefore)) @@ -295,7 +314,9 @@ class Certificate: def decodeParam(self, line): param = line.split(':')[0] value = ':'.join(line.split(':')[1:]) - if param == 'subject': + if param == 'version': + self.setVersion(value) + elif param == 'subject': self.subject = value elif param == 'issuer': self.issuer = value @@ -308,6 +329,13 @@ class Certificate: else: raise UnknownParameterTypeError(param) + def setVersion(self, version): + intVersion = int(version) + if intVersion >= 1 and intVersion <= 4: + self.versionValue = intVersion - 1 + else: + raise UnknownVersionError(version) + def decodeExtension(self, extension): extensionType = extension.split(':')[0] value = ':'.join(extension.split(':')[1:]) @@ -402,7 +430,7 @@ class Certificate: self.addExtension(rfc2459.id_ce_subjectAltName, subjectAlternativeName) def getVersion(self): - return rfc2459.Version(self.version).subtype( + return rfc2459.Version(self.versionValue).subtype( explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)) def getSerialNumber(self): diff --git a/security/manager/ssl/tests/unit/test_cert_version.js b/security/manager/ssl/tests/unit/test_cert_version.js index 49d2770def43..c51775888479 100644 --- a/security/manager/ssl/tests/unit/test_cert_version.js +++ b/security/manager/ssl/tests/unit/test_cert_version.js @@ -3,464 +3,173 @@ // 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/. +// Tests the interaction between the basic constraints extension and the +// certificate version field. In general, the testcases consist of verifying +// certificate chains of the form: +// +// end-entity (issued by) intermediate (issued by) trusted X509v3 root +// +// where the intermediate is one of X509 v1, v2, v3, or v4, and either does or +// does not have the basic constraints extension. If it has the extension, it +// either does or does not specify that it is a CA. +// +// To test cases where the trust anchor has a different version and/or does or +// does not have the basic constraint extension, there are testcases where the +// intermediate is trusted as an anchor and the verification is repeated. +// (Loading a certificate with trust "CTu,," means that it is a trust anchor +// for SSL. Loading a certificate with trust ",," means that it inherits its +// trust.) +// +// There are also testcases for end-entities issued by a trusted X509v3 root +// where the end-entities similarly cover the range of versions and basic +// constraint extensions. +// +// Finally, there are testcases for self-signed certificates that, again, cover +// the range of versions and basic constraint extensions. + "use strict"; do_get_profile(); // must be called before getting nsIX509CertDB const certdb = Cc["@mozilla.org/security/x509certdb;1"] .getService(Ci.nsIX509CertDB); -function cert_from_file(filename) { - return constructCertFromFile("test_cert_version/" + filename); +function certFromFile(certName) { + return constructCertFromFile("test_cert_version/" + certName + ".pem"); } -function load_cert(cert_name, trust_string) { - var cert_filename = cert_name + ".der"; - addCertFromFile(certdb, "test_cert_version/" + cert_filename, trust_string); +function loadCertWithTrust(certName, trustString) { + addCertFromFile(certdb, "test_cert_version/" + certName + ".pem", trustString); } -function check_cert_err(cert, expected_error) { - checkCertErrorGeneric(certdb, cert, expected_error, certificateUsageSSLServer); +function checkEndEntity(cert, expectedResult) { + checkCertErrorGeneric(certdb, cert, expectedResult, certificateUsageSSLServer); } -function check_ca_err(cert, expected_error) { - checkCertErrorGeneric(certdb, cert, expected_error, certificateUsageSSLCA); -} - -function check_ok(x) { - return check_cert_err(x, PRErrorCodeSuccess); -} - -function check_ok_ca(x) { - checkCertErrorGeneric(certdb, x, PRErrorCodeSuccess, certificateUsageSSLCA); +function checkIntermediate(cert, expectedResult) { + checkCertErrorGeneric(certdb, cert, expectedResult, certificateUsageSSLCA); } function run_test() { - load_cert("v1_ca", "CTu,CTu,CTu"); - load_cert("v1_ca_bc", "CTu,CTu,CTu"); - load_cert("v2_ca", "CTu,CTu,CTu"); - load_cert("v2_ca_bc", "CTu,CTu,CTu"); - load_cert("v3_ca", "CTu,CTu,CTu"); - load_cert("v3_ca_missing_bc", "CTu,CTu,CTu"); + loadCertWithTrust("ca", "CTu,,"); - check_ok_ca(cert_from_file('v1_ca.der')); - check_ok_ca(cert_from_file('v1_ca_bc.der')); - check_ca_err(cert_from_file('v2_ca.der'), SEC_ERROR_CA_CERT_INVALID); - check_ok_ca(cert_from_file('v2_ca_bc.der')); - check_ok_ca(cert_from_file('v3_ca.der')); - check_ca_err(cert_from_file('v3_ca_missing_bc.der'), SEC_ERROR_CA_CERT_INVALID); + // Section for CAs lacking the basicConstraints extension entirely: + loadCertWithTrust("int-v1-noBC_ca", ",,"); + checkIntermediate(certFromFile("int-v1-noBC_ca"), MOZILLA_PKIX_ERROR_V1_CERT_USED_AS_CA); + checkEndEntity(certFromFile("ee_int-v1-noBC"), MOZILLA_PKIX_ERROR_V1_CERT_USED_AS_CA); + // A v1 certificate with no basicConstraints extension may issue certificates + // if it is a trust anchor. + loadCertWithTrust("int-v1-noBC_ca", "CTu,,"); + checkIntermediate(certFromFile("int-v1-noBC_ca"), PRErrorCodeSuccess); + checkEndEntity(certFromFile("ee_int-v1-noBC"), PRErrorCodeSuccess); - // A v1 certificate may be a CA if it has a basic constraints extension with - // CA: TRUE or if it is a trust anchor. + loadCertWithTrust("int-v2-noBC_ca", ",,"); + checkIntermediate(certFromFile("int-v2-noBC_ca"), SEC_ERROR_CA_CERT_INVALID); + checkEndEntity(certFromFile("ee_int-v2-noBC"), SEC_ERROR_CA_CERT_INVALID); + loadCertWithTrust("int-v2-noBC_ca", "CTu,,"); + checkIntermediate(certFromFile("int-v2-noBC_ca"), SEC_ERROR_CA_CERT_INVALID); + checkEndEntity(certFromFile("ee_int-v2-noBC"), SEC_ERROR_CA_CERT_INVALID); - ////////////// - // v1 CA supersection - ////////////////// + loadCertWithTrust("int-v3-noBC_ca", ",,"); + checkIntermediate(certFromFile("int-v3-noBC_ca"), SEC_ERROR_CA_CERT_INVALID); + checkEndEntity(certFromFile("ee_int-v3-noBC"), SEC_ERROR_CA_CERT_INVALID); + loadCertWithTrust("int-v3-noBC_ca", "CTu,,"); + checkIntermediate(certFromFile("int-v3-noBC_ca"), SEC_ERROR_CA_CERT_INVALID); + checkEndEntity(certFromFile("ee_int-v3-noBC"), SEC_ERROR_CA_CERT_INVALID); - // v1 intermediate with v1 trust anchor - let error = MOZILLA_PKIX_ERROR_V1_CERT_USED_AS_CA; - check_ca_err(cert_from_file('v1_int-v1_ca.der'), error); - check_cert_err(cert_from_file('v1_ee-v1_int-v1_ca.der'), error); - check_cert_err(cert_from_file('v2_ee-v1_int-v1_ca.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v1_int-v1_ca.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v1_int-v1_ca.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v1_int-v1_ca.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v1_int-v1_ca.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v1_int-v1_ca.der'), error); + loadCertWithTrust("int-v4-noBC_ca", ",,"); + checkIntermediate(certFromFile("int-v4-noBC_ca"), SEC_ERROR_CA_CERT_INVALID); + checkEndEntity(certFromFile("ee_int-v4-noBC"), SEC_ERROR_CA_CERT_INVALID); + loadCertWithTrust("int-v4-noBC_ca", "CTu,,"); + checkIntermediate(certFromFile("int-v4-noBC_ca"), SEC_ERROR_CA_CERT_INVALID); + checkEndEntity(certFromFile("ee_int-v4-noBC"), SEC_ERROR_CA_CERT_INVALID); - // v1 intermediate with v3 extensions. - check_ok_ca(cert_from_file('v1_int_bc-v1_ca.der')); - check_ok(cert_from_file('v1_ee-v1_int_bc-v1_ca.der')); - check_ok(cert_from_file('v1_bc_ee-v1_int_bc-v1_ca.der')); - check_ok(cert_from_file('v2_ee-v1_int_bc-v1_ca.der')); - check_ok(cert_from_file('v2_bc_ee-v1_int_bc-v1_ca.der')); - check_ok(cert_from_file('v3_missing_bc_ee-v1_int_bc-v1_ca.der')); - check_ok(cert_from_file('v3_bc_ee-v1_int_bc-v1_ca.der')); - check_ok(cert_from_file('v4_bc_ee-v1_int_bc-v1_ca.der')); + // Section for CAs with basicConstraints not specifying cA: + loadCertWithTrust("int-v1-BC-not-cA_ca", ",,"); + checkIntermediate(certFromFile("int-v1-BC-not-cA_ca"), SEC_ERROR_CA_CERT_INVALID); + checkEndEntity(certFromFile("ee_int-v1-BC-not-cA"), SEC_ERROR_CA_CERT_INVALID); + loadCertWithTrust("int-v1-BC-not-cA_ca", "CTu,,"); + checkIntermediate(certFromFile("int-v1-BC-not-cA_ca"), SEC_ERROR_CA_CERT_INVALID); + checkEndEntity(certFromFile("ee_int-v1-BC-not-cA"), SEC_ERROR_CA_CERT_INVALID); - // A v2 intermediate with a v1 CA - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v2_int-v1_ca.der'), error); - check_cert_err(cert_from_file('v1_ee-v2_int-v1_ca.der'), error); - check_cert_err(cert_from_file('v2_ee-v2_int-v1_ca.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v2_int-v1_ca.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v2_int-v1_ca.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v2_int-v1_ca.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v2_int-v1_ca.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v2_int-v1_ca.der'), error); + loadCertWithTrust("int-v2-BC-not-cA_ca", ",,"); + checkIntermediate(certFromFile("int-v2-BC-not-cA_ca"), SEC_ERROR_CA_CERT_INVALID); + checkEndEntity(certFromFile("ee_int-v2-BC-not-cA"), SEC_ERROR_CA_CERT_INVALID); + loadCertWithTrust("int-v2-BC-not-cA_ca", "CTu,,"); + checkIntermediate(certFromFile("int-v2-BC-not-cA_ca"), SEC_ERROR_CA_CERT_INVALID); + checkEndEntity(certFromFile("ee_int-v2-BC-not-cA"), SEC_ERROR_CA_CERT_INVALID); - // A v2 intermediate with basic constraints - check_ok_ca(cert_from_file('v2_int_bc-v1_ca.der')); - check_ok(cert_from_file('v1_ee-v2_int_bc-v1_ca.der')); - check_ok(cert_from_file('v1_bc_ee-v2_int_bc-v1_ca.der')); - check_ok(cert_from_file('v2_ee-v2_int_bc-v1_ca.der')); - check_ok(cert_from_file('v2_bc_ee-v2_int_bc-v1_ca.der')); - check_ok(cert_from_file('v3_missing_bc_ee-v2_int_bc-v1_ca.der')); - check_ok(cert_from_file('v3_bc_ee-v2_int_bc-v1_ca.der')); - check_ok(cert_from_file('v4_bc_ee-v2_int_bc-v1_ca.der')); + loadCertWithTrust("int-v3-BC-not-cA_ca", ",,"); + checkIntermediate(certFromFile("int-v3-BC-not-cA_ca"), SEC_ERROR_CA_CERT_INVALID); + checkEndEntity(certFromFile("ee_int-v3-BC-not-cA"), SEC_ERROR_CA_CERT_INVALID); + loadCertWithTrust("int-v3-BC-not-cA_ca", "CTu,,"); + checkIntermediate(certFromFile("int-v3-BC-not-cA_ca"), SEC_ERROR_CA_CERT_INVALID); + checkEndEntity(certFromFile("ee_int-v3-BC-not-cA"), SEC_ERROR_CA_CERT_INVALID); - // Section is OK. A x509 v3 CA MUST have bc - // http://tools.ietf.org/html/rfc5280#section-4.2.1.9 - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v3_int_missing_bc-v1_ca.der'), error); - check_cert_err(cert_from_file('v1_ee-v3_int_missing_bc-v1_ca.der'), error); - check_cert_err(cert_from_file('v2_ee-v3_int_missing_bc-v1_ca.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v3_int_missing_bc-v1_ca.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v3_int_missing_bc-v1_ca.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v3_int_missing_bc-v1_ca.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v3_int_missing_bc-v1_ca.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v3_int_missing_bc-v1_ca.der'), error); + loadCertWithTrust("int-v4-BC-not-cA_ca", ",,"); + checkIntermediate(certFromFile("int-v4-BC-not-cA_ca"), SEC_ERROR_CA_CERT_INVALID); + checkEndEntity(certFromFile("ee_int-v4-BC-not-cA"), SEC_ERROR_CA_CERT_INVALID); + loadCertWithTrust("int-v4-BC-not-cA_ca", "CTu,,"); + checkIntermediate(certFromFile("int-v4-BC-not-cA_ca"), SEC_ERROR_CA_CERT_INVALID); + checkEndEntity(certFromFile("ee_int-v4-BC-not-cA"), SEC_ERROR_CA_CERT_INVALID); - // It is valid for a v1 ca to sign a v3 intemediate. - check_ok_ca(cert_from_file('v3_int-v1_ca.der')); - check_ok(cert_from_file('v1_ee-v3_int-v1_ca.der')); - check_ok(cert_from_file('v2_ee-v3_int-v1_ca.der')); - check_ok(cert_from_file('v3_missing_bc_ee-v3_int-v1_ca.der')); - check_ok(cert_from_file('v3_bc_ee-v3_int-v1_ca.der')); - check_ok(cert_from_file('v1_bc_ee-v3_int-v1_ca.der')); - check_ok(cert_from_file('v2_bc_ee-v3_int-v1_ca.der')); - check_ok(cert_from_file('v4_bc_ee-v3_int-v1_ca.der')); + // Section for CAs with basicConstraints specifying cA: + loadCertWithTrust("int-v1-BC-cA_ca", ",,"); + checkIntermediate(certFromFile("int-v1-BC-cA_ca"), PRErrorCodeSuccess); + checkEndEntity(certFromFile("ee_int-v1-BC-cA"), PRErrorCodeSuccess); + loadCertWithTrust("int-v1-BC-cA_ca", "CTu,,"); + checkIntermediate(certFromFile("int-v1-BC-cA_ca"), PRErrorCodeSuccess); + checkEndEntity(certFromFile("ee_int-v1-BC-cA"), PRErrorCodeSuccess); - // The next groups change the v1 ca for a v1 ca with base constraints - // (invalid trust anchor). The error pattern is the same as the groups - // above + loadCertWithTrust("int-v2-BC-cA_ca", ",,"); + checkIntermediate(certFromFile("int-v2-BC-cA_ca"), PRErrorCodeSuccess); + checkEndEntity(certFromFile("ee_int-v2-BC-cA"), PRErrorCodeSuccess); + loadCertWithTrust("int-v2-BC-cA_ca", "CTu,,"); + checkIntermediate(certFromFile("int-v2-BC-cA_ca"), PRErrorCodeSuccess); + checkEndEntity(certFromFile("ee_int-v2-BC-cA"), PRErrorCodeSuccess); - // Using A v1 intermediate - error = MOZILLA_PKIX_ERROR_V1_CERT_USED_AS_CA; - check_ca_err(cert_from_file('v1_int-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v1_ee-v1_int-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v2_ee-v1_int-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v1_int-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v1_int-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v1_int-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v1_int-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v1_int-v1_ca_bc.der'), error); + loadCertWithTrust("int-v3-BC-cA_ca", ",,"); + checkIntermediate(certFromFile("int-v3-BC-cA_ca"), PRErrorCodeSuccess); + checkEndEntity(certFromFile("ee_int-v3-BC-cA"), PRErrorCodeSuccess); + loadCertWithTrust("int-v3-BC-cA_ca", "CTu,,"); + checkIntermediate(certFromFile("int-v3-BC-cA_ca"), PRErrorCodeSuccess); + checkEndEntity(certFromFile("ee_int-v3-BC-cA"), PRErrorCodeSuccess); - // Using a v1 intermediate with v3 extenstions - check_ok_ca(cert_from_file('v1_int_bc-v1_ca_bc.der')); - check_ok(cert_from_file('v1_ee-v1_int_bc-v1_ca_bc.der')); - check_ok(cert_from_file('v1_bc_ee-v1_int_bc-v1_ca_bc.der')); - check_ok(cert_from_file('v2_ee-v1_int_bc-v1_ca_bc.der')); - check_ok(cert_from_file('v2_bc_ee-v1_int_bc-v1_ca_bc.der')); - check_ok(cert_from_file('v3_missing_bc_ee-v1_int_bc-v1_ca_bc.der')); - check_ok(cert_from_file('v3_bc_ee-v1_int_bc-v1_ca_bc.der')); - check_ok(cert_from_file('v4_bc_ee-v1_int_bc-v1_ca_bc.der')); + loadCertWithTrust("int-v4-BC-cA_ca", ",,"); + checkIntermediate(certFromFile("int-v4-BC-cA_ca"), PRErrorCodeSuccess); + checkEndEntity(certFromFile("ee_int-v4-BC-cA"), PRErrorCodeSuccess); + loadCertWithTrust("int-v4-BC-cA_ca", "CTu,,"); + checkIntermediate(certFromFile("int-v4-BC-cA_ca"), PRErrorCodeSuccess); + checkEndEntity(certFromFile("ee_int-v4-BC-cA"), PRErrorCodeSuccess); - // Using v2 intermediate - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v2_int-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v1_ee-v2_int-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v2_ee-v2_int-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v2_int-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v2_int-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v2_int-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v2_int-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v2_int-v1_ca_bc.der'), error); + // Section for end-entity certificates with various basicConstraints: + checkEndEntity(certFromFile("ee-v1-noBC_ca"), PRErrorCodeSuccess); + checkEndEntity(certFromFile("ee-v2-noBC_ca"), PRErrorCodeSuccess); + checkEndEntity(certFromFile("ee-v3-noBC_ca"), PRErrorCodeSuccess); + checkEndEntity(certFromFile("ee-v4-noBC_ca"), PRErrorCodeSuccess); - // Using a v2 intermediate with basic constraints - check_ok_ca(cert_from_file('v2_int_bc-v1_ca_bc.der')); - check_ok(cert_from_file('v1_ee-v2_int_bc-v1_ca_bc.der')); - check_ok(cert_from_file('v1_bc_ee-v2_int_bc-v1_ca_bc.der')); - check_ok(cert_from_file('v2_ee-v2_int_bc-v1_ca_bc.der')); - check_ok(cert_from_file('v2_bc_ee-v2_int_bc-v1_ca_bc.der')); - check_ok(cert_from_file('v3_missing_bc_ee-v2_int_bc-v1_ca_bc.der')); - check_ok(cert_from_file('v3_bc_ee-v2_int_bc-v1_ca_bc.der')); - check_ok(cert_from_file('v4_bc_ee-v2_int_bc-v1_ca_bc.der')); + checkEndEntity(certFromFile("ee-v1-BC-not-cA_ca"), PRErrorCodeSuccess); + checkEndEntity(certFromFile("ee-v2-BC-not-cA_ca"), PRErrorCodeSuccess); + checkEndEntity(certFromFile("ee-v3-BC-not-cA_ca"), PRErrorCodeSuccess); + checkEndEntity(certFromFile("ee-v4-BC-not-cA_ca"), PRErrorCodeSuccess); - // Using a v3 intermediate that is missing basic constraints (invalid) - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v3_int_missing_bc-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v1_ee-v3_int_missing_bc-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v2_ee-v3_int_missing_bc-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v3_int_missing_bc-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v3_int_missing_bc-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v3_int_missing_bc-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v3_int_missing_bc-v1_ca_bc.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v3_int_missing_bc-v1_ca_bc.der'), error); + checkEndEntity(certFromFile("ee-v1-BC-cA_ca"), MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY); + checkEndEntity(certFromFile("ee-v2-BC-cA_ca"), MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY); + checkEndEntity(certFromFile("ee-v3-BC-cA_ca"), MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY); + checkEndEntity(certFromFile("ee-v4-BC-cA_ca"), MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY); - // these should pass assuming we are OK with v1 ca signing v3 intermediates - check_ok_ca(cert_from_file('v3_int-v1_ca_bc.der')); - check_ok(cert_from_file('v1_ee-v3_int-v1_ca_bc.der')); - check_ok(cert_from_file('v1_bc_ee-v3_int-v1_ca_bc.der')); - check_ok(cert_from_file('v2_ee-v3_int-v1_ca_bc.der')); - check_ok(cert_from_file('v2_bc_ee-v3_int-v1_ca_bc.der')); - check_ok(cert_from_file('v3_missing_bc_ee-v3_int-v1_ca_bc.der')); - check_ok(cert_from_file('v3_bc_ee-v3_int-v1_ca_bc.der')); - check_ok(cert_from_file('v4_bc_ee-v3_int-v1_ca_bc.der')); + // Section for self-signed certificates: + checkEndEntity(certFromFile("ss-v1-noBC"), SEC_ERROR_UNKNOWN_ISSUER); + checkEndEntity(certFromFile("ss-v2-noBC"), SEC_ERROR_UNKNOWN_ISSUER); + checkEndEntity(certFromFile("ss-v3-noBC"), SEC_ERROR_UNKNOWN_ISSUER); + checkEndEntity(certFromFile("ss-v4-noBC"), SEC_ERROR_UNKNOWN_ISSUER); + checkEndEntity(certFromFile("ss-v1-BC-not-cA"), SEC_ERROR_UNKNOWN_ISSUER); + checkEndEntity(certFromFile("ss-v2-BC-not-cA"), SEC_ERROR_UNKNOWN_ISSUER); + checkEndEntity(certFromFile("ss-v3-BC-not-cA"), SEC_ERROR_UNKNOWN_ISSUER); + checkEndEntity(certFromFile("ss-v4-BC-not-cA"), SEC_ERROR_UNKNOWN_ISSUER); - ////////////// - // v2 CA supersection - ////////////////// - - // v2 ca, v1 intermediate - error = MOZILLA_PKIX_ERROR_V1_CERT_USED_AS_CA; - check_ca_err(cert_from_file('v1_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v1_ee-v1_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v2_ee-v1_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v1_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v1_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v1_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v1_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v1_int-v2_ca.der'), error); - - // v2 ca, v1 intermediate with basic constraints (invalid) - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v1_int_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v1_ee-v1_int_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v1_int_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v2_ee-v1_int_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v1_int_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v1_int_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v1_int_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v1_int_bc-v2_ca.der'), error); - - // v2 ca, v2 intermediate - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v2_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v1_ee-v2_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v2_ee-v2_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v2_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v2_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v2_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v2_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v2_int-v2_ca.der'), error); - - // v2 ca, v2 intermediate with basic constraints (invalid) - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v1_int_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v1_ee-v1_int_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v1_int_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v2_ee-v1_int_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v1_int_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v1_int_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v1_int_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v1_int_bc-v2_ca.der'), error); - - // v2 ca, v3 intermediate missing basic constraints - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v3_int_missing_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v1_ee-v3_int_missing_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v2_ee-v3_int_missing_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v3_int_missing_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v3_int_missing_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v3_int_missing_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v3_int_missing_bc-v2_ca.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v3_int_missing_bc-v2_ca.der'), error); - - // v2 ca, v3 intermediate - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v3_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v1_ee-v3_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v2_ee-v3_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v3_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v3_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v3_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v3_int-v2_ca.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v3_int-v2_ca.der'), error); - - // v2 ca, v1 intermediate - error = MOZILLA_PKIX_ERROR_V1_CERT_USED_AS_CA; - check_ca_err(cert_from_file('v1_int-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v1_ee-v1_int-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v2_ee-v1_int-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v1_int-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v1_int-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v1_int-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v1_int-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v1_int-v2_ca_bc.der'), error); - - // v2 ca, v1 intermediate with bc - check_ok_ca(cert_from_file('v1_int_bc-v2_ca_bc.der')); - check_ok(cert_from_file('v1_ee-v1_int_bc-v2_ca_bc.der')); - check_ok(cert_from_file('v1_bc_ee-v1_int_bc-v2_ca_bc.der')); - check_ok(cert_from_file('v2_ee-v1_int_bc-v2_ca_bc.der')); - check_ok(cert_from_file('v2_bc_ee-v1_int_bc-v2_ca_bc.der')); - check_ok(cert_from_file('v3_missing_bc_ee-v1_int_bc-v2_ca_bc.der')); - check_ok(cert_from_file('v3_bc_ee-v1_int_bc-v2_ca_bc.der')); - check_ok(cert_from_file('v4_bc_ee-v1_int_bc-v2_ca_bc.der')); - - // v2 ca, v2 intermediate - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v2_int-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v1_ee-v2_int-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v2_ee-v2_int-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v2_int-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v2_int-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v2_int-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v2_int-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v2_int-v2_ca_bc.der'), error); - - // v2 ca, v2 intermediate with bc - check_ok_ca(cert_from_file('v2_int_bc-v2_ca_bc.der')); - check_ok(cert_from_file('v1_ee-v2_int_bc-v2_ca_bc.der')); - check_ok(cert_from_file('v1_bc_ee-v2_int_bc-v2_ca_bc.der')); - check_ok(cert_from_file('v2_ee-v2_int_bc-v2_ca_bc.der')); - check_ok(cert_from_file('v2_bc_ee-v2_int_bc-v2_ca_bc.der')); - check_ok(cert_from_file('v3_missing_bc_ee-v2_int_bc-v2_ca_bc.der')); - check_ok(cert_from_file('v3_bc_ee-v2_int_bc-v2_ca_bc.der')); - check_ok(cert_from_file('v4_bc_ee-v2_int_bc-v2_ca_bc.der')); - - // v2 ca, invalid v3 intermediate - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v3_int_missing_bc-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v1_ee-v3_int_missing_bc-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v2_ee-v3_int_missing_bc-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v3_int_missing_bc-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v3_int_missing_bc-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v3_int_missing_bc-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v3_int_missing_bc-v2_ca_bc.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v3_int_missing_bc-v2_ca_bc.der'), error); - - // v2 ca, valid v3 intermediate - check_ok_ca(cert_from_file('v3_int-v2_ca_bc.der')); - check_ok(cert_from_file('v1_ee-v3_int-v2_ca_bc.der')); - check_ok(cert_from_file('v1_bc_ee-v3_int-v2_ca_bc.der')); - check_ok(cert_from_file('v2_ee-v3_int-v2_ca_bc.der')); - check_ok(cert_from_file('v2_bc_ee-v3_int-v2_ca_bc.der')); - check_ok(cert_from_file('v3_missing_bc_ee-v3_int-v2_ca_bc.der')); - check_ok(cert_from_file('v3_bc_ee-v3_int-v2_ca_bc.der')); - check_ok(cert_from_file('v4_bc_ee-v3_int-v2_ca_bc.der')); - - ////////////// - // v3 CA supersection - ////////////////// - - // v3 ca, v1 intermediate - error = MOZILLA_PKIX_ERROR_V1_CERT_USED_AS_CA; - check_ca_err(cert_from_file('v1_int-v3_ca.der'), error); - check_cert_err(cert_from_file('v1_ee-v1_int-v3_ca.der'), error); - check_cert_err(cert_from_file('v2_ee-v1_int-v3_ca.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v1_int-v3_ca.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v1_int-v3_ca.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v1_int-v3_ca.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v1_int-v3_ca.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v1_int-v3_ca.der'), error); - - // A v1 intermediate with v3 extensions - check_ok_ca(cert_from_file('v1_int_bc-v3_ca.der')); - check_ok(cert_from_file('v1_ee-v1_int_bc-v3_ca.der')); - check_ok(cert_from_file('v1_bc_ee-v1_int_bc-v3_ca.der')); - check_ok(cert_from_file('v2_ee-v1_int_bc-v3_ca.der')); - check_ok(cert_from_file('v2_bc_ee-v1_int_bc-v3_ca.der')); - check_ok(cert_from_file('v3_missing_bc_ee-v1_int_bc-v3_ca.der')); - check_ok(cert_from_file('v3_bc_ee-v1_int_bc-v3_ca.der')); - check_ok(cert_from_file('v4_bc_ee-v1_int_bc-v3_ca.der')); - - // reject a v2 cert as intermediate - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v2_int-v3_ca.der'), error); - check_cert_err(cert_from_file('v1_ee-v2_int-v3_ca.der'), error); - check_cert_err(cert_from_file('v2_ee-v2_int-v3_ca.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v2_int-v3_ca.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v2_int-v3_ca.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v2_int-v3_ca.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v2_int-v3_ca.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v2_int-v3_ca.der'), error); - - // v2 intermediate with bc (invalid) - check_ok_ca(cert_from_file('v2_int_bc-v3_ca.der')); - check_ok(cert_from_file('v1_ee-v2_int_bc-v3_ca.der')); - check_ok(cert_from_file('v1_bc_ee-v2_int_bc-v3_ca.der')); - check_ok(cert_from_file('v2_ee-v2_int_bc-v3_ca.der')); - check_ok(cert_from_file('v2_bc_ee-v2_int_bc-v3_ca.der')); - check_ok(cert_from_file('v3_missing_bc_ee-v2_int_bc-v3_ca.der')); - check_ok(cert_from_file('v3_bc_ee-v2_int_bc-v3_ca.der')); - check_ok(cert_from_file('v4_bc_ee-v2_int_bc-v3_ca.der')); - - // invalid v3 intermediate - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v3_int_missing_bc-v3_ca.der'), error); - check_cert_err(cert_from_file('v1_ee-v3_int_missing_bc-v3_ca.der'), error); - check_cert_err(cert_from_file('v2_ee-v3_int_missing_bc-v3_ca.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v3_int_missing_bc-v3_ca.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v3_int_missing_bc-v3_ca.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v3_int_missing_bc-v3_ca.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v3_int_missing_bc-v3_ca.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v3_int_missing_bc-v3_ca.der'), error); - - // v1/v2 end entity, v3 intermediate - check_ok_ca(cert_from_file('v3_int-v3_ca.der')); - check_ok(cert_from_file('v1_ee-v3_int-v3_ca.der')); - check_ok(cert_from_file('v2_ee-v3_int-v3_ca.der')); - check_ok(cert_from_file('v3_missing_bc_ee-v3_int-v3_ca.der')); - check_ok(cert_from_file('v3_bc_ee-v3_int-v3_ca.der')); - check_ok(cert_from_file('v1_bc_ee-v3_int-v3_ca.der')); - check_ok(cert_from_file('v2_bc_ee-v3_int-v3_ca.der')); - check_ok(cert_from_file('v4_bc_ee-v3_int-v3_ca.der')); - - // v3 CA, invalid v3 intermediate - error = MOZILLA_PKIX_ERROR_V1_CERT_USED_AS_CA; - check_ca_err(cert_from_file('v1_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v1_ee-v1_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v2_ee-v1_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v1_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v1_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v1_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v1_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v1_int-v3_ca_missing_bc.der'), error); - - // Int v1 with BC that is just invalid - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v1_int_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v1_ee-v1_int_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v1_int_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v2_ee-v1_int_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v1_int_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v1_int_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v1_int_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v1_int_bc-v3_ca_missing_bc.der'), error); - - // Good section (all fail) - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v2_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v1_ee-v2_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v2_ee-v2_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v2_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v2_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v2_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v2_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v2_int-v3_ca_missing_bc.der'), error); - - // v3 intermediate missing basic constraints is invalid - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v2_int_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v1_ee-v2_int_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v2_int_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v2_ee-v2_int_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v2_int_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v2_int_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v2_int_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v2_int_bc-v3_ca_missing_bc.der'), error); - - // v3 intermediate missing basic constraints is invalid - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v3_int_missing_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v1_ee-v3_int_missing_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v2_ee-v3_int_missing_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der'), error); - - // With a v3 root missing bc and valid v3 intermediate - error = SEC_ERROR_CA_CERT_INVALID; - check_ca_err(cert_from_file('v3_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v1_ee-v3_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v2_ee-v3_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v3_missing_bc_ee-v3_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v3_bc_ee-v3_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v1_bc_ee-v3_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v2_bc_ee-v3_int-v3_ca_missing_bc.der'), error); - check_cert_err(cert_from_file('v4_bc_ee-v3_int-v3_ca_missing_bc.der'), error); - - // self-signed - check_cert_err(cert_from_file('v1_self_signed.der'), SEC_ERROR_UNKNOWN_ISSUER); - check_cert_err(cert_from_file('v1_self_signed_bc.der'), SEC_ERROR_UNKNOWN_ISSUER); - check_cert_err(cert_from_file('v2_self_signed.der'), SEC_ERROR_UNKNOWN_ISSUER); - check_cert_err(cert_from_file('v2_self_signed_bc.der'), SEC_ERROR_UNKNOWN_ISSUER); - check_cert_err(cert_from_file('v3_self_signed.der'), SEC_ERROR_UNKNOWN_ISSUER); - check_cert_err(cert_from_file('v3_self_signed_bc.der'), SEC_ERROR_UNKNOWN_ISSUER); - check_cert_err(cert_from_file('v4_self_signed.der'), SEC_ERROR_UNKNOWN_ISSUER); - check_cert_err(cert_from_file('v4_self_signed_bc.der'), SEC_ERROR_UNKNOWN_ISSUER); + checkEndEntity(certFromFile("ss-v1-BC-cA"), SEC_ERROR_UNKNOWN_ISSUER); + checkEndEntity(certFromFile("ss-v2-BC-cA"), SEC_ERROR_UNKNOWN_ISSUER); + checkEndEntity(certFromFile("ss-v3-BC-cA"), SEC_ERROR_UNKNOWN_ISSUER); + checkEndEntity(certFromFile("ss-v4-BC-cA"), SEC_ERROR_UNKNOWN_ISSUER); } diff --git a/security/manager/ssl/tests/unit/test_cert_version/ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ca.pem.certspec new file mode 100644 index 000000000000..8689ef9ea145 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ca.pem.certspec @@ -0,0 +1,4 @@ +issuer:ca +subject:ca +extension:keyUsage:keyCertSign,cRLSign +extension:basicConstraints:cA, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee-v1-BC-cA_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee-v1-BC-cA_ca.pem.certspec new file mode 100644 index 000000000000..4570e6e3ff48 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee-v1-BC-cA_ca.pem.certspec @@ -0,0 +1,4 @@ +issuer:ca +subject:ee-v1-BC-cA +version:1 +extension:basicConstraints:cA, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee-v1-BC-not-cA_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee-v1-BC-not-cA_ca.pem.certspec new file mode 100644 index 000000000000..f4257841fe01 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee-v1-BC-not-cA_ca.pem.certspec @@ -0,0 +1,4 @@ +issuer:ca +subject:ee-v1-BC-not-cA +version:1 +extension:basicConstraints:, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee-v1-noBC_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee-v1-noBC_ca.pem.certspec new file mode 100644 index 000000000000..48fe9e5416bd --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee-v1-noBC_ca.pem.certspec @@ -0,0 +1,3 @@ +issuer:ca +subject:ee-v1-noBC +version:1 diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee-v2-BC-cA_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee-v2-BC-cA_ca.pem.certspec new file mode 100644 index 000000000000..f714725d2bc1 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee-v2-BC-cA_ca.pem.certspec @@ -0,0 +1,4 @@ +issuer:ca +subject:ee-v2-BC-cA +version:2 +extension:basicConstraints:cA, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee-v2-BC-not-cA_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee-v2-BC-not-cA_ca.pem.certspec new file mode 100644 index 000000000000..db7228881474 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee-v2-BC-not-cA_ca.pem.certspec @@ -0,0 +1,4 @@ +issuer:ca +subject:ee-v2-BC-not-cA +version:2 +extension:basicConstraints:, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee-v2-noBC_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee-v2-noBC_ca.pem.certspec new file mode 100644 index 000000000000..cc304ab87e15 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee-v2-noBC_ca.pem.certspec @@ -0,0 +1,3 @@ +issuer:ca +subject:ee-v2-noBC +version:2 diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee-v3-BC-cA_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee-v3-BC-cA_ca.pem.certspec new file mode 100644 index 000000000000..6f69c35743dd --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee-v3-BC-cA_ca.pem.certspec @@ -0,0 +1,4 @@ +issuer:ca +subject:ee-v3-BC-cA +version:3 +extension:basicConstraints:cA, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee-v3-BC-not-cA_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee-v3-BC-not-cA_ca.pem.certspec new file mode 100644 index 000000000000..4a9de0635840 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee-v3-BC-not-cA_ca.pem.certspec @@ -0,0 +1,4 @@ +issuer:ca +subject:ee-v3-BC-not-cA +version:3 +extension:basicConstraints:, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee-v3-noBC_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee-v3-noBC_ca.pem.certspec new file mode 100644 index 000000000000..9d385900f0da --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee-v3-noBC_ca.pem.certspec @@ -0,0 +1,3 @@ +issuer:ca +subject:ee-v3-noBC +version:3 diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee-v4-BC-cA_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee-v4-BC-cA_ca.pem.certspec new file mode 100644 index 000000000000..1f44c1dd27ab --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee-v4-BC-cA_ca.pem.certspec @@ -0,0 +1,4 @@ +issuer:ca +subject:ee-v4-BC-cA +version:4 +extension:basicConstraints:cA, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee-v4-BC-not-cA_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee-v4-BC-not-cA_ca.pem.certspec new file mode 100644 index 000000000000..e9659153e521 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee-v4-BC-not-cA_ca.pem.certspec @@ -0,0 +1,4 @@ +issuer:ca +subject:ee-v4-BC-not-cA +version:4 +extension:basicConstraints:, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee-v4-noBC_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee-v4-noBC_ca.pem.certspec new file mode 100644 index 000000000000..19229ba7667e --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee-v4-noBC_ca.pem.certspec @@ -0,0 +1,3 @@ +issuer:ca +subject:ee-v4-noBC +version:4 diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee_int-v1-BC-cA.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v1-BC-cA.pem.certspec new file mode 100644 index 000000000000..6a7dc5c43678 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v1-BC-cA.pem.certspec @@ -0,0 +1,2 @@ +issuer:int-v1-BC-cA +subject:ee diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee_int-v1-BC-not-cA.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v1-BC-not-cA.pem.certspec new file mode 100644 index 000000000000..639f83d66077 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v1-BC-not-cA.pem.certspec @@ -0,0 +1,2 @@ +issuer:int-v1-BC-not-cA +subject:ee diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee_int-v1-noBC.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v1-noBC.pem.certspec new file mode 100644 index 000000000000..d704f3086d84 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v1-noBC.pem.certspec @@ -0,0 +1,2 @@ +issuer:int-v1-noBC +subject:ee diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee_int-v2-BC-cA.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v2-BC-cA.pem.certspec new file mode 100644 index 000000000000..5d3a65e65023 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v2-BC-cA.pem.certspec @@ -0,0 +1,2 @@ +issuer:int-v2-BC-cA +subject:ee diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee_int-v2-BC-not-cA.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v2-BC-not-cA.pem.certspec new file mode 100644 index 000000000000..591a16aca07a --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v2-BC-not-cA.pem.certspec @@ -0,0 +1,2 @@ +issuer:int-v2-BC-not-cA +subject:ee diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee_int-v2-noBC.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v2-noBC.pem.certspec new file mode 100644 index 000000000000..7f99393cf229 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v2-noBC.pem.certspec @@ -0,0 +1,2 @@ +issuer:int-v2-noBC +subject:ee diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee_int-v3-BC-cA.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v3-BC-cA.pem.certspec new file mode 100644 index 000000000000..13af934f294d --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v3-BC-cA.pem.certspec @@ -0,0 +1,2 @@ +issuer:int-v3-BC-cA +subject:ee diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee_int-v3-BC-not-cA.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v3-BC-not-cA.pem.certspec new file mode 100644 index 000000000000..8539715a03c5 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v3-BC-not-cA.pem.certspec @@ -0,0 +1,2 @@ +issuer:int-v3-BC-not-cA +subject:ee diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee_int-v3-noBC.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v3-noBC.pem.certspec new file mode 100644 index 000000000000..a65e41cea550 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v3-noBC.pem.certspec @@ -0,0 +1,2 @@ +issuer:int-v3-noBC +subject:ee diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee_int-v4-BC-cA.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v4-BC-cA.pem.certspec new file mode 100644 index 000000000000..35a3a9ff3699 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v4-BC-cA.pem.certspec @@ -0,0 +1,2 @@ +issuer:int-v4-BC-cA +subject:ee diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee_int-v4-BC-not-cA.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v4-BC-not-cA.pem.certspec new file mode 100644 index 000000000000..7627d3a8a2bb --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v4-BC-not-cA.pem.certspec @@ -0,0 +1,2 @@ +issuer:int-v4-BC-not-cA +subject:ee diff --git a/security/manager/ssl/tests/unit/test_cert_version/ee_int-v4-noBC.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v4-noBC.pem.certspec new file mode 100644 index 000000000000..a780337539f6 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ee_int-v4-noBC.pem.certspec @@ -0,0 +1,2 @@ +issuer:int-v4-noBC +subject:ee diff --git a/security/manager/ssl/tests/unit/test_cert_version/generate.py b/security/manager/ssl/tests/unit/test_cert_version/generate.py index 8fffb7783644..7d105926213c 100755 --- a/security/manager/ssl/tests/unit/test_cert_version/generate.py +++ b/security/manager/ssl/tests/unit/test_cert_version/generate.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- # vim: set filetype=python @@ -6,90 +6,77 @@ # 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/. -import tempfile, os, sys +# This file generates the certspec files for test_cert_version.js. The naming +# convention for those files is generally of the form +# "_.pem.certspec". End-entity +# certificates are generally called "ee". Intermediates are called +# "int". The root CA is called "ca" and self-signed certificates are called +# "ss". +# In the case that the subject and issuer are the same, the redundant part is +# not repeated. +# If there is nothing particularly special about a certificate, it has no +# description ("nothing particularly special" meaning the certificate is X509v3 +# and has or does not have the basic constraints extension as expected by where +# it is in the hierarchy). Otherwise, the description includes its version and +# details about the extension. If the extension is not present, the string +# "noBC" is used. If it is present but the cA bit is not asserted, the string +# "BC-not-cA" is used. If it is present with the cA bit asserted, the string +# "BC-cA" is used. +# For example, a v1 intermediate that does not have the extension that was +# issued by the root CA has the name "int-v1-noBC_ca.pem.certspec". +# A v4 end-entity that does have the extension but does not assert the cA bit +# that was issued by the root CA has the name +# "ee-v4-BC-not-cA_ca.pem.certspec". +# An end-entity issued by a v3 intermediate with the extension that asserts the +# cA bit has the name "ee_int-v3-BC-cA.pem.certspec". -libpath = os.path.abspath('../psm_common_py') -sys.path.append(libpath) -import CertUtils +versions = { + 'v1': 1, + 'v2': 2, + 'v3': 3, + 'v4': 4 +} -srcdir = os.getcwd() -db = tempfile.mkdtemp() +basicConstraintsTypes = { + 'noBC': '', + 'BC-not-cA': 'extension:basicConstraints:,', + 'BC-cA': 'extension:basicConstraints:cA,' +} -def generate_child_cert(db_dir, dest_dir, noise_file, name, ca_nick, - cert_version, do_bc, is_ee): - return CertUtils.generate_child_cert(db_dir, dest_dir, noise_file, name, - ca_nick, cert_version, do_bc, is_ee, '') +def writeCertspec(issuer, subject, fields): + filename = '%s_%s.pem.certspec' % (subject, issuer) + if issuer == subject: + filename = '%s.pem.certspec' % subject + with open(filename, 'w') as f: + f.write('issuer:%s\n' % issuer) + f.write('subject:%s\n' % subject) + for field in fields: + if len(field) > 0: + f.write('%s\n' % field) -def generate_ee_family(db_dir, dest_dir, noise_file, ca_name): - name = "v1_ee-"+ ca_name; - generate_child_cert(db_dir, dest_dir, noise_file, name, ca_name, 1, False, True) - name = "v1_bc_ee-"+ ca_name; - generate_child_cert(db_dir, dest_dir, noise_file, name, ca_name, 1, True, True) +keyUsage = 'extension:keyUsage:keyCertSign,cRLSign' +basicConstraintsCA = 'extension:basicConstraints:cA,' - name = "v2_ee-"+ ca_name; - generate_child_cert(db_dir, dest_dir, noise_file, name, ca_name, 2, False, True) - name = "v2_bc_ee-"+ ca_name; - generate_child_cert(db_dir, dest_dir, noise_file, name, ca_name, 2, True, True) +writeCertspec('ca', 'ca', [keyUsage, basicConstraintsCA]) - name = "v3_missing_bc_ee-"+ ca_name; - generate_child_cert(db_dir, dest_dir, noise_file, name, ca_name, 3, False, True) - name = "v3_bc_ee-"+ ca_name; - generate_child_cert(db_dir, dest_dir, noise_file, name, ca_name, 3, True, True) +for versionStr, versionVal in versions.iteritems(): + # intermediates + versionText = 'version:%s' % versionVal + for basicConstraintsType, basicConstraintsExtension in basicConstraintsTypes.iteritems(): + intermediateName = 'int-%s-%s' % (versionStr, basicConstraintsType) + writeCertspec('ca', intermediateName, + [keyUsage, versionText, basicConstraintsExtension]) + writeCertspec(intermediateName, 'ee', []) - name = "v4_bc_ee-"+ ca_name; - generate_child_cert(db_dir, dest_dir, noise_file, name, ca_name, 4, True, True) + # end-entities + versionText = 'version:%s' % versionVal + for basicConstraintsType, basicConstraintsExtension in basicConstraintsTypes.iteritems(): + writeCertspec('ca', 'ee-%s-%s' % (versionStr, basicConstraintsType), + [versionText, basicConstraintsExtension]) -def generate_intermediates_and_ee_set(db_dir, dest_dir, noise_file, ca_name): - name = "v1_int-" + ca_name; - generate_child_cert(db, srcdir, noise_file, name, ca_name, 1, False, False) - generate_ee_family(db, srcdir, noise_file, name) - name = "v1_int_bc-" + ca_name; - generate_child_cert(db, srcdir, noise_file, name, ca_name, 1, True, False) - generate_ee_family(db, srcdir, noise_file, name) - - name = "v2_int-" + ca_name; - generate_child_cert(db, srcdir, noise_file, name, ca_name, 2, False, False) - generate_ee_family(db, srcdir, noise_file, name) - name = "v2_int_bc-" + ca_name; - generate_child_cert(db, srcdir, noise_file, name, ca_name, 2, True, False) - generate_ee_family(db, srcdir, noise_file, name) - - name = "v3_int_missing_bc-" + ca_name; - generate_child_cert(db, srcdir, noise_file, name, ca_name, 3, False, False) - generate_ee_family(db, srcdir, noise_file, name) - name = "v3_int-" + ca_name; - generate_child_cert(db, srcdir, noise_file, name, ca_name, 3, True, False) - generate_ee_family(db, srcdir, noise_file, name) - -def generate_ca(db_dir, dest_dir, noise_file, name, version, do_bc): - CertUtils.generate_ca_cert(db_dir, dest_dir, noise_file, name, version, do_bc) - generate_intermediates_and_ee_set(db_dir, dest_dir, noise_file, name) - -def generate_certs(): - [noise_file, pwd_file] = CertUtils.init_nss_db(db) - generate_ca(db, srcdir, noise_file, "v1_ca", 1, False ) - generate_ca(db, srcdir, noise_file, "v1_ca_bc", 1, True) - generate_ca(db, srcdir, noise_file, "v2_ca", 2, False ) - generate_ca(db, srcdir, noise_file, "v2_ca_bc", 2, True) - generate_ca(db, srcdir, noise_file, "v3_ca", 3, True ) - generate_ca(db, srcdir, noise_file, "v3_ca_missing_bc", 3, False) - - - CertUtils.generate_self_signed_cert(db, srcdir, noise_file, "v1_self_signed", - 1, False, False) - CertUtils.generate_self_signed_cert(db, srcdir, noise_file, "v1_self_signed_bc", - 1, True, False) - CertUtils.generate_self_signed_cert(db, srcdir, noise_file, "v2_self_signed", - 2, False, False) - CertUtils.generate_self_signed_cert(db, srcdir, noise_file, "v2_self_signed_bc", - 2, True, False) - CertUtils.generate_self_signed_cert(db, srcdir, noise_file, "v3_self_signed", - 3, False, False) - CertUtils.generate_self_signed_cert(db, srcdir, noise_file, "v3_self_signed_bc", - 3, True, False) - CertUtils.generate_self_signed_cert(db, srcdir, noise_file, "v4_self_signed", - 4, False, False); - CertUtils.generate_self_signed_cert(db, srcdir, noise_file, "v4_self_signed_bc", - 4, True, False); - -generate_certs(); + # self-signed certificates + versionText = 'version:%s' % versionVal + for basicConstraintsType, basicConstraintsExtension in basicConstraintsTypes.iteritems(): + selfSignedName = 'ss-%s-%s' % (versionStr, basicConstraintsType) + writeCertspec(selfSignedName, selfSignedName, + [versionText, basicConstraintsExtension]) diff --git a/security/manager/ssl/tests/unit/test_cert_version/int-v1-BC-cA_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/int-v1-BC-cA_ca.pem.certspec new file mode 100644 index 000000000000..77f3ae914704 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/int-v1-BC-cA_ca.pem.certspec @@ -0,0 +1,5 @@ +issuer:ca +subject:int-v1-BC-cA +extension:keyUsage:keyCertSign,cRLSign +version:1 +extension:basicConstraints:cA, diff --git a/security/manager/ssl/tests/unit/test_cert_version/int-v1-BC-not-cA_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/int-v1-BC-not-cA_ca.pem.certspec new file mode 100644 index 000000000000..2a366535b683 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/int-v1-BC-not-cA_ca.pem.certspec @@ -0,0 +1,5 @@ +issuer:ca +subject:int-v1-BC-not-cA +extension:keyUsage:keyCertSign,cRLSign +version:1 +extension:basicConstraints:, diff --git a/security/manager/ssl/tests/unit/test_cert_version/int-v1-noBC_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/int-v1-noBC_ca.pem.certspec new file mode 100644 index 000000000000..63bf6ed7379d --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/int-v1-noBC_ca.pem.certspec @@ -0,0 +1,4 @@ +issuer:ca +subject:int-v1-noBC +extension:keyUsage:keyCertSign,cRLSign +version:1 diff --git a/security/manager/ssl/tests/unit/test_cert_version/int-v2-BC-cA_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/int-v2-BC-cA_ca.pem.certspec new file mode 100644 index 000000000000..ca1bf67a7d98 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/int-v2-BC-cA_ca.pem.certspec @@ -0,0 +1,5 @@ +issuer:ca +subject:int-v2-BC-cA +extension:keyUsage:keyCertSign,cRLSign +version:2 +extension:basicConstraints:cA, diff --git a/security/manager/ssl/tests/unit/test_cert_version/int-v2-BC-not-cA_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/int-v2-BC-not-cA_ca.pem.certspec new file mode 100644 index 000000000000..fc28ff150efb --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/int-v2-BC-not-cA_ca.pem.certspec @@ -0,0 +1,5 @@ +issuer:ca +subject:int-v2-BC-not-cA +extension:keyUsage:keyCertSign,cRLSign +version:2 +extension:basicConstraints:, diff --git a/security/manager/ssl/tests/unit/test_cert_version/int-v2-noBC_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/int-v2-noBC_ca.pem.certspec new file mode 100644 index 000000000000..2d3fe59ffad4 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/int-v2-noBC_ca.pem.certspec @@ -0,0 +1,4 @@ +issuer:ca +subject:int-v2-noBC +extension:keyUsage:keyCertSign,cRLSign +version:2 diff --git a/security/manager/ssl/tests/unit/test_cert_version/int-v3-BC-cA_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/int-v3-BC-cA_ca.pem.certspec new file mode 100644 index 000000000000..56fcb21a035f --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/int-v3-BC-cA_ca.pem.certspec @@ -0,0 +1,5 @@ +issuer:ca +subject:int-v3-BC-cA +extension:keyUsage:keyCertSign,cRLSign +version:3 +extension:basicConstraints:cA, diff --git a/security/manager/ssl/tests/unit/test_cert_version/int-v3-BC-not-cA_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/int-v3-BC-not-cA_ca.pem.certspec new file mode 100644 index 000000000000..a2def8d323bc --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/int-v3-BC-not-cA_ca.pem.certspec @@ -0,0 +1,5 @@ +issuer:ca +subject:int-v3-BC-not-cA +extension:keyUsage:keyCertSign,cRLSign +version:3 +extension:basicConstraints:, diff --git a/security/manager/ssl/tests/unit/test_cert_version/int-v3-noBC_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/int-v3-noBC_ca.pem.certspec new file mode 100644 index 000000000000..b336397ab6cd --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/int-v3-noBC_ca.pem.certspec @@ -0,0 +1,4 @@ +issuer:ca +subject:int-v3-noBC +extension:keyUsage:keyCertSign,cRLSign +version:3 diff --git a/security/manager/ssl/tests/unit/test_cert_version/int-v4-BC-cA_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/int-v4-BC-cA_ca.pem.certspec new file mode 100644 index 000000000000..12b94e63a5e5 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/int-v4-BC-cA_ca.pem.certspec @@ -0,0 +1,5 @@ +issuer:ca +subject:int-v4-BC-cA +extension:keyUsage:keyCertSign,cRLSign +version:4 +extension:basicConstraints:cA, diff --git a/security/manager/ssl/tests/unit/test_cert_version/int-v4-BC-not-cA_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/int-v4-BC-not-cA_ca.pem.certspec new file mode 100644 index 000000000000..43a04f70fdd8 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/int-v4-BC-not-cA_ca.pem.certspec @@ -0,0 +1,5 @@ +issuer:ca +subject:int-v4-BC-not-cA +extension:keyUsage:keyCertSign,cRLSign +version:4 +extension:basicConstraints:, diff --git a/security/manager/ssl/tests/unit/test_cert_version/int-v4-noBC_ca.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/int-v4-noBC_ca.pem.certspec new file mode 100644 index 000000000000..4970d1e94588 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/int-v4-noBC_ca.pem.certspec @@ -0,0 +1,4 @@ +issuer:ca +subject:int-v4-noBC +extension:keyUsage:keyCertSign,cRLSign +version:4 diff --git a/security/manager/ssl/tests/unit/test_cert_version/moz.build b/security/manager/ssl/tests/unit/test_cert_version/moz.build new file mode 100644 index 000000000000..5d40dbcd869a --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/moz.build @@ -0,0 +1,65 @@ +# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# 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/. + +test_certificates = ( + 'ca.pem', + 'ee_int-v1-BC-cA.pem', + 'ee_int-v1-BC-not-cA.pem', + 'ee_int-v1-noBC.pem', + 'ee_int-v2-BC-cA.pem', + 'ee_int-v2-BC-not-cA.pem', + 'ee_int-v2-noBC.pem', + 'ee_int-v3-BC-cA.pem', + 'ee_int-v3-BC-not-cA.pem', + 'ee_int-v3-noBC.pem', + 'ee_int-v4-BC-cA.pem', + 'ee_int-v4-BC-not-cA.pem', + 'ee_int-v4-noBC.pem', + 'ee-v1-BC-cA_ca.pem', + 'ee-v1-BC-not-cA_ca.pem', + 'ee-v1-noBC_ca.pem', + 'ee-v2-BC-cA_ca.pem', + 'ee-v2-BC-not-cA_ca.pem', + 'ee-v2-noBC_ca.pem', + 'ee-v3-BC-cA_ca.pem', + 'ee-v3-BC-not-cA_ca.pem', + 'ee-v3-noBC_ca.pem', + 'ee-v4-BC-cA_ca.pem', + 'ee-v4-BC-not-cA_ca.pem', + 'ee-v4-noBC_ca.pem', + 'int-v1-BC-cA_ca.pem', + 'int-v1-BC-not-cA_ca.pem', + 'int-v1-noBC_ca.pem', + 'int-v2-BC-cA_ca.pem', + 'int-v2-BC-not-cA_ca.pem', + 'int-v2-noBC_ca.pem', + 'int-v3-BC-cA_ca.pem', + 'int-v3-BC-not-cA_ca.pem', + 'int-v3-noBC_ca.pem', + 'int-v4-BC-cA_ca.pem', + 'int-v4-BC-not-cA_ca.pem', + 'int-v4-noBC_ca.pem', + 'ss-v1-BC-cA.pem', + 'ss-v1-BC-not-cA.pem', + 'ss-v1-noBC.pem', + 'ss-v2-BC-cA.pem', + 'ss-v2-BC-not-cA.pem', + 'ss-v2-noBC.pem', + 'ss-v3-BC-cA.pem', + 'ss-v3-BC-not-cA.pem', + 'ss-v3-noBC.pem', + 'ss-v4-BC-cA.pem', + 'ss-v4-BC-not-cA.pem', + 'ss-v4-noBC.pem', +) + +for test_certificate in test_certificates: + input_file = test_certificate + '.certspec' + GENERATED_FILES += [test_certificate] + props = GENERATED_FILES[test_certificate] + props.script = '../pycert.py' + props.inputs = [input_file, '!/config/buildid'] + TEST_HARNESS_FILES.xpcshell.security.manager.ssl.tests.unit.test_cert_version += ['!%s' % test_certificate] diff --git a/security/manager/ssl/tests/unit/test_cert_version/ss-v1-BC-cA.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ss-v1-BC-cA.pem.certspec new file mode 100644 index 000000000000..731396f034b9 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ss-v1-BC-cA.pem.certspec @@ -0,0 +1,4 @@ +issuer:ss-v1-BC-cA +subject:ss-v1-BC-cA +version:1 +extension:basicConstraints:cA, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ss-v1-BC-not-cA.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ss-v1-BC-not-cA.pem.certspec new file mode 100644 index 000000000000..20d716d49437 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ss-v1-BC-not-cA.pem.certspec @@ -0,0 +1,4 @@ +issuer:ss-v1-BC-not-cA +subject:ss-v1-BC-not-cA +version:1 +extension:basicConstraints:, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ss-v1-noBC.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ss-v1-noBC.pem.certspec new file mode 100644 index 000000000000..58d2f0d7f51c --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ss-v1-noBC.pem.certspec @@ -0,0 +1,3 @@ +issuer:ss-v1-noBC +subject:ss-v1-noBC +version:1 diff --git a/security/manager/ssl/tests/unit/test_cert_version/ss-v2-BC-cA.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ss-v2-BC-cA.pem.certspec new file mode 100644 index 000000000000..8dbb3a65ad1b --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ss-v2-BC-cA.pem.certspec @@ -0,0 +1,4 @@ +issuer:ss-v2-BC-cA +subject:ss-v2-BC-cA +version:2 +extension:basicConstraints:cA, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ss-v2-BC-not-cA.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ss-v2-BC-not-cA.pem.certspec new file mode 100644 index 000000000000..2b8f4bcc5528 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ss-v2-BC-not-cA.pem.certspec @@ -0,0 +1,4 @@ +issuer:ss-v2-BC-not-cA +subject:ss-v2-BC-not-cA +version:2 +extension:basicConstraints:, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ss-v2-noBC.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ss-v2-noBC.pem.certspec new file mode 100644 index 000000000000..7656115a846c --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ss-v2-noBC.pem.certspec @@ -0,0 +1,3 @@ +issuer:ss-v2-noBC +subject:ss-v2-noBC +version:2 diff --git a/security/manager/ssl/tests/unit/test_cert_version/ss-v3-BC-cA.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ss-v3-BC-cA.pem.certspec new file mode 100644 index 000000000000..df822e99b920 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ss-v3-BC-cA.pem.certspec @@ -0,0 +1,4 @@ +issuer:ss-v3-BC-cA +subject:ss-v3-BC-cA +version:3 +extension:basicConstraints:cA, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ss-v3-BC-not-cA.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ss-v3-BC-not-cA.pem.certspec new file mode 100644 index 000000000000..0b2b57557332 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ss-v3-BC-not-cA.pem.certspec @@ -0,0 +1,4 @@ +issuer:ss-v3-BC-not-cA +subject:ss-v3-BC-not-cA +version:3 +extension:basicConstraints:, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ss-v3-noBC.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ss-v3-noBC.pem.certspec new file mode 100644 index 000000000000..96314e51a7f2 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ss-v3-noBC.pem.certspec @@ -0,0 +1,3 @@ +issuer:ss-v3-noBC +subject:ss-v3-noBC +version:3 diff --git a/security/manager/ssl/tests/unit/test_cert_version/ss-v4-BC-cA.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ss-v4-BC-cA.pem.certspec new file mode 100644 index 000000000000..54269184ed9e --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ss-v4-BC-cA.pem.certspec @@ -0,0 +1,4 @@ +issuer:ss-v4-BC-cA +subject:ss-v4-BC-cA +version:4 +extension:basicConstraints:cA, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ss-v4-BC-not-cA.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ss-v4-BC-not-cA.pem.certspec new file mode 100644 index 000000000000..3d65335316cf --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ss-v4-BC-not-cA.pem.certspec @@ -0,0 +1,4 @@ +issuer:ss-v4-BC-not-cA +subject:ss-v4-BC-not-cA +version:4 +extension:basicConstraints:, diff --git a/security/manager/ssl/tests/unit/test_cert_version/ss-v4-noBC.pem.certspec b/security/manager/ssl/tests/unit/test_cert_version/ss-v4-noBC.pem.certspec new file mode 100644 index 000000000000..d02e04de51ba --- /dev/null +++ b/security/manager/ssl/tests/unit/test_cert_version/ss-v4-noBC.pem.certspec @@ -0,0 +1,3 @@ +issuer:ss-v4-noBC +subject:ss-v4-noBC +version:4 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v1_ca.der deleted file mode 100644 index 1774c68658e38999e11f53e13836ccb848523347..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 864 zcmXqLVvaFrVsc?(7MPu5z{|#|)#lOmotKf3m6gFD-H_XWlZ`o)g-w_#G}utsKoG>? z5ax1D%*jm4FUreIG!!!s0SU4T^ZMqO=9MI7<|%|_rj{Fu7zlyHxrDg`f_)W2Qj1G6 z^U@7P4TM3W%sf10hVhwsCAvT=Inh8)oY&CAz}U#d$iURxz%)vn*9e(wP(XEu$Qj5$ z93l#IK~i#jYAVPn2p2UmDj|mkBP#=Q6C*!^K@%evQxhX2!%;n(yVI=RT@Z=+@HT?y z?A0YdJ>{mEAAQKs=YK2aId_DMxX2Q=CE~iSXJ#=Ouq@{-yi_2^)BVO%{lmoKJDe@d z0xKp?*w@|fn%gMkHuu70x4)Jro_HOt5H*xck=n(^Q+v> z{b%ASxANekFUNl*Y05TTjZrzWmNC)UqH;c8jbNwZt~vQdrly513||uMFTR^@AoTdX z(A^zH9GP2nUnzQRDvjNC`BRJe{1X0Cn$<}Yg~Yx~`82XFNad`FuhQYDwQWv*^42A` zO7Y6BODk(Cl42+9; z4Il|bR+xp!fB`wcfXN3KV2ljGCtmC~->|Ox$PKxWRraa1-SXS!|2;8r-*xt>vIn}_ z7CH&qXWn9Ab~H{e&APe2Z<*B14`tfl58gW_)pqRkzYgI;%a!l0R}vL=kK}M#%Mf%f z@azE{^%L8RS=L@Ff4k4MX3Cp!F*-xBuUDBm-6 zN5Be`Qc3gnT|ImC!so>#>Tt6iFWj6l`>K<7SxM0)ho3up^4ixNJi4PZ%T#T4sY!d2 z)x`UM|9yGl+9I`miEY1BW=^k?@>Zb(D;M)UU*Z~c>QMiw1+@i+_c~jDOV3of^16<3 hp`2Cqx-YZ)58YGVVZ#6q}Mtx8vuR4Jca-O diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v1_ca_bc.der deleted file mode 100644 index ba73f1b680eee52741cef3ee68aa6c10efb35a90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 871 zcmXqLVoo+_V)ABUVG2&EG2mt6)N1o+`_9YA$jZuKkY&hiz{$oO%EBhh6dG(OY#<2Y za0qibC+1|PV9MGS;M;#|Vq0l~fsA*sbB znR)4k5(Z)*QDz?gGQ;@Hyb@g?m7Ex#lx!d;&TD95U~FV!WMFD;Y!D^RYlO@-D5knw z6bFz5Z(?iZ^3_+i?y+vQJv8&zclG?L z?P^m)8LubIEWf5~u|B1AHJpE@iqOog$A?U_wBz*)I)_{ z6;I%OWb}Xgr`VXsx!y06o%SwnZF;e(X!#$9D=e2)?;Yz631ylUYWwl3&H1T#!fw}8b`}-F}8JRYUS08`) pX`|Y_ISD)WSqSk4y#IK^Hsh~Q&*JxqN2*Vmika;avHCRA7XY-gR@DFi diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v2_ca.der deleted file mode 100644 index 9678a53582b7f5408d1d5b881404bfe854ca15bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 zcmXqLVvaRvVsd3-VUn`lXTZzGsnzDu_MMlJk(HIfAl;DLfRl|ml!Z;0DKywn*gz1( z;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6MGb^OqRc!zWrp#Yc_q4KM)Aps26E!Oh9(BaMkYoErsk%mQR2Kt$XtU0syjr^ zKnCIvQJ_PTlH*fTbx~Z@#HfTE8jP$A%uS5^3J9-Ck{#2UO#WOd1j>L2@#JIYTp zpWZfm)(W<5oxh|1{$aUNV$WN^`Ficoh2MA!oRtF#L?(rpIyP4_to<3CYq_R_{r&g2 z{lX`hsw|2V%M=1jw6xyk&VBG9Y?XAGPG;<5Q>WUKix&j1DHT8HwD|ahMb7ohr!K61 z9Y1yY#OHJ4Berg=yfEd|^e^}BK5Z^D5~$QFPFQkLN&1}X^~^o~0sK;?`;ClZnV1}Sdpxd|T2BxWG5TdwpRR9xWN!WAbn)8O4**~v$f9jZi(e~uJ*DvdSKXA?vxG%T(&P3UCzq21^Shl3w9Nw|WsVcl? zca-G)e_Q-+tXFT#Q<@ha^j^dNT64q1`wJhhSg>h9zCyXLw0?K`x*vuD{inckO6 m&O7>b33m1zZ`;y(XIhWYH*Xh%BP-^-`F)9fr{0`K-dO+zZd3aJ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v2_ca_bc.der deleted file mode 100644 index 06d8124802900375528ce2a94e02eb403dfb07f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 871 zcmXqLVoo+_V)ABUVQglcV8F}9snzDu_MMlJk(HIfAj^>3fRl|ml!Z;0DKywn*gz1( z;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6B@DzsqRc$}Wrp#Yc_q4KM)Aps@kz-Ba^k#(CI-evCPoIP7Dh%<;=D%4T!Uh& zyG7AJ9^w`Wpj(oX<5N?0(H+&qsDvCQjI0dIO^o~u22G4yOihf8413f!bjhzsShtmx zU03t{u7w$O$1M$RCT{QhYrAIQL*XwnuUa!)9W$ieAJj&x{9gAZf9`j-2q>Rm(l8uhf?L`h&F6jg^e; zI%#(m7jW_(+pHw}saEu|XV$M&%TAHb?TQCnj?R{oQ*8Y7G{19&`WL2y&I(^vu4ZCp zWMEv(YXC_mvcfD(1`Nmn224c20AplWU}Ijne@9oA;+y3T@2|Y8OgvJUF=^^s#@k|z zj6Y|EiaTt0)fn(V^Uy}|E1RcmZkG(`JL#mWeXPq@^BzmP^`0X?wdXaxRy+8_D{|$5 zYL2ATnQJXr4zE}6-qG|`nW4A%de7@)6*K(x9rXj|9nbr0W_gBj?cGKhbGE_vF; liK6o7VuDE%iyl3xFSD5>uCEr9_TX(^&lHV)r3)e)9RVU-Mz{a~ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v3_ca.der deleted file mode 100644 index 20e37e193da0cf5fce0d531dc7bc1a6e80f97a69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 864 zcmXqLVvaFrVsc?(mY!l{z{|#|)#lOmotKf3m6gFD-H_XWlZ`o)g-w_#G}utsKoG>? z5ax1D%*jm4FUreIG!!!s0SU4T^ZMqO=9MI7<|%|_rj{Fu7zlyHxrDg`f_)W2Qj1G6 z^U@7P4TM3W%sf10hVhwsCAwwC@yUq>a^k#(CI-evCPoIP7ABTa;=D%4T!R9tJ4DVv z2I3G=phJ?9<5N?0QC!r-sDvCEjI0dIO^o~u22G4yOihf83>PaMEmB@qYM+p@DVDx& z-lxC&&<)|WVxKn8TrM)3RXOv>I?wxDQ_cLT=zusmeY~)wZ zQZ@wRlJ+x(A z`OD}1WlzN4vwN&8lvezB<8PN$>%rQW%DZ$D9hNMO&tCX3U+~k%c&?dU?|nObPyN2M zR(m?DiO@@HA>qZ9K@;~TzxeRBGKQf(+w^?HOhbc1d--EkPcGNnRArHTHp6=-=Q^)2 zR<&2MF9liB!}KOt&bw#y+>kq|V*U0n3ctF|)rwMQGw*tH$K}hTi=AsSXEn+)eqQ+7 zI5S6j&5kpxZ+0sjp7ZFU{LMYz_V?@I^fU diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int-v3_ca_missing_bc.der deleted file mode 100644 index 0db910f0672ea97d818ec1fe69675873208efcfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 886 zcmXqLVlFahVv1s7_7^%~z{|#|)#lOmotKf3m6gGu$dKEBlZ`o)g-w_#G}utsKoG>? z5ax1D%*jm4FUreIG!!!s0SU4T^ZMqO=9MI7<|%|_rj{Fu7zlyHxrDg`f_)W2Qj1G6 z^U@6!4CFwf%sk>{hVhwsCAwwC@yUttxtYbqKvMDB+N6*B*)$|snhz(i=j*_uWtHy?pe> z&i|ovZZAA7ki^YbCI4>yi|UJut;&3+Zr&>WbXvP+#1rp?>o*?1J?`ReQ2462H0SNH znZZl>CJSpXQtMTC_K`1MzZ%&&`doH>*v5@$u2C9EO@F7OuJ5UKn}{ zFZ7*uxN=(j52-mUUtgb7+_QLt+l{%!b~Ed&+&}$}uso=^P^8U|jZgT?-ha36oH|%> zH1=cuE@>uaMh3>kyateDBP-0pWWazNV8BEL3@}E9?yvd^v!*pVghf;xI6bxH=S2m} zcK(X3dz1oSEZf?4aN4)+-(PJp_FCsvnp){&lRo{^m5=$WomM`LvHZ2@n)#`RR@Bccjt(0w+P6l#QUlj7~ zmO3eVVyzN!~DSj_+-&LK@D!Iawf!=X zV9MGS;M;#|Vq0l~fsA*sbB znR)4k5(Z)*QDz?gGQ;@Hyps5&WL+RDInh8)oY&CAz}U#d$iURxz%ojl*9e(wP)v2V zC>qE^+#&&VK~i#jYAVPnD2{4kR6-6DMpg#qCPsb+gC<5UrY1&4hN0{tLOY9W$zy9xUB7Kj89$KA(%z><@e_^?ovY?cbD?#2!1* zB7JL#aG_({;~(uQsO-PJV85k-<&(n}?%%XxBA>RZoY&RL(>Sm;J|-fyGwGOHiS4X| z8q;bYt!0&!zVGtk^cLTVpU$4M^F03c`~UF&?_K`Y#7O;nw7twwoq_XSxA)COZ-Zu< zK3lt_-+r-b?EyKRnF|j3bUl)s@qX&Ux4V``7EjwT;n(NBY2O8IE%TZ7aC(YJoy(j@ zQ<<0<85kGy8bFeXtS}3c0RwV?0TU50z!({LDjuwT_Vvck>x#+mPRL(=lf3)jqIH>D zz8(sh^mEd;=_lPA8Pz41R61O_xy?3g`MX<1wx>Loe$+KO_3CBuzkJ@a!L7p6{6p$R zr9SKM?zwVE!L=hoT>M>t-QYT zd*1zMp1XJbs@mv#XCif-?^W3*E>W7))UaTJ}0R#nO%yKmFjTJFm?Vr zquS)?)DKq*e;4T7R9ao!9o@VnH~FRb(?7l^ORiqHd0^$)3s*v;AFNjM+`?)&&3Cn` r@1)AFxh5+$lqHrb-g>)h|60d`+{~Vi()C(lB?*6L1s{CvcR3mWYxrCJ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int_bc-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int_bc-v1_ca_bc.der deleted file mode 100644 index 31b87efc6488818e87afa78bf87b94bf5699ad02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 877 zcmXqLV$L*ZVhUtpVcZmS$$*!QQ>)FR?K>|cBP%O|L9QXU0Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SG=lV8E2>L42yGrwMgU9 z=k+Sx&BC{`pSm?`2;^L|c_r6l{Q7ys#H#Q=e5=ZWGUjgVPOGXdRE= zKbQai{Cy5xpUlK}&AfB};dFu)iYmiI@!-+1Dz(Pf{>w^o1qzB#kzkzcXx zea88-jWv8H8W!h#+&3ldw1@w#2N#W^-Rl2{f1Vbi(JghU>&*HaC2NY=>`WFMT=+{n z_P_4;Jdp|JR$n9MzLx#5#*r?rKxD!y*utqw@qyB(#lCU7JUZ*Zbwxd diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int_bc-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int_bc-v2_ca.der deleted file mode 100644 index 4a4f9d1d560f9347f5b9105c24c0cfd1e1956b46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9~QjtFWs;AP{~YV&CO&dbQi%F1AnWyo#7$;KSY!Y0fV8f++RAPC}c z2y;0n=47Vj7v*Ip8j2Z+fCSlvd42Os^GXsk^Ay4|Q_BrS41_@9T*BM|!M+M1sl_Fk zdFh4{24WylW*+`B!}!d+lK7-#-7=&2(#X6meg<|J7i1&1!kC z^)~zWivF@tlRnJdzlFyy>htI8?`&&rWFIMdOxu>eMd^l4)d`O0mU|Kd{}iS-9F@38-L z;Prsu6}dj?H}zxvoIMjAO{#Q5di~?k)cv!mTi-sZ)b~?nPJZ4x3@m)-o3ai$nnAA z=er_*6iM*yYz&vV@%}@tn^EiI$zk^%#%%n(@?2|B(U}jMu1wy;7;|8CPs8O6OsRW+ zatW>YrTYD!Ca|B3sPuf3lxTT>nYC-?` diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int_bc-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int_bc-v2_ca_bc.der deleted file mode 100644 index d1a8b4a91a02b074d07a2a06b0b7b09540b7960c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 877 zcmXqLV$L*ZVhUtpVOZq5#DJHLQ>)FR?K>|cBP%O|L9QXU0Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%Ss4m#(!4Pk|+(hNcm*+22axOnAFTrM)=sxJ1_H& z30w)9yClfU-`6~BTiti59iKH+icih|f5N_0q z?^Y&eMh3>kyatfOA}h?oWWazNV8EmV3@}CpefbwN*R#BuTtCTD@p$;bOt<}A0h}z1 zpSDH$SMM#IxwfXc;Bi^arqw&Qs_{+WIJrby+{Ihq@39AxhP$VQEIXoj>7C*F=J&6R z`|H;kT@8zsboqZKlk3BejC-f6O0|MFpPNwdKiFk%cHgf#vc~au>Jj}McR-9Kb*EBoZME_BIz8?8YXZZ*uIyR0;}IJJpMZNs8~~iFO-BF# diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int_bc-v3_ca.der deleted file mode 100644 index 8c2c47daf2da8c3c34873acffc77a64c9ea4da65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 871 zcmXqLVoo+_V)ABUVR)9f$AFiOQ>)FR?K>|cBP%O|L6#x60Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S~UOpFXnElf?K#CeU7xdz2l zcZ;HdJj5*$K({0%$ET+1qC2XIQ3*Lr7+D#Zn;7{S44N3Zn3@F8?pMX0 zo?5#4#r4n?HzOSL&mP_=6s5UXO4=()cboKD?~q@+bq;!7&o>t0-hO-U)(IM?4vux7j-j)Zo0()*)XsgSM8E)JWXR4}+wt~_>qTB6$IU|=91N3=tG+xS#<)iOU~Hq~sxRjnw``uccHBE=DgctwU%u33%l_%yeI9EepL2K)t5iJx-W0n@mLZH0Bo8}aR2}S diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v1_int_bc-v3_ca_missing_bc.der deleted file mode 100644 index 9aabf44b492b246c12c6c3c57af8f8352211ac6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 893 zcmXqLVy-l3VoGFUVU#plV8F}9snzDu_MMlJk(HIfpwy7tfRl|ml!Z;0DKywn*gz1( z;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6l?@a@qRc!}Wrp#Yc_r~l$+~66@yUttxtYbqKovj%137VCLlXmIBNHP7Q%fVm zC~;mRWUfIS)t#kdpapT3GSFE`$?>VFx_I2z#HfTEQjDw&%uS5^3z|7zY~G-q8vN$T8qRC#KN7N|#TIzQDSnAOExIIAZuYZS zp@78_S)ngjBG!BicD`1kyuABf#b%KZ4RgWsN1t(Bko|OV4%e(B=Oe1THD5IFT%G%P zK2N-Rv^bmQ(y15ET-{kXZN)r`4?S`@c}|;e+~EE{`KipCy}Zd0U)Bk6OzS%xF}>iC z-mx6{gDh+2?)I8>_Zg!yNA?@OXRKR%ek&`rH#9Bqv2TCmKHoQQHsj>|mwzpAf5ISQ zae8jW;hSw!#PXO=oV|MPb)Dr$ueUY5uZz7e=5R^s9dfb09QxMJ$m5;={QiZ1)^oPc z+SJyn_GkX%OeSVV2FAs_29U%fE6l=VzPgYY(-r=6(F!zSw`& zwmi9sUUg?B6xV87TT~ccs;;v8FylUFPr=)(rqkay+_a5%Hrz5r=uc6?8=ZOC-}i7H z-grndPL+?fSYBfO1=iqr&c@=aLdi<;5|eAEojwrAwBf44g0~s}Wz#jeHr3jsSvK8F zTd?kNx0%8{9`{>|GE|OooSP%}^K93)S&g%2{rY}7s$MST^Kb9RVlU@T$Vu<|QXn(+ x&vxBU_R|i@?EYe*buBacPui(P^VJ;lfBxif(b5ussP!hc&M;PHRl+0dSO8~=RB8YK diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int-v1_ca.der deleted file mode 100644 index 3bcd0e096e8f2be6a9a86151e7643b690425f03c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 zcmXqLVvaRvVsd3-VOSARV8F}9snzDu_MMlJk(HIfAl;DLfRl|ml!Z;0DKywn*gz1( z;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6MGb^OqRc!zWk&Itc_q4KhVjXX26E!Oh9(BaMkYoErsjsmQR2Kt$XtU0syjr^ zKnCIvQJ@QwlH*fTbx~Z@#HfTE8jP$A%uS5^3JoT@!;N0qU;)|`9dqnQP|Mg~l*#fWGBB?>e7s@7n+n4IRrI7RL zKP#iN_9t_{X?R$^JN!aLWVMYw?}2x0`7_pVvR`}j=JFc(@2hWm7@B;}itb;ySKjP> z#nflt_~f=qx(V2>owt5bqvApDr?Y(WZ%$&$bGjeAw{}ibm_E-V#pJJ|xe0R3-_{&i zCswU?p0VJ{bC;X1)E^{>o#{I^gYiXhoz@=Jd%E0TjawIf{u{y{vMq1knZLg(rhJ!U z{VSC=Wk&T%)!VBK4#?`(h_`9I6=YXf#UkR+=g1>+RT&$-J{lB4qF!PXJTe# zU|h^=07)RS!YoV%49EcnOg_K>V`P}l`t9<$?`aa>6xAl#e3Z3}*iqi_x!Ep+HADTK z+ofGE^DJk4*I4VF_H*x=*4N)6*?zAq)bmQKRuAERY-+glEt??wavdkoddvLN%y#9r~8 ki&N|h=CiMnkG-;7_MfWe*Yc$YnpZiBFfCuJCZ6g707S1ue*gdg diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int-v1_ca_bc.der deleted file mode 100644 index 70be14c0105a448075c36ab2f0b246cf60640308..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9~QwyC>lz{|#|)#lOmotKf3m6gFD%aGfElZ`o)g-w_#G}utsKoG>? z5ax1D%*jm4FUreIG!!!s0SU4T^ZMqO=9MI7<|%|_rj{Fu7zlyHxrDg`f_)W2Qj1G6 z^U@6^48%a9%sl*MM)8?>CAwvX@yUttNy!Fs;=G0?2F6AvMh2$l#+Fgyyhg}egJP}Zh6LG_ABrHkDnQKzQK3Xh8n)DUsVF7&(4~5NNV<4 zp|>92LS?{iO?9~|mstt>k^^BzFw`=GgXPgsV!QO6uZQioy zf(KjbeP-MiFArN0f0mbJ(=u_@6MGA6>`P(}v)|R)5})|MV0H4@9XDE}Syzb_+zlw7 zUwJ2esnu+WGoMZwd5YJUyvuaE(mpHt@aMyYQ#fYv%=)cxKc`pjpGQQZ+oZM}Tkhvf z%!~|-i+K$o$wXF|g~@;cIlzF42pC|D4E?R~(~DC#K03-RWwtxQru60AzfSgQsr=In z_ZPF9v^kbHY`w5jDBdqK;|vd%jk{X+g7*1Ot=Cze{ZctM=lS_2Nv_s+UZUuRT(_mm#wyYI8@|o;bbv!6!l@XZ*AfeH*gx^Utnp z=O-P1Bhokh$KeN`MA_Y|rq^^Xl=>jLVtwMn^=GtqC)%vh+TF|B`ZGk(>Q=|kh$;Ge z@2q*dw)DIdmq<$anj;*F*yV60=Pt diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int-v2_ca.der deleted file mode 100644 index 20b269928e733d222f7d4a1df358d899e51bf010..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 864 zcmXqLVvaFrVsc?(PMPLtz{|#|)#lOmotKf3m6gFD-H_XWlZ`o)g-w_#G}utsKoG>? z5ax1D%*jm4FUreIG!!!s0SU4T^ZMqO=9MI7<|%|_rj{Fu7zlyHxrDg`f_)W2Qj1G6 z^U@7P4TM3W%sf10M)8?>CAvT=Inh8)oY&CAz}U#d$iURXz%)vn*9e(wP(XEu$Qj5$ z93om~7@w3JpPCAC3c^KAj7rF%!N|(M+{DPwV9>BV*P<)Cb}YH7J&Ez6uGmVQuIcfH+;1n=sk~WSP`5by zH;bu)KH~V@*RDKzjDs%fp#+RSUUMZYv@N`c1qBftN zmUqYP_ns=45T^X&TVz;$pQoXEQ|4YH_UUhPgM&RKmR)S?=;!uj zKON5~{=y>cr0OfZciP8i9GZJ3y=1qiaN54zv(DsCljXF^xMfkS`gd)Ivk;@~{Yc>{ zNA)w-<|ppFZ7tt(Gxzl?`6G%?E>xP^t<`G|(s-8`Qs$9-KQglH&xV4BAAd<`RZ4{@ zUNKJk-dOqHI%1*xKby`k^=DKh&+pZ^e0NHij7V|5wkf}6fQR#H_Rjgo8>&J+9qDzh z)QC#os?XfT{q%(u*MXER@4cd?={Za-lP>+|Xw+`}f1|t~!^XyTt|YU$k3*O*|KZV9MGS;M;#|Vq0l~fsA*sbB znR)4k5(Z)*QDz?gGNbs+yb@g?m7Ex#lx!d;&TD95U~FV!WMFDxY!D^RYlO@-D5knw z6b$~SIkbbc-EZR1pIB z%!~|-i+K$o$wXF|g~@;cIlzF42pC|D4BcP4Wh0ms6_nWnu1zdfbly_nItJ&Cd^mlz%dFDswtw{A-GiRA8-N9>6a z0gw7R1y9OMzZ-F1`A_+suet`6TQpbckTYFbSJGhBcW|uV}G0Va>ETVx$7!5#ChbEkAIbpip-GY`unfFe$tI~ n>;Kg2pV-&DXGQY+h*>euS7ZsbZ#r?fG&=XBt<_|smyTutE=5jZ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int-v3_ca.der deleted file mode 100644 index 903db58f1c27cbdc993a84bc996e3ec63f868e51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 zcmXqLVvaRvVsd3-VG?2QFyLk5)N1o+`_9YA$jZuKkZ#Crz{$oO%EBhh6dG(OY#<2Y za0qibC+1|PV9MGS;M;#|Vq0l~fsA*sbB znR)4kq6WesQDz>VGNbs+yb|3q%)WoRL@FVvE%`1F_tZTRr|gp!ZIumM>|Az8PjH1v8@t?wszZxw?<`y7pebI% zAdz+7L#F-ZuS1Nt#XRI5EPHLV`_Ffu1-ddhX2L68v)z9w^{BqW>Bh6;H%``1JNSZq zesIZL2CMP{ecc+BU8|S6vz1h@EwE_56uDLCfNo+|xbplBPZQq1p4xCkuH95+Nu=l& zg~Ll+B5Kb^KdAb4@0ik!XC4O3lLIw63V-OFeZ=4>5g2R9q%_#<=Rzd+WPRZa znYc$QAmYwEzVOSfW>@#NR7zd6oIK5Qz6RTyf*aA3`CqQO#>}`6**Gww_ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int-v3_ca_missing_bc.der deleted file mode 100644 index 1838b340708485e0f7834a681582c0d5a8ccf141..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 886 zcmXqLVlFahVv1s7E? z5ax1D%*jm4FUreIG!!!s0SU4T^ZMqO=9MI7<|%|_rj{Fu7zlyHxrDg`f_)W2Qj1G6 z^U@6!4CFwf%sk>{M)8?>CAwwC@yUttxtYbqK9(lhQrAsy zhxzF@m;T>%M1R`9GX}>*ey%;xobG=r>Ei31r)PDpy;$otU3f*rjGZ^nZfKmeWL;IR z{@POuQ;XHAEvH(E99LR?s(0R|`MXvvGkyateDBP-0pWWazNV8BEL3@}Cp(Z%84S$=x*oRXa{`-UT@e95WH zya6lTMQ!bnU~6d7`nl9lL^6F{a&4LIvbPmY7Q9`a?KgbBPn^v&iT%u%{PQW5pC!Ho z{M4U4ZPV1fU-NUD*S$R*puY6ko*B(;55$*0YYk=3{P+KQX1?C}vv(h?;!CWbSG(|s zc#!ahMW@zi^0y>>Va?&*X>!d&iz}QnCo$yuj16aN$|lqlJvr!p?Dfja^&B<{dLOc8 ziwDQ*Do^-zab?C=QJ?>hmqf3&-oyJN-y!Io1?$lrA-XdJO7?Z7ywEb;cWF;V_xhP% voql^v5{nC7(Ep~_J?)6+-hF$gOqh7QV1cFT`TJ@c9J>@RDfRDV2>b#7OUqa= diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int_bc-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int_bc-v1_ca.der deleted file mode 100644 index ef57861d0d51466d0dce24683562f9b13c6871b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9~Qwn;WN;AP{~YV&CO&dbQi%F1AnWyo#7$;KSY!Y0fV8f++RAPC}c z2y;0n=47Vj7v*Ip8j2Z+fCSlvd42Os^GXsk^Ay4|Q_BrS41_@9T*BM|!M+M1sl_Fk zdFh4{24WylW*+`Bqxj6clK7-#-7>@YE z3%WYx))yFu20f_L|L-dH%`HuA>B5`V(@yuUO}w>T)FR?K>|cBP%O|L9QXU0Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SnTD{}s<6EyMU(k8`X!^WQS{<*S@O>}$Zu|CTPD@Q{ zsrs(|2QM^46MhT**3pyM5}f*k&HHHf$sY!r+gI!7MH~@d$9j7OUr4}AkCd}T_XE`Y zKi1|-@AtozyIJ_j+nPL?DGPO_gKSlHd#qQhDYBc`b${ins)*3dDzm2>-b^icCN%fL z!UYk%B4$>rMN%7T>$L?qcFw-Ew(VA~U3I+%OZu7v)0Vy2c~lWRGHMS?asB7MT~orUbJK#SeLlULxv{p> zGg7g3K1$Qv3hq&o_{M)Vv{o;^No8?Rl>iiQJg6 zXoW$q@_XayCHvIfY7cGw;p`v6z$N6rG;3~8>3ONv&$S|fzfM1?&D>X1!K(l1$b-i_ o47GNd&uIBK$u`>YfR|5B>hBi~P(2t`D02a4SfB*mh diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int_bc-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int_bc-v2_ca.der deleted file mode 100644 index d3cc5e57e307ce704a8369632dffcba18146f4d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9~Qw(wUm;AP{~YV&CO&dbQi%F1AnWyo#7$;KSY!Y0fV8f++RAPC}c z2y;0n=47Vj7v*Ip8j2Z+fCSlvd42Os^GXsk^Ay4|Q_BrS41_@9T*BM|!M+M1sl_Fk zdFh4{24WylW*+`Bqxj6clK7-#T_7tt(Lhd|*U-ek*vQ1lz|_LPGD@7+2$^e8Om(*? z8puQ3B2i`tbVqz@D#$4)j%s35LJku~RtDxKMt%l^CPpr%CPqevT}(bzjZ2D-zB}gp z+-6OR0^2%6w(Kv=3NZ_BewW;TlbfS`lb)v7MJZtxzKFFhBK%hxmdnmjRa(2!SyJxk ztkb79Y94f-wrA4rAn&)ocTW^eX1T$q#JJ7+*n*06X(v|R|IP5JC^+-)jyP!x^U{qA zavOJrC|r5sW%8N%(hZ|o3W3kkq!;~<>g}4lBJlKmkr!(!q@v9BHf6<%e*B?+PRig% zdc}&%4gYU0ywa%btN;P5Hueice~rw85J9I(pvWHM?%V-T(aY z&(mw2%x>@4*z~5+Zf~@S)0Hy!p3gkdOrk=m$}4tml=^AOT$%GOQSYbkB=yfnXBjgw zGcqtP<~4vM6Io#vCIbfK00Sl>V1O|)Y-i~X%2NE*!wpEfL?0-WEi z4@sZ?YWkJWjq7J>O?7?!O1}8-%apu7M}iA_UR>H?y<46+f93Wwd#0tVj?b~YTVho* z%jG`b#{k~6ISXf$FPN7nn;h}2vcyRJ$%E%pcQ-ZNjA=TLunDRtyDLf}eyS{=`{%Fkxmm`S%4<7+aPLi&-rCIW#__pFXU98}!y)Gtg)?gB zx0%>2JG$h@?a1RndIH6-Jnu)((q?t&I%z7HU#;@EKZO5pPU>6R=^mbQ4QF5T4R!kU m!l5OsN+;#T^=6UBr|oLfTUZJ{eBr(98x+1a*zf#}m9GJi#!WQ< diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int_bc-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v2_int_bc-v2_ca_bc.der deleted file mode 100644 index 90ba21c088e64d185edc62840410156094b15b8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 877 zcmXqLV$L*ZVhUtpVGV9MGS;M;#|Vq0l~fsA*sbB znR)4k(guYGNbs+yps5&WL+RDIT6S(kQ3)MG%+wXGBGkRwJni!RkLxz!+fw_s1pTVGsk&CH`k&)qOoB9tUkNupM zccp@l3Gr`lD9D;^`$N^4FDHG|`ozr@t53Gfj$>%PxTv4Iz0H5`%q2&jTQe4)3Q5p= z?&TUcR9>doInm_k+pCrDFR-}GELK$u-5l|0Z_$?tN8UHb)EPapz1M6eIsb=D z`bs}GMVDC`qDybLOFZbhztX2s{Kv;%R}+{7^d-~&D!b)cUv6EMn$oKRDJSmd#m-|nAjuRzC1r& zTf!VV+3LxNAR!wMc>8Gj$iKJ_BHydwXb8vpNkE66VtEi36LK2`_} z*l6~=gZ05hql2fOy88?4S$#3ml?%p=9R=JCF_u;Kj@i?fY6AJk@l36B=_yA zZkmvIHhNXZRsDpsmBle;v$tP4S(vP`C2F>O>h!>mEo?V^+bkWAYrUM_8#PO9VN&C} zY0dY)9QAOSG)=|8UebTsQa+8fHZ2p&&)z+<`datV48go*MVz zg++&7*FWo7eTXHK)AedGd(on2^66(L3M*EH?K)N5^k(g|UWX8dgQkaHM?5?-d9LDJ zCT2zk#>Kn_kYpk&%)(^AfE-}JL<9^lMg|S%`LDb;B)&Pf<8|Vx*ZM{oGO-&nxL30L zE$*)U$a6J8=|#e3rUNFt8LksouVmC~WS??ix2nabjae$`CnBX6rBC&9J7&f8>D!@| zs|(I=Rj1%8wN+OM5jQ*is&%{MPtn|Iz= zbSOLJ$fd%A5BJ3_h<>^5c*jY;CtQ6^s)wI z3%acPz0z{er^UqqEn8-%yA;UYE$ixYT)p$}>NxYgMrkhjpNwD4Iw{6d>22npaY9A> zch!OImNOOat(maqQAtkj+9Tx)i{zK(B}s<$zF@qv%GuuOP14?*!7s9(9QbI<)#4y4 z!;)|0D_yC6VGYaVqM-ZS30X!FJUT2=r<`r~Kh0cbC3q%sw&#x<-Cwlj`!tqnx0Ehi zFwy))Zb-DrNAB38%pZlM=f3cf&A$EDTx>Sqo65}0b=A54AJ(VtYB{U3nk)FtjgujF zy~?J(QQP+W{K9*uR{!+yKY8q(&5`L0Wjzrmyo2j+Gu0hFVB#pf@MF}WBY(fd%gLws zJOA|Fy3Ue`nUR5UF|Pq6@yH6ZFc~l)2N*DE0RxPYA+qCY>_?5zICt#eoXgJ5++@1(5)>{b_lK0UxEw>ad!8l!UT{0qm9ELVLW zvV>z_e@EW)({JMA18kUgz1As}iu*Oy$Tgra^@h}=S6-U~bB->2_N!X@sdL2Nz^3&0 zxXxM2maru;r-U1MegAarQ{CzAje2I^YNGAq!#7;BoyfY8^Wh2hbgf9QvYge%U6=0^ zoW5J7bZ>!L?8=@NPE{4V+vWvk8vBIG?Y3CY*!=J0#W&jaTxr{Dlic+9*UPA+2{;LM t)|hOKGxOJ5t?Im*@n_ha`PK%L*?s@y6}8&;?7eo^C*3;m?)AvqI|0P?PPG64 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int-v1_ca.der deleted file mode 100644 index 5a7c922a3c49ccf70c75711953f14bf896cac9fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 zcmXqLVvaRvVsd3-VO%V3V!+GBsnzDu_MMlJk(HIfAl;DLfRl|ml!Z;0DKywn*gz1( z;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6MGb^OqRc!zWybNDc_q4KhVjXX26E!Oh9(BaMkYoErshVbQR2Kt$XtU0syjr^ zKnCIvQJ@QwlH*fTbx~Z@#HfTE8jP$A%uS5^3bjXP;(sdHyT<+aw2v?RP~LKAw)tYCWNGcfOfs*#64BDWTt%mrSyb(GFj{u{hsp zUf<<67L4xdLOJW3dUiN2KKMj?6PvY{`5N8}ct*wSBg~rEWxD)T%EL z=PyiLYqEAMcA`!s;5@UQp1y|=VBJv@}^xyt?69@eAsPo8Y8KiTN| zFsr^`?u;6X`D|JD^MW5eXXELe`RVQSACa;{M8F^P47YodMXS6ueD*o%=%}mUU z42+9;4Il|bR+xp!fB`wcfXN3KV2li93%~bSEv{;LPz2{Tds~Kch zM$Yf7Tc7+#B956?IrNmI=5?Vv>2hYI z#JjrfcP2mUZS1g0P!nHvy2hBCg;@W%u<@es}OAooHOq02xc1-7E zeW{^n*;C#lGVD85YHfJ+Ph`AW>>W`T65uKC-nDV}l4q~Jc-A@Pck@pBIMY$+tfnWs ztB~4dzcr`A6V|(H=3iA6l2YKfJAZAxc$Yep?>;jfKh36?kJC7s8s41I()8Q(C8Bxu k^5yYGt;=6+J)(B9WIB|lY5R{{YcFjC0QGr9rT_o{ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int-v1_ca_bc.der deleted file mode 100644 index ba5feec9acefeb4a56cd8726b206a8caad36eb95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9~QW?hkDz{|#|)#lOmotKf3m6gFD%aGfElZ`o)g-w_#G}utsKoG>? z5ax1D%*jm4FUreIG!!!s0SU4T^ZMqO=9MI7<|%|_rj{Fu7zlyHxrDg`f_)W2Qj1G6 z^U@6^48%a9%sl*M#_^eXCAwvX@yUttNy!Fs;=G0?2F6AvMh2$lriM}Cyhg}egJPcU;VbO=DEF2;f(w39vEEj;fj}*RxMd6b#?F7 zo9_1*H|^Iup=qB|HSgE|=PP1)W!4(}I5;!qd6Vdy=RuQts=x896+At;ey!jB&VBX0 z+}>xKO?0Ib{Zd_DKdU&>_r*WuX{_7PQ%tipjIS){=G<35_e%!jhk2gQ+vho~bx&NL zcK6tcXZEH^A;P7Hbv(OPUMtC7B}k{(xq&ZQs-oU5X%?)pMFF6B@;6v z1LI;|14uHF6=q>FU_cHqU?Ktr7$ZYKXW#tTxjzgzHwSf8F`vxY=>7Hjnr}zcmLJu2 zKWZ@h)bTwtCEEh7*YQ4x=V^V!xv!>Y?w416=WhRA&g)~xzNTUEdS{1^`Ia5EmJi-~ z-rt$O%HLYx{nr1vrd?lC)FR?K>|cBP%O|LAoKg0Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SvpK*Q&yb!ybXrCIyI|zZ;kkTByMqA$p*zk>=VOM z-iURtR$>Zt=9u2|qQETRKz!cDpUGDY)(fx(t5tS}uE_gi&|R|gi+be8OXs+vYi*~r zou1*aF68_fwP=Q<(v@s%KD)Lx8GSj!RiIj6*CF-lag6$kh_bh;rZQD8bfz!8@Z~R` z(ZmPJP%z4&PoukW?R-R;hNA+X-of%Up?8 ztU2=OqxW9!z*lptqIVrV`zkbiX0?6n2CjEWw`_EerdSJze_YnFRdVO%x95tDnV1#ZOb;@5UblMJ{Wk1&_{!Z?9N7l1a!)*B-Oc7P{iM;&>?g-%G}@LVG(MDVUc9Ly zwY2s2_2-9HU5I)5*X&H_!`8Vca+cRzh*K!Prn_Bx{$aHQ=j8L14?7DZr&gOs+jm|@Mpjk^gDgXC15P&PP!={}rqEzRVFN)B zheMdlIWZ?QEx#x)Gtp4YKm;VnF3jtjUz%5vn3<;#mYG^^C}JQ466X@;4hZ&D2uUq2 z$;?YPlrRtji8Ax>ml?-r=9TD{8O0|j#wR5k$cghBniv=xnHU+ET9_C|iSrsEa}A2A z?iNJ@d5Bvi$_#-nh)+$`MR!yaqY`qMFtRc*H!<=v7&I|*F*PwVG92hpKegqn-~Oae zcQX$b-{oDk*5UV5-bYC?f$MhOb2xwhb++}*g4F+ux;}0(VL5U%ZIV!G_ohFmmj3*E zZR#agk?18mA8)Q{YLt<+5@kz&r1!%A&fZ)0D!(I}_E*i{zO*dp{rryOTloa!YEJEa zaUn<4evZP=$&RxWWv@@Z)O9m9&Z}a&{K*r(iOekLUmrTdX;`PTFSYaAg1G&s=1jWa zGJl@7b7ND$-2Oe$o^#tqWdfWBaegEbL20+f^Aq-ed?Ps{{^qGW#R|(i&uhL& zKYMSPRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6MGb^OqRc!zWybNDc_q3)Dml?WPMp`!#K73d#K^$Z($FYMoYx4MYfwOShsYVo zKpY}kW*DE89G{vBatgvlO^iy&p~1+?z}&>h&tTBR$i>ve$jET9Bhl)`$Cy1@YhH+c zU-n#QPvBD_{g1Ebd(~X#({q)n?0nqLrc}l*VZjt7x`E|b$c^I9U31kx*I&I~@oh=5 z+@{G-b0%1HA6$KJw^=bL>@(K)44PL=_eIF4FXGXWTAV6&UH)e7!3AG- zObht&x-PtU@o7^nQ#bJ-j+Ybf%;@jE{^owOY;+m}vwTw}2V04;d}q4Fj31)&d0%_B z9WP$|=d*!(^%4I+-SP@QjaO{DZL&0M{X~wo->LuB)$Xy2IkwWc_1!T6pR*RiOw5c7 zjEi{wbCc)M5X$&p%}+UoQVQ@#^Ho@0lXwO1%U;w>FeZoPD;Aqr$M}^|F|* z@9SoUmjqtPRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_66%6D+qRc$vWybNDc_q3)DmgJeH?z1HC>@`aY#=AjYiMF%Y-D0&U}|Y>5hc!R zgv>Rlrn;Ln4b&lSQYbS7x*$F^733PuJm#p>BaEQr8+e6g-@| zc;z4FhL=va#(xTS-1Je z)UM;pPPd)oQ&`_{RrHz2aWn4;G8bV8Gu|CPgwS1;SV z>)pEKp5>>Rm>C%u7xNlGl8vk|3zGo@a)1F76)?aU83O*EiEuHElRv}C|Fc!;TUOPN zPP+>)|2yzb!IPczV9MGS;M;#|Vq0l~fsA*sbB znR)4k3I=i@QDz?TGUNEnyps6b%;I98M0`@RZkb_xa-xBpIIp3Jfw7T^k%6hXkztfL zuMslWpqlD#(lk(qxJd!%f~4g5)Kpzuj%#96LJlKFRtDxKMt%l^CPpr%CPqevrz}?e zWfzj7KdU_IkE+vJC~`XRVN%=nEEDHorH+09(}_}X&1`d4OpRJ}Yo^nU|8^IIXYbdp zyXMc-bvvf@>Sa%M<=^u&7QcN{nZlfMDyuNkB_*rpd+^7~jI`fAkC~lRj>@c=|7Xdg z7B2Ob_Wz_GYD*PNI~bJPCO>!2p*7tBC(1HECpPx&jMwY!x#M&A>80!I{-3UiJ6p?A zy2?}X+48$tb2R#&2Y=gPeJ-7?r@do+#S?+koDV~$RfT%-NxuA4f6;cqe@*c-8oz96 zMS6OtWiP)X6;Wv6V4=F~>71@r4(r6X{C>Fj&iNTHOFo(3Gf^u&ZnC;}`Ar#d-D39p z5_gW;a5FJ8GB7UYHGm`=Sz#6?0|w*(112h9fH5*yCF*J&nD;hz*A?;WE3RI6sa3mf z)8x9Y4aYT?EQ+Xbo_6YXu8!EMzqRt_&2};>99HM&JI%I!z_v`4(RhidDeNL2m{vGThmWIW+hzhI4p$}ca8+Zzrw zbk=(s@!7PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6l?@a@qRc!}WybNDc_s0=nZ?CGiTI>s-7>@YBg2$l z?x1e7r1Le7H-1Q*ZdN^z`&z~&<89mCzwJ)FGB;*)zMRUiq`X_{+An$G;-Yj;i<2dc zx0l^sK4sH}@LC}^U8OJG0d@HSvFAR|J@oMVJbufvxhhXjFz#KSbFkAmdSl7y4oBaU z&f7n(sPnJMv8&ILkbKC#ZSmqwo4$pqCI1jSnlSnBUZa5b_s=Nrx*NICB~nIJ>hy_a zchftU-E}`~VVZnntt}sCL!G)m!=W1Ms_B#AceetOLgUZ8#9`|Y8>+UeFJ9pXmjb-1H%i%k{Cr>S&o8_0)QGMoP zNJT=;2K6Zkk2mIUt@7IWQ!VBDH*0pc%SIEnPO$4ZdH=<4Ws6`=W{Eke(~ol6N3Om2 ztYPA(?pI1VQ?GSf#J-F=WZT;&*34^?@bUR^hbB$-Fi|%7M*`W)8#X&U>$>sc^|F`? wy3ZOqH~*RAyCQSmL(lKEKZKv`=3RU`OxQwk=DR=l`+n4%h%Ve7xHiBF07L;=U;qFB diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int_missing_bc-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int_missing_bc-v2_ca.der deleted file mode 100644 index 2252b264cf35ab98f9d5f60589a4d778ecec33b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 886 zcmXqLVlFahVv1s7PK*mQ;AP{~YV&CO&dbQi%F19+WXNs6$;KSY!Y0fV8f++RAPC}c z2y;0n=47Vj7v*Ip8j2Z+fCSlvd42Os^GXsk^Ay4|Q_BrS41_@9T*BM|!M+M1sl_Fk zdFh4<267-#W*+e}eP1Cz2@V3h<&EfoaL!Hifj9W#w@6p>jC0ywY=j_g^8~=24 z8kS~8{<`T{_H&nYqH(=L+UYmlh2P%s`OiMK{WSYb_pO_J_Ww`gn#(lp&GB8#}KbmwBT%v2Ml8gMKC}*Lx-0&@avo z$vV`x*>1~HrpavmTaNl`ec1NZc6D449~Z0mjH+pDNnKpK>7A@%pR2b=*}>Z)fCB z$~eiUb}-nrN&+WTzY zexJ!Z*ZcmHw8&AN#Ql})^po=DMkNhLjf}JIm2QRF>Pst+A2hqSZ=zX2=01@L*$3av zb*(7*bL(8a&!IbBGBtBnn5auS^Za_2a5yZDb>)u>FC^u}RCl^O*^>Xzc$@e^S>vd6 zKl}Z83M5zcCCJ3Gt=@7eXOX%rw>?XKF%CE}Bkb<2$6lM{gq137VCLlXmIBNHP7Qww9u zC~;mRWUfIS)t#kdpapT3a+x8}1@Wn=x_I2z#HfTEQjDw&%uS5^3`97ZT`Ui@=SVH}_pzCouOcaE z#d0m?_lLlhbK0#I%=#sj`;O_`-^@A_!4JFNIBSD-rXceA{pz&U>JkQNCx4tXwK=}m z&iV8fD}#HSOw5c7jEi{pD-08x+ zFK&zzH!tliuGo9PIOO*GI9-EQw|n{AI!l>#Prctff3l=~z-7^xxX{(l?U`gnH2Nmw z#RqTs*yONj>88LwuD22H%X3z1YiLU5N*&!LaeV&E+dH#Ar&xZ-GyNOssj;Zh!Qj`d zPa9mkT$&;q*U$WO#*a;_HEaI*{SC6`k{?V^bJ;5rr6QXA>F_$4&f|xUT#-C6X>O0J zMrg&hBj;k5q|ROX@4tIr;P%v)i$dQNEzxcN|1d#Vb2%e-Ma5;s&`00Tn0$D!b!E=F x*`}{`r0=W@Z``DMtLg9p@#nu!Y(9BZcxUTN{%oRDJ*e diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int_missing_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int_missing_bc-v3_ca.der deleted file mode 100644 index 9ca74d1114b3f68d51b4a5a89d836beca0285fdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 887 zcmXqLVlFmlVv1&BVVJPRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_66%6D+qRc$vWybNDc_s0=nZ?CGiTI>sU7$#EqJf+^uc3*7v5|?9fvKf|S(G@h z5i-}Hn(A)SG*E}QNukUT=#Kc*RFG4!I!+_Sj|H6CFkt?|7xGN{clC_6Piyp9sIl0Nm@g6eTu?= zfwhJn)?1u9FLVE8-Vz|A^oyZb^wj0py`rBL97W={ruWBdZl3*oHs>TI?MY8#nY%7# zh;y$#xK-kk<@4owbq7v=WnHYttfJ;TN90J*$t&B_`|KpAKjp}u{Kb6T8&kvX+Jxl~ zgF9r7s{WAX{kU}I*L44%4|cA2>=5(0S2D%@{>Bdr?|l1E6~(}*>v!17*(I7olYj48 zcIN4&Z_YC@GcqtP<~4vM8(Co%CIj?D1q?7ohN{%Q_P|A_Z@LCJH0*R)uXa=8m(vQ5 z=$ZHR4ZddyJvvua-s^K>fvDpGM`6?OWj*1d8@CIrPLF%>`dq0Mm-O!Rhq-#+e@bNs z@A0V&+`VzuJcFgtPN9n={J2v?7cMy~+qcTir5u zE(^F}Uds3V{O(7muDDEDR}|K_@@#n)ce#~H@!3B)v4tC2kH0YpXJG1{7y2}(z~F?4 z<(_RDi`HIOvY54k?E|-x@wI|h1&6a@yq?X@T&16CkN*hjZ58l5m=j|z!?@?!TKB}= qea0~dy%@K!{Bt?baOL@tUU@IJ|64gt-$;A2siai?F5;Zj?+XCb5k~X? diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der deleted file mode 100644 index a633c2af849ec4cb620cd3df510159e095a75afb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910 zcmXqLV(v0%Vk%-{VVsvIZotdNsnzDu_MMlJk(HIfpw^JvfRl|ml!Z;0DKywn*gz1( z;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6wGA{uqRc!>WybNDc_s0=nZ?CGiTI>sU7$#EB9efCoH(zciGi_^iIIV+rLjqr zIIj^h*PyYD>h3c!FoL*GyUY;irufuUkh2Imw24s(Ip`Q!8JL?G`56qF7`d357#SIk zWViOszV@^2qu{3ZDYvCg|E;&U^;VtVF_wqd@vHH5xwn(PaR2prc4V8#(QdUjHb)z7 zKAW0w@3D>d{zcBZQ~qqQ)iC65RCdnuw!KuM>7BYbwd_;t@fVR*4^0D~R-dVR=J|ws z?dM0gO4ScOnYT=|%l1j<1wFGc;SJYCGSnmNW0>Vn{1rc^Vj%X(@X>`Er#tWJ_iG&c za8q58SM}<-@|H78rg?5my6m(5+qRZX=`~xEyEj&t-R>>yP!Cg8S#>*jqRTRsEwj(3 zPBz}C_4|d?Y3G?u0hL#{O!dRwyB*cqZM4m2p2lU-;BEbJg+EgI-MjLXeWS{< z{;yxO4PTvO|IftC$iTRm*8q~5WQAFn3>c6D44Bq{0mjI{&7>ghsgw9w=ydR=MHMlPN6YSgn5Z^Y7zvM~@5qwPB{BO@y-gF%8Jw*e;`b0`a&FjHu-p|F7< zh{GYw<(!z4nU-IamziiNW*`C*WEbZ3%`eR>NzBYs2+K?@Hxw}t0*P}8a|ZW8Ce;a zn;7{S44N3Zn3@p=pAGfvt! zTHC%nsP0;Dfz301V@oUZpXhn!`n}oG1_vToytQsF=yp3>iU!yUo#Hg z)0PSAYMf;S`U;Ya!LbMu2#_Q;mEIbsZt5EJSFE=<#79|NO->4gKkA1 zkCkg?edQ`!%5c>0n#3zry^@v#D;0lVy`jJvZ>G6v?V}BbOF1U_6)CJ)@Wtoc+WLBC zl?=XHaVrF~q_4LAcM!gjQ?s}`SH+!)nUR4JIfQ@-0~kV#3|-A<)boyTIpjrua9+Fl z<;7JxhxNWEPg+@PwD{MHFZF5vxS9WOsQTqLvRyG@5qwPB{BO@y-gF&((w*e;`b0`a&FjHu-p|F7< zh{GYw<(!z4nU-IamziiNW*`C*WEbZ3%`eR>NzBYs2+K?@Hxw}t0*P}8a|Z z%cs%{Q7dJen|4mxvvcDj<@)`djSsg;*{;;E@OWzVuf1llAh zzH8=UM}7NKoJ|LXSBu>8?Q+eUy62S(>)~qo9x1cr!xIiV7R~cb>tFb`s&Q_)k>$qi zIf6m{3C_ry7hvmVUlmA%sGchwVFfJA_;4|O>#-FS(3#$P$BjbPMFastS zV3;v7tZw31>N&HANzsGcZ3fuG*Y{> z;8@pHoBbS>UqWZDoUkD@)v)TC)YEdw=(`irnxj>d;*{S`t9?Gn^{11La9q)5%dXe< z@7zmQ%@8fEthg^d@#Nz7?8j#JWbS>Fej`%+rj5{Mzr**f0$SH#+YgmrKih&t81~uJWggiw_&#Hnk6~LmY*~24ESbfz>v;qKUamdh diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int-v1_ca.der deleted file mode 100644 index 4178d59fc6bdf4cdc0465ac7ebf4cf768a517028..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 zcmXqLV)iy@Vlrl8VR&V=-GG;kQ>)FR?K>|cBP%O|LAoKg0Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SHh{)bc)hPBE3`M>Phj}(EWZ+<-pjp!)gWMXDyU_=ff zU}6D=5F-N{r+39)d&{k6M<2dsz36&~(C$+_P`}z&!OV>V@l`!ZKHYcORiB*oPD zTTTmOcZ}8d&z-+Y@YB4hJC96%QpMHkDc*AJ^&HuScHUDJ+zvIZJl#0$%h!GRx(|wY z9ULcY{Vy%j{czDuTYWwM*Y8E|)t)d*aJZ|J7Xk8F%FUJ9kN8O=>{Z*EIR4T?e8AAGXv#u3=>7e^~dX V!Axe-MZ1Q^<+jU%PjhR_0|0gaKO6u6 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int-v1_ca_bc.der deleted file mode 100644 index 93a45c2a883f5842304e6bd78ce305051d72f8ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmXqLVh%KDVzOjnVR(6g*?^agQ>)FR?K>|cBP%O|L6#x60Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SK09<_)RTDv z<_e8#VkZ53n7;lf%k&>9664;*|n$yg7XG1{kBx7qMle$B@x72V= zv$(Y2RgjwU#=|bZrbMK)-xt~a?drKXHZqkj0xu}eSbh90{}!(`X0OjJe|XLOO<&sI zO)sDM|7y84kvX}P|KKd4+q+q2w-=l%ESvoxLi*&HvR<|im(`q_ey4Iz-Tb>;nrCXr*1WWB+10g z$iRpkLck;g3?W7a#e)xp!;YPaHrd_R@Jb{94ddjvuL-f7%2I2*j@D+khifQ%nP1GG z#GJEPqifBx$@BM%%6)vGeS5;2G-v&82JgkOEAnOp8)&7dU#e>2%9U!a=v0n<*VUhP z;zPc=v%N$f=ReoGE_!R9#ePuVzro_|OCPsI>nDlCN+eH9j8W15+~Ca9vtZkcndNQ| z`0c-c3tFc6*W$&W)haQEuWsvzI=NSRHQTkdg7UKutZO*yeKn$MA-ib0Xv)Qx0oQBh zT)(|>Zd}GrlYE||MlCxQZs-{21PcKg-F^I-)=KxOjHIc=+_V Zdr9KQW7OXp&9UIhF4XgyYr9zCGXP(QN#g(j diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int-v2_ca.der deleted file mode 100644 index d2c2b2253788f531170414e6115343d692f51c80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 zcmXqLV)iy@Vlrl8VGP&xHQ;6A)N1o+`_9YA$jZuKkZ#Crz{$oO%EBhh6dG(OY#<2Y za0qibC+1|PV9MGS;M;#|Vq0l~fsA*sbB znR)4kq6WesQDz>VGQ;@Hyb|3qqxj@R137VCLlXmIBNHP7Q*%?(C~;mRWUfIj)g2;j zAPI4Z5YQp1sk$i6X<}4D4hlwA2IeM4eg=akMlPl%Mn;CC^727X3f+XaC$0FNckz~G zbEQ|<)Q(Tam%^u8e^)V(mz%I$ZIMX!mNNgUG|mr`1ee=xh}!!%ypqFq;+%{J`*zvR zJ}4UMc{lxwcT!i4R=1@_p#Qh!u~m~NRX4e)Xyht*q&6#E@4eQ8tnWsxVA(6^mCu0GNbp>|5$VO`QE#K zA}3b1{1tn+zwzNjVYkhFMGV2+IR^GB++C*K4y!~j%SUlv{AqcPS>Ul^7k{3yqhp~# znxtBms$;(w|CN^2c4C#APgwC5ykcLN|J?M+>q}nAuXFuV4>Jg#@wMd@ZD-Wby<+s} z@R7%5ALV`?V7&atwNZBuQ;m6KP>^M_uG{229DhukjM;Xw%xEp!RlY}W-GbcEV?8UL zNqsB5EH)u^U-Q(bAC|A?PTvy#X3gD&6BZY!pWkh#%I)6wSwCd{EdlRqr}juG9~IlG UFXj|?`tL4-1%f^YT^|Vm0HY8(NdN!< diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int-v2_ca_bc.der deleted file mode 100644 index 851e56dadca445862ed327ae5e801cedd3514e20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmXqLVh%KDVzOjnVbt`^G~i|9)N1o+`_9YA$jZuKkY&hiz{$oO%EBhh6dG(OY#<2Y za0qibC+1|PV9MGS;M;#|Vq0l~fsA*sbB znR)4k5(Z)*QDz?gGQ;@Hyb|3qqxj^+_@rb5IdNV?69Z!-6C(pt3nQZ_ab6>2u0a9S z-6Cfo196Ke&@HK{y67%yVpKv75Jpx8<|amd27@L>E~X|%Muv;#9a*1eZgpAy?CH6JP zD!TVA^b}b1Z+9@QtLfqTbb~|YY-gwbn<-8AzTInyF#7g5$y`47=48{9(pMYB7QC2} z*{tXwIq|XK>F%9IT~!Uz+jK7by)aNXu=L3i%ir4Nucjs4e^Vd$yz|V2kjl$E+l5W< zY??pizRiObn+td5$M11AU3}VQ(OuSQXC7={E}x+%BB**f>Okvv=a*Nn7s_rc{!(gg zbpMUeyahU+MBK8p7yc7$e|cs>+|IcSN8$qRKJ~d;kdsjLXi;fbbgYQY1s&J_=1k0t z42;Mj1WYo(5MpH5+r_tX(jQH+&pQN9HAV|OVED7Gh2LeFozKq;V&&Xho^0I(1wtQy#im6D}p3eBZ!w awz0IfuGVg{h;$yN6e)y#W9@f=ucF diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int-v3_ca.der deleted file mode 100644 index a6d3bdc81b4168d0c9e39c4965971e2a107d4009..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 zcmXqLV)iy@Vlrl8VNzc*%Yc`SQ>)FR?K>|cBP%O|LAoKg0Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S`u6k-0jFv=#jZH3(h_(~r_VxjSJLQ_k4Y`?*Gppt?%6H^=5KTI(x=pk?=aN2|pi6PTcz~#%1=gAitF~J{MLSmk5dmbt2eh*fC7n{N;@Go=YHDjm3@BiH8ET=qBDNa;XO*Q4W zUfghp-}m&<>rbCpJ^CjQ5cH$7?w!9uG}CPE+Eo+nmhGI@9K3F){UP;GNhW4S21eu% z0wxw<2r)7=WlCJO`e^g?O47l`8MjK<8!l{OGiP}hx?|hwwt~h9m9Ou(uldb!;cs4F zV^*8>ntIg%8C7BA7BEElY+9=y|y8lepwB15~ zCLCy=nK3Eh)R%)t+n!uDQFwE7`tFu^&t{R!na?e2Gsdvs5Slqg4d|dv)FR?K>|cBP%O|L6IT10Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SviL-8tzFWsG=5BL%<@w$2Z;Dl(o%=4Vc_P!vf3x&)4ax3)x3}vJCjZ&+(=B1` zlNZ~I95XnhTs{9xm9%&=bGbrio8+@}-FRis_UV3)5VJv!~D#V@}38OJg$?^1d6iABn@ zQ)?dXTN)-_V$0xXyliP)*!w-R_J|jX#&-Q{ck|5*+4b_KI;hdYi}zibfy67;fHk0tV4e9hZk1zBP$S44Sg{;GTte*AC%ukwXZWgn%K$$e?(Si}T9C6BlYWtXi;ieZb}uD`%YDrEo`hw{*pgsoyou zbCzD1y*A_UsVxb6zm@#qvVI`0`uC3My|v3X>MT}JbMz_tobyH0Iw9@<9^PBl4_B*L z$frn5m5tu~VfWXylPqN%xvZt;|4mmq)>ra!vwhB;I+KSn_llnXTy*QKeUwKVWv;N(aJbyipgWHU1mw$g{W~J)45%^8K1UX?h8|MsaI{=X? z5ax1D%*jm4FUreIG!!!s0SU4T^ZMqO=9MI7<|%|_rj{Fu7zlyHxrDg`f_)W2Qj1G6 z^U@6^48%a9%sl*MhVhwsCGkngxC+rRqTcE708 zkzSAW`h^@c7CW21yv$UwbJDge_MCg!<_2F=la?xGT$Z}F{Ih{YlN#4|llg61tJh4} z_i4&1-%szh1@BwI@0e=h@6J-gmi}->me^D%N$i*K_(GsjKB(H(eD!`%}-xEh^rPYp(OuaH(!gUY{{B@vK>u zWu`>P`qHCzj+>^h(4VZ~F#YGLwWrpKAIT8>d}+cN`}2jH>wF{xm1lLxD(Or!n{}z8 zqIHYu)`n9?CE>?5{5=`KsKtNJXCdzo<|LkFTCd-?f8M&6=_T*A!#xX4=J?KJVrFDu zL=GWfk^zPgBg2ZKQr0`i;+Exbh4M#6nLKOxc|dGq^umkg-;|HmNt_H>m2i^XW+Owe zn_29x0@8C&j+Mi@eG4@>YxJpXkulUaLhbCw_YGvLGvLmXwA`uE!~pb3xsE Z<<4&8o6}sd{rjRcwx1{YJmN(^0{|e4Mj-$I diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int_bc-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int_bc-v1_ca_bc.der deleted file mode 100644 index 2038ed5798e35bb1516608d03b699c47184c27ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 859 zcmXqLVh%TGVzOsqVdzk(G2mt6)N1o+`_9YA$jZuKkZZ_oz{$oO%EBhh6dG(OY#<2Y za0qibC+1|PV9MGS;M;#|Vq0l~fsA*sbB znR)4k(guYGQ;@Hyps5&WL+RDIT6S(kQ3)MG%+wXGBGkRH8(bi66ZBS<{A`J z-8qT|@(|}p03DH<3UUg%qna3%kb{Mhm4Ug5k)Oe!iIIz`iII`v{Jd$WBj&w%{q^11 z6{@iYhs37#+blfqryIz3Iz2FYTFvC1?BuP2wQ4aYd%fhcj;;x=e|pMs)`c^RI~LE0 zl=S#vm2Z;k&bVdHS)(a|a~5=62wAe|oqpZ1ljUpX98wC|>HPPfR9XIv0Dcj@*4C4L zGRqAdHsrc2Iv61+!}R}%Iot6cr7J>}UsiWzu20mHny41EF*iCyVunP$<(!oH_p^@N zyLD3Ti&(b|U-A!^5K+I!PbYoe$CJp#-WjLd&Ae9SM)C6IJw?IqGA18hnz2aXPsz3O zoIhUwuY5RHxn$FGr@Up_w%yHTr~R}fPxqgz(c4!4G1NWnOK}Qsf0B)yZcMYhG!ru; z10!+>0TT`|gcuoiFHSvNze!W|8PDf?+s<{hE!|pRwMZdEW63)C`t6ggO?Th?xpd{t z*n8V$^mnN~YMq(6JVQwAK+Umfg0sjU$Jp*nvBmRe#x6UWu$D6L+c24$)qhpq_HhXqD0V z7fU?8eSE$l#`MI-?+Iave20H;jLdO*aQr35lIMY`+q(aGPU~y0d{Fx2-eIBk{+j+@ zH$9L2Z?Jwj;g0{3dsliBHm=a!To*9isXtY5v`X|CK*+v(BmZ Z2iGnf>-vA4)gnwcKGxCe(SGJxtpEoVM*si- diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int_bc-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int_bc-v2_ca.der deleted file mode 100644 index 4ae42eb5defc56026ca2a9a907f0076fb6d0142e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852 zcmXqLVh%89VzOXjjy`|ifR~L^tIebBJ1-+6D=ULRmLazRCmVAp3!5-gXt1HMfgp&( zAI#HnR)oj4C6ENO5&4}b<2$6lM@Z(#CZ)(42+FTj0{XI3=E^hd5w^{1_e}i zi=2TB#4Vygx1^@(qPwVxQ3*Lf7+D#Zn;7{S44N3Zn3@# z4DRcd#XpMF=lwQyv$b{R8s9Ey2Av%XgpIspc1{r2(O|OnZaaG9i{an0+zj`9x7W>i zb8))Vo{%3wH{biec_JNpbBmn9_U{hn%%=||@@^?>I9uudqjq_!$(ouYwqH*zw`7b^ zx?{^(taf}ysVWcq=4I7KZnS2;=*>#Vb8#*{yyfl-?=RaAer)-{CB<}Zeib_tGa~~d zatHyF3^0Tk8F=p-Fs}7Fp?`wmIfuAwt?u%uw|~$2g$fC_?K#ryy=d1A%{B3&G7nd> zye_HctSeyZJ@aALe&OxskETx4xH8S)QQh<4EA8LD1RY&=rTCCV-?RA}4TH`vHcmU_ zd*i*?=e#%1Do?lO zaNlF!l~Y)}e?GZCXFs1{-S<7~-lXphKcw$1`1j3?ZJTdY@6o}e+)}Xs diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int_bc-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int_bc-v2_ca_bc.der deleted file mode 100644 index 015ea336d45d6c6ba28649dcd2fe9c64f859d356..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 859 zcmXqLVh%TGVzOsqVd&o8Y{1LLsnzDu_MMlJk(HIfAlH!FfRl|ml!Z;0DKywn*gz1( z;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6r41xOqRc!(Wrp#Yc_r~l$+~4m@yUrmhJlTYn^%jVO9s*mkT9|kt(gyACxzK zv}3(=WO1`#yxXrytp~UnU%j`m{m!xKzbh|~OLE3PhKlfYD=yZge{;6JaH>9g&LKG) z`Ar-brPdqwA9{75QMxH9sDJ9~@|(B6r|8c14XMwMxI4*^Wm3>J-=~ei^^tnJ)Z#1+ zqaSr;g>CU+=eqHIlU&2%)lAMonch2o88W|OveofPT=iLC|DojuyN`;ro)b7Oe7bA% z;(~d7Ro@cjTdv4mSo2yk>J$Lqbb8nzgutvxpBJg4OP*_`$spJ%^JsVr|ccVuE_ zWMD)NAz;D*h7cn|<0kVf>P*t>3Tow96`G8?v(w$bHLVHR&*^>eZs7et9y*+>PCu9z zZf_9wXPb|H$o3_2Z!Ow?d_#WJN>eqZ9v3Ul%gw87@~0Z+dXn)w=)H)>}VLXFjj! z$=4K4GWb}RRWp;>^J!YUW6g|U)5O&2E9^WL#(v>=7ZaMf{j`_t#HDFUjYqmG4;w#K YRiCxKpqOQO_B{LUIzD}qH|`d{0WR!CQvd(} diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int_bc-v3_ca.der deleted file mode 100644 index c2538bda48aba40825c96c12fd9137bca08cc154..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmXqLVh%KDVzOjnVNxibWWdYDsnzDu_MMlJk(HIfAj^>3fRl|ml!Z;0DKywn*gz1( z;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6B@DzsqRc$}Wrp#Yc_r~l$+~66@yUq>a^k#(CI-evCPoIP7N#aq;=D%4T!R9t zyG71G2I3Y`pj%Q?b+`Y|XYZ{e|xmx{vjl4=+2N=h`m|2}D1 zh}!P++(nmaIrkJ^nWB_l{AzNRM)8br-_EoBcMiIuKHCLLBlZcfbKJU?`uN#jxAY{F{?9ubBjVqf?LVe-_2Grwzsp;_r%Y$8 zi~Ih}?aH$|&GGXCHw3KJYh0f`ce3i%%L{asj<5HzFn)JxUd;s!Vf$lCSY)j-ucS)M zxLEUG&ujJHhxHHi=W<{E>6Om^r@rf1|G_g=-~BefG})-Veae;E+BN#2Z$594&}Cv~ zWMD)NAz+dLh7cn|>q=2?o#`xd61k?DUu*y7u4eKv*I+4ogLCAquxss7yn@|}cmY43aroZr>_U@38^R)1_WhJ&$vJ#N?$7 zlTFVy%(}KZbixwX)Mq<Z{H_wz7{o`?X@%-uTE4`-# zAG-Ye3FoURwh;vZFAi?HTQ|GT<^8gQoF^w;sPvf`_{QaP!pfgXl9Ls!uKc_ZksZr7 zb491+&q<7{qbjA3i6nIH;Cvx}bMM|;8z&n`1g-BbuMwYD=9FzC=`&0DvHX>k{tID2 aX49(Q>GNlCTxtnDykQl`loYQMJ^cWN3Qju! diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v1_int_bc-v3_ca_missing_bc.der deleted file mode 100644 index 13f404694f4ffc14143e68ff0186f5963c817d2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmXqLVoo<`V)AEVVRVg*HQ;6A)N1o+`_9YA$jZuKP-@6+z{$oO%EBhh6dG(OY#<2Y za0qibC+1|PV9MGS;M;#|Vq0l~fsA*sbB znR)4k$_9!cQDz>gGQ;@Hyps5&WZg33_~gX++|1%)pbDUXft)z6p^1U9k%^Iksil!& zlsK;uGS{G*>dw+MP=`260qCsMR9!rdYhqMF4kkuc2IeM4eg=akMlPl%Mn;D9KTEXN zE)Hlalk2N&KYqXchLl%O6i@mJ#?_3oj3WfL$H(4T8ZCYN*Fpv^zt#857ks_eu)5zw zYx4WM&%2L(h%lYCtVL!*&t|+YpSILsH zteW9G6EhFe)ZN_t zKbzYOSqO8MXTyY}odU%_d+S#|IGuBJviv#M8~>u+1T+5a&Ya|~m9S9S g*RgnR(Ja9f%~H;YybqH*J6?zFZN1>I`+X`a0AmPAQUCw| diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int-v1_ca.der deleted file mode 100644 index 7d247c665cf131979b1be06712054faa4e34a134..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 846 zcmXqLV)im? z5ax1D%*jm4FUreIG!!!s0SU4T^ZMqO=9MI7<|%|_rj{Fu7zlyHxrDg`f_)W2Qj1G6 z^U@7P4TM3W%sf10M)8?>CAwvX@yUq>a^k#(CI-evCPoIP=7vU5;=D%4T!UPyJ4D(* z65m{)#T$e9Fe-qP)Wepi2XU$a-Kgt~q_?=^! z$DPq1zUxAF%w6UJokus9+5UZ*t~s}5ub%ayg^jOH#!iV3n9$E!%;`Dp0h4dZI_3?V zquT$3eNa39OjY`SP2l_k{q|RFqz$Zh7cZ?(np@q!nPI)QaAxk)_bg(&r&P^zSSM-` zygPYconGFwEdaoSt8oBl7(6@G18e=lVJG83^0{fX^N%!~|-$RPww zEWi+AWU$UUG-sjfT=ufH+8Zao`2JIHM;7DtM@5w;OviMjB33tSntIauQG=G-9M6be z^Zi_9Ph~|pU-)E;oaZH8x`^U#g6lR=hd9~VTVq73yb`%&d@$jw^UWZ z^*c9AQ(k1sl{V?D=d+w@!Q7_a<GMYG zpG({;Zrw<;*(w}8JHIJjqNgOw#8lJmoI%h!k-TFI8>>^6-;AI9*fo6Fr#tQoR7H!Y zIdq*$h*Q^Ie9Ejd;d=|m)N;=4Q)Pnf!e*W9%U62pniC?pHKnrG@*v;$*CIcSZ+_jU UyWHzx%}tIbZlS8@i!0B5vBEdT%j diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int-v1_ca_bc.der deleted file mode 100644 index a0f593c6f01fa2d36c42f55b3fdf30a5303c7039..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852 zcmXqLVh%89VzOXjmOApufR~L^tIebBJ1-+6D=ULRmLazRCmVAp3!5-gXt1HMfgp&( zAI#HnR)ojjN&u%N_5K%Nz0cPA>)2{G9IpJYx}fm#9hbFQY14}& zX1=mF4L(u$^>9emiunrmD{HpkFk5w!Uv(Fui(0cUA=-Att2jf&FD*K^ X`qn1CQ(w5_CbsPRk({ZT_-+pXM4v^D diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int-v2_ca.der deleted file mode 100644 index 603274e02f3df8ce2c353bf86d34500bbe9d59ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 zcmXqLV)iy@Vlrl8VNCY#FyLk5)N1o+`_9YA$jZuKkZ#Crz{$oO%EBhh6dG(OY#<2Y za0qibC+1|PV9MGS;M;#|Vq0l~fsA*sbB znR)4kq6WesQDz>VGNbs+yb@g?m7HiGC(dhVVqk1!Vq{=yVPG01&TE9sHOQs9L!=EP zAr28LGmKA71-S#^oF+yk^U9u`+LH%Yy24m)>`A6$#sc3wSwv_0Zn)#vc@VAh|>ueq_m+9lQ%EV)oT=kwI^3s09z z*L<0MZCCe0)_XQ`)8qBGWX*ki>bR1f^VQNDCrm%Q32^q!(Oa^O^W$=*N1xgjJW~65 zJJOsv#K(I<+`1z+{i`3@MdUnQv|z@!X*cYZHvU;{s{eMi_Py?uPl+uDzA`a0GB6^C z5HPU-Lx_=~ZgugNzVK3x1eWc4RZI^FMmk9p&Uk-kfk))cQ(gdTzc&DQuBolIU0G-R8N}6+~51Ljrp;n zrc218*BtsEY(IYEkG)XZ|Fq)LgxDEkp_?YmGB`f{)~RTYO)L^7=Z~r1T@!b``n2x3*BTlJof6Br>$B1f`;4m(Ej;kP=F+~c zT?Tm<=kGFpln^^Bz9DA9_C9_!=fa+wleoNIa`So470}jZ&&WI+$@%*TD{Ii(3Zv*a WP7g-!w?WMFE#I%)k)SE_Ukd=d6-Sx? diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int-v2_ca_bc.der deleted file mode 100644 index c51c770cfdf929645948f327290305369b01bc93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmXqLVh%KDVzOjnVPwpRHQ;6A)N1o+`_9YA$jZuKkY&hiz{$oO%EBhh6dG(OY#<2Y za0qibC+1|PV9MGS;M;#|Vq0l~fsA*sbB znR)4k5(Z)*QDz?gGNbs+yb@g?m7Ex#lx!d;&TD95U~FV!WMFDxY!D^RYlO@-D4@Dq zh&tTBR$i>ve$jC7F>cuxKlVo#Wth(_- z^;=Wo<+?LFx1Z{J(Rl(aj?!}*_jjC(O)-BdS==4^lw#9_jRs7-#y2+s8#;`kXCfeJ~XjW?b*~HRt6VV zRpoLV$`t*0@7RW{!qBs-9;u!CjM{8&ifjjUmZD?=M1&hqnl|9p|R zyVo``P>LZhkZZfSvQYlR-;AlZSpIG)*w&tY&EOxiktWN#7cYDi7hLTsaz561lZly; zfe|@`fJp`zLW~Td#*Yk_Mom}xnwB^-Lb>*ZQlPZU?y!=Q&98oa+vq)Wqx1P4#!Dwh zoK?_RzpwS-&hFBqpS{1EJz1A|vbQ(;^=rA?)6PzI-OOOf_exrxpV>ls}6x?=Ky>sh;1Zhu#MEFkmkzOmXePRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6MGb^OqRc!zWk&Itc_q4K#_`FC26E!Oh9(BaMkYoErWU3aQR2Kt$XtV5syjs5 zKoa5*p)$kx)Kpy*=QJ@YAqNE`D+6;ABR_*d6C)Q>6C)$TvLn?~HfxB7?wcNN+`sb1 zAD^hrwmpmPFK>Ogi2dMI^JSOcuCGbmAM3jQ^=~l`fvz;Z^?X0SNU6-qY)}2Q-RSi@ z=_I#ck!>EULPes=Qa$B2ADDBVf398Y9q(Fmg-;Skv?N$pv^T%o#CCW7hrhWCKFLhe zPfrN4xxe&W`^&0}R!3aVe$~0~&Ma2;(bNg@)86e#U3F@8ezdm!6|HMGWc;m%+1y>Y?K^>Y&b?3S4m!#F8P zHS%!GmS(%4ut`-~(kIg2KM2ou4t<#-E!JpQT*MiywT=7gFaCDb`F3JaNAEH*GcqtD zhY&Ea07Hn8q2i9c>ld4-6Y~>TA6W0z@Y%KO+X6$mqs4QQW6h@V-o5qCV%e%kb>IB? z8>id%tz2bA=UnH9b~Z@@?DYGr^H^Ka=hk6{vTwHq`n4vwY&( z_qK5_Sns}c_H94-F{JVL=G=AvndR#&&mI%GJS(&#fyLEj?Uz3qQ4M!hS(duSasT+) zTye+6zS94-(wgf6-V3@fCS~TU%$l}M*!hQInS#7@UZq3%(z6mJylKC;#0B|t);Is% XqUAT!L1nSoN)yiIu?r*L6h8+5Lb*j~ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int-v3_ca_missing_bc.der deleted file mode 100644 index 263f7a9733db21ca8f529081f5227faceb436249..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmXqLVoo$@V)A5SVHCJ?-hh{lQ>)FR?K>|cBP%O|L6IT10Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SE~X|%Muv4lrcMm$ zn^Xfsy!J@`OJIm`{^@1#C8*}Bw$EKp|3@n?KV#QOeDJD;>GcW&-MazSy#e}H{?8A4 zy43ymy`rgn2DK@fe|@`fJq1#LW~T4JzU~n-=x)D?R;EpvnW8tndQ-zyryqHO541{xt2vM z=&kPdlyJK?y@dJM8HO2XC(_JI4_;b<-Y+ zih0Eey&fB`m7G7B+mP6$#OEWk>)N^B&;Nhf#Xlu)vxogwx@U5pzTee6qx$11 z{zGrIPv_XEm2|eeY&B}|zWe#*Wx3L&4$tl!PmmH>>3N@7=)$`fhJ9C>b{{YI%>2LV h(wkor4bS|vr}!=R>}gWIE-N+5-*&|=-K2oCivgLdSZ)9S diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int_bc-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int_bc-v1_ca.der deleted file mode 100644 index 370e8d56b326df3fc5b6dd612cbefce939eee015..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmXqLVh%KDVzOjnVSKMP&w!VWQ>)FR?K>|cBP%O|L6#x60Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S~UOpFXn%?-_?#CeU7xdsJP zcZ-~X48$#>Ko_K@>Y}@-iBSnTKp0sWn41{+84Q{jxtN+585uskmwn=Rur+PLgZVoX z9`*VOuVmp74s!idQ_XJfeLu7FR>JH>)~ zS8S*JO)py&xpLYIQ}Z`LzPGj%Hf^4%a^(Ev>4y^-R(uh>we+OuJtpVaoWdC;mj!tp zEoGA(vNv988JGbg@uD7&>YWPuR>4g2azWj?g&3*G%p7(=yO&vTz z`@>|K7G0M~wz;fzzl?v0*T<>Hj_Dllnov{WoRlxoHffQ7<&xD5mv|OPg+E`km5G^= zfe|@`fJp`zLW~TZty-tI*C<9Byu3SgqjP14iumTad^;WYi~e7@fMLd&GS9CmNB_m% zykvT(yI?VUdq>6_i~QMEhd8)<_defeKL5v;S+5(m#49y>SOy!Iu1G!p`rrazOAoo8 zcR4#)j8>Ma<^5Q&y1URg z-&Bj=tG}4O_}mxe>O4-)udG-5m-g*Xb^U*-=6_vh1jF|E(-@ycC#P}v@knN0?OJc6 aUUOVy+SV(~(Pz&wb_VW`ur*freHQ>fg-FBz diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int_bc-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int_bc-v1_ca_bc.der deleted file mode 100644 index 0b2afead27ab3223faf47d8c2b891ccf70f5f4b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmXqLVh%HCVzOgmHu1MG;AP{~YV&CO&dbQi%F1AnYshWD$;KSY!Y0fV8f++RAPC}c z2y;0n=47Vj7v*Ip8j2Z+fCSlvd42Os^GXsk^Ay4|Q_BrS41_@9T*BM|!M+M1sl_Fk zdFh7I29h9AW*(t3qxj6clK7-#-7>@Y}D=$U~eX0dz!asxB5sH8Cn72MZ%B19KB2KZ8LNBNtN>BO}9w{kNRcOHQ#lv9M$X zD>v^y@oVjav|B6Iv$s48do{sa;nG%yyk)v=xAe|DdSMf1DY0#*qnJR)lJ%#yC&*ZL zUEqFFr22h6+y3D;Q?Ct3O`E`MBhpNW}~ zfe|@`fC&c}LW~R(Y_FFe*nRKa%MIVyS{HSju`b${a*6Yw;)Y7ow`cCnHu!S=P8%b; ztMrL)Q#xONn5_JDP4?E{;+3|n>t-llm6yM;q{Q`G?5TyqEZg@xPkC%)vZ`=z$~-&e z!|M}f*dEx*v4P*^=e!zmvvS#qCRJN&mfDLeXTQvuJoVb0L+hrrsD2dx{Ecn(A;Xd* zb6>?;?>*k~T79lftWn z3%x#%XMg{5^p?w-M+(uh$0c{X+<&{~WX3&nwO}68dhMS3K|a4P=TE$OZMzJs*o7ae bniDT8&R)G^PLO|%b_iGZ{?8_+UX{fF1cpp; diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int_bc-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int_bc-v2_ca.der deleted file mode 100644 index 717e89dfb574c462f2f634b78facd526815d67b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmXqLVh%KDVzOjnVSE*{#DJHLQ>)FR?K>|cBP%O|L6#x60Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S^j> zB4;22af@h~VSH*T$Q>vyYGPDE4iH9G2IeM4eg=akMlPl%Mn;BvD=+;0;^b7A%%*rM zEk|dWM(sx4`oDL({M3y215e&|&e7BDRWwym|C#o@=H!FZ?z?;{4_dy^HDLN=zQ4}! z&Zh6t}KW+oxw{o_X5gLRfnAeOXDvA5vNY;`QG>Z<&3b{XVdA zN!;Bv(cj%oXBJO5eC1lcT3PB{E9N_`9zEW5Yu~*5eC^2`5y_Wtm(&Dut(dTx-O|$Z zU)O50gHobm%f;ma49_=c%>LJRSWEKbX8XSRzh8CQXUuPj$TXjxS;H|Uu5jB+CT2zk zM&u9zCK+G|F*3~Ks^<`xzM1i0z;4M~hW?Q!E(+h#*b>^B8(6euqL2d1w>3LV&+of# z>8zN@{cNlC^Qd;ed=d9O)k}mlc4bD*@&3g)TXgx7D|uaC;_B2dq`ERm);@WCxjW5E zKfCF*MPvDfn1JBepVmJvec%70Z!_E5XUV%KIEIU6eA$tCwlzxQ&P5e9xtTq!+S3nD z|Lb=k`hvlAL$`TiI_7s&FJ&1`yuj9QX!eqGGtCZwt>SX$OWi zO0J<%i%Ks~b(($4q~+n;(zT+;7EbBZ5nr~+IBxsPKNhc?ev3$QRZj>#kn3^jd571` YiJ!LLma?jz;doJI)?UZngAu=M04a7u-2eap diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int_bc-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int_bc-v2_ca_bc.der deleted file mode 100644 index 488e5b6eeca5111625902f68545c36a79575395f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmXqLVh%HCVzOgm7K{`z;AP{~YV&CO&dbQi%F1AnYshWD$;KSY!Y0fV8f++RAPC}c z2y;0n=47Vj7v*Ip8j2Z+fCSlvd42Os^GXsk^Ay4|Q_BrS41_@9T*BM|!M+M1sl_Fk zdFh7I29h9AW*(t3qxj6clK7-#T_7tt5y&u*6X!KFF)%hVF)}cxLPXUgv4`4^TYg@-it z$n9@y)e)U6_w(y4A9Wj*4<<{h?c|p%%+ddpmmk;gY2W^q^Y>>9_w10mk>_05lXtK* z{d;7=zpI-SyYJQZzgVaK&+Txl#u7%aoEKXhpDE_;&QuThIAi*T{KLrsjnkVodJP5l z%-GP-#S|cXSmE532_n;X@7}XJZvB%$4z}&jT8*Z&$4gF`ekkzqtiy*~a!oW$GNhL8 zzhLTZ@uFD8dW?umlIsypBB)qQFq+ZZP#TQ}|H z7Z@#!^0m_xY=)9cUncxwC-i@L3ebN8J$JJ2tF%*_5c7XmP#K0 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v2_int_bc-v3_ca.der deleted file mode 100644 index 131fbeb12603ed27e5861db301f49c07720ddd9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852 zcmXqLVh%89VzOXj4yfce;AP{~YV&CO&dbQi%F1AnWyo#7$;KSY!Y0fV8f++RAPC}c z2y;0n=47Vj7v*Ip8j2Z+fCSlvd42Os^GXsk^Ay4|Q_BrS41_@9T*BM|!M+M1sl_Fk zdFh4{24WylW*+`Bqxj6clK7-#-7@3&^j> zB4;22af@h~VSH+;F1m}F7?qF%gprkjxrvdV!Jvtei>Zl`kzvnv?p48&Vf%h8VY@8A zurgYlr#$&?jlKV*H}|Lc@c3r0%PL(m^H()P)WW0}SzPBASyw4Dz24*9SJm+JvE+m& z3|ZEzGd_R)xBc+CkWXd4n-U*N`8rMDTKAkWvGm_d+ic^D5!|!8m(SNc_<5xouh55& zb572=UYX)4C(guI{7>^CC;Oz1z?sX-XIkAYjSf3e$<;c=VBxQS3np59+4w)=RC$}> z-llW&nf@ZJ9yLsoZ#S>oMAlAZR9 zq7QO5KmHV-c$)9u=B(7-pom8|&WMzq$jFI(D|&nSk$PsP97LyQV%=$fZhg&KQoZuPRA!qq<)_8? z5ax1D%*jm4FUreIG!!!s0SU4T^ZMqO=9MI7<|%|_rj{Fu7zlyHxrDg`f_)W2Qj1G6 z^U@8K4HQA5%sf(MM)8?>CGkngx@E@k$%*l~nZ?CG6+i(4IdNV?69Z!-6C(ptOC!rD zab6>2u0b``ouz4@4sn)3nPGftsxBVKH8Cn72NNSJ19KB2KZ8LNBNtN>BO}APh$#8o z`tydrXDk0$@IG0wL65io0)zB{mCH3cr+knTO%VuA-8;>9^_;cqe*30=tGo9sW{2HZ zuGKuI9d`e^RQ7R%{9FG1eZ(D;KUz$a*DGvSku7n%Bow--ULe3%^G3;fPji>j1%LV? zBYmC)Ys~wyli_&wqnC`I>f~(yzxFdYX7%J!|Jx(37AK!*J+kl;Sy3n_$azdBe8%ee z1-i>Mr%ZP@I<$dPJ!zkw$lG*&rI4(*^HZA68f2c!F=yad{YoY5p5=@k@@ML|X)Vk! zou|wCWSPo&-VAI0vdO<5i73SJ{$%6q*Sf-JrdPyVYq`htbmXb1*+2djbEoYVc@v}m zmh*Kz6Eh8!Z?o#RJZ8MJ zlVQz7$5(H%_g|cM?ofcsMz8#|@Hw7LzQ$Mg1io9jbjgX^eZMw7XTS7W+vWDhuMWSj zsMo#Zwmv*@YBsN?1f#KhtNDGGR%3(3$4hS4Eh;!O+qSYK`u_0)8~83{S!I5^c5UnF ziVrfW!COum7IG>S+(>@TH{nbnyRF{kExnhd56@T`^oa8<$3%yj)Bb!X%M-yl ztSR-LAJ&FzOyF}@m48~6Sw8n^^Ypa0j>=!(*T$R?lM8_ h&vNb&lZ6j8R84F}{QYmNVYq%rqVHfG-|v}{p#ZMoOho_y diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int-v1_ca.der deleted file mode 100644 index 5da823b6393ea97559b44447bfd6dfe4b03ce424..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 846 zcmXqLV)im? z5ax1D%*jm4FUreIG!!!s0SU4T^ZMqO=9MI7<|%|_rj{Fu7zlyHxrDg`f_)W2Qj1G6 z^U@7P4TM3W%sf10#_^eXCAwvX@yUq>a^k#(CI-evCPoIP=0>Jb;=D%4T!UPyJ4D(* z65vdT-Z) zydCu~Zokg*_|qfiy3zgg=N|5lr%NnMVw`2dR=l0d%W^OKXJU&5`vKp1Xa8(kdpq^$ zeq+bKOI%}?WWIg4)G%Ii*ZTK6ZaP2g$&{BZTJeR?#?1bfu&m$ME>@xMS5>bo+x*{YYWB2cKSddz z&tC1asx>?0umAq*|GzEH?7omCQ5VuXFUt11sCdoe1*R7Is#YXit`P=Lq%rG{t^HW}2ep$3=CAf?~q7y*|%Y+Pm+@_o#WbcO(VYZoXr< z>!;=$hnnmKFFjPwCuTfl&^2CoMWeCX^^}zNtD8?f4u*Vi`Wg2WUIYLy$Vv|Y diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int-v1_ca_bc.der deleted file mode 100644 index fd6a8460e42c8524634b2dbc53291e05e7ac30be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmXqLVh%KDVzOjnVT^m>Xu!+HsnzDu_MMlJk(HIfAj^>3fRl|ml!Z;0DKywn*gz1( z;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6B@DzsqRc$}WybNDc_q4KhVjXX@kz-Ba^k#(CI-evCPoIP=B9>G;=D%4T!R9t zyG71G2I3Y`pd(UKbfD<*??`+M=|~M(#d}E z8aw%RXq#_6sxGLwo~u+htK!PO$tV8h6*O|#aI+YicFF&U$bH^X zlUHVG)t-|I(mk|9;aKtc4q-t{gYRaS8Navr$LcTBlTRzR(yaXJuxa6%Ua7@mnL;uT zuGDS{9K4-ZkSn~hnQxlzb<^J@#8kSn7xppHHGa~~d zatHyF3^0Tk8T6{o^e=C;XPL5jL!j!E#KTknS?V6uco&5$@kRnuZP1dx_Q%z` zU+&#$v{gD#{qt_iV(F7_ro1^D_fhEdrBsfCa=A?xHH|9gKX{+?;hy}7kD_6-=PYYG zFx8yT#N}qCSLW;<)}EPbUeA~td||!MA7Sa5UX_Lk|B_gOTVyY$Y+)=H?_!>}t(-SF z@ZqQ1TMN#|$Gu(s*zTF`%ti(eW`mm@iK(l-?q2eF+w1$qCEMq~m+21+Esm(={PYc6 zY3g%&rD7w~uGPRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6MGb^OqRc!zWybNDc_q4KM)Aps26E!Oh9(BaMkYoErWS_gQR2Kt$XtV5syjs5 zKoa5*p)$kx)Kpy*=QJ@YAqNE`D+6;ABR_*d6C)Q>6C)$T`FPbMdJ?(~dyoDN2@|zo z6Y^iQ$d*Nu@v38pk(4j*7ysmI!yrY*b7v z-&!RZ;J|lQ)iC$k-UT!7{QCOfuV`rJJEe|-*9Nl^-Iacb1e-H0tdaAJiE)!vnA}n@ z>BYR&eCg*Oy-3k>n_~EP-Q{SB#Z|fYOm|2&G;N%n8M*66)R%?Fd18P2$V;zmnaQS@ zaN)%4&Mmk6xc_s%4A^uwu=&LLX`fbpPwi6ur2XLTv7;L<>|Ycf&wswAS83a`9ZMIK zD*l^cCu#fb#CPV<-l{#ng00^zcH5pj=k9UWCkBQoZzJW+pKkVHeiN$eb&!dfk%198 zgn)?!7($E;A!7T!ui?J);O765=8gBJ>UT0`FfF$-woY#h*qRa$mjAb4@1gazr4zka zSG$H?d(5G_Mr{@MvZgBu-(2$|CGM8?X>Kx~R=edKyS&ksBZa;45~~V55_npl-CMoZ z;$_#3r$6`cJ^dM)6tvnHGk*@?cP~4_y39OF$Oo!XP=orwOGK3 zbBa{s{e>_1H}mS6XXSOh+2-(eIW3!mZ)FR?K>|cBP%O|L6#x60Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S~UOpFXnEliA~#CeU7xdsJP zcZ-~X48$#>Wrp#osk-PcYGPDE4iH9G2IeM4eg=akMlPl%Mn;B1y`E-9UoCT;T#p$x zR-L~QoV&lh@4}MAt5a`oYuT{1dvf~y8GD|Zw}!G`J-3l*r@@A$=2=(tc2CNgJNJra zOy8p93>EP`8$Nx1r~bb1#_~xgRk)N9t-f4Xjh zr`g)gu8Vj=cs5%ztA;Dqg&bWWcrMIra>Fj?x-HwvKa}=Qc45^?oMx9V;&`>#l9kJK zMzP@RT~j0zdo4fw)0S}TE;b6i@YZ~Vo90oqS2^|`r@IN+GA;~H%~IX%A=Hjk+%ARGdJ((T+^SMG&5OBJuXo4iJrEhg~+MTOw5c7 zjL0DbOftX_Vq{28bjXlknBKtJ67|N;S@!%q`~2UxVpo`Lx#WCp&wE$qG`F6>8gi{UC9{cl-;})?FAp=-Yp1h2 Yy}EezhQ&gzV_mzPOw4vOKK_~q00AUEQvd(} diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int-v3_ca.der deleted file mode 100644 index 438a13219e29eb2a9e0f1bc94c32a043647cf987..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 zcmXqLV)iy@Vlrl8Vd8GvX~4_IsnzDu_MMlJk(HIfAl;DLfRl|ml!Z;0DKywn*gz1( z;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6MGb^OqRc!zWybNDc_q3)Dml?WPMp`!#K73d#K^$Z($FwUoYx4MYmiHIhe#Vp zLL4GgW*DEE3UUX+IZcd8$U(u#%D~*j$j@NV#K^_e#K_1nbuH7J>H~J&mk*e}a*yrM z`s4U&>FJEEjE&OV4v~dbf+bHbq=iOLm8>}=W^-x!>~obhl!41ZT<1cQR`gBg$8t>P~dvbE){1!D9ZO)wd z_fy)fH(Qp8cNc9qa=TRa{W`Z!IdS4;nE|G2Ju_Jme|Ki?_4G>%h@Zw z*5n)S`+9aA_me7KN%kxy_twq+EB-fr$EASRt90JQEB*QVws2)H_sQC2YLAv4`OkaP z%-`SWOoGU)QyupM&i>;6$ol$m$^ENFb~XvN7n4t<V17`QqRl&woi$|Q!H!^A{!R2TgffHSNectVFvGXuYX&bj>@LYyT8!kiN$p_rs>9q zdY(O95VD7<<6GCHH|Lo*ti1X9yX<@gcDo40f9IJF{7&4sFznWsd*<`iPldfVyX>;u z+wFw!$rbmDFUCGp)0n1U$FZqd$b{$BpZ_kKKc-KyQHl+}6ST2o*_vb0HoFA59Otem Y_}0@^b74=$!;5vh8=imn{o^(l0IIc5;Q#;t diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int-v3_ca_missing_bc.der deleted file mode 100644 index f4d9f4658dbf85bd03ff07840ccdd43445c98a2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmXqLVoo$@V)A5SVZ2kh%Yc`SQ>)FR?K>|cBP%O|L6IT10Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SYP&z&-*+5R5*U-ek*vQ1lz|_*%B1)Xs z2$^e8L3KB&8K^+qBwJ<}pPCAC5>}TrF)ASk5F;xCa}y&!gFzD`7gG}>Bf}QX%D&Ax zZ7!=H_U!#2azrLh|KTd$j?%MXUrYL*t#=n|d{FoLL29xGzf(=KE0>4LCf-}YhLU?V zm-=QMR9ikZV`F^Qo)3X_{(o=UEod*z?tCS3D=!8abuZhvk7MdR*`*t2OWQd3TSy@}tp#8C7&sk5MMItA%z9=(sSxRoZa%-)UD4KA$oxNviJ z!rJzFCT2zkM&u9zCLv%5F)~E+)+kA!7coa2)ZHUS>TlU$w^ z%<{g&*?qzL-!qrMn;&j6GoQ{&T4i7RV0NCzgc(P)HFy z)BEcD?4yki2A<+hwfUp+*Q{AAxbuOx;vw_Badnz5X9^Bh-hHyn_wCUeSN$eEwXbQ~ gs=j>bHeFk%R~qm29$v8Dlg@f_dceyQl8=4(0VZ=%$p8QV diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int_missing_bc-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int_missing_bc-v1_ca.der deleted file mode 100644 index 8b623c7f2fa628bc0d1ad8ed71c9d85f3e50210d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmXqLVoo$@V)A5SVG1s=G~i|9)N1o+`_9YA$jZuKP-Mt$z{$oO%EBhh6dG(OY#<2Y za0qibC+1|PV9MGS;M;#|Vq0l~fsA*sbB znR)4k3I=i@QDz?TGUNEnyps6b%;I98M0`@RZkb_xa-xBpIIp3Jfw7T^k%6hXkztfL zuMslWpn~ddQZrD2xJef1g49%9TrO*3R6-6QMpg#qCPsb+gC<5UrY1&4hTB{{rTaSD zQmyQ4X6~FWIN|oq`BVD^y_Ad%`xX=3m>vCoD&k-aPZMuN5=l? zYsD5kyeE0m{PSs6!(xRb_t`6VYe+au<%;6r>1)z3In?rsZ>i6&DXlfp{#o9~0^0do zjJ8Z&P|5>Pdt$n{id*!1otV>sLYznbB`0RPeT1LadSo@nvD2o5k{p0uXyxPo*{w8{B{(=)Z|OXI6Q gTU0F83EtvrDqvE+-#g~axys+%i}uBuZ~U1L0QllbS^xk5 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int_missing_bc-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int_missing_bc-v1_ca_bc.der deleted file mode 100644 index 16554b0ef9300e4becb4d2ac9e8c8153e25a804c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 874 zcmXqLVooz?V)A2R7JjkEfR~L^tIebBJ1-+6D=ULRsUf!kCmVAp3!5-gXt1HMfgp&( zA!&O5$@fi;IC0@kzE~X|%MuuHBw^Tx> zd9Vf z<$hY~K6>_++1f}T;dAZLGx8s&7{%LlAA7jmJVxBcLg}xZ(8boSCkE@3G_Snr6N$E7 zHtY8lWyzE^(#|(0*a^6$w>s`P_;5irU)znd_S?1gigT83n{Mo9#J+e(-^7jo?w{VJ z&X*}(qP=aN>V)9M^Sr~F{B|wAI4j5XSOwF$#N1nnE1lya+8(cSGX3mi7HzmZ{P<2}18-|>;C(oCZe>3n&)6JV*QsVcorr#uuqxmSWFz2kC#t?PgA`ABW zm$x!8GcqtDhY&C!0Yiw9q26b$Cex2>)ui;U#81B68!WjkmLL3_x|BDzZHt1f)Xz4d z^J?kalmy)!ZS5_?|Fd&ugx^$nyMOE6#yu_5Wq&vapIe`BZKCkfvi%P^pEez@kN@!h z!cR|&fYz-dCMdTUZsvhHs%_5J96mCHsz*kIQ0 fou9l@L>JiTHGe#+=(gpGX&7hhq5GWIE?NNqCt^qq diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int_missing_bc-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int_missing_bc-v2_ca.der deleted file mode 100644 index 36517ec92d1941c878830958c370aed5f119bca2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 868 zcmXqLVooq!&O5$@fi;IC0@kzCfPE>_|#NgTrO*3R6-6QMpg#qCPsb+gC<5UrY1&4hO2C^yl&KF z?|ZrF=9l0cjm;J+Yo8`q{d*pC&#B|3O71`HD!DYPJHD>0)`3w!W^YUB|9|7*s{J$V zJ2r9E94cEI&wZG!OJ7atefCRVfp(!5i%io+qQ@Mg_e94u&-G0D+Wlhw8O9S)^Iq{- zrLhL}yB-V?$tXDztN1chdG}MRIrdxbu?Wk2oA;vF=KI#^=V#tzsmyiNzCKed-6EWM zqw2mZTikMM=au|y-decPLBU5PxW-pd=f}Ia#qV4<8T?cHH~o*nJW2N_wVtak?=jo- z{M9>q<=0CZO#OqswyakyVHYy@<$7!~ZO`$N$Xoxl7hb%av$8K}XUK(wy6en5>(+UHQ^68_Pp?m>5}?| zT;{p%x7q}Xg``ccI~9vGhyQbYuvlzwSAF6B=cZ0ua+#CR+XW#4^9#QyoI`s1xPRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6l?@a@qRc!}WybNDc_s0=nZ?CGiTI>s-7=&2fd)D*` z9V(w%zUr36)QY(!Jzw5eEq~s4^MLuEEk#U|ncBWcXc*~hvajsc);2tulYUCqc5&#V zC^NCWKQCQ2RG)l)#+~Q+Y1LDfxO_Xlr_p_BqpVeK!Ni5x_1bP9G!`E81;#>Cl$G_{ zzTA-aX?g2wEt21*PcLZkC`k&O`jOY5&QD2wN3z3b(=(0l3mNQ`OFm>@taELX!yyiwtKya?9YOnom$C91#V=^OgiCY ztn~UXKNB+}10!+>0TU81gcupjr=0tHnccL!bz*d@(Z|LQw#zrvd^;x}!=Wd-+M$oH z_t7(Hp|gK~r;GDTg*Sc;H?_ULyJXwixh-$*e(Oju_j+-sgXys235UZ@)!W&k692o; ztY8kRdE~X@Q*OqmyuZRn^DZ(iee^f0;PAt%T~DsP>^XK-?_%KJWsM$szt$=F-TNJ_ zS@80W1BZlSlJ*bbaue0CScO}6E|&8g&;NKmYt^DNJ@JfD-gC=-i!iueNVG8vyQXq0 z{A{0S>ekTn>~gyNbMB~?HTSuHWSJ><;q)(+i3b9Hubg3jeBq29rX8=E-&h{6IQPS& iKJH5qROE&>25msu$Q diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int_missing_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_ee-v3_int_missing_bc-v3_ca.der deleted file mode 100644 index 2daa2b85b4f69d3366ae00438eff4dcdac33a7d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 868 zcmXqLVooq? z5ax1D%*jm4FUreIG!!!s0SU4T^ZMqO=9MI7<|%|_rj{Fu7zlyHxrDg`f_)W2Qj1G6 z^U@6!4CFwf%sk>{#_^eXCGokL#l=90_@rcAph$9}ft)z6p^1U9k%^IksilEglsK;u zGS{Gj>TXgqP=UBfw#+a-H5KFztS)O}R6-6QMpg#qCPsb+gC<5UrY1&4hD|BL_9egf zWZgbs&Gd8i_w&-`HC}5DHJ)iJE@FY10!FssD17^oU=n;=Y3&r zN62}pvICp@?uJPp&5ixXu_NJi-bBguYLCRuXC}6ZOTUX0zg%hfg{!^I`{HD^$c>wh zzk2MtX#b45jWs(pmDeOzW~^I&##KT5bIkY03g6fB&z9bNui@oG_rp`Gw<&H&N>I5m z^Q`@@y=ixgre4~Xax6CV#%JFcp5D;b&d@tA-5=DPWfNJujZa45h3ec=g+q$(Z`Q^e zEE2uT#LURRh#W$|Bm@j0Mh5Q1=O)`s!j{K{$=X_K0kGTalQIW`GVawX30NUm+s`d>YZ@( z`imZCg-QFu7}tsUu3LBVu-Ny;)=chz)TMmxUcV0C+8R48>&VYne_q|S-Yoxjve=9> zvo@V?a^084s>N;_@k>ewrhp61-Q zIcDot7lz8&H?$u-Sg2y7r!arvmI&j@oJX#wA6)FR?K>|cBP%O|L9HRT0Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S2u0dln)!k=kpbv4MMwwxJYAVQ0gk0IgsDvDDjI0dIO^o~u22G4yOihf843FY+ zT)G^(t!?aeHeNj4uXvjCs<5r`(zfC&b9OJ?Y<%VVnbz~l!58m4YG-XB-Lvd( z&Vk!2A4RiVHU55!-SElTl9u#J!$1D93A>A*tlrW7cF*KZdtZfbJ6@`!n(k;aYvr8| zj#*{jbW*!g?2qO*t`E`Y|CjV|dd6Mz5R81Ow#O&?mEBswzXgG=%+c0_t3R;p*KOUF*C%ukwXZWvVbAP$Y3QN|9W4;oR-N&TK0$MZLjP8axF;zo2E?!qwtIu zZMT~u#XhtZ*L$znGuxCUA-%Wpwwj^V`bFZ6x39{?KUXT4vF3+KcUY*a%X9_tsb~KN z_x`KrpHONY_BA9y(UawA$S(^i$*NkVC32c?AAbz(EDJK*A+&xjhtd@>uBRr|Uwd4> z796dZYnz~v87WVx>R^pNEVe-#G+NV9MGS;M;#|Vq0l~fsA*sbB znR)4kdUT<)EDNXmDYQzw_4XZ`!}vQt{=*5vKGj%Q8X^KE*0xjc7Q!TFUmR=)V;)4IxaaIqFMelvEcYc-Zv~cZU0Yk z)V>UBEqhkxy_@a$7q5qrcdwl)6*US9YuEaJ>(`%subLu@U)kEcnaIS<$iRpkLcsI^ z3?W8_5M}vd9kE2UpNrT2K9Ik9SMgeZmc2!`!J=!A&w97{q1klCKd+|VGjf^KrzmW4 zYR81mdo6aXQGu7<^2=@$nqE+4X|nWSdbC^X))|(U=akQ$>;Lc-&;Bp(E^}Nzvo&~= z<<#R3vRIk6Kfk+bMcdLNQ`9!?X==^-B_4hx%|0&$NqiSA1 zUaR!~?Udi&8LzdQ3ztXwPL6x?HKFfnr}(_oTKi20Hw#)d&1wsE^bNeRcXRKJd7me< zY^+klsiQ>)FR?K>|cBP%O|L9!vY0Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SBX83?KVlrj^=%n#40v5v+3-I7uQW4KjXO~62iNsT z5!){Tjc?|gin`1-vb|=nbaPK?cOu8pbIprC`F%Lh5W{bt(5L$F{L?IZ20ly4Pf<@? zGH%LDDUIcrHAqp18(>5Hl zl@s{2sGh-Yb?zcdvyxNGlCmwLEzVpxBy^^TS>fw9zncnoe>cb9TW_K_F*x`hE8D03 zRrc?m%~H50K5f<}zl^-r&szejw4NN?7x(zcPP6+5W$IWt7(PFle4B}xk%198gn+38 z7($E;KH~4n55L$yooV(KTX)MU;W?+}zqK8fVLE@1cfo}cfekDDAF0Zl3MSf$aNKyf z>wI&u)~cwm*u-z=U$!KM`tB(HV|0C9iJQp|6XtoXO9YuX_$T_`^<`EG43hq>mG)zv zi^sJ-m$Ry&LGRv#`PM&q++^c)$MW;-#J0=Zbxwt!-XFPU)?THaW#9Ii6(0BLVxP2a zuTGR>(K@HaQy8igPs_IL6b@)?u$i^%WVVWIZ`k86e;54Q{?b z`u@!Q4WBieHpPEte(_ad$p(-8NeT&by~VeAA5$?nSH-{bcH8CpuEcD|@0Lp2VsCe= SOwieN^UA80DG_>^UhDv7jy%Hv diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_int-v2_ca.der deleted file mode 100644 index aecb8bfc673608555188dade74fb25ed22d29742..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 834 zcmXqLVzx7AVp3ybVVo6hYQW3JsnzDu_MMlJk(HIfAiPRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6`3!hKqRc$3Wk&JIi3W1wyoM$Q#zrPa2BzkwrcvU&M#x-)bgH{R)Ib>G0-iF% z_{_W#U5G=P7?qHH&&bNa+{DPwV9>wQy|esS)P=wA2peCVAzVX3Xk0g7>99g?ecyb3v=oQc13q9dDG zmrGaiOxMDR6XzZL+PiU!yT<0=WTi#X?QvWecrsrlX`T1=3~721x$mf{Wtz?PE1&gx z*!_3BDYXC6dPV=v%_DCv$jzN5;J9f1FS|(BI?vTp`UK726^krzU)1>JUBT4kL-G&p zd*>&q{5p2L#KqX7`<~#c>xpR=%Z?P4*NMM)TE)y`_->Z%!~|-$RPwwAHWb| zWY`iN+m-bA?W?}$FPE?S#H}PSzgp_SRI!3KvBTd&*4}^qwCobU_|l1u%dQ^(S^0R0 z>aMWq&kHqY`-z{m`%}vo{eNTG%VaN|w8fvoj-O4`Up#U7ZOs(>B=$G4leQM?shQfO zaivP;$+s=<=;Sio^nd!z_5g>2yZ+^Lt4&#WF=WZJjsy|a)y_GB_n29j53S}8uagk+ z{~4#uoaMCW$;!8pX~$1%EnT|2{`mUh?Pl@C%kv7V-+Lzr>z#G(*-|%Q!rnJ`HJhey zt6P)FR?K>|cBP%O|L9!vY0Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SrZHgoXIzjVHEtL~h&|8<#|85tOnLkO5k zfFZ=lpqguW_2v0*@sSBPqBXvS#r4Q5-hcl`JG85dDdCDi*$1|ZzZxbS=c_pP_spI5 z=ZZ5`{~VI(X5YW(OpbFY->cxzEwdxqz?jvO1Sh?V|H~W@Mj_Zz$ zoTc7YS<*c{-u#!dmpxf!p)I5~^M^{u(&t`r%rDPZ$1j>_{kfrT-I~DVU4=6%i;B#Q z174hso_l$@ykOV!{5kWl-ue;J{fud*$&~mh52L2CFI1Opk34i@jYEHKImc13f(;a? z5ax1D%*jm4FUreIG!!!s0SU4T^ZMqO=9MI7<|%|_rj{Fu7zlyHxrDg`f_)W2Qj1G6 z^U@9Z40u4I%si}R#_`FC26E!Oh9(BaMkYoErWPg^QR2Kt$XtVTs=GkcKp5fzo-)Ju z%)Am^h(nqfm5_bU$jZRn#K_NJ(8S2a)WpchaLmwAT`IQh$|;pP|Db7>0&Mqvc|4~* zmKJf5=@R0R{b-%=W!AcHNB>3^Y+#Bzpa1<-Ww6;D3F&V&9oKFa8}a`VXp#8C+dlb3e{q@OR$pmtm4x5@Iu1dJ>$aa>xK?Dz?NFID5z~~mJiF7ju3+o* z&Ws}Uy7S?c9?R<|JY#ip&aa%q5&p9?^zIZtrMq%mCu3whEd!EuL``OT-?;Q@Q&9iU z6a`mbp^!$~KZ~uXEd+qf6PY zPpDqd)5Xf6(&5DYf2G+CCFVW@ceiyfSodVFXF1HU^OVGq=}gRw42;Mj1WX^m5MpHT zJ9jZ#wnWG0jnVdBJJ>|#hvkghJC~^w^p8Am;4xl& z=4p`Erh^Ypct?DU$o(MucSr4AE(u#Tem2g>Q{U$_KW>?>GR@<~?Pwl_15f({Ok3OD z7_g?TI9od9uz#S{E^kq*mp$KpaGXuNug=4oaSt{}U zK<@(k)YI~__brW!{ZsMIr9;G8k^f%oC;yeRSMCdxIkVzHP4m`}LNo69XM{AxCPhXE O9Nzsv>bZmK%69-6)FR?K>|cBP%O|LAD{c0Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S6C)$Ty^Sy9S@vd|E}Y@8 zu=_^xL`8!qw{@>fy7w-@i>a!^@{S(!`(p=v!tYVN_K>;JS1LoQZ;EK{}$Hu ziZkxoX)2vL`uDG^_Wg_n+1pS0H>P}Ml>O{6eRYC)+l}R4pYCofl+w0aFbygcuoQy0XN+~V_-b%I78+oqX4OnG)#eZ@yE z=C_{RYj3OU*e@>hBJH2q0h_~o-+JTsbyrMM*j^RB-o@2r`aAo;2?vwAn{_Xyet5&X z!gw23_+0g%=k}8-bWB-dR-L%Z@MNmg?CyS}#V@}&x^=Fbu}f@=MXivoLcoE1wmVre Zf%=o&daECopWLM~b9-9PPq9tbasaR1K}!Gt diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_int_bc-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_int_bc-v1_ca.der deleted file mode 100644 index b1919828a4d5b908d32668b78214cae11c40fb15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 854 zcmXqLVh%EBVzOdlt`&M~z{|#|)#lOmotKf3m6gFD!I0a4lZ`o)g-w_#G}utsKoG>? z5ax1D%*jm4FUreIG!!!s0SU4T^ZMqO=9MI7<|%|_rj{Fu7zlyHxrDg`f_)W2Qj1G6 z^U@9Z40u4I%si}RhVjXX26E!Oh9(BaMkYoErsf6~QR2Kt$XtUgs=GkKKn&snexM67 z^Gf2Al64_&X<}4D4gf}02IeM4eg=akMlPl%Mn;B9?h`YgIf>SB+4tQ3tgdVj_lVi# z_!R!n8)T+7gbGh@xjIuqTVm(Sn%9S?iX7C*eAy~|*M82!$|URc9cl%4JL=D_%$u3r z_eisXe7VR zvzT>>dcgX1jPiEsCSsRZ7z-;Fy!>LRvZQyR%#j(QngSx+C(qf69SJS@P@VIM<#PDf z(qB0-0TbPK32y%LJF;hKS(~|wrihN#lCFpOhP-y`?Jk9%t7f~zA=^3m=@wqq<(%A! ze-}Kt{hGu|^hcHLa(*L)v;#_Grh3loC}m*l(e?Yt`QKiNXY z>hC(q(ER?6>V%J4(LWyCI`eeq(LHwii^`WQ++0R?wzg35>hxJy4h6Q ebN$k+jO!~~J(hH52W<7~Z7`N{^b`!PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_61r7K?qRc!TWrp#|iSbFv26E!Oh9(BaMkYoErsl>bQR2Kt$XtV5syjm3Koa5z zA)q5N^GblO(1kmviBSnT7#LX@n41{+84Q{jxtN+585yn=cmLnI>W1dgg~@tc`3wB- z^|rrsJvrrMIAb@r%Wci*+Fd?TUF+`5dl9}RqTi-i_+OkIlRwvf%Ppc#EMc)m^{yP! zvMypjBE&X%zdpHnD~H5s#@iDex3d0O?JE}a&G^L^iL#)4*|J97Xo*RWzY4w!y_mJu z*?ZpExqh=-y^i!SbsuATJYAF}WsaS1yu|ASm1QS*vkOE2T9kEP!$~-{b*#QeRb+C`w-XsuWEVIH$J>x z)*n^akTidmr%3eXSLOen?)mbZosW$%x@n`yk+!v$<_50uJM6o9?x$cTW=00a#R3L= z20Xw(loe)SHDG3B{Er-Fz@!5VGe(AR8E3Wl>|?PamRx@h$zE?c-QAM#X6*ys@B7UR z>yKy0en>31Rc>Knw(zJ-w~=~QsrGkICU1#fvB8JCBF`O4{MmJ|w^OI)r`Q$U)aO0F zBUU@scx4t!>M)(Fp5^XXJlArs)5}O^sn=5WdAs#i2!}fqny58wf46DkCZiXtCZ2zg zCatqDBkp|vx!?AYtvz#&AAWVTGH;iuv2$nqvNh{=3TA!T_)te+d0knw@z*n}H}#)+ z@O;WzwTpdA9b&>POaFgWnXqW_B*B`8!I`a}>c1X|`7yip{ZosRCug3MTq!M4=W(+x la*gBkD~usAOyaE4Z8y#Yw#}KW_Kx+RnHBrojh`4-001cRLOB2c diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_int_bc-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_int_bc-v2_ca.der deleted file mode 100644 index 4cb3c7a9d2fa5eb2db887b7e3a542d066195f199..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 854 zcmXqLVh%EBVzOdlW<8Z+z{|#|)#lOmotKf3m6gFD!I0a4lZ`o)g-w_#G}utsKoG>? z5ax1D%*jm4FUreIG!!!s0SU4T^ZMqO=9MI7<|%|_rj{Fu7zlyHxrDg`f_)W2Qj1G6 z^U@9Z40u4I%si}RM)Aps26E!Oh9(BaMkYoErWOVUQR2Kt$XtUgs=GkKKn&sn{xZY( z%)FBLq-0%)TbdY^kOP2`m4Ug5k)Oe!iIIz`iII_E%Coa4;Iz=(fDNw=QsolFJgrpAxP%HG*T}S$y!~-w zdEB9$@_Er~FP)K2d&!Y#o2p?o@$syqXUZQg__yOD$CGE_D(^}X)EL^gWr$=4Dec-^ zo4oqbe&#(pn3J!3y<4JS_3*#Wk|Snsxz{`{e;X)iu_ks#D4+JD?Ar4)&m29@y=B9c ztmJ}#@1YywZnFGpkN6bReVq4{a75(m2971`oA!rE7ksOVn0i4q*zZhhvL>4XC)WBZnC<(E!7Yk)cn0uDDI0@v9?OcFq@9&h(V|5;%8Hw|-)XWOQy?SV6~e zZ=q=!;oI(R{#KW-!}KpS_Df4n(K&euBfxNW9K->O@v8`_q(=hr6rxd)PcJf=LH zUy_nMvobG8F!A{}os-G2tJ6GBtyZv?Jo-!}t@!A#GsV1>0jJIzUd_l25BztI%~|C9 eQehYVr=gQS*@i65zL_X@icf2Eeb`+qA1eURAU?DJ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_int_bc-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_int_bc-v2_ca_bc.der deleted file mode 100644 index 18085a4e05b907edf7280727c182c152b4d3927d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 861 zcmXqLVvaOuVsd0+VO%!J%7B-RQ>)FR?K>|cBP%O|L9!vY0Vf-CC<~h~Q)sZEuz?_m z!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S)5NHR91M)C49rc8{0s(7j9g4jjEoF>!e6U=f8d?!$(*HYbn&wD zeZ|gy&-WI+;N86Zw7IehuGH}{!TZ2t#O|}%;&=S*zaCV)w6fxob`$8RoAuM zDZJ~La`_6^NX1WGyC%jo9KN)D8|Q^9k^i_F#Ihd0NmSl{+PjH)-j|Zx*LwN;tG7qE zJ~?W<;iPtWjG&$QhfASR{Mr-dm>SG2jV{&ywf{}Kx9EXe`W+@)1I3w_%-Y|W(~`kc zk+MoqrzO%zQSH^~*^`$tD_mVsB5wcB=#Y>m&*=b%#=~zO&G|O(TqK|C966#G9KJARHxn}>1LI-= z13m*DU?9p0v#=U4Gcx{14l`iV0frecsE+<$WPJ6Um*0`HIj!bNypbMP4zgeV*!Xtw zx0Ib?Tkfy^GVQzZ)u%@few|cx%*RL1?|!476O-k}t-+kS7HdSE^q4gTei&TWS+Yd8 zy8Hi1YtE#fJ7h%zd~Lfl)Z70THCH}$p1`)Ry1!^^UI(LU%e;=2Jc50HGIIEOSfAQS z_!g+%<@o)3g4XVzJ+U@s3Y(sW$j)MQ;G zqC(Ffl)U7PsM+b)b(gv2pO$ZU-V>W;zu6L2@x^#JI9ZC`PnRe=;WhJ6?a#<%3$omA mKTS$Fp1D%<(oeG|yEt5uo)jPY{r&lQ`P$c0R5a^07Xkp*OGT;x diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_int_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v1_int_bc-v3_ca.der deleted file mode 100644 index 5645cd1b6840b3c6681aa463db33e2860089babe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 zcmXqLVh%QFVzOppVGO*}Z@|mOsnzDu_MMlJk(HIfAiPRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6`3!hKqRc$3WybNzi3W1wyoM$Q#zrPa2BsFKCQ;(NM#x-)EULRe!axk-0{$|? z_{_YL_@rcAh+CQ%m5>8~k(GhDiIJbdpox)-sfm%1;b6Ovwn&M=&-}$Z-+y&*GTzH% z^KkPosX(DQdTHv$M|YmAxNzU+Xx)@^yW0;~-IJ-~+Auf5>~51uTu_{d0(bi~+53Ng zsC=+~ey(g^*IfTc#WHdqc6RjgseShyv z|k4)bLpus_tq)@)lQzk!n9vGCP*}JnKt*VgbLjQee>r`<_$Ua zb^gAFs~)BNS^p#Y)|#G>(_@-%T`7OCn=z76VBYdQI~L57=Dlb;|J)Ov?t-d{Q>r%^ zE`PtJdH>W;>$_32@0KzevZu&fCcOC05vaLc*S4Xz_tkD0r4r3K&kUKE85tNC3m8D+ zP*#|Q)qt6i@jr5y0TT@{%orK+FG)#C`tSC*_{8Fx<>TyW|L?awK7NEHOlF}Guj+zT zH&@@uP&nVPAY}nhcu2ui?f!=BtqIY+alAZk2Y#IIKgD&?aKXNn`>*B}u3K1kT7Qd2 z+=J_Lj#(8{G)J2rEc)}d%uD3fm(A{5IVPJ6TdOK-8g0Jf_2Iajbl8PXAGuHewpX12fhw4U`sd|#lW!F;x}56(_Ma+0+_b&=4*A2t@;H_~ea1>(etTOM7%VZ3hf z?^VkV*>L5E>1pnHrLA^xu5x^kG2_j7g{-OLe-<^GHT(=o)NCW`g89#LZ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_int_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v1_int_bc-v3_ca_missing_bc.der deleted file mode 100644 index 60933653ed0c8da6e75eb2c495616e20878a7cdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 877 zcmXqLV$L*ZVhUtpVYuYYW5CPCsnzDu_MMlJk(HIfAls1JfRl|ml!Z;0DKywn*gz1( z;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`OLQ;!M zGV{_6B@M(uqRc!3WybNziSfCa#l=AJ_@rb5IdNV?69Z!-6C(ptOC!T5ab6>2u0bi) z9iwcZ2yu*5nPGfpUJ1|@x){!CVpKv77DiSE<|amd27@L>E~X|%Mut{ZpWP?df_04)s`^{Ay`+t}6sN7VW#oDm$ z>tE#s_N!7>pGli~s`tx{Hw-Im_c>HeRJN~^Q1F}Lx8Z?)$s$L~$J%jz>dg&OKdWjA zS28g(GB7R{FyJ%b0S2b5Fbk^zGb7`F2iP0>AW(Rby>T@>d&Jc`x?Lhj;y`)i6wku$h+uHg zR<7*(t0$a1x=8v^_o3xs0SVZKeUG)vw{i4wJ@FJ&pn}2H<`5tR% upW9Ky(5tg4Oha34@1`AkJg-QP$& diff --git a/security/manager/ssl/tests/unit/test_cert_version/v1_self_signed.der b/security/manager/ssl/tests/unit/test_cert_version/v1_self_signed.der deleted file mode 100644 index f305f351ad43561d74e7256f5611c91c0fb08c32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 846 zcmXqLV)imm?<>aP}o2a z#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI6+%*r zOEUA)4aE&aL88n&d}W65#i==I@x__xd8sJ|a^k#(CI%KpMuuiamL_IV;=D%4TzWdC ziBSnTAQ)L0n41{+84Q{jxtN+585vgaM7?ITJ1u;nT~Sf{rexBGGW&bx2G24pC#i3U zeIO9|NZ@U$hO7JOS0&#zS4WC<`CKUQ=KSxwd>XIlu3IXq%l#+4dt18X@#3AuI*;G$ z-8v|J_VFRZWn96G>XQq)zOD>-yS!F8_r>EZ15Nk?md7OAeXKL5hNznl-^g@EgaNi7$J>GJy}KW#=oWvZ(yn{@1EiaQeHp-G^ef7iSgDIhC+nwSBn z6^CYF_p+YVGneg_{czQ+Z+i4$m80$Dr(WjUIIk{eVrFDuL=GWfQUQh#Bg4dstWCi> z>_*>a|I7Z&l*%K!;@$-AgFk-XDeBq3$9%VRWIWI2)Bn&#YiPbL8~IU(V8_||C>)~-g)Vu zwA7ihNtd6cFwEO(wU@=m=j*@LO@Rx|zAQWx>+)~vCuP%#f3w=1ye9Yb9GB<%!PWO= zOTgQA0{51l|IuL^F=r3c>mOeoL|7layK%v0QyFJd;-f|DEGNHC5=p(ZYDsxcm?<>aP}o2a z#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI6+%*r zOEUA)4W$euK%&e%f@OyB#i==I@x__xd8sM!Ny!Fs;=G0?1{Ov}hGs^VCYDj+yhg}e zI=iNcQ3*LX7+D#Zn;7{S44N3Zn3@+M#ux(TwnK zZ1VY9h6}fUH|#mcc_Q3^&)szLnw7!=ai2^(K3JP^WXP=FBe;V1xR_KigI9NQN*4cr zL*c6;cFLU_AAB(6I(GYW@$+T_jVs)qum2f0iCtXeudHVK(?d3PcA+B+-yTk%J9(+k z#8;nHS4i_;tdU@5+HvsH%-m4D_{y0}C)Ya7Tl(p#iG&18NT2EVxSIO233ua4c6&q# z1$~(Gwq>K#fg-NOie($PLr*O6o;_z_zDD~wz6sYHYMGcB85kGy8bDHrtS}3c0RwV? z0n-mKz!({3v)>h0dYHJ^!g8XWc-_AVWfM;>zPf<*=+C8Ro;q~@+3B%BtMI$#8Ky(g zhY!ErcVx+D_K1MPT>p=Lu6FtNa)Rd$H@3nX3GzzUc=sGVWn0hs5l}oGpj;%Y-gvkBK>EUxyyh*eAByp>`V65=Qq_S{Mz(V?&1Bl zqVC1ldKZMQS-`tB=F2p5-E*1S=C?7aXFJv?HO*C$xDqwhA^p>Ri@ywKw#&*~G+C4? XAhpfxooSu&?cHKC-TCYPHMjr(R3Sk- diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int-v1_ca.der deleted file mode 100644 index afe4f873d04fa7ea3238c7e6b7cd0f427f871e37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9zR%*4pZ#KQ2;w8wy#jZ>@5qwPB{BO@y-gF(6>w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZJE`JkbyWvw9F_zDLFnh7336zi<%gfkVAu!m4Ug5k)Oe!iIIz`iII`va8<>#*@r@R zrle{S{1%dA#e42E~{IO}r{z+|{)GjQSiFtL3H}J;^$0xfDy*716Hp>(g z2`AqWp7KKK?CLG=<904Q8~(6&aoxjdNz>%if7`?vIkP&ay&{Y_E{jO(~kA;x&lE1vy z@>t_$XRm6IoUO6nt9s|;nomz}A7F2sd1KYlt1I75zxw|3tB{pv6j!VGZD;xv^I#`tv;9%$TQmydw_0s|BpKr}DQVnes zmdNC0VrFDuT+C|#Ng%SqEKCLr$N>gSKEMEDWXSH}h?U!;^2B7pv_>8Edj~Eb-Coi}4_w!uURKy}b$iLS<} diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int-v1_ca_bc.der deleted file mode 100644 index d3b2fd53f73689bcd46d8af37b9bfe8e18456bd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pZ#KJJ!@udMT8>d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH2 zu0b)?-J)n94{?h`nGw(h@u{gG*PuA6iBSnTOc+@in41{+84Q{jxtN+585x!YUX^I$ z-Enmb^Qku7b5lOWR+yxnbYFMOZhMIF?MuI#AZV7c6}1DBH`GF;yp&?o~NX_Hv)2qwf_j?6Blh zH2+@R%c=eU%K3HPa+j@R>6g&sH}mE!zPnEJ{*rLlrMI`nbj{PhSK(~Xons!i-kiO7 zx%_Kohn33v%^n;-8suqt+5a=|#eD9G+yB+*dAw%MEzLRA9$pJ1L?=7jXsRpj zFPTuw#LURRxR}=fl1yZUS(pqMkOK^uh=2jc$iVutdgo77o2N^gcW9Q_Roi?1FXx`N zY0L4yjfWL}zTp;;D&-R8ITIT`O=RM=TZ)0q`cuz`bqa4~%`oiK`ONp8xqHz;c6G}l zwUsmCHjx=hZSX&&*d@#rM9i*E%pi`^Js)=T0Ab%zXc`DEE{? rk#4oS2Ui}sxcbXF`TbQ!dCS_KY|hGNOwr@;|J2|0vOi+!tcrO66n;t? diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int-v2_ca.der deleted file mode 100644 index 4c5074a38233f7de6be6bd4eb993014c854884d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9zR%*4pZ#KN%n)FcC5HcqWJkGAi;jEt#)=b59EE1_Fx-ynTeXMpA**H8_2+K)diQn)9Vp|N zpre?Z>$kOk-It;@`wZ0;makKm>3vwJI?b_Dsj@9~<$3k{cg~7L^fi5xX!o9f?BZ=b zy=&)IC|LBKWa^Tc;C@r+tmR(2yNV2{qC4yv3T|!x_w)?Uf5WD**&8LoA0F7sWcy#T z#5>OQ@Wo5FHog5ST6W>dYyT9lQ7*H`KLnlAag7(5b$_)oMvjt&Zox+IgLp$16RTCN3)E z3Y;DxdTrS$_Qcd}y}u5ut7?A2?)>I)>i5qHmD+I?-zzV#yWGgdusPp#iS>ud#5o@A za}2A#7({qkZ?!L*m7kq6w^M)PjKe?vF*kK&U-|d2&Gv0m(N$?n|Ky~MCl3vyJ+9~N zJCW=6Md19r>Ut^bhqKP*u6=gL^5Lz7_skmIe_pz#ntfY2_nhpmml+nlkJkR%BK&A$ qMZ4SHCDYFJ=kAVIp00Nd#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHf5(JybX6=x=$HEfw2(x=`q%AUn&QBNEenw@x^0$>p?s>Z?4t zOZRu4HZZ+;;Zj6E#=#U_{e53fhv_vLXxv$`bHZNX}HI%%A>WhJJ>(0(eg|%AWj`{VMhE2@$^8 zdW*YG+>=&&8`8J9Mcha~l7HGKhko`xo{pPr`4z6|B2%JHOw2gBJZ_f-e z|5x{}$Tz;Eo+T5x(qn$e!LCh>Q#@xp=<}Xhv0MDzCZ#}T-g=HXazE9U%Dv#rUM4?epM9<;@ZP^f=2F(JMIR58eqs>#vC#kCPWR~akj$c2aZ?j6``pW&`tyJ6 zisIwP^?KW~w}c*KR!nwY_^Il9%)gAEoXozy4pqO>+#SOB1+7HB-CSlIQ_{z>DzNYT zv@6vOx7-f0Z??B}{5JjXt%fTrVy50({kFv2v|I2&)Q?-sd`>0ZoBW(F=8t`os3I=| qU*O7H`_HeB%w(DRmuc#)6(({H^8)%J=ZaM>E%MU*|55Ed|2qJ|)k3HM diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int-v3_ca.der deleted file mode 100644 index 89814c649cfa6f5e9fd1121800daefbffd46b5dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmXqLVoo$@V)9(T%*4pZ#GH3u#()FR?K>|cBP%O|LAoKg0Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SVn)l#) zboI2KS#>gDf0u7}IvZT|W$pb3y$X5PXA56F94)>hvgC>e*QcHr?;aK17E+ngt=#A6 zYdJl!F+%WB?G=Mt!IzoVif;&Oy}DX$*Vla97~x{Hw1H zR9A4h^!9B0Y+JYVwa>cT*|%Q_whKS1JLRLm_-FOj=Xq@MTkF++{7d;8waZ#qjD!2e zDlR@QNx>)5SHDf+@w>|Q-szpe6i?Hsj(&P6TC+?yE^PeJEXUlo{OSKQK~fhUDD7N+ zB|7O~V@7nHm%7dC#eVTDJEd3mzP_@{blcsc*vFo)=fA(E`zF&`mdRtiD@&0Y-`lyI zu}sX242+9;4Il|bR+xp!fB`wcfXN3KV2lil?0Dbql50be=a9g)(5tgMS!^R$J~Ik?;PKP)EXSv&rS~O5g!J~9FI*|mJO4hDvfE)FR?K>|cBP%O|L6IT10Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SPCf?K)ew=)_dneQdh#&y^nC{rqFr+@>Ad zzKc0(dCPuTRq1{>ho}2m?RDOb$3FI-(F|Ym_*t%dwf}wPe*q3J{=Z89!!FyJWz9M7 zSLSUwZC*>u)Yq%`Zkj1L@oq?<&gr0QLbg>t@0YIFUY}BGYb^9ob@`P8RZph9usjjS*WlK}&AfB_Q~Fu)iYJR7ED3s2ut^ter6Ql|D7 zBZuC^S|^+4N3IhlS66@6n4sdYi$k)` z!zk|5#JOvKhA(#3eV*Bxy6b#3ulT*@=2C|#4|2~g)#|)9N6ByJn+^k!gtyMFiapw| z#P;bvIydR+2Il7XfBOZ5_>RAMmhfx(y7-7Q{(Zab<^)wZ-DgS5f4$G@jsC~G>T0fO yOy3>_zHw=ZEYS86eK+|JOP0IppTP7ft{oBSr6-oZQFyocyupHh4>$6kR|Nn>_*WbN diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int_bc-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int_bc-v1_ca.der deleted file mode 100644 index fd314bff278548251dd4e65798c31c8aefc4cefc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pZ#KQ2PS@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z2 zu0b)?-J)n94{?h`nGw((@u{gGr=U2hiBSnTOc+@in41{+84Q{jxtN+585w4dyb-C}sxm4J1WYC`J0R}-z>&|tIZNOb&&97FQ&xXo zu=kIhc6DXry;_~-ta*%!yeF26-u$tBnr5DR6YGi7>IzbCzW&gzn(H%N<=$c~&4Rl& zwO0d<&U|j*Y&lV~ul}5kb);mET(*Suh1lQ1RXZ*;9*H^lXM2;Fq-APExBT~VgXP>Y z7nj3-b(Zsd zH_T$4&3zxvoIMjAO{#Q5di~?ks+4R(Aa3vugK5yss)NYp6^z;_HVPv z!p!2`ev{vNO*z$kY=-~8?zzpqj&eKOJHNVn=Chd;8uPn97h2yVe^%Xb153lZT~})w ztmeFx^f>=EEPVNsA4~4LpIRUGG4ZX1N>liWDHnDeIi4cKVB;f|bM{=yc@59M|L-1o zC;Z*%?d6~4GuO}WHE?iW;=4*?zunFFbO+&$b!ncqOL{&|;`)OHf#v0%`OY_`xLYAOz1aaO)@|JMQw*Z0LO($00000 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int_bc-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int_bc-v1_ca_bc.der deleted file mode 100644 index 42776582f879121057a0d214003cef9a23234b19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 882 zcmXqLV$L&YVhUTp%*4pZ#KQQDJJEobjZ>@5qwPB{BO@y-gF&t#w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z!$3})*U-ek*vQ1lz|`E>G)kP; z2$^e8Ms???7$`xUBVA?$bU}P-D#$hH?rLIGLJk>5RtDxKMt%l^CPpr%CPqevUHM!u zVlq3ecl0@h@|#w~xC9rv*Y4TRJTo%FJdZOoljX79!6$V)HneS==CSbKYTGF08|`_o z9-dCBo8EFlFyzt>HuD3AZ!Mj&eevCf{43V2SLGG1GRle-JvQYnh^p8n>TTBgZ0q@B zALh>5;Uu_7N8dhD_GGk?!Os%!^hD9ZO&uFAUzwev^zo7T4sYHY3I(&|j~x5Id6uy9 z8%MRbo*P11KK!o}nbGa(@T*vP&xwD}tXO$@W=x-beE0MVGY&R%9&~v-`R0y3jYzdw zTni6WK8a1sW_{t~w$G!^L?G|dlaTWJ?~H%z8Jd^eyjXhYLXhIV4gcGD-zkQ^d8%Sn zD%v8<@65!^$iTRm*8q}OWQAFn3>c6D449OF0mjI1;!yRz<&!NY#kaNgRP^nwE z!G6W;FEJ~xo=EQfA7}PC_!-Z#1)tN;i!V6V@3KmC;`UWp6V?~K{#^7@CGfTVW$kA+ zOw(^(xclMAG!8b&ecx`I`;;Zj`1tnyp<}XT8(tmSa(73;dW+eQtv4KaHOJOAiLb-` z`sDBVhHMk~1Uo+5IiOM9S)Tpof5xHmF3o_b_TmAX@g;TD*IQmd?5w8s2ji_F!4eb_;9()RBug(?BTjj80&$?Un{CC&0 wG<3!9{1>g&CiW_D{$`;a?R$@R)rbjyIZ(5*f3|b-+a@j&u*6i02{d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH(-yJ7Exuz#P*VH26RJJ{D_tM<6`wV}*O?mS@ ze2Rj>T?vyO1y%2sjH>3hwu!~JVqDm73x8SY_T7|UGh6rW*?NHw7b0}F`#U_j#F6RS zS5skhT<6YKhAq+$A|{;K9UAS`&zKap(sm8EMSI>tk4bZuzlplU%Bd(?Z~5n}x6thN zb>7e9X8yYOIH<$={z_q)Zkyx9>yMn<{rysvshaqM2<^R>~bHzV{>3is`wAGe5HaoGK%Jd|%{>0P#-C7=EFX+4mIBgm`B= z**gSM8E)JWT??qC}`k4wR+Z(Uqa_f6RTTmPODA@ zI?%X{qfOOrMz-6Fo7;P3*_Pj2_x@|7o6M94(;i*4J>mZH+yCw+=X<|qFaD`*@w0O0 zyABTVSWiLqz58w^%-!CUV3K%+{rtY1`4iO?*h{bF?@0)1`(pim%iE0Ed{e5b6j);H z_dgHZGJEp(-V?KKIL~0c8K(8&+28FpvmGC=3N<`!$Ruu%@?+UY-G4!I^RI8!IUbRg zkaNlVnNQ088jbTViY*Kq*YOm5Hr@R_)nrY(UdU7h&g-o+Ts)69UA=giH$?6HGc~>! rv*&0&a4r@Ry{LGm?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4W$hvL88n&LS=^WnRzAgNy)lpM)ApsK!$;wIIp3Jfw7T^k%6g&kwug^ zuMslWpp5FyQ87@0I7b@jh@|BB)Kpz8?rLIGLJk>5RtDxKMt%l^CPpr%CPqev3yUtX z=+6A~)Z)>M-%RhE@Bii8Tg|+L>AA?M-sv(QejS+hd-a3jmnL;qE=3W157uyR7Jv0{ zMT3yaiI^AD-?x90F8pUOCxP|vwP?QnMcX;co>Z>tx_GvI6Zi9@7h4Mh99@5y{0ga* z-}!s5#G(xIj(+X#S=P&K@2Z^e+BZY#ep!&m?_2L}nj}9c_&PpRPW*W2R|RA2SHm}j zcA6JE4zK04N_?~6XMo-d!(9jNugRYtdSjkPH=Bk@|L26_w8%~IvsZeQaQk)cKK>)& zW$_ixz02ljX*6xi{d+s@(Uc95`;P<%BtDJZHoxh`omYK*!QRTEl2=kX))?+S9P=Zg zruD4Fq-;+nW=00a#k>ZP#3C!q!eqdJ9ALnt1Pm}n25ZgweQMn%OBbJ1DRa7aufltS z0>@FVAE7gj7JoL)of8t@ZIb->r`4j)b1T*|w#=xGP*Xa4vQ8q5(|;;cT=28H9wUx_ z%#-Wyn_PQ$v!;CC^DJgyaQ z!lE1OT^ek0@Kw)@K>r>l))t}rapGd{K u3>D#`$IBJUpKHz!y|$Fo&GU1rvd6S4)sJ%*9=XvRA^*56jiKd<#Tx*aw^0KC diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int_bc-v3_ca.der deleted file mode 100644 index f086b61f6dd7db8c154c94b23b0fc8fdff78c2fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pZ#KKq`zuSP9jZ>@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZY_WUiBSnTOc+@in41{+84Q{jxtN+585vf5Uc*_~ z`(ZkZ;7&Eg3n^1egjD9Pos_?@meX!u@xu!WYb`pN120ec$nrjFhyT&zVS78n0=D0L zb7z^i;GXJj$Cqrq`|4XtPi^9)KW(8u`x$=nEO-2Qy886_%vTIDn~je-g&iq4@_Ebh z^9o+MB`2qfDeqhJlzmT($e-_SX==g|OUiya7xwM8*u9Kv_Q`E_*L#dzYhF)F{TJ-{ z@2}@MC%?;~8i(r-a=YI+sDFy3eVT>X#!b(DNu_&)Z_r-R{Gq|Ve^JYewuy<|3+!*C zm}m8zYY6V|SBhC$(>60WBFXqc>dMrTdatJ^8`?|OZk-%)Jj3Dfi*E|tiF;36yRY*s zNJP=xmWi2>fpIaf0VJ8o3bQa7FdzpQFcAR*jFG`hd8X8~CDxt-Kfc`FTvR_#O6^+O zgCM5M_nd!u{$=0uD!)d2^>zQLwU-~R;jK+c+NI<@cg8iJj9iaX**t&#W?kKNRBqnN z5H@Mf{V(>_@aVk`Ymh%;lUC|BBe~z{;t@47n}m$S=3f&p&;0aolBRk0XP!e@Qhst% zV~d{pF+?m#Q+wbbm9u+(#-x|MsnfUqEicdadS6jRffHu2caw|2(ue+&O4Y_(5v{Z@7i0HAG5*#H0l diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v1_int_bc-v3_ca_missing_bc.der deleted file mode 100644 index d5da6932a5e383210b580a48edb63fc11d7720df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898 zcmXqLVy-i2VoF=U%*4pZ#KPpmn`ywy#;Mij(e|B}k&%^^!JyQT+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4V4WPL88n&Qe}qmnRzAgNy)lp#_`FC@wu7B#XuE60RuU4UPBWDV=BkrFtaPRzxY=(GXM#(^!aJ!}%>Psl@crnp3CP?1ZgZ~uRn4Zx z2YM4Y3Z@wus_(tHfb|_)L(jBXx0Kq}a%6?BJGS!WFCM#ZGqV<%?vtt6$NI-ue6?YS z=Jen5j_|wJ+`3k<`)RYl9`-H!dCH^m>O?CKx;7kJFiC*>%Z|Ezp>ITwf9LXxdcUg_n+?TdYaJS^5Wcs&zo*%vj)3siqB}R_fZeq9~$m+ zhS{Kd+ttr^{lw$vvz=|_*x_^PjD&})`3Bb1qnY->R|NaB$dW??d5Kn^fq(gFq;BZJdd1&eyqL#Lvy-&y%l z-6B@z%^JRIU$xer*$}#+rtY?yahB_xS*nZX#-Ge<%VsR(nSE+QUP>riAp_UDIsYfC zZ2fNfR7Uaf!N#IT%JMNryZ@xsE>%A%`PRvY&3JL1^DBO{^&(s2R)3wb`;PVN^CnWk zKkhDf%GCLHcS7m<*bc=_{o5Y#b$e)wbg;>-|MLEslb}Rkkre+nci*r=xp&fC?>QE> zX202U)X|?IMr>V)9zR%*4pZ#KOe>Kh=PjjZ>@5qwPB{BO@y-gF(6>w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z08GxJJx%M9a_6Ak3Vc@0erjEzi;3{1@pO`^nkjgYwp z1ypy4oPi9)A)-KsBqhhErs|@&sEJVtIW!nq8JL?G`56qF7`d357#SHp>_~?j>QS_csjXE`KtMWq4A3yyxYq z!!!SG3o}^Pxn;iWu7uJXd)BS{T=v-b+t!5*rb5d?dxB>NcJ#6f)W2Oi^PWh};)88B z+{>b7&T6(%zcDTFe^`T>_+_(=`5X7_krGNz7#y2^kqlFz5CwpCyS&_t8VpVydCq* z;?vpBwOUJEHf>>_@odXSt3YG1Ex{$-x6~ZAmoSL2?3f(7Nk8_pRGO^$e(nz{qHo++ z-CoMX%*epFnAZT3KxBnkm<$+@0}PmafC0wH(4|_j;*N=sp=1i>O>z>2;ZyG~F7Os!FUYp0~@b`V!D=W^+9e_C@um57kPf#$Be5f2|+&0MkMezD@Iyax{$ zCa(H+H~O}G-p3gq>?6PUZ+`XQNDs?&-4pwd#UK6OF@aGkzpi(gtAO~LC!D^44mPHx rT9Z2#Yu_!}`|kFxynWmufqNa6uUuT?lE1M#;g5)iV{Yz-LmNW@WIR?j diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int-v1_ca_bc.der deleted file mode 100644 index 6e6c2734b668ec1ded732a0a645203c6416e7bce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pZ#KJI@b+-X88>d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH}>JATQ%{Hm3AGxP4>yCXyI74|HfeB$(sO}DaGSW>n`p8amL{m@y5C=Iul z0qY9*FKO$$#8zM4dvfAN$4$R}?)~Xwx>T?z@n%h-#Gwld8j7V3KW|mM@GE$W!vFT( zNVm{{x*7IGSAzLZyqo$x_1?F&Wzto;YwNB&=@(mF#ZmL{%C5=#Jty$Bv#gkEuH3vO z^3guo8um=llGelet)BCg3gWNkFD%MqHGBSf+Wy#gt6b3MXWE$@9$JfZo&{DO_|PEGo9&@JvpdD+4v9>4m- z3V-Han9Ib>$iTRm*8q}CWQAFn3>c6D448<30mjH6&fK@l?SNj!sW1*@k9iaSZh8A8 zB};uqwZ>NOt6$UuZ0uzZsaNHesG0gqyyxj8AZ*rgreBEV#ET~)GPAmF?c;s2nD0*l zTYAxxi}L&5Pq{j??jn;kQ|x`dH=jjLu%%qKT;DyP`G??)-8%vu-+$u~ULbL0-Fuxr zrPqNm26`z`cdX8?xKgQI8WlWqT6dT5+9iKYnYS&;o|_Q%@4tCd-W-;Tr_|dRC#&Q% z)t>wM_FvhKsc+x?6Ree;7Jjw1i}A}%Uv_hopCL19r)F{JV)9zR%*4pZ#KL$t(bRyKjZ>@5qwPB{BO@y-gF(6>w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z08GxJJxfmCv$ft)z6p^1U9k%^IksfB@AlsK;uGS{Gh z>JE`JkbyWv6zGDadtd|AC5S+ z_sD@iXP?il|L9=MJU`d%^OL1arCN%+EE*XbPl{apD71KTXimr7{mUQQ>~mcFU_cHqVDbS57$bwYD2uZp*YZHI73+Jl8~3r?omsrUP}@ac zu6fF1L1Ql;mVk+Cwr`bRdP*Vc*fgz{)Y@BX+kLF0_g@g25%im}VI|v|MR{jDi=56d zoM80iU%yIj+n-PTS8KIXt5y_06@2wKa$g&-J>!m*Gj52l;h)l8ou784tTsjv@;9O}YP8$a8+AK+D9Fp|dB>%~f;tl)s)B ou%^UXQ1UrPZhdQXo7K%9;hOLM?|K@bc0a>XPx+M&?}x)X01sL~>Hq)$ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int-v2_ca_bc.der deleted file mode 100644 index 4d07b58b42fdec6b0fd63f0fce857c642e7a68a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmXqLVoo<`V)9?W%*4pZ#4Muv+JKjhQ>)FR?K>|cBP%O|L6#x60Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S182WyLpIdxMrmb$MN{;lYqxxs6=brM<6t!sbuoO#6JKVe8#P`nrGr4Nk z*Q&);PMuEH+`M3~%J{>zD(?sk9WY?h5X4zkWYp#7#* zwYS(|!v}4#rSaB#j!Q?`o#Xh*ShWA9a;23hhth}Uq{U&@`@WVwe8lqWq`uAWXD82^ z-Z_$Y|5Wtq=_=N_A~#Pd~Y_Pfdrzpmwd;s3GZ sTrFqt4~KQLia$r(Ua#U|akG04UyH%1^Pz9oYspo$O}U*`e1?M;0Dn+T=Kufz diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int-v3_ca.der deleted file mode 100644 index ed83cd2d638f38b162876d68d91a22d64cb5de44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9zR%*4pZ#KN$+!`Fb9jZ>@5qwPB{BO@y-gF(6>w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z08GxJJx%Z%fb6Ak3Vc@0erjEzi;3`{LdEu+MFjgYwp z1ypy4oPi9)A)-KsBqhhErs|@&sEJVtIW!nq8JL?G`56qF7`d357#SI!8L7|s-?25e zu*2#72SB}xOU%@+-72^_L z7d-o67U$u6x?#H#&ngqGb*ue%Y&fHQ{j=&c-Wj~Dos$^$Jj#15xN@nGxf&na_IQKn_kOU$t%)(^AfE-}J*xo9M-2RqZFBB^K>D61pbhF<+B;!#W41X$OBEY`oXE zM9fI{?92Nmw_0~_*519SHR;JAhkGBY?N^mtJ?>uHQ&kkzXP+Y6*Z4xe%4Rv+i@#|b zLLDAG*>=Ft!N2Tj=su$p%2uwse(~*ipZsTaTjSA!`F5_?euyPB%vkXD{m)|zlcH4k zg$?$#@Lc0sHfydyU)IPRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`O zLQ;!MGV{_66%6D+qRc$vWk&Itc_q4K#_`FC@wu7B#X#x!q+|m*ab80c17jl-BLh=Q zBeN)RUL$0#K{eIgq-mfIagzejO-ae|sj0fS9M{CCgd9eUtPIRejQk7+O^jSjO^l2T z+r+F@4y+4yWwi|xa(}mbW$?B9y?+}uZZ9dQdGK57)X~4+ms!p*V4k?Kyvdd$Fyzje zV68F@?y4;kMe)3$gA_q_0=AFbl!#q4%rE2fHn+JKlo&VH? z)QXj6E!w15Id9MFy-RP*&QUqElmAE5a;Eg_CwU93n5B<(DMV&$nbrU3ZcAa_eV4N5 z(w%XYp***F!>&%PfA71^_f%ix)F%!{Gs}*!9F|l!*!QL0NvLd}LiWxV-g_!8EluQ* zdH%o0>E)zT)$UBpj0}v6c?}@RMpl@G$$$Ylz<`Mg7+{PHc@Oxe`_KM6H|OW|hCeQ< z3;r_3zOe1e=()M(*2JkFxi(HV`XZZXesS8*r0eEFf$SX{qc`l>VzcFr`jH9iV&&dx zJKUSf_Tzr*mN}vqUKvkW68wy(fBv=B`w0(tq}^Ne^82>U4~%_xT*NoVS><}dG9Qi` zscStCPIue?BQ=II@vp!!M&&X;apecC?zKBox(;nK%ySH1@?-vn{LOzG?|HtPy3#+i zVOP^Bq1Jh|e^2`!m|FcpwthpwOM@AAu0^c7C3`SfZ*6|{A(lzkM9w^aIIpCsjAzxk zW}nY>n{1s7yMqO9Zb|sL#xUtwU}q86%j3BoDuND5j6Pt_xW_?*5 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int_bc-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int_bc-v1_ca.der deleted file mode 100644 index 3940e2105e51e69a4058afed46667a11288082dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pZ#KQ1n({Te{HcqWJkGAi;jEt{YLH8e3WHZn0XFf}){h!W>D zLgpG2Q{63!2J#TMNC4fElpLR$s*CQZCPpRXFkxh6U~XdMXE11Dz9&LZQd1iNx_AyO~d)#4vbT>WNXf|t!Z_t9L*BAa!a7deRMETqm!RA-j zQ=`=8+KQCs-246{{|b-g;ZCy!wgQXIzD_<;aO3m^o+G8PMb6J>?2%~hc=YP45Syp@ zB$+nnw2(FLTGL*eEAy2s(fnhjB$qg^{{3nH+lRfyKCVc6+Ocl;>UT{yIn`8mdF9wM z)!w<4SXq6OQE>Ch$2!}ji+-fLzj;=?@8SFWw9ilN8%2I!yR|clYqD;N&s`fW=hY3x z>a)#$$M{V;=B)d3X4&C;-%k`?zn4+|?7-5OlB+LCbkyateDA}h?oWWazNV8BEK3@}Cp5xJSwe7P@D4lrBtKH2`aJ^R7N zu+1({{wP>-m*pS5ROWQ6;ohARXZMQm(ickhn^Si(n_Qd~>@IAtX0{;C)cyF||KG$9 zKiN8)rPMj}%%bQWrN<5|_dmjzzx0>H$~X_n-`q==I<%@J8Ta{@vMK%8rl2ghRqjN= zp>X*Vc3X3b)A@dVTc@~?x6M5LJJ-GPZP)+3b$WYmztN-ijjJ!@@8Md_Qr%o{y8N~4 zL083-hs`oqa@`fHnfrw`)a~jFm2X9BJI)sbuYSDu!Su67&8(&UHY9#Yl|BITDN{56 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int_bc-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int_bc-v1_ca_bc.der deleted file mode 100644 index 7bad894200ad727b141db6ab426fdc560a43068a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 881 zcmXqLV$L;aVhUZr%*4pZ#GL0a%Yc`SQ>)FR?K>|cBP%O|L9QXU0Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SO7yMduZwp!RDap~hy4-wy{fUR z@?Aaqt(_BG_e#00;HG)jcj0}v6c?}?mMOK)F$$$Ylz<@~!7+{PHjW77mmn?L4JG?_v<=KK~k2Z76 z4RLt0;(+mir9UrnB&Yu}ys{wl-%KB7!-MPFCeJ^w=J)$V#B$cWzgfqRHkYwYoy>f? zxTQj&;hNOV{^K^F7-4?%p=WnU}T+sC;Dr0F4(`O#lD@ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int_bc-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int_bc-v2_ca.der deleted file mode 100644 index dd14c3ef25b79ce2a1515935fd8b523daac644d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pZ#KQRa~UOpFXnEes8!#CeU7 zxdz2lcZ;HdJj5*$Ko=w>$ET)(oPy%0CPpRXFkxh6U~XdMXE11DQF? ztT^B1VWj(q+LcY!JQv#?m0d6XIAP5AJEX?)z};_Q>;fH`EfW?cuj=hyxiamc^4)OD zzSA!s>rS_*T%P^FtbwE5*K(T6ym%Eh$44qDH7ru@Y(>IXIsPXV{;_Pou4aeMF`(HKlsiL5XSlK}&AfB_Q`Fu)iYb~>kuaQ-rg_siYE9eZo?8oj5%2AP|d zy*fC@#jj^eckHG_hqLSB9^7l1X!N6y@1pJ-7sW5v?xwDkdr&la>*MKf+vMh*UbUm% zaP@N=wd(JCTIv`Mn()|mXl5*!WvG#U!iOo!`?2ukqBWly+jWzsOffEed`U;=M_74* zY**X2skSz4Y-z3myVM=n?yUB>mXNrL>+<3zW{KUCPQH2Q^xEy~;dd(;XJ7WznX#(B z?C#;{tM86VpFS=1DU;VIX6DhAxwoY?L)tX%?8xJo^dq1?AVa;P>cYO>Tlu?O_a4&n r6F>dvIXlPRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`O zLQ;!MGV{_6r41xOqRc!(Wk&Itc_r~l$+|#Raw3pnAScdiXkuV&WMX7sYGG^|CC+Pv z%rz*Zx^q+vlpxNL209`sIX*QNBO}B4z12&; zvB$4`x_oWDudKZ6d8V}%4MpbR$v0kZ>9E*+g8A*_mWvg#;b)l6%wVO9tav_S zQ&)+V+M?~fB5~CmcNaUdFH`nu3V6TGKIfF&{z;k{4srGu{%6(R&&-OdQZAS+6g=(z|Ig1rU_Ts1M0$xGW*8lmj_3^bsZ<{9O1R65gY(DsKzE#rH z8Kqepf|-~Z85kGy8bA_@tS}3c0RwV?0h1Ciz!(|0Gi$eU?X>bZGymJ;x|VnwmMsf= zm}K`_##Bam?mYcrbN=u1*LH?Ub)M(vws>T&eQfXathz-z-P~NxEn7cvM~>*Fd+V3) zJ)t*mM}xs!>)l@_PkL=CdDN6+)_XzrFNfa#&tOwjmt-kxi~bz)NqQSY`XQw)Gd4G# z`)Rqm^IcsK@0H1~8TNNBQs8~i7k%Q$!X1s@ReaSK9O|2W^^nlFS`BvXr0)x34!ghJ z8Prv}*C+c{2>1Ot%fi;|e#%@a(Y=7Dv%FsLYwP5bC07lXoM4$@eJWVjwkJSd-|<~_ upT#L#!=&Puho^b%-s7QnDBZ}tV`t3gvKW?NwZkFXMAY&hom%-+(*Xb*FinU6 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int_bc-v3_ca.der deleted file mode 100644 index 916cf5c892fb872831066657a6162fdd0ff63a2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pZ#KOpU&%%J0jZ>@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZY_WUiBSnTOc+@in41{+84Q{jxtN+585xd9tG{M_ ze&}BR49{nw3sj_Tu5{C%bNc1(L;U-v#Atqb+2rD|vElk9&UC3cTAR4L1U%R5wJ*OG zaPxN41wS6~-V5BPnZHjl(V6x4lQ6fgJoCyRzG}-8Q`MQ+TtzzyS8rb5Bt0vwJ+bvd z=l)+yUU;3!d=bw-r(H^R>fL93o8yY|r6vk4Zkaq|QexxnH?ueXIu&Vg)?#)=d+#>p zbMMOq7xB%Joag&ou!^T_@2#&}y?WKoihe%5WO``cY56ph?nB@Be|x%|e-+7*^RsQ0 zhDgrG)8~(M_iZ{5vsT{pY-mPr@CgmCxz86Y)-?apBD?*0VTji%6Rmx#h5W1<-tMkD zAk6dsA`>$s1LI;|14uHF6=q>FU_cHqU?Ktr7$ZY}l-)FiU%PFjw>gUL67%LbYI9xu zq;cQh^v5hs+Iw~tT)6+vZdUdt@p%d=Otus~9MrroQD=|XXb zf^Q43&-(t$Vdt*|3vsP4-#yumm>s$=V>RR6)VYoi%^7bs3wsE$P7*ycQQ_;>Ry+6h zhHuHfQHxS%aIB2}m|*?fP^P!Fls9s7>8wTW`{w8?UbLzZW4n5P!Q0)ZeqG5=^;l)W zH6ilDVQ15vq*HhH8!_+8KC?t{hO_y7v3Lh_W1oq|(^nsTnjzxbKHbL8bl*LrMO_Z( sDr#@~9a<)_;&8UW4dH1EybcOjJ`Ap`jdUw(w5c`aI)CEv1Wz$50C(g>w*UYD diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v2_int_bc-v3_ca_missing_bc.der deleted file mode 100644 index 5f52bfbf526e26219a99e38639e6b63e0628d0b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898 zcmXqLVy-i2VoF=U%*4pZ#KNTVAjyE2jZ>@5qwPB{BO@y-gF&eww*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZEM=gxl9J<7Q+4sUuZd9!Iiwg_8JL?G`56qF7`d35 z7#SJvY~#MV*3_PTdQ4pHl(C#kqUT3RV#N+M->zpz= zZeM&|e#OG^#G0OcE33ZrG4&svvUzE~`tjuSDG!w9i1I#Um=(g<)oK3lven}H4KX}# zR$Z9PQa)$&d$ zPKxJVdABdqC#E6d8*}z&&)r-bJiXhTLX%|WpRTE`TE$!a?!Qj(FYlGVeH=b_vs;(S zw)WjVW?LqbXtGVnT$72Jk%4hBuK^_S$O^MC889FR7%*u81B{V@WtyOxMEG{My=v1I zxBJePf5dd6eM$N<(OZ%~yVnV>pW$|(ETzT!OM0y2t7pf>+dqEvji|o3uH?Zf<>og@ zS!{Wa#dl1ZX6fvnDi4v2HurQWT~9EPQ+St@<5LHr!fz?7!KvogXJoIiQutW0$`~_2BgbneX1(<+A|* DESp;e diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int-v1_ca.der deleted file mode 100644 index 41f0419ac443aab9d737cde40fd0d798aaff20f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9zR%*4pZ#KPFZvBiLwjZ>@5qwPB{BO@y-gF(6>w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z09GxJJx%M9a_6Ak3Vc@0erjEzi;3{1_9%%a43jgYwp z1ypy4oPi9)A);kQ@kz^{c)E9uW(-j?KxmS1lq3=f-%^zDtdpwJ^AI$!7dm-Zvm7Ul1GpxFd zN;rj?m>C%u7xNlG5{RrY3zGo@a)1Go4=}(O8ScfGOcHkfRh6*%p}cC<2L9msb6-99 z)}(Gzh&$Y16~yR~JK@=$cW)J#Iz-g=SY1h++_bNAlHE0CPDZ`^$1S(~_Fm-F9W9;p zXyGI0=Il=s_v~Nupx4}9QoqWx=*{OZs`q~Xe)HwWqYRDEL%Nw6>bZ#r-E1~l+I+wC zVgJ_s-`SNWy?@JgeCFl%KXz?97*)VM%`S;=lm7Y-r&_+m991~&empq3$yC9+;N9i* z^O!W4H}^a;vXR`J_HNnfmV_Om+j-~xzgoO~lk*~@{D6gBVHaH=mVdeRg`ZE- td#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH$b8?`rkvvz3Z#5Z^3dpJcCy4EQ?KP2Bh;Z3&T&*(WN zd&4Xe-FfUpMNcj9?-{(SlSx+C$9{_4&Mo)a3!Yk4`vyIYS;HQHN~ ze9*q&&dEQyd}@s)IulesKK1#dm{Yi({rc)f2M_aQynb^`KK9Rs_?6-O8uc3tR1D0% z&aA(xUdVNJQ*o_C@|GQHRn^Na3=TAHJ7*DcR>Kn_kYpk&%)(^AfE-}JL<9^lMurVVrdr+Q2M;WK^W)9A9lr9K4=g-{7TA^tCWPU}^7oUK z+}BHQPken?&QwzW8)LKBwbEZqjkBFvjBh-@_)}FPV7d!ack0P*cmJOBUy diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int-v2_ca.der deleted file mode 100644 index 5f4441251e3c4fa5177f43980fea95361bfe03d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9zR%*4pZ#KLgx?P3F7HcqWJkGAi;jEtL7 z_?Yg-klPvu+60%~xtus<(GxK%S#{6*2Hy_ZM&_vpzt>)~sv#;{|EYYqlUAM5{Q_2- z>>W9Fx%qZHE%_abH!TeRS$5&nVfUb^8nUw=^@n)PZP=N~DsFI9;m&NPf@=$M%H_gC zO_`V(85kGy8bA_=tS}3c0RwV?0h13fz!(|yc6N1t>;L+nU;N&z#ia_GpBs!Mdy!S&tBHH zXAZ-HXHr4kF?VhhzuWUDeO+1kg-ib8`0eQ#%YByJy10;U-TibUzJ*VBSjGp;EnFQpAw)aQoaN@{6!&RC?Ocb1Jq~e} z9ynIAI99hrZ&_Q>r-|y2dA;Qg>tDg9kIPgST>2Wb oPjkeH(K0ren7ga7~l diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int-v2_ca_bc.der deleted file mode 100644 index 956c9a10496893e5ab5e0c3793e05c1fe57bbb9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pZ#KOeCd5!@u8>d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHaMv3zp zA#)9isqPj<19^yBB!G@cN{&xW)kSwy6QdGxm@u+3FgG#sGZ-{6axpbAGBRwKpA<29 z>K&8xd4ZpP$Q6aRblXT4U0GMQ!lQE%*CLhW9*uL`XH58DuudmAt=(wd1_Iq%2(UyVI4Dcp59ouZf7@UJ{b zGkRx7{7vJBvi7DP6FddD*j>`t9xcC6y}&Z^$C=*`zxk8?bVi$^Xwmc4swVRW%8<*%K%EdP3incndn zVrPp?`8w9Cncg~cq-XW(hUqu5bRQN@`8zT6+bLPTw7{-9_63ErgSM8E)JWRN@?f9>0IEtO{yPbWREnroxzqG#*7 zzVXMEZ&#wDLj()nPfXmx-d1TE#Fn_?+n%o#wXtI150?9^s(w|q_y2|b)n{JSN(+ab zvJX|Ooqj?>WV&Izs=scEK*A@#Llaa#U2lKOI-{y|@x{`$-!hciv<^KxwePEnCvDoVqCX_mkU_|0HMZD|Ap0{y8V?a~j(d=T)C) z%eXqT_x}!C_;*+Du5%KPz1ohqt@A!%mwfzo&W!7C9zMDJohRx3mjvxKNj3cCbI#u| tbntm&SbbrxqDM)(#fP7eS8 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int-v3_ca.der deleted file mode 100644 index 71fddb4910c0156f7ca602429efa86f1fca06cf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmXqLVoo$@V)9(T%*4pZ#H_5-Wx&hEsnzDu_MMlJk(HIfAl;DLfRl|ml!Z;0DKywn z*gz1(;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`O zLQ;!MGV{_6MGb^OqRc!zWybNDc_q3)Dml?WPMp`!#K73d#K^$Z($FYMoYx4MYfwOS zhsYVoKpY}kW)z>49G{vBatgvlO^iy&p~1+?z}&>h&tTBR$i>ve$jGp{R$x!sLk@{G zJA^rO{|f6apR}1NX8Xa^@`%nAsuPw7yj?tP^}0^3H$8S96Q!kmp z##Q0Q?#&x~r>NgHsZ>2!IW;0G=U&)`b8;=;!bH{eH|0u)u9a;}|2{>*=`qh9wG ziW_kk88z*nk>}wpb3woS5W9}k>E-MHITSK|(b77z=*ycWttIQ_FaBAy#U)=!N;`5! zLDsTdp3vRLuYcdQFZYsah%YmT_Jg|Gr3cdzu5F1A>Z?Bz7w@$ru-;E;b))v@0$rY! zRoOjm<}bVDm-T503rFX~WqCOq*}NOG8LmvsI`~kA{mh+0&uPsp`Sm)v`^&fep}6lb^5LcIM&F)N7iNQ?Jb47q{*1F%GU>jmtLx0KsQL@&Et; diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int-v3_ca_missing_bc.der deleted file mode 100644 index 505f3b227ed25b0f0b8d8f5863a473725237fa45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 891 zcmXqLVlFpmVv1kD%*4pZ#4MKo&48DUQ>)FR?K>|cBP%O|L6IT10Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SYP&z&-*+5R5*U-ek*vQ1lz|_*% zGD@7+2$^e8O?5YE8mL3uq)=uAbU}P-D#%q>9oNLDgd9eUtPIRejQk7+O^jSjO^l2T zcQ)|-p1k#6B8#k)kc0K7CvKU-oE&@43bv@6oVq=d{la8Z;p9Gbd)`wzeqt9trfN^% zo~yfbVm;Git4lL}8y%As$l+H}m-w}9>#=VeIn%VS>hBIduX)ntTR^phBM^J*jBhps(O+2`|y zas0APPLF21HeC_Z=JGl*v!L$VnLAJQg8zl3#>6kpU#Iz_Rrl0y!F|g-e5Q7F2|NUVLUVqVOf6wwm+pgGdeZs3^*lM;r@}l20cayV1i4%n#4`(k{;GU}B zD*xthiT{BO_x>|6GcqtP<~4vM8(Co%CIbfK00Sl}V1O|)1n4;(NtiR;s#nDS?YySt zpEu4AW1YOwr2G5L)jzy>OVyQ5dQZ1MRj!z7;?8TsUo|=T&m+}oGRt)ZfA!v$KfBgz zh3}8vFP7h~CL4rzd_VR{P|spFYws;i9Se&GA2wNs?U}ey;`QYBbB$v3-)r%@S)P2J zQQS~Km1%G&)eb!whm z{_!U0cntHwSMF2eFI}9}IAe8?|9*ehKP;Oz-FaD@w$!(9O?7tl$`_%bO-ho#@^@+c y_i(<|V$Z9VzW0fTFh3jTO}PZ_Pu=<2b0kHWROj?f+4tvPZlxh}MACl4X?_4YXigOX diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int_missing_bc-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int_missing_bc-v1_ca.der deleted file mode 100644 index a33dafbce0089abfad67e84689447bf41b15e487..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 892 zcmXqLVy-Y~VoF%R%*4pZ#KL&Sc)0;D8>d#AN85K^Mn+av27@9)ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&if?1Bo*8h?g11XXcf}=Vlfc10~{~UOpFXn z&5ewr#CeU7xdzo#cax@pI>b#1Wkx`E#HXg};&NOQqY`o$F|sl+H!<=v7&I|*F*PwV zGVH31NlsAvyM)h^x6bWIseYNid@g6<^#9vmw|<_mR(vOU+{ZAYe{>VzT$fSo|Dt3 ztdk3uUhz);GvlOR*H5LSSaNJJ3wbDKb^Pe!yRQ~+%L!?4cxc&~bK7*=EKCLr$N>gSRKNgZWU!mBQ5#z%a=qgI|Fauv zGIUkqN<`Ptg9J5S{Py z#p&0#D26TBQfd>F{wiE~Re$-#y8P23cOTz(xXNDZ{8n|V=l;UW^8`d@a`r^a795Ff!{r6sV1eDemd9n&T6O-IKeT|CTu8Ssj^O)7@kGUM)*!v>0 zOlVt9+}d{4uW^SxS(y#k&C@?mcVdWk`td#AN85K^Mn+av27^*VZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&ixI1c@^9NR=7KXXcf}=Vlfc10~{@Les+?A4u5&r?Sng`I*6Upzdkp7%n|EUKrvJ>Y+a}!S71(K9;N8`7EPumIo0!#K zgw@`iy~|(6lC(U`;Yt6|-I}{ZU%ot8BlYMFe@id>i`&MTuZw*bc6D44AZl0mjHM|5tFrhbx^HXF2cx zekfSFp{MgjyXT9{w(X-c*Ih3?RTE(ybX3~lBrHz znG172toN+A|8k+kf0^qqA31sJitdtoaLMDKPfuc;s@6mQFFaCd7g!mWZT5|OZFZn| z=hc`c=bEoRJQ(n*($3S`c4@=*czx@Q);r=8D;_ldXL+;xoa@f0d*(qo=azropTwrR zUwHBLgD>ab;`}DTbKzp@j;ANOGE%&EvOk-5J7)KE#^b`j@4e3J`C}typm+VBLG;t# z%vQcR@;~F-cTA6t5b_nME_f(-SMbId#AN85K^Mn+av27@9)ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&if?1Bo*8h?g11XXcf}=Vlfc10~{~UOpFXn zEeuVf#CeU7xdzo#cax@pI>b#1Ko=w>$ET+1;&NOQqY`o$F|sl+H!<=v7&I|*F*PwV zGEDEgq`J$#IEp~8Rundlx2VpEh+ zRnPjB5VYi0pw<5gg(>s?mF%?&X!Va?f6c3R_2%1eBz~ScYdq5^=Z}(;m8gKW<`b>f zx_U<2TCU=wy=Uefed)`#FL=h9&})45n>S{tf4<*#`%=*3#vH*zJ@PUyUSDHsT+V%M z!?lhd4&{${L{{DPHsp!=zvIiXCkd$+v!1?xvbee>fGI*T=11Suw64EByE|f6Zwj2t z)}rMqURN|@Le8mVn>)#o_iZ-qx11l@GV2%P%57me`@`ndx@6p35u>>w#YpElL-3M9 zpV`4nPkx%cLVKQJq4lrP%0tOf(Lj(UL*Y`PD|31s_Nyxtx z(7JWQ?Y}erxhHIn*!a&iy++3R^|FuentOO`*^bt&idnv~M{k|>ak)<20Dgh%R+bHN zR?iaog>+KvoN`!q_HX-T?Y!^7H@062C#)u??YjPK*@1XF^&J;8*A;E`{QpZ(`p5aS zu)mstYh%p37}gxy%i`3s!NB^kQuZpVa|@OHQ}3wXKWP*H>u9x)ZJL4VgyVcXrTEB^ri0&z}% diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int_missing_bc-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int_missing_bc-v2_ca_bc.der deleted file mode 100644 index f3d25c297bc36def0ecc912e8708aee05ab39af2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898 zcmXqLVy-i2VoF=U%*4pZ#KQRR`Vj+OHcqWJkGAi;jEt*yCF_EM=f0l9J<7Q+4sUuZd9!Iiwg_8JL?G`56qF7`d35 z7#SHpoQ!r*Q+k%9mRj#)nr~bkXBqQ(VS-fU{hJStrj@>AXKS}SDILgNa{TuC%$q^m zEY5!1vuZ6b{Y=hLu*oaR?|I@x^7wVk%+>I-JE zdYk&0X5U3Naz5TFUz_t{1OLHo%hzilI=UZQ&&g&2QTPh|o zI4^6TrEs&b?%3+v*NiRKOloh~%D3td^KXH>l^Ni9eBPXO<~H6?@pTMt=le% z%rKHpmepTzRdM3I$%UuWTg~q8GP}`kU9mY@Fwt*e%yXW%mn9#+KCZa_&*^Vn^YWCQ zA75S0oEvKOW7&c?wufEM+oe_}&NB(fm%jGRX(})CpGAsZdA(C^ZONXyZ9#I(N%o5e zl8fCRdzzipc+F*D=e%O9M+enjP>{xk2D*S1V}@o|O3xfNyU z@6K+1D9d>N@m}>;{416(oA`9e(kaEp+<7*}37xrnI@@ACu@`Ur-Lmn0)#i=dfk^;* C##&SW diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int_missing_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int_missing_bc-v3_ca.der deleted file mode 100644 index 8962571ee86cff866a1c7954decfc7931020616b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 892 zcmXqLVy-Y~VoF%R%*4pZ#KO43?vDX48>d#AN85K^Mn+av27@9)ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&if?1Bo*8h?g11XXcf}=Vlfc10~{`uj zwe#)xvgTjVJvG(yAY*!^&e5~3H|#wFRG$e=;C)hX@;jf2cF`-VWsa*#tGNY!PnhO; z=>OaNnq_M1FTeZtp*h9qV86un&O`yXMVl+tAFSJOdVNFD;YnJ}2Oo=z^O*3wY2e5e zlE|sq?H~EpV9)f}6W1O@?+|d5;;r7cHoki0gU0y}RxEkEoa?S<{i(8UxeD<+i~byC zF>c{s^f0gM^(i^g4HvK9d{Q}m?Y@~iT(5loCNJppdu?kW_qs(>rter=_fVFL@$IUc zJ2>|@EUEj@>U76?FB3B(1LI;|14y!w6=q>FU_cHqV4?yB7$d_RR))!wPs&b@d~<1k zRTZnefChu}rbBydm_K}US-O7zR(xLh&pP>s#nIzpt8SN9TXX*OFaCchX=ANg z$$Tgdg-)R=jZMYZ&ir>fCjkJx C9a?b! diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der deleted file mode 100644 index 0601874994e4514da1fe938fcd4c80c7a045e607..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 915 zcmXqLV(vF+Vk%$2%*4pZ#KLIE=WoEv#;Mij(e|B}k&%^^!JyWV+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4Ydt4L88n&N@d3JnRzAgxtYbqK#BOIWL=<0aw3v|ft)z6p^1U9k%^Ik zsim=LlsK;uGS{H7jq2_*F))I-PrJ+r=%)D8RFJa>IkbsU2|4H(Ss9p{82K3tni#p5 zniv@w&acSZkiq)*!>T&V;yHdBBLjAqsGkehw3Xkmx$#+ZcJ&|1cZ>Pl@`| z+2@amIGvchPgo$Lyt38Sz}dR{+tST#Q~jJ9E} zHrr-QJ(Pb?>iqitygMHcrWO4?H|4HatN*LGhdX<8zIv><_VKiR#*Tw6*4~TH&wiJA zkzMd>X5@uOInxvEDvTy9{{8LeSKiX?4g3lLovpU=2R*hty?Nesa{s+&H>793^1B^V z*CAqJXkoo0(3RQCQCt48C{vk&sMs0a=x3iVPo4bx*3kyteJxdyG8`@+6D3yUsR96s CrCCD& diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ca.der deleted file mode 100644 index 4667d92d96b6d041ec24860964e8276354324009..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 833 zcmXqLVzxDCVp3he%*4pZ#L6&l4gX35UN%mxHjlRNyo`*jtPBPThTI06Y|No7Y{E>T z!G^*Hf*=luFqd;;PG(wuQC?=Ep_qXPNRVBa*Ehd3uOu-uPa!NbwcJp|KnNtxCCnWV z?5hxxT3nKumu|>szylIx=3y-}icd~7kQ3)MG%+wXGBGkRH8(Yh66ZBS=F-6hO^iy& z-ezQFU~XdMXE11DC*_cl~ju-MOCsWP9s) zJPv9*HcHF7&VIQ~XWjL#t-CswEmi8bkvg^7_BBshYRVtosbJkkS`(gh_2|w<8dq4YaNY@P@hPwk%Jzl9SrTdb+pL!OZtJWBBU7 zjEh*ONvuq?+&a^Tagt5b>52!lVq%&fc)Wh!So-|k)yn+nIR}Pn%m8^T@U<4PIJ0Hi4VHAe949HTvz_CGyhpH%`I2tWSmzVdVF8W FH2@&eK#~9e diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ca_bc.der deleted file mode 100644 index 22ddda3cf90186401cd56b7e0ece162c40f7b4e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 857 zcmXqLVh%NEVzOPp%*4pZ#L6&l4gVbjUN%mxHjlRNyo`*jtPBRphTI06Y|No7Y{E>T z!G^*Hf*=luFqd;;PG(wuQC?=Ep_qXPNRVBa*Ehd3uOu-uPa!NbwcJp|KnNtxCCnWV z?5hxxT3nKumu@I%zz-5-=HVzaice0APf9kB6X!KFF)%hVF)}cv6ju zcg+)?hyGdmSvdF8eAjO~W2W!bZpvS_J9ex5vgy*@b0)bK9Qmzk*5i7}?B9|8o_ z63GP_OZ%QZ6*pM-?POd8D|7HHalK26SF=?Aud+%!v1JKQ-Sx8DBJ8;a1&^3_SF6YL z3aYJnt5Unc=S`Kf>ExMQUh%b78%+11RsldC&RYJgId=ox4EghCCY94X?;n5Pjk!1!;Nq5vGrDZ{HwKd zcB^e}VAL|-6z=mSaY8|xmGqwOJ9)kiE#5rK)pAzO@s>I~Rp-sx(g$-+?X9ceeDYH& XE~Ytoeh+K^#FMQ5Ti1)*iAVqd927Nx diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int-v1_ca.der deleted file mode 100644 index eb5c2af072a19e527891d17675f718e2f259eb33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852 zcmXqLVh%89VzOAk%*4pZ#KN#&=Yjz*8>d#AN85K^Mn+av27`1%ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHxxAx28lBB@RS+GXXcgY0;%Lg137VCLlXmIBNHP7Q*#5eC~;mRWUfIj z)g2;jAPI4ZP?=GDYAVPb2|rGojGo z&td7%_3@1>uc|&$Y7hPu$Y#^!<@;`PyY0zfBWvY7N1|lJ?=9q&W#VcVmo!g5^<83` z`liV&p2e=B0joIQOD}MassGT=tfWo`~TU~FRIoZQjwc*>Bi4rHG z_&1bl_v}6vp72F~?LVWZ`%IFz`LlhmnZ*5)F+{OVo#DxKEkTCXM(+7DUmW>n8Lzm} ze*d;^j{!^TKbzt}lYYJZ8fFbMi`5qghzu`Y)Y)@#^T!g_8vGKKX2v@Okok zp;yI3JLXADb)jpuI*(g!ytm;k@6FpyAA>e;k+IIUx$3_|Hod0YO`SdYz`4Mxi&vSL z85tOnLkO5yfFZ=l;Qua}!9z~JK-n}Tymjt8opoW2uW$OK*o)ce6-fSl=P>zz_D{n< zrk^X9?i4+<`R>=`t-*hKGVDJ-=l9W+y_~CQvmy4--8qTPhZp9aV(7@8G0%ddfnn*v z{f_cx=X<7$FMc{#Q!g&4bl1Xbn@hcGo{Fqow=1Baa?gjoOf}6_^2a7deXYFA?Na>c z`XODFek9ikBqqlhsWB({*)ypX7Xv*q6puw_4UZ)$MUjZ4zSNWaAe%d&9+Vep14M bhrPp+ugHFkPT`s`?_XCL^QXeED<%K{DRw|G diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int-v1_ca_bc.der deleted file mode 100644 index e7ebfd0cc2477dde7941dd7c4d1ec7ff144f9088..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmXqLVh%HCVzOJn%*4pZ#KP!NvCe>(jZ>@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z6C)$Td%p?wlS9tc zF6!{w8yRU=d1dYekr|{Gi)^z-IcIxs8up3NuQ-$DChhU;8C$jck_7 zUDFF}5kC43(>s(iBsr~bg-d97Y)-h}SMge~uIY?8x5L|$TQZBzYz@C2$M-9<>iD%U zvuc@`85tOnLkO5;fFZ=lP`sz0?L$`HEZe?~NjD35HcWE3bW3Z0M7=`P8Xozkr^lGB zQtK2LZh1)jS*<9?YSme zeOw^$ghJY052wi-?dluqmp^&_;=SmapFiiPuPi=lepC8f%UaDRQ~n%k`5)-B~r$^D;tEXIB15B6be7GV90E`|}LjV8( diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int-v2_ca.der deleted file mode 100644 index 5324ace881b41ac1660a08c71db2d7c30be86109..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852 zcmXqLVh%89VzOAk%*4pZ#KPpZ!pwk|jZ>@5qwPB{BO@y-gF(6>w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z#9Eim&0ZM#I&|rTdJx$Ih|bpm+N3qx0HLy2bZ7cv23$y*_%t0a%z3gGB2|>)kG}FTkBLc$46rhw}Q2d?zPTOQ<^ne4JDFONApJA>uH>y_z&VZBqjZ#3RLe5RhUZ~Eka9kHwIMfY7u z|F?I-QRP-8ulm#LR{1_NTf6m+#q0Bo{^>Q-bhUd5Px>^q>B%v!+4=C6_Dem%qjO}Q zGKXKhwUwQFyW4H2<8%J=Oyym;{K8q!U*EY`dJ^ml9h-^J&4#}>P+*fc}^ zz1k7xim9KXit1MRAH7@q?{#0R!jX$V)~;E`GvizI$2EIG`}X=Sp1tt&d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH*0AF)}jjzuJ4OuVK2x zAFeYUhPA)fzd5oue&$jUD}hdTf!)O$!=1m1t+_Oz$l5w_+TNpV=e}ilNgSJ&^;huR z8@``XTCV@1Tpk%uuG%N6bSQJaB9p>)&sQ^@7i(xsJXTICB?$a9*7%j@j6-!=K%3zvUy?VCbsx9&N}pZ3qH?(iw`uGqPsz6-3> zW@2V!U_=ffV3Glb5FH@op0x+v|0qnl(dwjZ_xYmE^i0z%PcOfYm%ddz z>37S74k!Fu)FR?K>|cBP%O|LAoKg0Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SRtDxKMt%l^CPpr%CPqev)$8IIxHH7|X}QO# zPIr%fQ}wlId5+PNKlf)}U&9N=04); z`hPD>v$}Aizn_E1+O?H@*FH)w3Oy-beO=~&=xp|{EJ{mft!Z5F>i5@QckarbZOVN+ zZ+)-F$vGim9l=_UzO1QDzx-v(`JA8yyMBEP2)SOYDEQb(IqP) z%-ZP^#NH&JefE~is=k+9eV;a`S)RKnJNNsO*M)}RrBz;vhMdRpT@2^1&=v4-oa4*H z%*eoq974dv0t_KWh9aM2?vBhYb3R$V=vXQ@Yo$xNU!ca8!whzrCF?fv#eA~6ejviI z&xX&=@Yns>Zi^NsO5SSs$QR$>wOgu8t>Mnms;T*ZsvhT_7E;)0Dt9}|u2YUrL(1W? z$p4I1{>mM(Kivf%JnX+!_Czg-$9B)evlf>3zh7I@>cAXwM_}64s|8vQUn`$@d_i-c z-AnD@nZIOIBBtp)Sk0q)T0z5M1N(&;LfpMdQO|!1rRR3d3^tx^|8VCs0F=@e^tPj)54si^nD&PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`O zLQ;!MGV{_66%6D+qRc$vWrp#Yc_q4K#_`FC@wu7B#X#x!q+|m*ab80c17jl-BLh=Q zLyIVJUL$0#K?T*_q-LN3ag%JBQG9BuE-sffF)ASk5F;xCa}y&!gFzD`7gG}>Bg2+k zjdqGFMEAyD_!gskj!(g&vupQmm(0UWcFs#}>u!cuY41MrcDdbaee+{}H9H=aPP||q zyP;#}#)_3LTK?VtJKXo46}$h$sy#Z&Q@}6qWkp-k!3s4^({lgaX9|>r(jQ1w|B`-_ z>3`eqZ}e)_mV+nBbOuz9$qBKOd<<9DCzxsVpP zO76rv-V2I9ItaGu# zo<`TX8^q!owbB>#S)k^cm{3CL5@)xcjeLOwj#fqxbv#*1?9R0qAKz*6EhUDUN4ifxPNUNMl5NSp<6K(bPbll9uec|Az<1i2WeexT@R#WPwv4=z zxJOuq!_s2Wfs?P9UT@s0`RI3LT3UH1+pBfQwBF9x`s(=Ca`*3Y(gDvue{H^T^k4FE z@$f5OKR$U-xbuq)Uyhu+QCOVE^y5r7cYNmHHDMG?h`yQBFE@RQVsk&0^lV)>P# zF-+BFZjvh=uUY9J@J2K3$-GYm&!f4%&J9@W)UtSa_pAKb8#YD%TXQrd>qlwD#Tke8 k&)&)}Q1qsn_Zs`czl!d23)*v3&AYEVe_bnetTvSk0P>+z*#H0l diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int_bc-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int_bc-v1_ca.der deleted file mode 100644 index 290fd370f0b737867f34ffc6beb10630785077ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmXqLVh%HCVzOJn%*4pZ#KII^muSGt#;Mij(e|B}k&%^^!63_!+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4J8c3K%&e%{AGsmnRzAgNy)lER&t_&oH(zciGi_^iIIV+xq)SrIIj^h z*PwvvZjm#Pfw)Dq%qTuJ732;S7d0^|AqNN}D+6;ABR_*d6C)Q>6C)$Tsc+AIK7CmA zuVLNs$HyA`w@;nq&m;C;o@Jrbq^FDTMm;NWsA2r3Iis#;alUJb-1;(2{kc{J%MSd$ z`OQE3&;yP>f6b`g&xXNW9Ol1Y>(wthS5#!nmRiuZq^an{aRKeAqVw13=bIb+e6JC3 zFgRyTh>FOq^<~*pKPxc(w~_(`7bDH@pk``x#Zk5b@5k=iK={h-{xF1aDKPw zrVQKiwRZhyURqUkoVTx@eCBuO!P8b(KKe!UT$;7#c*}{Ws|#FioXla`EUe&aUi`3U zn@n6lS94$ZyEWTuE7%k+{$+BE>v6ieS4+GlcD3_VccZE5 zxzbF`j0}v(Ap}e^zz||&$l29z$2FJzN4KT-FGY_GJ%@E3(e@=0R!Q^zyGr=?tP)rh zvX*n2?2Y!@ld||&UruCvw0pt2u(g}tZ~E8gcxKs`?v;$cG!M+Wsy)SiP2Ek|v&sTX zB}}u{IQeJn{>)K)rY19tJvP5GGU2dHRb$!fLpLTz=<8$`p8aq}VcnN@YjyFXs+pho z**+CdJG0P1^HNLd@0U)0FDlH~V*GA;V5q8r-N{17U!5*pljcGj#&z+?|SKJag eDB5i3y|7mAh*iMOMSadU|8^GMUCnw-qYnV<2Sq*r diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int_bc-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int_bc-v1_ca_bc.der deleted file mode 100644 index cd7cc775e2f88dd69b94f64495d79909e30172ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 864 zcmXqLVvaFrVscr)%*4pZ#KJIF`;`GN8>d#AN85K^Mn+av27_EfZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHh&hJlBf|-uvuo{4 zzO)6eJ!7ZM3KF3Y-pNX$N$nrB3aCB}DzZ@;4>HI***W=Ptg-vI4~Innd}&%E*Ivzu_Fd$LFf!>b$HF0EBHt|)2A>pQn* z$(yQ*ps4v5)ecW$ovV28gWwLWhy~kiFSs7bpMQC!cVWKLL-{!QG&2Rgd&R9^1BLyn zwXB3*h2FcfY|qBh=vRl5m&^2soPXeZXJ5r^g)1jTqg=P;9!V(`&r`lRKP{BYznV1Q4dmTY^{($(N~g>l`MJ>Iq10WlR9y-EbV51zMh-TH;OD>!+o zSG(2UhnZ>z?j2G(wLtrfQ2wnCZfz1rxso|I)EEk-)TG+lN%yjxxIcXbch7dNcOn56 zaufX0znHLFS64ek{{F9@Z@8Y>y);STyAN-v(N~6O&3SA0%;~n{&5(XR<3ean{=2*C zTWnpkzWP2~#?Z`@~#PA@@3Q8$cNS8KEY}HQ7WHfi!MhP f94NYGvR`>yhW>kt+)Kh1sbS56E7!d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH*0AF)}i2>A#%#Gu=GJ z;OT|wQ*95ui);F2-z9phiQ&@Y`U!>KMRwbqzpyOp>im~M`9}?}p0Mya^YuFGi=&w_ z-7^>>Ziq5}xmeq!#`N)kv-KRo|0>MiHouL|;(V{z@k`A-zx9TM`=^G~nM)=r_^sY> zUjF-fmmTapJO#N6{~UEOU2u1&s)UJrjI>r#2V-u33hxX~k^Sp9pWZpTI*~!BEa}g& zri&KeUBLgFH2mzA}FoYNxI`6W*v`LhcnOvKd&3C-h_NDex-vcXnQn`+bb8^o~;4VD5 zC8oJ+v4CHEzvXfE7oXE^bY6QA^5Fa7(5v?sS|qGlG4oI0x-CiV#RrVV%AT}cSg^WV zFEc>He%_xKOs~#Ip544g__~yfb@T4$)p~Oa*>hLSp4C>h&zC>@=EMgp7rc@@>a}=c zk^J0cl{fs>Om z+P`_%zR(Z)|2KWt+8=u`fx+S3FD_4}{s;TF{3`9gue)(^=B(g3!8h(szg6{Ru3|_a f-wz(y>%N`cW^TtnuRT58SXxs-cXrAJi#HJfTsKO& diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int_bc-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int_bc-v2_ca_bc.der deleted file mode 100644 index 79d7a787732fdcd34e8bc8049e4a0ba865842653..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmXqLVvaUwVsc)<%*4pZ#H)FR?K>|cBP%O|L9QXU0Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%Sx-~)y;1? z&h%g3NV)On*OkF%7W!?hlKI{ElF=eek#QF9)OPE|3{&`g3v@0>!4XDLX^%Eo75aUlQMNy;VVUirz&Qul3xA zIPVsxpFN-BuO$^FnH9{w{At?!r8k#1#0M>6Dmowf^l-v6ne#$FTTGq4&s{TXx5k;y z&Q({$S)SZ~{hMp1QHAy7+PxD(pJi$bUH$#@gL23Hd4(T8t zyo&Wq%!~|-$RPwwIKU8MWQeri+-0P;pD*=u%-Zw8y@>`36y``fo>BeW#>+TKYG=7W zkJCNfo)xhxrYuxHx?gbH=YQ`VavP$fRF^z`EwOaR-RFw4Y}cFaz3Nu`wX9~p_T>O8 zwnXMWA=AggR>H}3PxLli_E>$O`mw|Ou;r&$)S9O?SI(B)DWpH&e7oK)(N&Kxc1y0g zSg>WEi=0A0h(g?=PSRSS6_es eg4&#qb9*8SR5PZT{qDNE<%bdHfqaFa`b_}j^hDwS diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int_bc-v3_ca.der deleted file mode 100644 index d67f6b83b11aa2e778b41cdae19b4be1a549d35c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmXqLVh%HCVzOJn%*4pZ#KL4S=ZOI?8>d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHcMv3zp zA#)81sO}ay0~v^0M9YlgQ&V-(UDU*=gd8A@tPIRejQk7+O^jSjO^l2TN3WS?^=fOs zE;Qvk7Rz$?bf!?&zISuhi64%8r)Q!f@ojpn-@?^fBPH7!Ekb@TJILVflQ7Hlm3!Kq z561+jZ_ckP6FRTfw=ID`Md0d{z?J5z<>GF~bBbrGOu6~ye)I|HH@@qPuXzdWa=#!W zGB5L&Z0e%RQ@nN7*d=RgTw3I@-IaB#NYvB>*FS!pkuKjha(%e`LGjPw^>cS0t@e>U z9^E^|xF~nV%IIST)BW$yZDJA4elkV!<#S^L`$U5SYgo_rbId*5C(`rgQasBe2lHjK z3m=)=%jG?spRAn7%y3)s+_&vw&ksq3My?aET>s@ku~Wyj_4hNbt6%Wnd{Su3BbDP+2wzGvXu+-3F# zi78s2yZzXOEPvGVKiR)ie2TEz(eBO_%R1_LzpnaYWbE>m-LLU?Tk>uXfqbp&e>7zc z4V-PVb%gEx_nf~=Toj{J0CW$yXdIawf&y&dfsnRE(gA8L~T1@ z+ZNJ%<>5rn_ZGA6E|E;1U8=A}NG4A8*F|jw>;EEU%NlPOeVNmvvOIC)?BG{P7uRmO elk@lC@`HBAj%!GmhE=|qk#FBEp>*oI*AxJ-{6ua5 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v1_int_bc-v3_ca_missing_bc.der deleted file mode 100644 index 3f607b89b13069232937c9d0a94341c47ce4db9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 879 zcmXqLV$L>bVhUcs%*4pZ#LUi9Xu!+HsnzDu_MMlJk(HIfpwy7tfRl|ml!Z;0DKywn z*gz1(;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`O zLQ;!MGV{_6l?@a@qRc!}Wrp#Yc_r~l$+~66@yUttxtYbqKovj%137VCLlXmIBNHP7 zQ%fVGC~;mRWUfIq)t#kjpbl}CLYYx~YN{?C$2Bo3AqNv9D+6;ABR_*d6C)Q>6C)$T z1!L`oLvMma9eTJf?E37IozDD4xhI|Vzy|M|nwQ>pORH+AY2H55R^pZN$NyPbuF}zo z_wU_Y!lWX*%xqS!$%ngg)h03t{tgdvTR5jlwXO*ED>+=JC6HkC`M_Oay-Q{6Z?+m= zKD|j`op6}>e9P}QO@bDrPyG8+&t=l@nAA;gUt~+omJr%_*Z$Vh7e7n`{Vra(*qyua zv9g6+bzx(Ypn_FOW0^aP`iaFtUu8d^y7J;^=%Z!&7t5DNb1dERL%8+9iU_&XWr|8K zCtaBBy-2Qg+a#{v>z1a1N%6-Ag}Cb!|*|SIF!x{Q88>v3I{V zr9{N_uwB2_7R$uU$iRpkLcoLs3?W8_*!c%+{-z(TetX+Bzu}L@+b_n2dxSQ>4DfB4 zGJ{uF^pslkt10o{EtnadeMApWNGM&VEK(fy#qrMhM`?8er=OLd{CL!3bHHRRGet4^ z*IqeciLx38!uzM_Jh-Ymx8P?P@9X>S6V_Fodlk3j==a|5U9X=y+ndff8{Bh9xJ2uT zHt*K$m)44W6#dY6Q;#Kfeet=S(=-gqx>l$0J(&AEd*kuHGpc+xe6{(@%1Y6sOEP_}$vxj|7~YVPmmKJiDD?{;3jxlfJfva{R`$=jd)KPwQ^G-$K<63&kP(&6hO3PdH;8)hh!4V{BCt diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int-v1_ca.der deleted file mode 100644 index 17420218c47043b1b6308b4316fbff6b5e638574..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852 zcmXqLVh%89VzOAk%*4pZ#KQP&B9{R#8>d#AN85K^Mn+av27`1%ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHxxAx28lBB@RS+FXXcgYmKnw;CmP6!^BS5M7#o=w8JLvd7kS*K?&S5R(PI`fZ`F4NN;fq&lfJ#6v3a27SoAl>rv6EtVKJqj>@t}Bu#oLG^hCV5V@wlH@aW2wyicQFcS+4x?6SPG=T^<$ zduC^>t){F9a~67#>Al`HY2h~+@guV7JZH5Zh6D)8zx@A#Kk856KDV^es`wj+R~vq7 zNH&aq>M42V-C+g&IZ7yoZl`r=!1*RZgsPx*afUjOC=eLMaxo3N*P c&5COq6&0^6`k0e(-FPn73vHi(dv&ho0c=T1OaK4? diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int-v1_ca_bc.der deleted file mode 100644 index c16dbe23628f2cd57f2f88f6751e9ef4c641fed8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 857 zcmXqLVh%NEVzOPp%*4pZ#9U$=YQW3JsnzDu_MMlJk(HIfAj^>3fRl|ml!Z;0DKywn z*gz1(;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`O zLQ;!MGV{_6B@DzsqRc$}Wk&Itc_q4KhVjXX@kz-Ba^k#(CI-evCPoIP<|YPF;=D%4 zT!R9tyG71G2I3Y`pj%Q?b5t@9@9tSxhEa=4w-!gHdcp3U6F z?D*T1qq)a>y7yU&Z&hrytWoRv5fI%HG2{3J4ZT%1+oy+URT(z2J$KN4dRZjaE7*V4 zqe~|;^=)PE&C(J!&DuEqwWe&3z?bCzhp!(!VbQH$`ey3w6%8vo_fC4P`blunHvKhA zy-Ro(p1S-=^YOQN3@RES4xi#rcQ5DQ_7UcN5tt}@NS#QrL4E(+KPIZBH6GoG`@4kSe`z;zXxNo^a^hRb35U%-{5T`-8t#}Url->ydHpaG zGa~~datHyF3^0Tk8GOWZ%7fZ}Kat*$xQOdZlc1RG|9X~LBC7>{Z4N7X@cd0^y?98B zTdcdL-`V8Ug7dTQAK}=#S(c~&aq#vzW^(nWM}M#O`tj_d=lPhvQ}eq&7)D*JSm}NB z;USw0_0F&grl{K+7;IIY4z2lmxAXMm2p;PXhnnsC=GSRV$a86*S`{pC^pxCdhP)eF zqZa!1d{CU*>bLq`cCw4C^V45@PHhrpomO|#E5uo-Fp%4}a`H5FnLpxOX{E9=U6nsM z#ZC+??B3pXd#AN85K^Mn+av27`1%ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHxxAx28lBB@RS+FXXcgY0;%Lg137VCLlXmIBNHP7QwsyLC~;mRWUfIj z)g2;jAPI4Z5YPpwsUUYCoYTapgd7x%tPIRejQk7+O^jSjO^l2Tm-59VWwPu`*@KTf zUbba*W4sn?Pt2hR@!vNO-CX6Aek`7qvGKacj-U;4rF)`&e3;&(V;1>j7rUIsTK%-N zhC|c-hDxmbr>#@`;%DqdId0R2oBHgp7$g%Uv_NEO>*WapNB{o5`boj(%S6Pn$|yF{nozosckY-$^I9vXRjxGyYhQc~k%C&edFy?!t7NlSxJE`x@)4KQ%3$ zov~X=cTaXLpQY`6NB+j)a+!b*Ki$$re4k&R3o5_1c2;5NryM)yMukF#!>68~y82@u zYofHk?EBVy#uMHsylOQ|UU+WiD;b%6R-6<-uQ&Mqs{jB1 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int-v2_ca_bc.der deleted file mode 100644 index a39ef88879b2abd01e38d289f37983a30f97ef5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmXqLVh%HCVzOJn%*4pZ#KI&Kt!co^#;Mij(e|B}k&%^^!63_!+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4J8c3K%&e%{AEV*nRz9;Kq@&gJ}KEiPMp`!#K73d#K^$Z!q_lMoYx4M zYfwOSx5ydDK-?kbV{=VOyE4j#i3U`B!snb>03(?$PSR-?x{|_`~_=dvH|s%E`jjz90FVZ~pRDO`e)?Hez)!WANp~ z1s6Np9hBePdckdVJHx(0T;}2PEbC{IQtiy-x=N)%n4Zk zNd$xXh=(!Iz z&pvOD>$-e4a|YADFw@T&Z8MpjOuC~_pTB>$%(afkX@X7Nn~!f>ow*yf?aANE%lGMl zrXmwFBLgFH2mzA}FoYNxWRf=D3b^-wbJ``@CpR|=)bA>G_;N<@^6ZXKJKOHX_tX29 z{0b7tk9(ugovK?Z)U7QmoAO;xbAmzio@okacAi*uO~Ur%uXLw3wFv#;V{G{m;{c fU#vNMr_sGP^lZGCdfcP+SDii_H}Oc?@-74bJfT&w diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int-v3_ca.der deleted file mode 100644 index 8ac6779dddb0e39c45c1ba4ff271200178f6f640..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852 zcmXqLVh%89VzOAk%*4pZ#KLgntG59!8>d#AN85K^Mn+av27`1%ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHxxAx28lBB@RS+FXXcgYmKnzs_mwNK#={>%xSJtJT=v?dFe)x4V(=Y#~Qjbo(yYtO9eJx!v^II=x$T`LD%T6oY z*PA`f>|NcLClkch^*&Z?@|u`C<8$X??YWcV{nhP-zC_)w(OUFIVFKrj|MCK<0W;3( zl!|LeUr=dfFg-Tmx7Xp4Ezc9a+Du=gS$u7O(U-e_tk?YTlc_c@sp@)SzL<}fJ3Ic4 z_nQ-JCUp|85^aCZJ$>`)?Bvrre>~@^t^IRD^3_c9C;F0I3O!eCt{j{Zu&r^EE?-+%I8A(>ul_c+RW-pEg%0p;Q=iYo z%*eoq974dv0t_KWhME~UKF4z(=qR6aQlGI)yEf>F_nnp>domsMKdjbf|D9`UD)a1q z*9Y+v6B#DS1X%9iNZvJh`=6)TPO(`=xndIg+}f^Bynku`752jTofBOyiuV}FPhIcB z!|l2MdC8Y$>W0Ej(|iICZ}EItvuLY_rBwElu)x`QtBS2_H+7!=xI%u9X?I=mc|n^f zjg=)@(bw3y-^sG_39_ELH;u)>RV?Gd&Nr4(?pwCsU&kZKdpKsMV&B23H)njE-L*Wm z)RDK&K>Ahum80FqiukyMKdzT^k3QVy%a_@2ayn>gqiWAO!Be;XFb9UV+*hGQo aJ19ayN;KoB<-Mnz6MRIE3a}P-s{#NG@jMCu diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int-v3_ca_missing_bc.der deleted file mode 100644 index 2098742d560dd551f6f39803319cc6713698702c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 874 zcmXqLVooz?V)9$S%*4pZ#KN#C+1h}YjZ>@5qwPB{BO@y-gF%rYw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Zz=Ipqo-tb#b|@iBSnTfEZaBn41{+84Q{jxtN+585vfl zS*ZNt`PcmKaS5FIm5?&&{~9cKYfLhxb!+(l^WYET}xS;D7eDLzYYT?w-7ENfvhk zTUAb8=1YT{Ow5c7jL0DbOhUjAVq_51_}1~^#rdgAmM>W5b42r#XZdk)-4(6u-_yi1 zk7~KKq}uh?AGW$A87H#5PJOeOZ{XYIwHoht9$Auf`}fXZ%Tu3zZ{PP|+YVEE=A*M7 zC@xcDoT5~qnj+K0_55Ue>2ANcvZy&cKWn2}AH{Z_(hi=}n7ixQ+ka+vFK<@1{&-WC zXRX2G$oFm!)4A1VZhfzPuQQ;7>s8l@r!{J=k@tnGF1-o5qqgPIomct?#lrXvNu`ubI66@9Dg=`N`+brdxXoYk5tXSG-_NN%5r{ liqE!xZ8qQ9k#=^<@!pGd3Eof5vacD)FR?K>|cBP%O|L6#x60Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S~UOpFXn%?&N0#CeU7 zxdsJPcZ-~X48$#>K)0l(>Y}@-iBSnTKp0sWn41{+84Q{jxtN+585xe%ytx&a^25_9 z=i@oU z0lUtlpH1_&9@;6mV}ZK9d)moma!F;eALKXO>Nm-SeKN-b^67xUinqgj^bi5dC#xT z*}hOad;00v`pyUYE@@b{;B@}FN!M1##Q*L6&A8Q}H06c6p5V0)R@L@9H=N9^ zbY)^@WMD)NAz+dLh7cn|RXj`i-(@L!wHCimwM%?9ek&zk{Ym_9=@YH+Ej9NNM4L?( zuUL1g&Ajsq>xUE9H@{u2yfk+qBX8}&@COQvJ8nI@tkk%RO+;62k;%WDx4-5nE}uHd zD%ihfnTGl4^CFd}=iIxpOT$sb!X@N-hJ{L&T6xL*tETR^->0$9I@TL`Y`*!@-AadL zSAHtIkosz0+ZJV^r{WDajJh2zF+@skmd#FJTX1uMrOD-NHme72uPSD5FQ1w9qcHSv z=cfhPK@Zzf*o52u_g^lYIQj9pne4Bt*^jsU+m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4W$hvL88n&LS;trnRzAgNy)lphVjXXK!$;wIIp3Jfw7T^k%6hXiAj_= zuMslWpqT2;Q8bW;I7b5LoYYiZERJeoR6-6GMpg#qCPsb+gC<5UrY1&4hSwSIO&M*T z#5=QQ*e_cbT({wH&Yj)q0SZy4ew{6eN;fo}5cs3$(biKBJi1KE)J_~&)xZA2#;?0) z`fgG_(_C>%=Emt}Cf{c9%IS|yk2COy+I&8K<6MZ;r)HrU%X_Cx-F_=J^S|1LuwSd2 zV>=_B*u3{xGC_ppQroHDuTO?b+Z;-%ulV!)M_Ood@X}9{|E~{?zAEX&w{o(N`Ng)7 z@@pRyFRMOxej6#kd#+%onX;*bp7W8}TxYVCqbzE!GoE&R5vjC&9q$hAOTwjAHIu5d zOr#Zz?{4}KY?xoKU4M7+vxf+WCN_HSE; zUHWY%W<~}^g^)qfc(~-i-cA&iZ%+@Px!ADqj%$7^->15i}wy2kTUC_s%y~c^BXr;&^P|mJOWu zzm&U9S}L!{>3{Y&d)nP&7I#Wke%rrlfpOrovZr(YKUa0$A78L(V#eXKx>sa5I(-=? zZ7cc1zlEc#F_V4q-IX)>q=G_HEdu6y+Z!o$*A+ArtIgV<=yYSfzu>wc^*rs4z07A9 fs!8RFtavadH}THR@EaX(Cxlp6#uxC|ow^4Au`oxm diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int_bc-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int_bc-v2_ca.der deleted file mode 100644 index 06918f9d4c42d2a67721e9d77df24b98ac6f984f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmXqLVh%HCVzOJn%*4pZ#KLfXW}X2r8>d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHh8a^k#(CI-evCPoIP7KR2<;=D%4 zT!R9tyG71G2I3Y`pbJt{LGD0tQ4^yQa)2*0AF)}h7{FfDdbI!j! z)j2m6|E3zIG#|>^mM(RpU6J)&y#3iY*O^Y&_Aisa$Z2-ggE@YRs_UE`whH^6{p1SK zxpd~^?Nmo4tD+voD5p-N>qoYT{4nmwk9XIIZA#d2P~wu8@OCjyVY``5of-)&|F`V2 zQON%PYZ7~z_tlg4(n@wGhH#5bdwWmQb>X$k?>IMj-2Zr0aQ*FSojliL507sOe%cb# z7Jh(NtM)|H`}<JYjpc?TzbW&6SJUR=Mc!T~?5}yWq<5 zOz}q%uS$-kyB&PI5Mw8F$3O`s_hC7_{Zr185ON(Zu?(S#w)mV3Iy~?kZ z6LMOY{jS+DVG{c*3xgu@(AydNC!U&q>ApqN-JHn_S#52$Tv#Yv^(a$8=*_)p`%~(F zvVM})nWf{^-cXtJ`MY=T#glt#W<1CVp4ql@O~8TRH$F2x?Y-qDt$tX%t!?Rqrt-KA zl3WSVh972XAH1qwyCq`Lz6Ux&8N2jiC%bg*ZQb*>-#%q+N?qOFoD*~Ris#Ak7X385 zlf288u)FR?K>|cBP%O|L9QXU0Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S}D=$U~eX0dz!aD#$75j%s35LJk&2RtDxKMt%l^CPpr%CPqev6ZLH>@|;dy z%RarnmZS1!soaN?d$!%OVP;+V|5jA4X_&1spUEEXvy&Hx#VqmL|N6wT&fVp5+pab= z`xS3$JFtm+?o2}`*IK!9F@n1D3V!=N7GcDBApXSyH68?UZ-j z?z>d@OT~^G#hew&Rf?Is$wY0Tij~dopILXCA0K#XBXgz8cS=6{q34O)!exKVGx}X^ zz44;@1Y6^|n!cqzyMp|d&GOh<8~=o1@w4Qd$fHNApY<tU>ZcvdU31n>a{AKEkNsAwm}MumDcwrqFF9W>@a&$Ta9Oq4inAsQrf*vJ zRFa9AkpVs707Hn8VG(QHwg3UPn7?|(iz*orgSnMTI=*(@OQQ5Yb{^R_*vF>d8?nTFzWu0UG}0?KYPjc z`2iQXE=<%cXqZ{NeA~mj^Sh*H^v=KkoAJe|{<}%1_T0HF)Z*`*c+!;R-e&J>Dt-dR zH=4Ge5SsM#amulkY3EhRP&Ki<@%k9}W9*EAd7AyI%PLd^5YMFKI!}~W|KRnvnyY~9A bFuw-NBW~{=GufsVmP}o|EjwiEgyS^;0Q^gg diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v2_int_bc-v3_ca.der deleted file mode 100644 index 0cf35541cfe38f11d8f2703a5507b7721ceb0838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmXqLVh%HCVzOJn%*4pZ#KL3{y25~$jZ>@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZLi2^!S7#?FUcUP6b<^OF3%Lg|A=LguIC=HILLTgY*uIw|7Ow~66}3|q9lB5T?=@0@b+j=1eq zChs2cLt?SvFPE;rvZeCrnWSHgllZ&KZ01KOy}$cmN3@*6-0h0_cgcuppoASS^6;Axibm98cvvbQDefnQkFI8F;eL3U&?;ko{QJW9n@8ggPgvdCaI$9EncBB|5At5z5n=F)``xOAA={67zOv_D!|~v) zpq-I;bm!!|Z0u8c+L=s0S=#z)&HEXDyVtbH)=x`8`wr{-=Fcp@B2<*reLFtoP29!) zF~3ENw|T+k728+3Eqs%avD2;Lw8^4FQoY_2oW<2PUoGp-yL`!mZ*pF;wN9d9zSRWY za~>Bo-REf5+d#AN85K^Mn+av27^*VZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&ixI1c@^9NR=7IXXcf}Cnf8a8OJ9l#^+`h7XwuQ1q|fGc@0erjEzi; z3`{MJ4Wh((jgYwp)l_$urhz)dSqeaBrKalQaa_e_S`8d^T316}746SAD3)b7I{>pDOw>we!EF^Kd zO2Q`twtK4r?IHsm|8sx6k=SP_f8xLuhZkoLi8gM2;4qhM)1md&++nU4yF~)J`F(f4 zcT~6Iyi^r3Jg<1wn;;m}c{_nW= zbXD&0W%i%jEcuz385tOnLkO6VfFZ=lpky6nEWy4l%KbP0iPsvedu!jkcvrkN;jQY# zl6B?mIq&N^*Y&Kc&EZs^!GG`vf7_xLG0(X)!gl>QyYQ#~n;E|i`HZvvNcZ|*k0L_u+?)2q z-FfnN!7IOATR&O43G8<-|9ay6nFVgiiPsNHa7?;oQS`OpY0cB?6HL_D!?+xo&-$+0 n^>3$dvwvuJZs>P|t;JETCqDO_i}tjZ>@5qwPB{BO@y-gF(6>w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z09GxJJx%M9a_6Ak3Vc@0erjEzi;3{1_9%%a43jgYwp zxm0(Ew1FhVAwp$F@u{i0D9&kOR6-64Mpg#qCPsb+gC<5UrY1&4hTVbfQ32g;%hlc7 z-E+^q=U;a1Z9RKWY;w)5P2YY!u24^}`6TrI)7O;g=REdpn0_ILnN2phPW3P6o0pG` zHFoYi_u1Y$=A|J*+j9f9T4bI4bKR-8n`0`AZcW3>${n6X7Vn7C~G%y7klZ%Kd0pO#GH;Za{ri;Y}9`CqZVH| z6EhkD7I^r%>RIdG372b#J$**oudr zjO>}I{nkrm(Bb3=ADx2p*78+2V-wA=+v0!m^6J? z@?|lZQ1IbGtHZZy8T08%avUGo63v8)moHFRTXSkb##vupy)|~PGxyAso-I+h`+~q{ z#}9hZmQr)>%v~7Oe=)S?{MzYf9{fGqvnN$3#iVssnfzvc(Rl$EJwhB6el2W%tUn<` c@u+Uglj1-@hg}D5`X5@YbAR?$nT93r0O^fLkpKVy diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int-v1_ca_bc.der deleted file mode 100644 index 34c3d10202ba01486a6f7765b1c1f2bd23d486cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmXqLVh%HCVzOJn%*4pZ#KIUI{M&$+jZ>@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZYlpxu-Ywo7HpY%@%&PdaA>pier1j6lSMY%R79}TJ`FG^`@(RZ*yh~tGV2D zzwVL1a>smbC#J0XEuM?OuzvV@~<5HR6TRV~I zO=V@ub*04n!5q#@PgVZgozA-F(5z#!x_{5#Ubo5h|BApHzdp`f79gr@HNkPZwmJLk zZl0GDh;fDX`oncA!U)lTp?_~dt&6QH~hTQ^{7jcVu>pc0{?&nPCk88-zyZ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int-v2_ca.der deleted file mode 100644 index 00174ba0bbd4b7036062cd23ef6eddbaf6d8e4d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852 zcmXqLVh%89VzOAk%*4pZ#KM@nN8NyzjZ>@5qwPB{BO@y-gF(6>w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z09GxJJx%Z%ca6Ak3Vc@0erjEzi;3`{KyEuzGEjgYwp zxm0(Ew1FhVAwobGq^9bkIH!qG2{|YjSs9p{82K3tni#p5niv@w9`kAko;uj}b9t<{ zrP^u-)+N|5F=Ews^l@*3T;d41xuXLGrp?P}4hJ-t%PP)6^{(pVXz+^%26s=H> zE2bM(?G$K^IiR#vV9&n^22s7`7Y;4+nfdt4^F6WQ%qLg1GZm z!;*XwN)_5Uce7j6S+uZUSS0jrqORWUz#IJMJT4_nID6(B!?ZQtZYq~F-wDq=q%db| zoKu7Ro@B;QhuGO1C6dvmh5s}7-dHh2aJv}^`r9f05tq>{*ttAc(JSJk{oNm_%bA!N z85og62$)!aA;ieAlIh$(iM>yi)DQ9b&32A3dF*n3mwW%aMaZZ!@wzf)4y^J2z!lopDfTT66mG2l{G}Qd!FvT`AbOR7j%W{-cNc zKd&i%tV(oGgw@f%+k7F($By>SWq z9#yHVJcsMz0r~RiwF{W|MdKQGKEKU=dUt$_o>Zum{D#YSMWW9%F0p-S{%BLdw~fwE b4jd?rnjxHVMk9Tx$mH`AeQqAgl{f+b)rLKr diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int-v2_ca_bc.der deleted file mode 100644 index 7600826db8f768c6e2f9753d6db2e0d01a0d5ec8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 857 zcmXqLVh%NEVzOPp%*4pZ#LS+%+klsiQ>)FR?K>|cBP%O|L6#x60Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S~UOpFXnElfKu4se>Y}@-iBSnTKp0sWn41{+84Q{jxtN+585xc%h#%xKYz_B6 zemv!aYvqUevHiikA(Ik)zVQh;OILr+K5ltq$wZNiY~!cR8Yj(Et*`rVr70HODDsS5 za5ZPi;Yt~yCazs-n-s0jwCc)EBU?TzuET9t6>^@crE%u>`f_k9J^pXOoppbup>Bqe z=)dMocIMqrj_)^nweh1?Prs+X?%JJKKbE&zG_UeJw3Gp94Z|3|D#6c!)17}m?9jP+t3ATwgQy9MC&#gAH}zVX zm>C%ukwXZWWPl;W$e?6dJpFQ8VyTK-iw9R?<;>qEX0JRaWa`e}zGVCC2ARu~j2;K< z-NJU2$7FLMyZPEVzoPVx#e^Sv{32s%oYTu+-Jd;O!fI4Io-bL$yE;sBnFZ_J>jx(k zRNCK|eOslPHFuv%kIjnvpS4U%CoHqoyZ$bl~6*VbsXadrR4xnMm}Bu diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int-v3_ca.der deleted file mode 100644 index 22dd6e4069e159f6773b0128d00b6d63a214ef91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852 zcmXqLVh%89VzOAk%*4pZ#KOp{$!5UI#;Mij(e|B}k&%^^!64m`+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4Mh!vL88n&JY~l5nRz9;Kq@)WKu(<3(8R#l$i&FN)Y8x>N}SgSnQM?s zb%#hBNJ1PURAv;PnhJ6U!Z}ThO2|RM$jZRn#K_NJ(8S2a)WpchaNyZ5&nkr+uO-eWOw0l>9O{BX%z=_Bz35`om<;t&i;io4GqH9#!sgnsCnW*XP+X zGgGeF$fnO&+IM*GDiz@)&Gn}bo?}vXz0kK=eN)tGC-$$gUSWPQMZZto{7{*5&UF4B zP3h&XtZ5I#Oefp3A4qDO(;b^A%(Uq7+$~0Hmr9+oiw@dh&$cw_kBETX_jl5Tj!evq z42;Mj1WYWz5MpFFyX@hV`wzM;pEhi({u}&0SWGdQU%+zPWcSDlxyq$B^E0Qa+?(o*&m7I>JJ0DmwzX6ge_A46lfSCYk;#%# zyZnmjqRoZP8~86eS9BJy4Vv`mW=Es6ZC>$yC$2g+5&l0bidS){zwx`RH)$K&lZc-W zmx~9mNSICeu0J=k?`y}&wM8|FFW37ok@E_w+*lg<k)*+DkKM&6a+qEZ)o8YqKc*B>Ud@ Yj@68po+!PumQVB8$ewJ+dE`VS00~YvRR910 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int-v3_ca_missing_bc.der deleted file mode 100644 index d9ae34fb3b1fc3165e3393c493d1530cf979a9ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 874 zcmXqLVooz?V)9$S%*4pZ#KI)F`lkUe8>d#AN85K^Mn+av27@9)ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&if?1Bo*8h?g11XXcgY0;%N0_}t9mVxV+iv=i;e* zt?pdA^~>9fMq~ z)t7H{m>$acUEo;3rC0B2D=q)xdV63^ncLF|`pdlHN%e2d~)_C!@qtAK$W*yb}8N!s9!;8m2uvCuzvPuJV-<^ToOIo^JTM zQ+$q``6ThpI#$j0SsTLTQ?9LEc4STvXX|G>{rQYHbALq7+5F&M(lZ)>U9MfZoa?SR*T>{y)zYKW%$FKHyL2~Tac#ko18KVN)PmQQ mTc3PZoEH)KVgIqGK1}yrSVZ?Svf8$Xu?Ad;Z~7;BBoqL~9Zg;U diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int_missing_bc-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int_missing_bc-v1_ca.der deleted file mode 100644 index 71bc379abe4b20563d28d7336e4a62a6a477b361..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 874 zcmXqLVooz?V)9$S%*4pZ#KPoo{f_}J8>d#AN85K^Mn+av27@9)ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&if?1Bo*8h?g11XXcf}=Vlfc10~{~UOpFXn z&5ewr#CeU7xds(fcaxfd3dBvaWk&I-sk*pa*2JiU96*e$49rc8{0s(7j9g4jjEoGs zLNA8hKP;c~^+Z-sYhuHZbEOW4GL|o0yI7;EbEDC>R;77o&iC2uPLO*Wl_wpQy0k-I zZOY!bU2|u(1zr-h{dBaXGk&5@;32Jv%jS7re!+b=cXj4E&K-_70t&3YR=-Z3{$D9( z^|UMM*6uY+G;+*M3=SoJZ+58G-cu-ah9SoGg6W2{{Hn@#!gmR(KP-}CeeTG0?1wPd z@vP_S6F%lz{?C%M7tO6br~UO{lg$kle$lD+KQ{Ns=xbj1Aglbk-#xfhq-mx^uGUHi zms!mhxRjrIotl>UX;Rnja~sd7sdlh7_p%FK?^=Cz`TzHSGUodoy0(*deZU%x@E`45 zcibl#m+)^gW@2V!U_=ffU=jj`5F|W&3`~&fcLEzF=S1*UA|#y&b{9;f%6|OWI3fO;l1Odvsn-)yO;D%;ivm{el(46YtwsBXOgXI`LSy1 zr8tL{LeEvU6zGc}7tX$|7 z5q#$POP8=KjKPNbGfiz@OxxwSoUM1gbaQR%@8VB!&r1K5@m0B;UK9{~(d$q3?rtux mCV_6&Gu?qd-uh3J>502Ou`TR6i<0bQ$v3@0x94j69|r(q%~3A^ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int_missing_bc-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int_missing_bc-v1_ca_bc.der deleted file mode 100644 index 44ef963aad1da34895704a4e7cadc9fa68fde146..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 880 zcmXqLV$LyWVhUNn%*4pZ#KN%pf`tJu8>d#AN85K^Mn+av27^*VZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&ixI1c@^9NR=7KXXcf}=Vlfc10~{+B?Dj^3GBP#=Q6C*!^K@%evQxhX2 z!~NX0FHfuOIfV^oOfsLa)oY`5x@x+EhQPhNy{m;E>-*&k-Hm2^5ta8chl@`&=Co1C z!bM*nr@V8@w^<*Na7sIFVTgbHf_dqxNft8&lTD7!tY0ygqd#)dNr&*e(MgxGbeuZb zj|T`(UcumhySYZd&Pn@SUii@Jlc2i!f@5*;1R|!4cv+~ET zXPgo4Pvc$A+X--Pa=gg$(c{`Jm)}gA?LRMVzT+vSV{>^=>~xk$u7j$qIj`%@-}oye zZnw&=h`pSD%ENC}Yp~k8i^rPv^>1xa_y51>_3c~o&mw0Q)UeCsCg$d;mI$qmkmmU$ zbh#@by07fNKNB+}10!+>0TU81gcuppv`^m@J(?To#_!4TMj@!%vx;HYGA5B_(-X2^ zFh{Sbj69dW@i)`s^Yf;CoL+NgMw{z>|CIV8O}Y%*tX%qQ=VZ3b2^O5PUx%aY`)FR?K>|cBP%O|L6IT10Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%Sz1wEYGr>JP3ET*vgL+0w#os+WMZxu3HOsc(iF(TcpbCR(BSD&1njQhU+^m4N( z*t_Jc(UKqWQb#^#lyq6K@3PkHxBe?zs<8gk@l9*HA8vM;wx@FUvqg_)pA0!^`$U_c zt*B8&?B2T@-cxfd)*akdd;8+##NbzNCVBrl+L4~a*>uD0MgE^(ztZ;cPX4pLKPJ4* zoBis<33Gh1QDAi!nm#{6qC?C6F z(Ry~ZU(0qfF*7nSB8Lz#2?0Zhks-lL=kSZ@oy;qmnHxodVjtuttmDamJO z^QfhXB`e={uWNk5dDZF7OU?<^UsclXbv_7M{zT|ZzjPiK+t<6RUgvy%yhft_=YwF8 zuQJT87n-vjc$H7x7F3rBxRl6Y)7t*5uOdFDAcei_ufeoQlT{?vws@^GW0+uf%hogR zd8ploS9MJdb0-?rd|~G}!fq;dCTzCUD(__5E7McG1XDS;)e4BdoNCl4z3}>6YtBPA zPt5e-=GnX94NIS%jjr_BsD!7&^X|PiIQ~&|o#Jl2sa(fh>bVhUcs%*4pZ#H=p)&VZMVQ>)FR?K>|cBP%O|L8&3P0Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%Sdw+MP=`260qBU-R9!rdYhqMF4kkuc2IeM4eg=akMlPl%Mn;AU zO)vCL@G(Ylh)+?;dozf2Hw18>B|v~>@@#ix~;2mGF>(L{Ze(kD$a6pzn z=D`uRqZhY5JKE>`{!>eW~*@sX5!jw%^&nvtOXpTOpG9x8Jfj z;h>1sajKR-9u+Q&Hxrmylyx=!vG@GtVY3-tsPU{1o+8|kVc>6A>zO8(w)#OubCAzo zp&GZpKTKE}ivL{Q=E>MHY3;1*>2G~X{z%+ealcWv^S*s@j`EAk1+iUQHd^Fey~o)% zd+V1J)${IbOXV!u97Kc`=loG?P(N;YC)44=@w(-HqSr$W^1Hq-4|8F9-gkfPt1by~ zPTu0^gyWM|b3Ke=oVNOx_sm`IZ(ZFZA|vVPWc)E}`-Qwb}u_ kVE*uwOhJ#8hb%eYdOhKgC`+rgeQ52vS*FPMs^KMl0E{R{wg3PC diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int_missing_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int_missing_bc-v3_ca.der deleted file mode 100644 index 888311c13127b50a2cd8b2d815f6628211be25ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 874 zcmXqLVooz?V)9$S%*4pZ#KLg5F~oqEjZ>@5qwPB{BO@y-gF%rYw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZShG^l#cP;XfX0H~0SDEq6mLct+=bqgA_NKP+UI_qu$2 z(&AfEecsA{xpzmeN-A@^eon*D@c6M)_pk%?#8hiQt)&QT)X~J`yBpz;V zb@%jnvS?PT8`IV$7mEdDEfz7i?qBZVws}cL#-tn9Ys9P@lYYINQMcdOjQ2(G(d=|* zRfD2u%qOEGl!UA#JuB~@-(J@=yX;|j`OOSxE9pH4PUNLlsL6iw+cELTM*f$xcvQn@czP^5 zD5tOQx@Yx{E)%}MA8dvvKYkY6`)&TAkh#}3YpLF|7c&c2zxS&1p_PSllu-3~zTR^2 zQ;rFrE48zqE!g2de_Dm29HYk3Sef0^9mLX2JQAkNd^|}~&SK-AU+l{dtEn%)B0kkS zuyyT}!qp3XGCRCnrmo3odJ%dpYtQpeq4JVD-1j!l4LfMlU=+c(B(BNvXq#ABndTc6 m34ttL|HKNzlAY_*b8Ql(jvA-Vem6zu-~Rs7yF(IAKLr39s!d`5 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int_missing_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_ee-v3_int_missing_bc-v3_ca_missing_bc.der deleted file mode 100644 index 4d7b7c835b10c804b5ac74471a62c6e02a78db1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 897 zcmXqLVy-o4VoF`W%*4pZ#KOeOamIj`jZ>@5qwPB{BO@y-gF&q!w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZqpGKKcd}=DlO@v(8#HfTEZj7u9%uS5^3Rxv#RkjODJC{(Ep=UhL(K=M%P8eXNU#oP_tZL)=V{U=mKR_}EE^YVh!)6_{y8D|6acXnl+N~v9YWtrL1$wqI6+Bv+&b;b- z>ec-R*7j<@ICrWt@YU4p{Y@K%WD74jI12aXb>^_SsQx|h^Qa_?(BxWgHmQ?q1rttt zd&+)Ls=1J~<;by{Ow5c7jL0DbOj*DXVq`E=$zar-{wJEhU23UXkF>VjYrd=_mM9>?dS2hznj2upf03yuiTkiA$6+Fiqf~&S7zG%4S2k~V8xsrPeOSP zp6_cdol@VS>oD2OU2Dz5uH#Y`?%i(=u2bOEy(K>Nr0Sit z6=`ylB^dAIy%3wS)OJX}#Vwn#*9ay(PF>XtaTpyJrP{{otl*Fv83S4;li-f~)U oj=aP_5nX4|cb`6;o^eMhc5&e^ojJ?Rrd)8n&|bIZR{co}0GyLn_y7O^ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_int-v1_ca.der deleted file mode 100644 index d65d9c6975837a1c4a35c9b2ad63410dee025298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838 zcmXqLVsBg6Sc+ZL(6$qTS45$c|KzOZI~ zm|0Ks=S6lRoR*q``~R3a7uasT!_bi#d5?S6Y4J@@*6^P8=?>MO*QM!UR(DqLMA(HB z+25m&)`+z_O%&G7UHf>`3R8FYTR&>-BUXp5JZ*DQVZ{?(+Xr_V*bN`B^&M+3xawIs z<14{I49? z-YwkIrS-q(*PW7jznS^ho|rEFtf*ox@t}SqZ%xzMTMW#HD&viv0w14!QMvr;6W+=%Mi>2d%iYjPdZ{T=wZ5j_pMs%BFngS>qM1 V@PzC0t{9%emCF|zC@RiZ007$UKO6u6 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_int-v1_ca_bc.der deleted file mode 100644 index 730abf9fa32becc4c548b3ced790ac01919b416e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 844 zcmXqLV)ig-Vlr63%*4pZ#O$>Fi~%njr&gOs+jm|@Mpjk^gJeT)15P&PP!={}rqEzR zVFN)BheMdlIWZ?QEx#x)Gtp4YKm;VnF3jtjUz%5vn3<;#mYG^^C}JQ466X@;4hZ&D z2uUq2$;?YP6g1!mi8AwWlo`e+C&niw8_0?C8k!gw8<`jxn3@|~M2YhnA#)9~sO|^} z12Kpr_{)sqGxJJx;cjVSR6-5|Mpg#qCPsb+gC<5UrY1&4hSQw$53ja+6#VLfL5oRr zN}X}li|K*iL`5r%%iBC84jH}Ax&K&QubZP~X}OY@@7m~h8n<088JXTbRu})jU3Saz z55h$v27Erx&5ATWeroEtqIBL}Fw;}(Sh9~%Fl$INSCW(2i9HKSFR`+$wO?qs{Oi?= z=P&R6DJ0eYWoyjayL+$d)o?W1ND8O*oI59&A!pF{!0^7j#@}u~hS&cN#RZ;=PCaop zq~p)Y4|Wy~in7mK7R-6yb1P$u^{(%xMemEQ>Vz(A?vf5**}79^r+e+6mboH<*Iz6X;_HpS@0bQDdiQ!8bC{G5^1K=2dapXo1OvobL=GB6^C z5HOVhLx_=K#|%C1rgeLTGj>0_wbXzu^5L8P=g%js5qiRUsBhCwG4qsLzWX<%PrB~h zC!U+6pZ4)d(v@{tC;M2OxRnHxE2pgXQTVm=?}uHli`la3c0B($PyM)7@NMH9ugyw= ztu>o2rL1KNX8u&+by~;oe8@}T&|5ujmA_@C->q6->Y!zinN`$i*5qHGpztYB@~n+e zeb$E8{jYcYi?*3F?L%G6k784OnVw3eZbPq0ChL~`wU`w4&RNuVQ?}zYelzRh4^!^w zoEI#=+4yR~?TZ`rmUJC8S@o_;^;q!3NK^Y6s?n2ot~?~*&a3))iy*@Rxi;?^QDGZg VXNpActTbt;Ja_e7-ztY2bpRM|KZ*bV diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_int-v2_ca.der deleted file mode 100644 index 7c72e51b4e876b33287f99039cf2056148ee837a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmXqLVsd#AN85K^Mn+av27?4cZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH{>(m0f{p6u$CFcCnp-niSrto7#JIw7#Wya7??(h^BN&@4brLZ0#O5D zhzodtF38L)(Shk-F0Z}a;H=KPiqdH(|4W+N-n*>eaI-YtuUT%{)4w}Ef4poalrm?}(nt0DUz*$t zb?3kQ6Qvswe)3SSc6@NivmN2L)Exb;KkT`ew`%F3B-Y85=TpAU{PIqsCbV|FP55ID zUWGkp<`-&zo4o0Ysh;(*bd8lZIqE%%d$;VXxOdEC^HhnP?agz}$~(VU*u}@j)*znr z_Vo(oiph5zf4S`Hk+=Q6qORCOsFwHaW8adTEfclvu^6{s**9^Xm9w(a>{~D0jF47+4K@-1l3)b zP!s7YuPDHIvHj`-rIy>SLR)s4S#GTbNe2+iEzPnCIw*`t=^4K&e`}Q$EoA8C(RCM=V&6BJ59*k0tN#1^7-$V}!w%U`X zzL`A6@8oAXA9}Y=Khf*d%0C{P?)7y&Xzg9$Dwg9EX7#t6)0uyc?Tr_2Z26XNeaqcx z<+^=cC8xw|Pj%<04_Cg-EHJSO^i25gY}-(s>-jZONb&ch>r)jbFX? UimNAgO#c!Pd{v_Hme7vh0A+bR2mk;8 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_int-v2_ca_bc.der deleted file mode 100644 index 03140697ee7ce1e1d86d51bf0b009d99167e6a13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 845 zcmXqLV)is>VlrI7%*4pZ#KQ2H#o2(DjZ>@5qwPB{BO@y-gF&((w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z38}|1n<9% z8Sg%u-4Npbo$XuEdtuh%k_KJwWw#D&JuttotA3{akDE(BCbfp%NvJkXzqjk)i=x_f zY^M8r4o-~ZxaoCyd5=T=+D4z99M3;AZFwVG@+L5+T|ISm&xzftH7|V{!r30K`M<|- zS&D*_PRaG?r;N6(Lj2Z0S`4<_-WF9V_y75${O1NIJ6&tuo6NW#Z+9>==J#}Y*4Q_h zQ|9{x70vXLm^iV@?)c<8Y1)@W8aNAg)yP;c^Lo2$^5)D}xn-ImA5N|Lv`F^N#UFLa zOMVEvis=2Mu4ymaEFU;asr`Ax?K8HsvlsMS)c2ie|M${_8NSyXvkGCk-=h0QsTi6c|RTnU5(@GZ?sPObxccVd33^F(|cZ;sh@Sqp04Z?>YwtT zDR7nFFTJdl*>}{OuQo05pEmbiqX}rpTD=@HJhDv#}a<6VBW}QZzR^N*exNSQTg6_Wn|4l$#atpf1ZezIAAtc=HteX zchxsco5y&de1_d_w#)3=Pu{tiMST4yE%D4`(n5BwzZ>d#AN85K^Mn+av27?4cZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH{>(m0f{p6u$CFeCnp-niSrto7#JIw7#Wyam|8@M^BN&@4brLZ0#O5D zhzoeijN&u%N^~I(X<}4D_B|sj19KB2KZ8LNBNtN>BO}ASV3qPk3;JGUzMQk<0$Jt%zoq6U&li}Kd@t%q}f)$-0*egY{k=6j7MZVGLO5o+9v(Kz485%nUxy(-_O6< zDSmTq`MUhL^a)puZ|Ti3PE+2l^8WHA{jA*BQ&a!$zw|lkRc6h1cZ1u{71gz3(u)g% zAEx|x#MR84Hu2ntDFMH|9e854{1(?rxbiY5aZc--@{Muw`q@84Iznwt*0?kqG=JB& z+8ku3P%+zO#@q*H$y@EVRNv}7BDcO_M&g5oH$t7(2Ay5;B*S>qq+PDFY?+uD85og6 z2$(*AA;icqNBph)is#B<7PaN4e0R91>E;@FEk9Co^usoxsT;mYDVO(}O%ac3llwC1 ziIU&Cu4SRhhySFle11)0e%WrjlHCRj{J+FrXFt0#tzwnEGV7xw=Ej-td>ztaU6W4t zt<_&W^VbL6J^$XHZx?ymnx?XU?}DxRzp8Bn@@m!_ZFFLt>iXnroW~P~@O2Lg{ygQm zxqtO!pDmI#5sGmKcHUw>(te=XYlX1!(t;(d&$(7cmPj1m-hJos`r1QT=_enqX1JB$ zWNyoTCc;Q2Z3*96jkL)RCQjOwxoCe=-@&&w>S4=c|1*Ee4VyXh)FR?K>|cBP%O|LAD{c0Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S6C)$T2Jao`CpB|S z_y4Fc#WYaccYE_I`PpC3xNYQm!g=A8P~_!U{kh7S#pj~$6e)c%NHAC)`*2(2ie+z| z3iRV{Z&Eq6Zts?uL&f`ouTAIC)X(`E>hX6Q_uN0`D{`MN@7j1j@ZM)j2dPcAJ5oLy zug%`J{Pz*-RjZaRkj*Lc3zU*=`7`IYW5-tO9m&43uGvP9?6)8F5q&1rD&sV_d{x`_ zw=&5|`qIMvyVQDnUhUoYQSGfoXS=arvDx011E+q6%ytak^d|nT+=+{!78gA!x!)269*b#PtvI(mA`_jy@0PDfN9u6il^ zcw#maGa~~datHxa4KRcl8JgzmYws&x7u$8(kY|?a#Mmhxlj`?btUMB&GHZoi#j@OM z?++WAovk`&uzW|c^J){NIxz`x=4sYxmgkmc-)j0W^XtBV!yBF|wC(aRXgF}BQ$Ou+ zR)TWKG>`ZGX72x%@>26h+OMCr zH$_qV->4sTavbwpO-t28u exRX~sMIo?#yC{8>d#AN85K^Mn+av27?4cZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH{>(m0f{p6u$CFdCnp-niSrto7#JIw7#WzF8=6Il^BN&@4YH{20to{# zhzt13jN&u%O5&4}bs=tPVpKv707g~@<|amd27@L>E~X|%Muty2S!XHiRhSTUF6xG| zMCN6Wt68Uu@=iIVPiJ6tSm%49t5xrQdTBv(uf!IqI7hymjlLfzG4QWUDc)1X_L_mg zS6ocG_rq0QXEw{HtX;h3-23ux$G+Ve{!(MIc>33$sxI^H=@(s}bf5Fo`?~yxO6MMN z9C2WZ?(SYwWN*U#aDv~wN^P^#&J!+mBs{*+9c8?G>yPQTR-N!Kw@Ap**@6T!9@K!zO>UG_z4(C(?d1mIubA3vc zo2%p!psXt|;C3rM{;rw&{l>)>=V}tY#aDDH?<`(8)p%L5#@iiFPrGP~r#CI-lAjuR z;^B!L$@J=P&uUZOy*t-xlGgjQ-P;->a(vrsLrWU4+j8}$wG?& diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_int_bc-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_int_bc-v1_ca_bc.der deleted file mode 100644 index 3d8df3e5f848ac6037cf565991eba76e844acbae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866 zcmXqLVvaLtVscx+%*4pZ#KL%K)jR`UHcqWJkGAi;jEt=0;Ly@X1TJJrBMOXMd34a@ZVV#SP ze(YM7O_e!GE3!Tp-Vf?h^*UMF$2L|vaXz2uE#&sjG7nQB2Nnj z3BT#QaCY0w*TuTYG9rzOl9`sw&bqj4k>^Bpt&LxUH)qGpv3aGjk9TwBlaIY&|0Xgq zGcqtP7BJv5-~k4rtS}3!0W%}xf8;O&CLLgyF)~b14^&`YU)Y=9Z(M8qK1jH>-R$uS z$ruwY^NO-~b)AYS>s!r@&zDY+v3Zl;b#Pwt$C5Bt-OgPz_Wd|eYv;tdyKntLzIjYp z4I7;}PWpe=?~H4o^?Da0cDVcQ^T*!xO}~1$N;Vu;@wzXq zniO5Qd;3Qv1Fp)yKUZEzZdjAUUC6mwW}df;a@!vnO_^Uw=2}S#`$L;9N$vdk>G%V~ zU0nP}jjXy`S03-z-hX<@i6^>D;sxf4zdUS{VpuFsu`Pc5qt*HShV~O8Uv^lZZ0wBn rw7XNwzQDmrHT2>4t1#{@ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_int_bc-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_int_bc-v2_ca.der deleted file mode 100644 index ccbdd561fac56258bd9d1073c6c00a55d5ad4d19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 860 zcmXqLVvaCqVsco(%*4pZ#KPDl8)LxB#;Mij(e|B}k&%^^!63nq+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4fzasK%&e%tYt>=$%zJX;=G0?2F6AvMh2!91{P7`yhg}egDk4MK*B%_ z;sSo43o`Rc;**kfA#Q16R6-5_Mpg#qCPsb+gC<5UrY1&4hA)}hU2mA33_ik>Fh?*l zLRiwzTJG$<|MmGN7{3^VWM5NVQt@}=5%$>zoBFoy2?&}m?XS$cs8hkB{)HOjg7(Kh ztf$t#T*~&VaTU|njir*}24AeSuE`rdJ75&kyDqfTP=qCXwT5(lte)<|*|i`0YEI4) zeCpB8AHC_w^d$$bOZ0XvDP?c@RyUz-35#9m=XFwx{mj2?Wt999x7^b_bj!k5OBs|k zo&F@9*f#&et*j|>2c{Tr%~Q|Texu_y?b@nWs;Uh4?xpUmi9EHgGg#!~K`o2imUmYb zpU)Dr`hYn9fP)cFSak+I+Le*>y|Y;ww~4&mj2+Q z`S`i)=^y_#wEKH{d&hjfp|$dL39s<9Us*vy9iPrENLHv2U88XQPUObz`o}Bp%na%% lea_m(eydyP&a(ISOCGWPJ2%BFVPE04|J(jO>R`5w1OUJ|KP~_O diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_int_bc-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_int_bc-v2_ca_bc.der deleted file mode 100644 index 50afc86d9eb059ff892cf0e23eb1baac31e57034..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866 zcmXqLVvaLtVscx+%*4pZ#KI`-^VWcujZ>@5qwPB{BO@y-gF&((w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z*0AF)}h7k<{5F`J`jriKpx= zk6L>yekq>*$$2mC{mz~hnm4BFPd1!+Qrelty;J*~5Z6bY_14U;_v6p>Pr5F9W=F1& z#Nits<0tP{b8y+AXWVupSWe}5xu}L`mGtU$(l1Nr^q)@QH+|W2WPhIAZ`PR?f7*Y{ zFmNf{%s2bhl(_e|OSBUotQE;Kcg=0$TKP{Y)x32$IUD7Az z`A@qZA5v5l>fyff;e7YR0|%Z8GX?6o)va+`mXpdX#`VuVjdj09*y5bla54K$I$k^l z`dp8>SspF>-tMz(GT&^CdsmZM|6N=xH91%?K5N>ZKhiEH`SZ0ccXRsf`}>>wA`>$s z1LI-=13m*DU?9p0v#=U4Gcx{14l`iV0frePgTi-##{0|?mrZ%g5;{NFyjI=HrERdQ z(U9fOo!&Rz&1({KRvlc-d&8mk+x8bHy%x;uXxIJc!&Bd@?alW=(Czj0Qzm!sok@_* z6nXw^*T$rMsmoTreBrq9{;mqAgMTC)@@>BOi!4j}z9Q!3CFbO>U*4IUgmyfr>{@i2 z>HDSq_8NR@Q9mr#)W&@bDS7o*ui!eL<>@1HK7QEsJYb`Nfyznqr#bvg+<|FsJPTjA zH0t+Xb`8=v-M{H_;KEy5Hfvv=K3`;3>qHdP sR@!YdNv<&Yc(q8zyephLZ`?{2)Y`6lcEi4&xWwB5wfm<40J%#=bpQYW diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_int_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v2_int_bc-v3_ca.der deleted file mode 100644 index 5486aa519d1f066e2cd4fa4e9cc94a515b19e128..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 860 zcmXqLVvaCqVsco(%*4pZ#KN%mrLO@m8>d#AN85K^Mn+av27?4cZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH{>(m0f{p6u$CFeCnp-niSrto7#JIw7#Wya8W={2^BN&@4YH{20to{# zhzt13jN&u%O5&4}bs=tPVpKv707g~@<|amd27@L>E~X|%Mus^iscdH>{wCbdcyjk> zfjj?(FXx4){y+8jv%`^<*PS0rJXZ#lDRCuW_qT=9ci6~!3HxpR3~g^D?J#y zH>s$u_f%=u9HnE+cgeQd%PP8V*gE-V!-g%}LjKJr~Y01#nhs_Ga8y?b4nn8s(zuxouCJzg)|Vv>MyseL=6q561_-e>J5< z(Q-r5?HuiECq#Z&>`jczy}s$4%C6U|Dq8EK6&n(BPJh~T;e>nMygxG2ZXLEb#ab%& z-0|HU_B88&STEI%+m0_c6lXC%n6dxfs$&b@aVV(eZ(20vWzpKsU)6>-eV02YH+$p? z&huX6EdB3plVSOL)is*lMcD!^HD~92`&D**>GJKrqZgh0w6X5z9?{_Rr?c6D-20c$ n{Le5!cG;!{f)+u?o^8uI^iS!ayZ_HsEL;nxu5?Uko~;Z33*@5qwPB{BO@y-gF&_-w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Zx#lM~}}GmDFX;_*qz26E!Oh9(BaMkYoErj|w)QR2Kt z$XtU`syjy6KoQ~?sWPMZ%)AnyD|9iO)x@ZT94w5i49rc8{0s(7j9g4jjEoFx8y>}Z zFXF#idq=Qrc9m&`>BJa4cGtAnluGfPi~M8Wov4xAaLJ0JLA!0Q@^!&Vuhp&po?Try zEpB~B-1ehyv-e+|7!#^q@O)O++7ri@FW$J7$z*j+!MdWN*WnMityau^H#y5^VQtE` zSUr|k(n9qUE(nTTW^6m+#&dF(pNXw&XUkNl$=ZT-hvObh+z>qX?d*g6w#FRC7j2z+ z@V!$@!VAwgn+{n|n>M}8eZvAvLs_4LZaT(IA@^G!Mo$TIn{lvXwbWhlLt#E21@11q z%GvG3(7r3Mc+!o%QeaWx0cc#LO18;<5 zoZ4O04l*$_GB7R{FyJ%b0S2b5Fbk^zGb7`FtnaME1w@sSo(PWeRIKOi}NLt7S&wXq;0pbeudV1j{tX_INhzS z?y`J!E?m+s^K&+TI>IWZz1R1t>Kvs5PZmTR?&x+?-umU@^J%e;|IhI~nl8b7OT%`m zoZK22**+PiQ{SIFzu#cm%Ud&1BjUL2>~|biCxu^6cgz+O_$+aH>&i;kE^Eu=lV?O; z+iITix;(irUw+z=KRiY`p&olw_CGq|mMO(J@kV~_0s+BOb0>K5`7Qp#Hg&eC-C2gJ zUHlXKAHU6gE#6?)Tg#Mf<8gJhQi+qY)~3%}nuIGp@?Tl66r0c4&SyR)IpH?|;q^ut diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_self_signed.der b/security/manager/ssl/tests/unit/test_cert_version/v2_self_signed.der deleted file mode 100644 index b61d8961ffed642d10cf31c3664f1092af5c5381..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 719 zcmXqLVmfWm#JG6@GZP~t6Dz}l3LR|&UN%mxHjlRNyo`*jtPBR~hCBvbY|No7T*Ax& z!M=v#2BIJyGY?;xQG9V~PFj3%W_n&~ih-Osuc3*7rIE3bfsvV!QIt5Z5i*x}gPItX zkR8Fu%D~*j$j<K)`BO}8af!2JX!wmTq*H-`kvt(I2)4rJ}TR+|wyr!2qf%i#_ zMT|rEs%IX4V!O{g+4QWxq$~P!>XhteNsdTkr^T&CH(A^(-oUlE{Z;!x$Fo^|2R~fle)LY$Z{D?^ilPTP zEH-W2XtaLK|5m*xzxsKUPJRq@Z=deE)$Qy%uU4sIImL^oGOXH5WasQ}&;A@{^dHx*CZ$zaetb;;}E(3#6~M0p%c zq8K#hB};dRzq1r=bDJSlo$a_od1A2ak}tD&>s6?E}LfJ!+doyU&b#j z!6y%YHt?SN;-OdDzCXqX?QCy|ojf%q{M~({ykdnSLAOL6mQtDe=tprKHLgFRG*ez(WSD#9?2U%)GC!Z)ir6{-oU){aw~)(Twuk?XyjL51d8wBG E0B+|a#sB~S diff --git a/security/manager/ssl/tests/unit/test_cert_version/v2_self_signed_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v2_self_signed_bc.der deleted file mode 100644 index bc3ff47f27ecc0f34ef464ca74be24de37f7a513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 740 zcmXqLVtQcE#CT!>GZP~t6Dz}l3LSj|UN%mxHjlRNyo`*jtPBQPhCBvbY|No7T*Ax& z!M=u41`;41Gml`IQG9V~PFj3%W_n&~N_h&j55T7gG}>Bg2&mC*H2Hmh@S8`?Gb58R%~4xP!wcuTh40Sh2(8*h3!&kpLv~s7aG5zeI#A^Lp1;CX6-}>s5{4>v7H8!S}3mlVHH)Kh+ACpSu)G-TBwIa=zS;vtQ1| zSw8o+WU762r{~wsV7JSwFFA{@Z}ne$PyXD+q~hoOmQ2iy42+9;4Y&nX!jiJl$c1!#=ae-@J|LI<}qF=e`k< zUHIsdR7Lk^&7}U+yLWT8iRsvDcg)~lyz=~)sXWO>4nY%(619#^xaQMs|06rb&7nd0 X)YbimPAM=*_gXF4u`0aAajzKw4xBFb diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int-v1_ca.der deleted file mode 100644 index 76a83c9440b8e4989d3ba4cc180cd94faa055b31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9zR%*4pV#KL&+ke>lB8>d#AN85K^Mn+av27`1%ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHxxAx28lBB@RS+GXXcgY0;%Lg137VCLlXmIBNHP7Q*#6JC~;mRWUfI0 z)g2;dAOmrTXqj<*QgVE1D#$4a7d0^|A%_MdD+6;ABR_*d6C)Q>6C)$TW^b*NA~gb* zAI=6;f&oXacopkuMX%Z-ouVs5!!_;oz|@7sb%%ef^XKlhzcS!)!2+v4=QucE7e zmE_Idf9-=uKG(cUDI@7>8sm zkLdZgw^KNDbCX6`;it^bp0#e%4>0miYPx8=x19CH{}5*`P00gwHfy|8Rnori-kuyE zVb8zRe_Hv{$qt1J!t{5!yVOef$9HUe%9bO*t~7H__WaB5{2ps{sqaqRzf!}HP&49KWUq5Eqk+@mvo&_NdKChBk6hb#)$6QIOVU!#V14$N or*Z2ZSf@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZpGPgSR^wL*zaH>K`u>^+ zPh$T~Jt1IfuOQxZ*l*@jbHx=M^Dk-XU~+77c2WD0)JM}Nx;OVSMHZv|ioO$Q5XT_U& zf{w>my)(X@#FO%9@sGtxi;u;6_X@8rseRC-@F~qLspo@HqZY#|o)3x-mtXtodfHXB z_vD#UwKY4Jy|84R6(ZVS@U*chZg~UOpFXn%}p($#CeU7xdsJP zcZi&U48$R#WybMI$?>VFx+pGcVpKv74MtW5<|amd27@L>E~X|%Mux444GSCezEw+w zduKcp;bk`AbqQ@`+_BH?;wD~?>!K^Jw{t~UA3t@-Rqx=vPMM1gN2e}0-sx}l** z{Mq%{+xC6SteYDY&-v*38Lk@~s<$rY#_-+~z8F!o=#og}fvzj(INuk)6_rh7Z>W}c zUe2r=w%jv{``+hS?~;}M*4zkq-rycrrQZEwZKQk$AM@4Q<=<}YaC{*z+P*GyQJ}td ztNtm4lI9aD=4bCwFx}C}cp+23wo=u0;@VEFragu`r}~G+<@U~aTmC=t!2GU_ZL1oY zm>C%u7xNlG5{RrY3zGo@a)1Go4=}(O8B#OP98}rzVgFPvrrio(+7@Vi;Fg+w(e2~| zMy|^H-fo9?f4$bMG}rw{)#S#P({J)V-#ukf5ZCuqt+S$2tp{w_O-dOC4 z^k5ZXvua$Eoh3j27~lW6>B5lCE%sYvbHk(NjXh1KTTp0RWx`NMHZ} diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int-v2_ca_bc.der deleted file mode 100644 index 825388bc941ac37f8de5ec4d13692298084e568b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pV#KO4TKg)oZjZ>@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZY_WUiBSnTOc+@in41{+84Q{jxtN+585!0sh}raI zwe(qklO?YY8$L?v@;nkbA+%NL@LZ9!{kzIFD;Savl&KyL{IubRS&;n?FG~i_-Ru3B z*0;RkmvQ{Dr2g!KsrT&a8+LMK#JFvgyzpORit78tOj|bYty&Y`m}?q#;P#!*>h^20 zWj9Pvm|Wt!>`Lm^{x4JdyEG5%DYdz+$n|eE|7NcjF4d=%=KnJ4a0xVI{;p8MxAl&b z+>YKqjn=Db)g-bQ8cw+$%h)ivTrF7s)7;#mUgN`+k_XG0OsASw3Af*NwPgOd`>*%r z{b7Z3KJhUwUToiAUl~4`>#Kn0e-4=^r#3xU^{MUV!EV{9;-<#Q60VF9@tXryO~`q| zlO?g5iJ6gsaWSs}B$>zxvoIMjAO{#Q5di~?ksZH%RZgR?|s;`W*|6Ft9@lKBG>u(=4?5WzYY1NLC9%?obhPO-oU!`_@vMud? zC}An)(=s{yoy<{_^>wNdw2%LKdF=j*tmL^0NtuqdSNeG^ zmoX={?p@S&UU5xo2uJeuO0Dg&b()1o(qv>4b)7=q_5U*D$)4%Qnte2O-`uN$PnJ7* zEh|c#uxQt}&h9!!-RU}4^rpm4SoYz<+r>Kddv0Y3r)+uFfAm3QRrK@F%(H7fHQLic s4?ap;y_xAh@7-Fp&vVb*oZ`59xdFp(UY*&IR=wR8&y(4Xwi$l{0Ct;7aR2}S diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int-v3_ca.der deleted file mode 100644 index f0348de82668ee2fc4e31030e5f78d95df0759a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9zR%*4pV#KP#CW^cgD#;Mij(e|B}k&%^^!64m`+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4Mh!vL88n&JY|OQnRz9;WybNzi3W1wyoM$Q#zrPa2BsFKMp5FtM#x-) z0;)Si&Oip@5K*8Dl9J<7Q*}{X)WoQS92$(Q49rc8{0s(7j9g4jjEoE~P366mgPuGS zi8wLaeSdY``M6aqEe{@l4O(z7Q91qL(UfJ=w^SETUUYGZu(R92Lnrn3sXctVJT;@U z_*j#H%k;d~zotE|%TGG?+ZWtkSU>sn?mIP=rF;1Q9GU;*G~a@+x=jZp;$Ae}5jy`R z)ag^GQdqc_)<=&|vNOV$HeXII%8WWW|Cd#fD!aU9-uu72i8@8MIarutnL~Ka+q{ar zxM*qtb7%DFNuriqXOot81{<7R5WeAp%=MW3(n(<_ck|j9dt73P%wA`=EUj}tgF@z> zs`SDOh{q&W_JigCgep?b0bxmzas*qytWWi=O@ztl_?+dmt@2Ib` zW@2V!U|h^=07)RS!YoV%49EcnOg_K>V`LCdtooUBn{DU+^OZhHNA7GtsnerSdUU_S z*YdE6hR%wm$2w$^LcD)lC4O1SwsDm=>q~vp#wsR*>+R>;#f#?beZh9&IA4@rm~pnj zt^=~h+&@D#(zr9;?&nT`He$FmPeShG3-0v~jrQMt{PyRp z5Wi=VRuz}e-)juF*>jAYTUvsp&|t~-&+Q+NJaXVt**BH(age?~&$ou)k9HrrH%9o& zK3lZ7%hXpYxFu-sDz_FNkB!1CbDkf3o<8;8+P7CyCtbNd>Djz_SJWj$^jX7qytt(_ p$9$^wzqO(ds&Cq@no{St)FR?K>|cBP%O|L6IT10Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%STptmJSiGdARLHwxUtQgz&zN{f;(^SG|e4tIU1! z>lGoRls0I@%BKZaDJth{tk=t3Ugj z_erE)F=+U?)tH}&nUR5UF|Pq6*~kjBFc~l)2N*C>0RxPY!A|UYe0o6A+s8xPtmIPBCo2)k-DvW7X}r+)~{7&XF0&=*?Y@>Lbuby8GHBMZs9F>_1alF z)St~M-T$qAYiRkq^tK(JN@Rt<=EY4-Y?{YZy4Y>^Bgbm9*gD}`N`B7wRMG|Z{h=?yoH-b}rGqrFeOW9GUEb|>yE5Zal4!6SIr#d~G|L_1i5 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int_bc-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int_bc-v1_ca.der deleted file mode 100644 index 5bd008992a810767c7a15aaad3145b595055a0ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pV#KN$a!^?n|jZ>@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z2 zu0b)?-J)n94{?h`nK95E@u{gGr=U2hiBSnTOc+@in41{+84Q{jxtN+585!2r88hZ9 zw-%oId-uWt=ATUL$zCA`=X|p{!9MxtofVfo-+uWxHN&6rU3&Fz>kC;A`!ByQ%`h!p zxyB{?zb^y(lBaRW!e>4ybuRE@lIIJ16WkCtNpyQJ+pDvQoA(9?Cr+)<{nfX|J19-~ zocH5p@&&>oYxX3s&ArU^IVP|ChQ|GxmzgIMo6@%II`Q74LFd?4cK$oO$1xNroo2okRJDp*AS!FrCvN@pgn4Ry!~ugz zM^$TItZetZFlA-lrq%3P86WkR*75X}F1z5_Sv2*!SLXp|=__}2W=~r&=l6vJl|N^i zX=f)+XJTe#U|h^=07)jY!YoV%49EcnOhmu{V`Nx0EnJnkP@i-9>8%V0l^xdX@Z~&R zIOomcc>9@K;!K4mI@n*ZsOrB8&cmMsaJ}&)RqTjI>atp}0#D4cz#mn%JJM)4M z+3r33YR&CM+|QVGqE27U|HP(XV4}PF&Fj;K-2Y{Ics9&Q!K}0j@DeS^xk5 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int_bc-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int_bc-v1_ca_bc.der deleted file mode 100644 index 81d814f647c468f4111143ce26684218a69c8ed3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 882 zcmXqLV$L&YVhUTp%*4pV#KL$a=Y;_;8>d#AN85K^Mn+av27_EfZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHh&hJl z5i-}HjOxx&F;IdyN4m@y=z{pvRFG@X-POdXgd8%AtPIRejQk7+O^jSjO^l2T=YFU% zPhZSvxtm3+Zl>qIF2U4&;Q=0>@4V}7`gXQ0%J`eZ)&{NHTUHxS@KQ{Q*>fhe|Hs0& z`xiQgh^6zHh`Y+?UsVp8sxaZjSN)I+G1(T&|MchU{|s@Oe0XEpgTIj`9+~KFAv|YobCa(-Gn@#Mqu3TQgs`J9-lmFgp;<2m?ZUzfFg&gBkxVdb@iNpQ> zx9A;KJDYs=%qr>lC02cp+oUHpG)xLS&~?f)-k_#Eq~?0l519kLOU~GB65JAbHTFcA z#J2A*9Vf^py!*rzTAI6Y(oEm>xY=uGSk&ef{;FE-uG8<~(Y7$=e^h~QGK25U8Tnf7 z?e|^(9Asi*&BY=G*87-H@dmVPF>rIvrOxK ztUKr4y*K~g@ow90FBfU5bu6>J)?u#drIr?*t8&$DfkF)>%7LagkK3Q~EmC^>E^kKZ z=Q~c5RCDn?*Mk{|ci@@FiK=R*zO!F5MCN`J tD*Uxp=~L*!y!KfaBr@JU|K418>d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHWA5&fzi>3dFT0i;R)<^joiYj)RU+sInsyJ@8 z0b_MEwK)#B9!tRu^3T&^sf|&x!3@&B_~oN3ZO7lXK(yFXIp^q0q4XPqUKUm$OZ>4Vcv4FYm*}#2_v6;qsTK z*MoGu_>XzNcp)x(VCthT>#ch0zp)r)zO$TveEQ7J=(3|iYaHHspNkhu4?h%o?)SX~ zf$IC8GBGnUFfQgbfFu)HVHPF>2IK$(CL&;fF*5L9Eb?4+ebW@NEf><99Cb9LYfIf1 zu)PhiImah+`iqp|{J8l64hC!gzVw?{;4tNZfV&I-;x8|q{vOmgGl%QBrLMg8sTCrp znJuycdal|%soc4(^G`khod;>Jt=oeW%%jYxAEU%MSVEe((8oqNk{Hq1_B$ zn~i&z?p?X_Z}qD6_jr4xHqP6n%dy!ex?`uA`Sh?Ktg>bIY8#GBxN0PH_l{D#Vwk7s zM#cLZ1=>FDx<5NgaqrPGH~zni@_5^Slzy&~ytexjQ*pvSr>zI&Ze0A!>LcH%(0TgL u#jk2v%5(i+f1BfBE$8FN(4-pr|J%l$Z;DF`zw}Lc_e$l?sa<#H{r~_Cl2T*< diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int_bc-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int_bc-v2_ca_bc.der deleted file mode 100644 index 7b8e73cd34c51626e5c9ae7d228001bc98fadb62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 882 zcmXqLV$L&YVhUTp%*4pV#KL43de(rKjZ>@5qwPB{BO@y-gF&t#w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z0agKDEG0+9^sj0eH+||UWgd8%AtPIRejQk7+O^jSjO^l2TFN!$- zZ!B2HT9@xxRJ?Rb6xYSd1@>z~M4kB$b2*p?2EE9=@TdQQ+fozhjth+&{%H{zdQIJI2llmlwT_ea6~y^u&s1 z&5w>;f4kECclE7bH+L$mmwW5p+oNkH7tx>`#~oYnoq6S}H|94LkKLcm$M)%~vupGcqtP<~4vM7Fl5yCIbfK00Sl^V1O|)OsiJ;dEvr)@6~K;52d}m-6I|7 zv(|r+;9AK*)6UZzZv%xMTBi%~y=B}pQ=_MB?&j&$Uzh?7xPND??o8VE=O53vqmz$$ z)_r;(sP=cl`%?dsM~tX$@%p$aKj)`{~C0wWZOq uDa(Z-+jr>liTc+xwttz`Xt{EsVd}MFriVwq*B^JPIns9a*DNUo4krKwv``!X diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int_bc-v3_ca.der deleted file mode 100644 index 1a5b9eb743f786380a29b0d898ed14d139f80349..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pV#KNS=b;*F2jZ>@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZY_WUiBSnTOc+@in41{+84Q{jxtN+585y3wTxzn3 z^~mx1g!b%87AJzIL+f6k2S2{r#`g|0cYWrJeKf`%h3TMP6R|2Hrv z@rv1%?(k-7WZ8Wxum1e*1$TEYml5dL7kT?$`+ZSu=3*>$vCYUqhciJk z=;pm`&h~0t!rhu&#w`*jCU4X_l3Wp<@lrB6Vzt%6=5-;la)MQSTav4`g&lgdXX+j% zN8zSbZbxED{|CA$W@nwx>8|tAcKJ4WE}M(5;L9&h-?Y5irt*`|^UbB_WrvjunRRwV z^<3M?#LURRxR}=fl1yZUS(pqMkOK^uh=2jc$gsdwPWSe?gKj@QuauYB-C0!Zenz8LaGUtNMz%YWI{@G~NnQ+)N5chp3SAFV#N zp{V1`hxevC1!_+|ci!;tg1CX{0yFPq^%dsQz+AZ&& rpNVwK(OhA&bxycnVo1~b;MY0{rm;)I;?HPJQc-64_AM;2X diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v1_int_bc-v3_ca_missing_bc.der deleted file mode 100644 index ccdf59b0e4ef224f8389b7a0358e155faecebe6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898 zcmXqLVy-i2VoF=U%*4pV#KL$qHQ9idjZ>@5qwPB{BO@y-gF&eww*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZEM=f$l9J<7Q+4sUuZd9!Iiwg_8JL?G`56qF7`d35 z7#SH>CZ%UF-&0?)*Cp?y-)fQHliQycT&ma9Tlylj#qPj{<-8>lp6wg&)H(M2{~fa8 z!NU#f9}iG5+4)Zc~_+ zrn4@4+I{NfZjr3B{XKzhtnc&oPgb}mX@4c6A^6fttDP&ZUYKaxUbkHF!;VCoZnrz7 zf6c?%-<^ECxbV;R--|wLzQ54VcIdTq&2riL{`{-Qf|uS3o)j^8<*C@p$wE?ms&c0e zOsiVOu5V!HTWTAz%69jynpt~_44?I%{J!$g-OlgA=T@xWTbsl+)kr=%cj+Ou@P(DK z)*U>{`)s`mw_VTsV|tT`nUR5UF|Pq6@yH6ZFc~l)2N*DE0RxPYfhF=w?Ej}`-;Ddy z6m|993ng!Gb_c$D6*5ugMkTjRs|Dw}?z=HfZ}z$Q)h^u} z$-eJs-4ly6M!}Z4?MXK`3!QIkxtSltcg1MR-WA*DO|{&g-&4JCfp>!c|L1o*HM@VDIglz_Hsi-zudYPbg>Fysdixfo>)g|t zTq1X0XG^a8Eno4COWJs6y*Z#aZFW<^f>n8Kq897j?w0&du=Jj#qx*^FWU;pJ`9=W8 CV)9zR%*4pV#KJf?WS;>q8>d#AN85K^Mn+av27`1%ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHxxAx28lBB@RS+FXXcgYmKnw;CmP6!^BS5M7#o=w8JLF|1Q8_d1 zkG!iidAV=i;dMEdFO4^N+zYk6n)tbKM@YI!aCI<2?Dy(5LOZU}Y=o>p8uy%Gj_dMDLQ?#(3bMW8Ycy=FMG9Vr_symO+Ni`7nc|;RDZB^ z+cBo%3C-EEo9iaDFRq)V`RA0!{j{a>fqZ-Z{gs)p==)x=dBHNVi5L{^xE$$$Ylz<|jI7+{PH;m4=Qh6!EBdK( ztNXa5ta!!lVra3P?f7&Jp`0SlT$lg*5~W(aWw;C!qxj!B*|SF&2W~Q`bM- r8@=ex-yITvZv^E8Tg}f}{VYO%W#X}}z)7<6Pxah9wrWQ#Pptp|-?~X# diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int-v1_ca_bc.der deleted file mode 100644 index 193e7335201767d2ba7e8098fb3a33a5cd723ae1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pV#KL&&uCM_w8>d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH^ldt{raakyx9QbP1enwyOwD&c-FFyQTJd;Djx@l^>e3X+kzj%AQ8Kc5wi^Zx_b~IX zH_W}IVNo|>n&;7IA$RG-T9!7S=6u0E9}%__+3t33hLcv^pKyQ4za>ITL>od24D#=o zvX(M2GcqtP<~4vM6Io#vCIbfK00Sl>V1O|)tTXMGtJ(aC*R!q4S0`C}<*QGUHVv^a zFU>Yx)pS?rFyrl&=N`;jUlwz8@A{aTD@|8@d3a{O%X^zAt#_+imh&a}H+{Rfa_`1J zx3@LEoFsf%>vDHeRK>iEs};Tq4V?;o9VtsB8ILafIPJ+E)u$8hzdPtvUK$_rMrn5~ z^U2$LV%n!jdrst6E0%jI{83`U2|d?X!|eQ(oV~NYs$?5=7+J&}35j?8_un&zYg?{H ziC^4Zg~WG3`Rrvc691=UB#4Dw+Z*C?@NdNKdEt6f3Lhu7M$cJrIB)feENSDUTT2Da ra;BQZZM0sKd`x@;)091DXO^zJ>2@dN`o>MUd$?xo?%-dy*!UO#I8Q^O diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int-v2_ca.der deleted file mode 100644 index 6d9c93e78da423997f4f0c5188fe25057418aa91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9zR%*4pV#KIIF7+}E5#;Mij(e|B}k&%^^!64m`+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4Mh!vL88n&JY`1lnRz9;Kq@)WKu(<3(8R#l$i&FN)WX0#N}SgSnQKr$ zb%)3q$Uqz-T4o%dlpLR$3UUgdB`hTh9aiz?<7-jQISnKcyb1sAGDX-Z&o$B&7 zv4-1E;$+pZSoFPP`;T>pRhKQyI`@X7I?) z?ptry)opa0t~m9FGRI%*E$63&E z3Yni*R9%dFa75yqFpGF_&)W+D=6cJJJ4?FQ=_t|bX?I#bXavZu5J;O3fx_<5kk&N@d<~Ou6%w=$s zHD+RFWMEv(YXC_gvcfD(1`Nmn224J{0AplOPn%(T^~Ij~e#-jS*LQQr@;ORg?tZY; z@6eWOA76S0FunM&c=P?kTLToOcQ1G*+8y^|=F!cHBEQ|cPhJYY_T$4_JByIHuO++V zJ|;flUevfp_DV|Hff+(uX4P&yx_ilw-_jg<8AlqKYi_Sxp1Z(G?Q6fg@8v(ySCkAM zPnpT6vhw)y=B54Zt6R$F?Q1*ipPS5e|Lk^$SxanWG-_6DeV6e}<%s3px$@Ckrn=}ro9GR-WPJFL=)7goJ&1d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH2 zu0b)?-J)n94{?h`nK94>@u{gG*PuA6iBSnTOc+@in41{+84Q{jxtN+585tg@xRwh} zt>&9_W?FC$@0-p^slxiU-)1gsxpD06{k%4Hv%uwi7jie`%9yKuN)foqk$AKJ?4rt7 zpG#Oh-tGOf@tkXQ-jb=RzU_|5k2@-s-JTP?woK@3+wRq?wU<3Q-5t%xi2E?&&JkDo>f&(in~sm zYX&gg*m1PXN%&&br4MnUw*@#pFWVBW=ifUs_|t`Zt{zjo4#&^A@kU2y(jo6FTutu| zHM_6hb?8sx{aeot)ONr7#wmYj*GwS;+prf5KA)9xx2cEQxCTw${5f_>@r&xD=6@z< zC)P7RW@2V!U|h^=07)jY!YoV%49EcnOhmu{V`PX`71U{tn)Ub79QAE1pr86NyJFIxJUMhN$#uE)7~3us!QV&!<@uLgF7Pch{>us{ecO3YW1- z!-|3vvDd`>_s`~I3|`^7(ZAp98+Yq#hACZwtS?I!$ltB)S+`GL{%1_Yf-hMs=N;od z#cf#f!@5fGsgNCu$)lrNzT~aBb$f+ouIoG>zuAv=Z9L7Z;OBNJ_KQ*MV)9zR%*4pV#KQ1LvfY4}jZ>@5qwPB{BO@y-gF(6>w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z08GxJJx%Z%fb6Ak3Vc@0erjEzi;3`{Kz45Gw&jgYwp z1ypy4oPi9)A)-JRBqhhErs|@&sEJVtIW!nq8JL?G`56qF7`d357#SH3c9dQ?)pWQ_ zk+)>~lce>{SC^LMv46SNC+}!w`SD5Ke;@lzpBdG}F3E;nj|dE_v}qH&dNay~wMi@0 zWb*r-_~&>3&RVkk($1g>v!t7jSEpOP>RO&wZgpZw-`?||-Xy<>j{Q{KIy>dwZMRi3 z@9nG5aOZN#U*V@M^^a{!!b546ud8{dopkE>$Mmc2`z-fO<^Iz$!2xdQH2XoOdV2Z_)p0+Tb_x*+gn}xk41MMez;L-eV?!OB*_s4uw6;VG3vQdW_T{Bgfj`aqujaWa7GL9MnE2c5-i3Ad=Djs|z3Q{MlZ*X&m({&B zx}VSQFAAKvdG$WAi7VE+{J#|GV>HLH%Wbl)=fw4L3_Vp-G9K1{waK#On&>=FZ;{L^ zO-UmO&XcLU6#{Sn6g)Zf@R)YF!wHTRzy7+Z+xw>RW_&Mx-@5qwPB{BO@y-gF%rYw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZTsarOn0V5{tN$^u|Lw7dP+1(=*ZdSrw(u&p1(W!BTHg$(c^;U ztN-ZBA7;CuzTUWfqZiMmx}ql%7uY5lhy7?>Q?*3Pl9j7`;d(KhEseE_i*h+k*Ueh& zD4zWEck$Mldn-AFieB)pF3XCl+PW%Z`F58}9TDYor+?YM{1E@?s?w)xUY6?kIJ&H0 z)_u{iaG8wR_UkzXg?XRyy-XWKKO6YcsMQgPuxw} z({&k^I1yiJ6gsaWSs}B-zLcvoIMjAO{#QQ2_&tkwLerYI|*jZL0a%i3?L* zH~d{Y(QESC()OAE)L$Ok&o}Qx<-2YL_H;D?Wi8`F{e^KsX}+NmLc3qR@5|}Vh${Q_ zjOV1W-TIB10g?=}=hn=6aq^JH>dDLMOD#|R*G(6*IeAEDI`Z76SN5j?Tj@RYiIqRn6s?9bmYzZi?zN6?NK9}<;`%=E7 zv*x`i^>cjVjqXoZeX>e;BlqwAjqDe<)jiF7>oxC*;mzoY>I!kQSH?SUc&j4)wxw#j z)4H|4zDlI<$kfg7xv=&W*Q5KJ|Lm#PXy`2YdQkU8j`r`c?}`7|ziZbYXw@3fRl|ml!Z;0DKywn z*gz1(;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`O zLQ;!MGV{_6B@DzsqRc$}Wk&Itc_r~l$+~5R@yUq>a^k#(CI-evCPoIP=7yG0;=D%4 zT!Uh&yG7AJ9^w{>GGm}S;!{&~(H+&qsDvCQjI0dIO^o~u22G4yOihf83|sfu=x(}n z?1r#4s}4BGkk@X4@TfsYIl-Nk1VcX4_pewgu& zSMm0H|Jnt;pZc9Pf8QVQG1`CWg|3&6>!ba@O^Tf;Qx%tN{G)D;Ov3YxH!sd|^9}v4 zryZ5R=Qs6G*3tL()H94CX0Kg+?3;c@AzO=bwfV%tH?Izz&tToGl#u_;^!9ActI77CH6`!lzYF^{|HSqHQ$E%+zWZ;tOxV`w zE^ZiYB-1}N!D8`om2Pb*gZ=$m9wurR$2Y}4y1TM%N3!Wt-wV@CIOH>evRRAr4MlpY zj69i`85tNC^BO>siL5XSlK}&AfB_Q`Fu)iY*2eu|zWdZbR&)to|Fl`3;l#O_Z!(T_B$hP_KB`#q`}FSYUq55tUf!WE zu#BVRL@k@C67R0Af6v+j=6im12^DO77cA1z+4j7B&np|7wj*;7UKCND(y_qGOR=It s+i0Cbmyr3n9gms|r?6bl{q*Af+!KdaOmkh6v2a8EjNd#AN85K^Mn+av27_EfZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH-Hs}8;y;<{n8sp2rZ@CAupL{5vs`*`Rv2pqB zfJZw%osV6_d_(U@HcM+G=i7~o3reAyjz!ZO`8eg27=d}=el z`K>hK|L(f`>6ewa6J+idv{w4*u6_3C?q^n!@8{@y_mhyPrDyIXv0-h>MI~M#qb<)T6Zk3+mjz+$9OTIa0L?}ItKK#7i z=DymQX>XaB85tNC^BO=Bi>xpUlK}&AfB};dFu)iY5)aLbt~BCXvhHb_@Scplp6bl>Yk=hH4nxXZVH?wl%>yY9o3MP^p_FIYw>t9GbG-tD-?m2|^l)0};W z6gKa!bKk2K6#u;5-{7I(ukcihSB&dS)Ha@I@_1JC(^mGYqsQf2qK8FKlo%H6UcREJ z;o9+Syn*vK^7WU^S*TQB@pa>m8+!jr^8M>{jg4Jjt~$H$!RNX|+aF{vW!(Cvs%37V z1%v9@z>hJr)^be!s=?~Fv%>zF900BE?x*J10g00J-8;djJ3c diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int_bc-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int_bc-v2_ca.der deleted file mode 100644 index 50b1b51011f68fd8c9938638d1005fda6b2aab75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pV#KL%G_hkcKHcqWJkGAi;jEt~UOpFXnEes8##CeU7 zxdz2lcZ;HdJj5*$WyU~v#HXf$oPy%0CPpRXFkxh6U~XdMXE11D(=b4It zZJwIPidIFW7F~M2?e+#0zHXnYWiA)$t};}!CfHB>VX|6Rsb-yd*gZ`K?SMlk|48kU zzs2(IYdgoor4N__#SZh7#hPtuxKdc?Fq31^ziSeocO9+#Z-2@|@F9l`-(AU*X8^*u?0g#y6a~K8ErBh&?2~_0X@VzGc(r8mO^M{A2ZT zT7-kW@fl$mrx{y&CC={ZPTTr7c+S-R(x+c6_E-z{&Un0#MeI}8yzC!OvdjL>dvT}p zc!)xM%dL{MNZx#xfQZMhuX7*w_B@-CS;MJUVp^)J-E{OpOm%$x%3f}R!?Q(lDH`~K2$Kut^Qz~5Fyl72PpSoMZ=kfeSTdE44g}QED rJJTg6ScP@7Yu1dI!1TEWEj!9OT}@c`1$kT4Z+ciW%~{=8_i!@+A9F_= diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int_bc-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v2_int_bc-v2_ca_bc.der deleted file mode 100644 index 2a00b04fe8238b490f384d2375337b2124f5fe19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 882 zcmXqLV$L&YVhUTp%*4pV#KJJ0@rMB~8>d#AN85K^Mn+av27_EfZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHh&hJl z5i-}HjOxx&F;IdyN4m@y=z{pvRFG@X-POdXgd8%AtPIRejQk7+O^jSjO^l2TD`)hY zXtw=7+g*C%S^t#2pG{NJ6Hbe~-le25KWp{UnWy$VsQ$F>Gddp5UX=eJL(Tbxb(3l1$!Bu|l_XV`T;B5d zdnwOujaHj-@5r0c^VmMzSJ%5zXTTn1<#)P4sb}Wd>F0|A_#&Sbm7U^_dNzmQt#tg_ zFRH5Vdv4z5=#1-JT4=JmW3T72jY;8Q6_vRTW}!|uSDk+j~9rDx@uN|^Ku#|Nca3!-K;))=D-vk7XRxJmjw=kQwr%`qK%HdYj&P7lew7 zWwLa=JABywom?g#I89*wHtWTW8xEv>Ee#IV2$HbTRCjT4xcj3alY67|_9GIBmRwdo sA5ETd+O4>}a<2c3(m7Y(#a7QtJJ-MYarU`TgUm?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4J8c3K%&e%{AEV*nRzAgNy)lp#_`FC26E!Oh9(BaMkYoErj`aKQR2Kt z$XtVBs=GzeKpx^237`v-lH*fTbr0FnbZHgNRNnN%Mzbg9ISb;DDc=kPy5p@PnYF|w7KtJcCzH(#<=Y5 z)4ne?60JUcAk;?cSFTc*q`H`_sLPWHf>SM8^IrZ)JZ?4hebZgW&Y<7_EB`6;aL!QK zbZ+A$#Vse=zpLMk5mwjDUd+y&_4`+?S4pdP(}#Z&J1)ok655$>QGGU<*OlY^gulO& z|2co~xzBUPLgZrIG(`poLfpSFp~elw${+_T$wis^|AtCif< zMS%-e1TC6cYslz4z3|AP4ISpq>XT2N=Ge5T_BxBm6qo*)oQG|43MMQPQHw7*z5mb_ zrz@|+nV1`L7#WPjmw6e`9STh_jkUO z-fVo(ZYSfb9mc<}7NsXFuAhJ4*q*|5e7QUZI zc-3n8U7BA!SiFs4_j2p4?%y)bl$0HaDRFvI9Q;l{b={UgWlo7@pF?0QBI?HLh5VvLg4 zSLZJ?axQjy`S*NGB43x%r7H!Dn+`Qu?40gbx<9S{bL<4=;tADLa!t%6Qx=`s%_DkQ sVFSzTqKgh+kE@zm?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4V4WPL88n&Qe{T*nRzAgNy)lp#_`FC@wu7B#XuE60RuU4UPBWDVarHM z=7-EmkehjTSs;-@#(Xue0axd=Z%VH2O@p%udylYJn0Ho+v~L zn0|1|-?zDMY9{L?`CWGQTTT?S%QOGG+5GLGz}kpq{qN-8i1=iG{k9{IX@6Sn^%9L~L1#b;cn@?Irw|ucb}%?fK1A z^tfu>+Lf^!TvC@b3pV#8_ncY2?zLY2)!j4hZTY#Mooi;(3t5RvHrec#Iq$8wcbU6- z$+W#mHzI=@uFb0W&wT4enESqYw#@mrBo4nkD%jWSSkCEqe9gw$imir|(gUx|FJ1xw DntoiR diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int-v1_ca.der deleted file mode 100644 index 33d65169688d2411f6311eaade5126335136024e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9zR%*4pV#KL$ld#AN85K^Mn+av27`1%ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHxxAx28lBB@RS+HXXcgYmKnw;CmP6!^BS5M7#o=w8JL*0AF)}hd(O2f;SDqeM z>9_yF-}S8R+-vZD&;F*(Ri&#oJB1%Q72|D|bnx{7O}450 zOw5c7jEi{bys*V zD4pi2TWFrN{l+RIjmUWdb6-VU{=7H){)~%4+7%lVmy{MnoBG~+ zQ|wx+I6cXDUC*WGU-_$S*zEgv^(woVeWulW4K5vh=v{KPs*>=Dc6g#U7lme&uhg*R~lZ!Vf1M oJ6&_-`4ao}GkFhwTW9CETG9BQaJyVwiDyvYl*{{Ox80Wl0PCASDF6Tf diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int-v1_ca_bc.der deleted file mode 100644 index 06b6414797be17e81092963725316f0d75a8e750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pV#KLf?{I~%x8>d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHL0i{Bru)|5LDw*I8D)Uo9P=3FM0;kR$;6>?5yb3eFXZ+N)X(j{X2{(ENBWZBIA zm-=q8_VK2djW15A$bP?iaz^sjtS_m~yY&|@kvgFu_~CL}ebu$+DoNkk-{;FA{W%Y<0sOju4FJo;zavrV@TyKtR7vrT!rU&rb<$9^!b+2gWe#j_)u z7HqINcSK5Vde~zAHN`iYD-9}2cAUw-e1=Ikg8?Y_T>wV)9zR%*4pV#KJH!@UsCg8>d#AN85K^Mn+av27`1%ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHxxAx28lBB@RS+HXXcgYmKnt-CmP6!^BS5M7#o=w8JJoa8AOTm8X*0AF)}i2aPUh#mf>*d z^zB0?>4m;MyHdWG`KvF!a4cB8^}w9pCXQcDYBsZ~e+qcKeX4~}qk+(Zz88B<*6-}| z)_oDs%5<&Ze`s)Z9!tfRH(A13YvcWch4bGx6d#{SP|9+FDw(0|!$(-s%E+M|dhm7ID-2HiR@}R1ttz_D=3mU7zd8G_Ogn9V^ridZXF2kD%qz9B zpVYkWTA}_$F#lGS^{nollDtAYO@93qcoBAVFVoeEM&V>_r!|+EFI+i!@nu5HmDev+ znV1A|nRJasD74h-#gs_@lmFDueck^f zZ{9(@9;I_($@_ml`0zE|x#%)O@nM%QEuwW!XCA30Eh|2xdClh33&Zu->}8cF{rQ}l zbm-1+!}dF_Z#j*c|3m~{`*=xb#?l9CS~_;^I_h>)tSzYZ!Ms#;hEir$Yg1bWqZ?dJ z2D39-wmsCB=QL?wxTZL3r|vPSzv8KUNB^@osH96{Cyx%AMj@qN84q0%fDuxB?W2HlH2y>tP9Kz001fEOIQE^ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int-v2_ca_bc.der deleted file mode 100644 index 0ce3118386dd80cd2149b29e8ae82876406bba4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pV#KL$s`j-JO8>d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHaMTzqo zA#)9isqPj<19^yBB!F&7N{&xW)kSwy6QdGxm@u+3FgG#sGZ-{6axpbAGBVu1e9xKX z!mcawJND=JpIonOq}Zpt|LV-k;ld)jJ){5Ko7og|RyW>s)KcO8OwHr&H81W-ZmlaQ-=?i^_I1tM4PtgHS3i7XH@Tfj%R=T@ zzQnTi<-eyzU8}5;?VIFs&7NhNwaCobvJwVFAw$F>iOn$+tjdE z_aaqXnV1`L7#VyeC$&9%)noXw?n#tIaP|JUH62m= zzWh7-hTnhY;hSc^#Fo{2ls!A+Be!s8&kXhJ+v3D4&wajjIxgl+V(6L^9)^x5zJ590 zsb_iaBiH8_VpU|$YZW`fJ0|nS8g|W<1v(mG_wI}0!=CaLhvX$SCC7<5=tC9a+Sda19lfV9d uIb8Fu<7XQ8msRGX|9qEao>kvfu{hKnOHgi diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int-v3_ca.der deleted file mode 100644 index 5dd85a1fdfd8df2cc2531352c95b06a1abc443c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9zR%*4pV#KIV@Z(+d8#;Mij(e|B}k&%^^!64m`+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4Mh!vL88n&JY~l5nRz9;Kq@)WKu(<3(8R#l$i&FN)Y8y6N}SgSnQKr$ zb%)3q$Uqz-3UonIa(rqk$SDXHH8Cn7hXx}n19KB2KZ8LNBNtN>BO}9ER+saNx6d)h zmJ2s4zLGuhYg*I>qek5ZVVOBw z%0nKh6)w8}>FmjAew;%8?`U5&s$*GSCCPj|hUUVi$csf=aqH!3IV1tm>h#P{~W zo|#7seL5qokN%J0UvYWslgYDs_MVJzU~3Z5EPm9`!=1U-UhVzVteK8SS~!-O1}ODA z?`L9WWMEv(YXC_gvcfD(1`Nmn224J{0Aplm-}T{%+L~s`D9b$8VwXER9&FeDUKVBV z;?H|Rb5nlyOQFY)yE&usUiD9G^*=H@>xbwg`8`b@x8vGbGq~PfYUiDtKPzEf#gXYt zpLt#PNjq+t6O4Q2!$7>G^-n(u)69uzDTRR(lbb zSr>LXRXb?1L$uj+rVgWTW^CJLOeO9Yg#xj+x&hk$C4|Trt%yAEtoA%~R zNo@HOz3^*JQ*KN+ykd>U^|G=vqAl6>r!K!foe?}kVU_VwwE|&2+v^?wLQSK;xN^9E oI31_!d_hFnTf?aT*wtAjTbuWI*Oyeh2=P~wIyXfq`9fPW0P3+uvj6}9 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int-v3_ca_missing_bc.der deleted file mode 100644 index e6c5c6057de4e10232bfd180d48049d20d4c3d03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 892 zcmXqLVy-Y~VoF%R%*4pV#KIIW_1=J&jZ>@5qwPB{BO@y-gF%rYw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZOj2@uYAVQ8SRL2IsDvCwjI0dIO^o~u22G4yOihf8 z47U${%XimPKK0?*n$*0^7?1n{?~>@oZ*2U#DZnSUZ1IXi>#t|Y#+((}VWeu*^nkZeuwb_3KaG9!_nkSgW9r2+ z#}5pwyLs2$30t~ej6r>S`%gG0i#`1@}m?xS3ss8dSgBKHaZ*y}p{LI1<@ZBcH z{>}XroUw2F4mmU}`}M)tWJdd3lcvDDdpaG)k+$ytJ%Suu_x`UDx!%9b{KdDYhpaaR zR^LB+<%{2ow-(Xtf(~1j%-_qJCw^$glH!!Iiid?~Z>@c$#eM&tt>9^C<2k?hUq;+W z-FmO7ghjnvC`pxxnUR5UF|Pq6*~kjBFc~l)2N*C>0RxPY!Mgm$)(h*;)gJ#M!;!6nn^5>XG)8%Jo+} z*}M{**l(wG3U<{#|0CP;luK_zNYXs<{Qa&m=ea#zU1aF~7H;>&+gzxGe zMfOcheHeZ6^Bl9a7Y=w_czLvXLeqk&Gtc|XSB2uOHMhAIt>!V>yDBK# zSS;hzr=IC+-|n{jnc|(Pwl{BPLK)XVo%pbt$=kYS^0M_CX3yg^;{KC-u4$fLn?U@> zKc#&?61`fU8*aY$a8Y?t2)A}n^q0FaOIHg|$mVjJ@yYz_+@6d7KWd#AN85K^Mn+av27@9)ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&if?1Bo*8h?g11XXcf}=Vlfc10~{~UOpFXn z&5ews#CeU7xdzo#cax@pI>b#1KsO~N$ET+1;&NOQqY`o$F|sl+H!<=v7&I|*F*PwV zGHfXQ{{2Zk-|K&p2P4drjP}}cR^DKUZoDCTQp|S!gX)i)betEwO8Ix;-0SVDF+>A-8Xo|BL8sVzK48r*R6M+o!yxIzI5SL2?vHNNz!`_!r7(I zUvYnNhJClCS)TBODVA)!b96R$^PRjDq821$#rNv1y3PEP+gu}eWGyxqldS80f2Fsl zTUBM1$npn`Q;eCI85tNC^BO>sjjS*WlK}&AfB_Q~Fu)iYJl(cc`W7B!-L_FY!Qs`* z>s$Tyge)oADXkdaRa%$cetU+|%2#=5^CfyV&b}4-G{=tR;0m4RCP{xdgx459I(6v( zW|t|)6zb~OQ}?JeYCP#`4-r;Sm(M$DuzFsE-O}R+9Q7NDUr#M)cRBh%sP1Xgy4R9^ z|92`bbNhay*L+{l@{>X~yBT-NCr9;21T$66|8sebcM@CXU-6IEC+2xq8>%P$>Qt_d zV9a=;7r@@5X7I;k0=kU+Q9#w_IzwPJW4|o-@vmsITd#AN85K^Mn+av27^*VZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&ixI1c@^9NR=7KXXcf}=Vlfc10~{js}+p)sF<#zxEdo|h}Wv;?Mm2(8zA?l{->&>2IK$(CM{rqF)~D|1cYQxjmhSX4h>gq zxf8$g>wdRaCzTz(=zr5`HqcvtL@fU($33?Q?OoCFCt^-8>`-)mKHr`v{-f{F>UA!= zS03>=DKvQ%li~e~FZ6yqo^;Pz?7P;spkwnEzgK;7Gkx~$zzZj4KT2edKL76Jr&}}c z?mFCzb)sIKXb=M*5Dm!)7PBs6_4*e<~;q2#7fUtg&)pbR;Bjy906Xv BSH1uM diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int_missing_bc-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int_missing_bc-v2_ca.der deleted file mode 100644 index 25e5bbe0e8a1f7a3bfc2fca4755e2b41cc1f6cc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 892 zcmXqLVy-Y~VoF%R%*4pV#KI(a#@c|FjZ>@5qwPB{BO@y-gF%rYw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Za^k#(CI-evCPoIP z7KWx#;=D%4T!U(=yGheP9pWYhpqrAC<5N?0aXGGuQ3*MW7+D#Zn;7{S44N3Zn3@+b(sgFqB~kY0*U~z5<}>}9Q?I$@jmfEkGdK5W=G-^9 zcz&)*zTh*}qmNZ|?l6WrY+N#NXPAFhwqM!Hy#;Id&rH~ul`hcqBF8c5*2)qiE)F)g zsM8NMf=|49$=$%o#LURRxR}=fl5Av!S(pqMkOK^usDJ^+$e^qpozYy?QuozX+sBpH ze$he^{rJBw$xA-B3Heq9=!(j$U3)0?-&L+7x}lXTt}arKezdWMeRuSB1=F2#7CLTD z`Tu?9GV3jNkBmO@n_oL_`C_uN-lR+Bwdeo3TlXt{349p4Y*}LP>XeC1?<-7~Eps&O z4m@;XQPLaMqZ|EO@9U(gEm^Snwk6x*MDDhaAE&J_N!zof;o7X2%i-5{&)RUX<<9$8 z*PiF*GtNJyx=HibrnC^B`+o!lj_5>oe{#N3XusH8Y(m#}ri5^BllKDKEBwn}WPi~1 z+V=JlOQc@&jV;04zUO AYybcN diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int_missing_bc-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int_missing_bc-v2_ca_bc.der deleted file mode 100644 index f2759bd0005eef999778ebf1df5c757e7d0c6a2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898 zcmXqLVy-i2VoF=U%*4pV#KQPK`o94$8>d#AN85K^Mn+av27^*VZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&ixI1c@^9NR=7KXXcf}=Vlfc10~{Lv8wB(l(SWfog3}W=q=NodApH4-}gJ~&&Z#)e6^pMO-;QzpU;|q^42e_+LU!= z@$VEFc)lk@@G)95KfYGHuXLh>LQJvC85dTzUCar6S{#`Q@8=)>bw@&W&6SgPy8_j{ z{A;c(5%dozlX8%SjJ!4`!9(50;CT z9K5=tL1gXW3A=cgON&jMda1~(rJHLEAc)LcXcF)4hjBUsBnKNI`nwZSC;3Jp$#cRKp-%Q-`%29f;YLb?> zxaiZrmThcTj=P&ZNji}JA^+nklUGtbspeK@yOtWI{yoalw}J8fyzT2xRx0$*&|qc! z6md)OvYlw`oUUw^_z1x(zF~ z$L%PX@u%guU+wHWCl|k9NqzF*+Py{vk9l-D)eMeE%c=ZR~1Bcr;x{gH6X0ssr^ BQ(*uA diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int_missing_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int_missing_bc-v3_ca.der deleted file mode 100644 index d6b64a28ee09a333c230db62e5890db30b640b3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 892 zcmXqLVy-Y~VoF%R%*4pV#KM$hZEC>F#;Mij(e|B}k&%^^!Jx>H+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4HXRJK%&e%;$_D1nRzAgxtYbqK#BOIWL=<0a-xBpIIp3Jfw7T^k%6hD zfn}69uMslWpqlD#(lk(qxJd!%f~4g5)KrjDusW`ZQ3*MW7+D#Zn;7{S44N3Zn3@!@gDP^c@pkZl4@2Z}i!+Q1d+BlZb>;yYFu4ef=_(TPN>PHan#LFfn59 z3e%NLzlF*!-h041!}UjBR`T?Dl8>VIzF1~xws=#V-`sw)Ides&eRI>zB>$~+NPnju zKO;1HL94A+R%^*=zWDIJ9hnF6CUf>bd~^M%*zF0cMXu-FubpOdL9X+3P+8;C=KJb8 zjz9KF?#R8xmEhrT%V*oQj(>rc4tKCL*Q5S?)|0aQ(*s_wlUY;7d@?sS`|sp<8`c9l z0SDS=+&62fpUK3`$iTRm*8q}iWQAFn3>c6D449~Z0mjJS`S*{lQbk$TrXQ~vczatz zmn-#rO`Kj|Zot(N;Fhh<>nz81D)Gj`u9-h|+1%%~mF}?nUoR>@-R%YIoC`cx@Qt!AefnQ0YeB>@|ujXGk3ix?eE=w4KlW1!1-OS!XNC zsdq0ZRmd1$|TsnDcup01UK13IG5A diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der deleted file mode 100644 index e58fc6bda37c6b893696f409efad6626aaba1b41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 915 zcmXqLV(vF+Vk%$2%*4pV#KL&)sfGbB8>d#AN85K^Mn+av27_8dZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH`F%J1c@^9D3uwN7* zS)bZE?O&}bw|DA|yDZAr6pnr{<~y|E|49oUt<0)V+BY~KEPn2L|K`aZo&OTszDsMo z-p8XMzu-n3gY_0S2G^2L6RHFP+>V_z@_4u8`(~C|_d;^zrr)0|9c280>x0UL?{gKn_kklkA%)(^AfE-}Jv<3_?Mh59eCgJj5z8h^^ zeXHUrr>W_yPu^*J<|PF&oStXF>!`Nwa>;3yS3#@>9(%>Lx8-)ty>*>4!uWH;n)EaI z8}3FVM5KNY%6i|Y9Fku2>!kvxHy8i*rE@OzcEucctg-mSspn7J5@nZ`J$-chY`#*= zscRh**~8Kti#88Iq&3u&)t6j DEYx76 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_ca.der deleted file mode 100644 index 32f8d838f9c042cf988e66670b8c88f463ba7d0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmXqLV)i#^VlrRA%*4pV#L6&ljR3y^FB_*;n@8JsUPeY%RtAFvLv903Hs(+kHesgF zU_)U8K@f*Sn9DgaCo?U-C@(Y7P|QFCB*-qz>ziMiSCW{Srx2EzT5c#}AOsTU66OvF z_EiW;EiTE-OE=^*-~ov;^RSi~$0sKm$cghBniv=xnHU+ET9{ZwiSrsEbLrrMCPpP> zZ!@woFgG#sGZ-{6axpbAGBV8f5EqWrzS#5j@;Rj?8I9LinXF|CIKQ60_n_|HIo?|+&`=~+k z-Mc4dELYoeRlenxPQq*3xR$MUlOr9Jv_qI;3VAdb=S|el($4j)JCa@XFMH7~1L4;t z3{wU5UKoqHl_xV5=6~DwSMB7*u&wV_tiSbhBNH%zAezW(%6(nREq+KatRS+4@t>2FY7Bxap^*=kacjN3#L z_ehTARVUV-jr6Qv`!6n_p-;VZ=KCuJnqgZmeAql|wfW(DQ7-9Rt?o|C7Fx~!`^##1 z#f3wxo}W3^KUUbhe0EQn^Qxe|^^U9$IhU>bDX~CziMiSCW{Srx2EzT5c#}AOsTU66OvF z_EiW;EiTE-OE;7>5C@4e^9Ym~$0sMo=Vlfc1I6Q$k`3g=?S1;#-P*>pYkX0#vir>$kx7)|NS?2UB?ljBHbyF6`m)xzn6ffxB(UROy9Xn}e zguap0>l;Ce^)oLw`q_HCV3xbPL*@Jni_SLZm5;Eo5;EiOto{K1aX?q z-+xL&G3{c-#2Dw=jf?$47`3^pF7)kMbU2`+`+MtQ!zceL*R-sb-Ew%N$L=qt3HCo` zwM~&OtW}$v8?o`|HrDHh&+K^@Csg#K#ZJ4t%v!JayIR}w1%D<4ojs>7op_GTdhXx5 z3I0nTmu%F&p7Zh0-{a>LqxY?T#y??stAu}=U);X0>njZmuH9#1W@KPQ4k2K20frDG z!;U!Z?*_lpzR4&wOtfAm{+EH>hx;IthSKy6Ptw*L?#+lg^ZDo6FKHVl+x&QZ_~q=d z-OMFdxo1!Q*8X%`#>R63tTzRQGU{W5h!t7juxhEYG*YOsW1z)kgbN-xR zdVbK~qop=-K0HR(R&Q@{k;}0Zw9*OJ*r@WzalZ0a)05e{-s)Zw?5^ugADb*+$h36U za?6aMXYG+Il4Rbzm#O)?Cp+%c*#>6iUHcglGF*%UQXDgXaa7Ed$@$&wleFdU$un*} zc4u3EZ0HNwa_E_@n$LnI(#?u{s;0TU*U&kYakJ)ZIe)6(fn7#x%>FH!zVWlevWHJZ P*q8m6F=5n-ysiTP^Xo^f diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_int-v1_ca.der deleted file mode 100644 index 744c958826c254e918365578b3065e24130ddda9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 857 zcmXqLVh%NEVzOPp%*4pV#KL%K%XR}^HcqWJkGAi;jEtJR z5Et;28OLYlmFPko(!{8Q?0ZI52IeM4eg=akMlPl%Mn;A&0 zF6)Gy5y?3YtZGwUW!ba$?fBR``B_uOW#)}Dc^({XTXwFmxyv}<^43_@>Glg(==OP< z1T!DDzV#q?OMv{juj@N}L}v-xo~fVSaPacZ<0mR)x((j^Z91CXaiV==oyWJ+Y;2X% zy*)qM8T&luiJ9(PV`Djgo>{=f{x?^x?WXqrEB>|F_p*)4a~`udFKwFMu@#$6ob$zh z?b9pAPEP4sDN(92Rdae(!GTux*9L!|6)7uoIdxxMck}>T=*wc+(oJ6`@adj>CAz^@ zviHg<{(6nOi({4N)g?Ne?R_%&Vc7bLrbqG_iGlk)AGFs5_TJfhFVo@ET_$Em2FAq# z29OAp6=q>IU}j|ej~r&e6ax%1Muu%s*UkR?npmAumQvYe$(Uq0>+wO$ST=*U%BhEx z%-`|?S^wv*W{>iYC| z+1@9T-LFsBoL%v8w&jj@B7W*&(`Gy?Vkthmbor!2g9#Gixo3DSP3sN5YX8?-CsGtH iBV{Rkbmu>XUBPE-6O+u-8bpq(1Qldf&NNTEP!0gtd#AN85K^Mn+av27_cnZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHxxAB2Z=KCaFiLwCnv@yB^$_z^BS5M7#o=w8JL=z8b*op8XE~X|%Muu~LKjrgB?wVpQx5|9| zF7{t5HVX4^FtEK-pK;Em?~BGkXIZP}rCaP|`_4ZsgBClh%i}t$ES!#n&qy zl6?{;_4{hM%(5!k$S~%w=@OIDXET@l+#TLorMPGDGT*DYdeKhr74-ifS#ARdk9j;H>tvtLsAZp_$*Qe0;a2yKFz;4D)=dIDuWmmxCLn}>50q)kvrL?&$ZLGmovn;PM;sEaC`BV({U^+ zyRx^-&ue+SdFI_&iBHlBTwax1|K&gY>@(xMe6uXedCsxkXU#slpL+dl)ryPiOw5c7 zjEe;f_zZY}At)=%!fL?G$oL;Q%z)_z7-ozND3mbVcDcxI=dzalxJu}ka9Hvq{raE{j<3{X3(mXGJtW~2B%7|V zQTg8^@9JaI-&r%5{1$LNA{2FMwQ|DN|0nYD&dV>0I5j1iEqL7n_I0+vO7K5qi7q-kBt+xP>^FJp5 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_int-v2_ca.der deleted file mode 100644 index 4b0c9f54f79fe5b3c253a14f32b3f3acbe761669..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 857 zcmXqLVh%NEVzOPp%*4pV#KL6ezukbBjZ>@5qwPB{BO@y-gF%8Jw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Zri*3J0vx5#sbmzVy-sL$11Yky9u*?)h|trPZBl|sJ?wK6d?GB7R{ zFn~m$tS}3!0W%}xf8;O&rWjzDF)}PTJb7xZ?83!MYPz|(KJ0G&kv zH+NE(G~CO5^E~UD?H|n+``Z(i9d+KoB9_`___DBAU~BRDJ4u_){*>=oA6BsTnfaQn ztFr<>$=yqJW;=3i_MB^(At##Oz51YBboHP>9Mk)Yjp3dbO4vIV{0}b3>pbPI>oPlf zqrBT23AW^yUQZtC=dJrOJweZD%JU=t^J8tNFAjckMkAij+WOp~$IsFt9xJqdyZRx> k;!x~`9GSC>H`yjiru6b!FSq%g^7(UwvJ;P9;^jDV0G_r;4gdfE diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_int-v2_ca_bc.der deleted file mode 100644 index 94c86b28e0722f8a6b4cc19029db7ab22354b349..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmXqLVvaUwVsc)<%*4pV#KIV0{?34xjZ>@5qwPB{BO@y-gF&((w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZBg5MEl!TwB7CqUJQRVDD zW!wL7hQIaE9zHdxlcU!AC*3{Gve+ynEHd`suXYQQ9UE@-EDMo%%*D4c$A+!Ph~Z*D z*viz|ZDK_Y-Td+S_iL*oHom$4Us(6?#4pcRhR5#DJaT)H$k~H_?s@+Yt_pCO#877^ zE&jOMuTsm(areQQt9n0QEM1M`J?4A3ZCm|mOR?ZtO9*zgxlj4*P3&g-xxU zYd_wTS4lc=bRd0aT8CDhp@6=#-i+HUC`^YIQAynIj^`b+elkx{*M_ar%c}ae(}v` pflk7)Kh`h#cKo%{VYWplnNNKE*VFI3(7L3e`DWFl12$Lg0szH)J|_SG diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_int-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_int-v3_ca.der deleted file mode 100644 index c5822db647a96b677757ce1a69e601859e70e73c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 857 zcmXqLVh%NEVzOPp%*4pV#KO4T?UVs88>d#AN85K^Mn+av27?4cZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH{>(m0f{p6u$CFeCnp-niSrto7#JIw7#Wya8X884^BN&@4brLZ0#O5D zhzodtF38L)(S}TpQ)Sm2}^6O-Zo=T zT(MW#8PAs1Qm4KtBF7RKe7ic1{WCsfBK#}NTs-2Q;QWuj-fX*L*?qi1eb!oYUslfV z71bPZlSCPQB%hm5ugt&rQ+!(XzmB4>Aq)P+eHARvIAX}}@lR;^wbq=1KhZZ05_X#v zxLSXGTVfn5P?>GL)ywhnk)G3<*UhRL?eyIYx2H|+pC0(-XF&GN zd#eJSq5^96-V0d!GS}sC|1_nv4bM0IShX#E3EPzP&4xUG%irGV*)m>C%u7Yi6b zB2ZSCh1GzWk?}urm;qA^Fw7Vk9F`mwd-i4ac}tBvuI=~xbu^sMn8~moJuaSarIr0< zTmAP*@;m;p2L??kyX7Y_zuS>-qU_4wH%~3AX=e*rAj@X_>+ZbWQxD0X_`=2TjUz(i z%atvv4==F3tSWlIcH`c%jrA-GZ|sk(ZnkETUp=GD^MucX*1Jrz_j%X{O{w zou};B{C0l(yM~)0-}~p89@#s6v5v)=<5hys7OFfEIvy)kZGAY+TYMvb+OhfJUEg@F k)&z6r8ZADfvgmQZW>K4y^Y^MwJRlk1ufBG{fqfBs0PX8V(*OVf diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_int-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_int-v3_ca_missing_bc.der deleted file mode 100644 index 3a71d9eeefc7c1404a9eaafd4d2d5685987f08d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 879 zcmXqLV$L>bVhUcs%*4pV#KL$@5qwPB{BO@y-gF&_-w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Zx#lM~}}GmDFX;_*qz26E!Oh9(BaMkYoErk2L$QR2Kt z$XtUWsyjx(Kn~&R{h!k+1?PBm$M*>dvlu^_M7Q;i$$ zC2ZgMPQW`ke3|#cv$G7;#T|d}edBCO(Lds2xj{qkTuAlb{d?t4Za&&GIb_ni+Si5O zZ|Pq=uXwWeggc*v>BlusQoH)r^&D*0PnW)VnJKAxw~1BCL)ZQbg5N8b?T>0Xzv-67 z^4BYPcet}In929i{X6qo=L=ij-r4VTID2AqT+DxMt247wmDcW0UhaPPd!S8;+Lx?5 zt9Bbo{=3Z)P^x=N)xEuSucc}D(t0)Xd8Ta!x3@ap|FIz8hx!}g$`!FS%i5<3yg&Kv t!Y}uTf6lS1<8M!lomjr$L{+(NU!4A$qSpt0wfe;K|FZ9L&k=iG1pt)NP8k3I diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_int_missing_bc-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_int_missing_bc-v1_ca.der deleted file mode 100644 index a05e49a43ba8471cacdbad6aed888f428f4f8e9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 850 zcmXqLV)ip=VlrF6%*4pV#KN$+;(`G$8>d#AN85K^Mn+av27?4cZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH{>(m0f{p6u$CFdCnp-niSrto7#JIw7#WzF8yQB4^BN&@4T`Al0tEv( zhzrEajN>!&O5$@fi;ICyi%&|{g}AASQ3*L97+D#Zn;7{S44N3Zn3@fDm zTriLCdgbMv^W^*EUb?M?ccc!Tq#zsh6FWa2kdds<2`_1f{_pFmO>WVGC{}3RyA+)4DOIu<7G0R=gl4@?tK1{ zc7Qz-Ga~~datHyF3NVBi8CFcGEzdP;J0=|ez38N7jsISsR6aZ})b%{>VT@rd7GpFfw?PhFw)m_7b{&pF1Alk>grajgscmZ_?d=8?N_&L?KKwYP4t gZk4@z@b6C(oxZidy>*gTKP~6>spm83U;6R_0AEl@-2eap diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_int_missing_bc-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_int_missing_bc-v1_ca_bc.der deleted file mode 100644 index 05a2c587d3e0a23443aac6e0b4cf62cf37941643..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 zcmXqLVh%QFVzOSq%*4pV#LOi8+<=#jQ>)FR?K>|cBP%O|L9!vY0Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SRCk23 zfg;2aQf0>RnRzAgxtYbqK-U3XqYHOd6QdGxa4@nmFgG#sGZ-{6axpbAGBRwPuHdm} zX^q&_lH|jRQ;*CJf*adSoJZ}vQ&!;`csFDoDM>|^9zX6!ZX z%)aH{P5(Zrdd~5}Hb!6@L&+4sj5~M4Yp$6EJAIn;_D-)&`o1;XxnFoT`W%_UCVU}3 ztGBi6rmQ<>N@*b!_sj#{!XO?jPYj5Mbszho{oS%)u(c zWSXjP&RI$O&tJ-1{BHj(&Q7qt9edQ`{bNqEDj5x3OZQb4FJ_f`SSBA`zxQD1gV+p{ zw6b;S%YK`$nWt1K$?)lypJj!~BUTf=onB%AhcEw}VEc!0QNS#j2Z#Qzn18w3%9o*V zl`}gNGa~~datHwv3^0Tk8ARQDaznQ+T7L2OX=}H;3O3U;b}9y+Saz4YL^;_;F1osj zd#lw(TayoJcgj|7etvUKxXlxls5R{qe;7?+Hrp3e7i7BlXX}e-m3YH_GECF{CdyVG zve{_j=q|Ez>TK@4`^?s48*nl#UfAQnrQ&h%e%j$9Hezc&p0hb{gk!fu#l1|88=v~# zHNX9PpDjjEr6eb{{dIS+py-};VlF$(HqKgm@`>)xjpx3#mCJ7D-Y7TQ;2NiH()#PS z_~q+t?H0`p-m*Zn=aU`BuZBw^NsKcdDF&LasBPD{C|~wHqk*CRu?UlL>Y{ZEc1N61 fncE_$u+#0*s*Eq}?rA){7UCZ~t{nEzJbfDgxTZLC diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_int_missing_bc-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_int_missing_bc-v2_ca.der deleted file mode 100644 index ba5b0391129baf641bd1d53187bf75573bf9b9fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 850 zcmXqLV)ip=VlrF6%*4pV#KM>x9$~=C#;Mij(e|B}k&%^^!63nq+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4fzasK%&e%tYt>=$%zJX;=G0?2F6AvMh2!9hQ?9iyhg}egCeTCK*2x` z;sWt9 zzi!Vw+Ok&LDY5D|*YUV!rWuya8`{`fSu_=7UTEjmN}tV;leiSmXxhFoL#iX&GC=Mz z*NvPnS3CGFpBDc6`s3cO4w^q+b%yL+u2LFT{Plz9jGYN(F3a}Gu0JJRS+?M#d+v{| zDL>ZFYi^%*?a+VU4SSpqTUws^>~?t8Pp@Jj*GS_T-&+_&{f{=kEz~@8$TWd#Vck3z z9>+Bz%+qbF_Xba{O^sq@|LoTpEY7)MLyxLn*V;!HWgIsh4*R35ep7-;I_33*sa2w~ z*VS(_rrxMYIvuiNIpgkaC%?#?Wc(6fbK~}2hi`vwY?KaZdLaArVpO|I*teZkW?YkJ zn(;C*GcqtDhY&ES07Hn8K}d1xSH{XeKH7z+mwuAy-YFLmrt`e>!J+;7ru|n;Ze*{p zXWx?(=sl@xnT*9on^5iBF$>#oDv2&O=G>>~x+(Cp`Q^~htBY-f{{ER-y+rB;;~lw* z{r+F|YOE)`&^o7*_riD!tBQooDv@Qk%a>>@(Yo63E8yEa^8;!Ha+Y1!^J>HS{>!e; zi+Ch;cKd5T)7^)TUwC_id5hHj2^+(=DO|L;qSCOeP1&?oFe>v!a{2q@cd?~G&IvkS zQVjDxrB5%d{C+ZFe(#I_F4l*$1!uJ`>#Evw>BP_0MaIt0t)+Y4EuOsk#;eVGyk`UU fY^a?1`*4k*+k=zyKP7K_F24U#yZqcmHvPf?T_Z)f diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_int_missing_bc-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_int_missing_bc-v2_ca_bc.der deleted file mode 100644 index d26604fb13a33d0d319ca8f1cdb7e37eb061481b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 856 zcmXqLVh%BAVzODl%*4pV#KN#_+8P61HcqWJkGAi;jEtnlXzHoSI{_u&hFGd1J}fDc-NwdF}7? zGGW)JgY=-PJk33@z6+2-2{lk0C z4{?tTV!sN7`0;btH%42o`XGFq!;|#^SJ47v`-wgq8$2Ey^V#`L-R`pM`Mg~TZ;O-s zJ7t>AGwrs@UAg1v)Q!r;eR|&-BW@{0*)89CDDdaC1rxrmeR6Fbi>$Oi7h{)N&y$Xb ze4lS?Z{B2LW@KPQ4k2KI0frDGgI(<$`POhF{bI`rVa2H{7OCk^$WFS!b?WD{gW?Ol z<88|B{A`@MZT|BRNtQgpWHZ^xR~%N~P_XT;JTG7J^3|_;U3b4r*Y%#T3$$l@$6t9D zDZiQLoWRR1Eo%ZBQsl1nIy0?Wz%12q?ANYvnW{Ub>gUwgK048uSMXP!85V{p%y= z-z}RA_bdBqy^5JRbL+|vjZZATdwl0``Vwx$v0Z)3jpGh$Cgd*`ZtPqs&Uwt`oa(m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4fzasK%&e%tYyaW$%zJX;=G0?2F6AvMh2#q2BuNsyhg}egCeTCK*2x` z;sSA?3o`Rc;&U^Li-AsyPfFH>xT%Rz2{|AbSs9p{82K3tni#p5niv@w)~&u5;4r;C zMBt>Z!{MNF(>mpsMttS{b9>(e$=D;|JNDnux$!%tTl>WOyXQY0nRw&Xy4Rlyl#j2K z=wJ?R^|jc~_RPDw?mnZs%$5gLwnsS44Nw2pc=lY~c;@G8*|s6)G_7on|NqS@4^Mey zb0MN7M8>vCdgaw^Su*RjV``Soah%?GsDba4|15WRmZF5YW&88z>a~NVfmT^QVS}qE#$`RsNzY1RZh~ z-}vb-!u(;=-6X5M{msuFdmp_0eQu1~;nZg@^2IC;r#oe5&eaV$S;+aR^4D8Eh<{3(3X!T0RlYvsXnq@}|y)XM{euuVZ&UK#suXU-w(b!Ase3S3I2^M<4 zc5zslTUKY8f!m^OzE94HnoXa)_{IF?3+lX8RoYLf+-X>te2O99)C$%4WwrZOgtmK& gyTv`9c4N!*J5D!(Wfv}awntcD|DQV#f>yl;0M~R!e*gdg diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_int_missing_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_int_missing_bc-v3_ca_missing_bc.der deleted file mode 100644 index fd53875ec4ea3ea2b21e94e41843a482fbb12221..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 872 zcmXqLVoot=V)9wQ%*4pV#KNSbmSe!n#;Mij(e|B}k&%^^!64g^+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4J8f4L88n&0%gYW$%*l~nZ?CG@%W@<137VCLlXmIBNHP7Q%hsxC~;mR zWUfIi)g7a4pb2q|63{W3c_m1$(Zz6H6QdGx@G!D6FgG#sGZ-{6axpbAGBRxbSiC2= z@QC@04NNMWC4FX}19-oBFH@_$5V`u=hh3LBgT8)PU8;0KifP&#;|B_f_12rTmp)gu zSn@Vqsr*{Znv)B3Yt~qr$YzD-R9E&gPr4f2@_doF-@Yrg?VV+3JD)r5PxhZsdSXkB z)v5v^mx%ASA@c$%_ifyu>0N@S-RxeNAn=<`NrL?QpiM_rr)Mgau&+BsOEu0f( zlzw%=JL^A^FRI^)DexGi=)N%Au-Julh1n-z5u3_aA@wT`@9YVfP++skcU!+u%Vy_= zn)2>U%!~|-$RPwwK)?`UWLQ-wz@(XRkkcse=Hf0Bg=5Kwo^7r^C4TMTJ=x0*YEN&U zyxSqj?XmiUSV{j;m#EcME!QrcG)-9L@FL`;=z8o9hPHW6-c_elA-a)Sm>-m#? z-|Dk%c=Pm`sOP;2p@&62&b_(Xmpg8zam?cQy=^ZtUq3RQ(EC|x#tI1wCyQy8&(_*0 gBr3{hzsgoJ?qBwJf$r{=?|%GtJ0CY`TT0q20Ht|PrT_o{ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int-v1_ca.der deleted file mode 100644 index 6ab75e25e1c27900a05c54ac125b704d95ac4e71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmXqLVvaUwVsc)<%*4pV#KNd@wAp}{jZ>@5qwPB{BO@y-gF(6>w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZJCveP=Po^w#+y_H?z1H=(_l%pVEGA)*D2o|2eTMBy{q3{wZ3xlQCF9$infa;uAreA8Q2`{wY0S)o&F3$ZEURr^1F8(N@Z~ zkLnqXW6qihKR!{}aW3zYod2EkUu``lB2OfgPYUdh(h779DE!5ca;v3O{LA&V>VGbq zyG*ry*|sn7%0}xm%fnBc)=jb7l4be5`>|Ij6Z?_O;yN9fe!nR@Z>*CyI{uJlXXxt2 zx^0VH#NBwNU+#SD{~>;!R|Pv)^48T(8!Dq7rEk+^WI9tfDMPJlrQjJYnHA5jKXVdl l7M+){Mr==^!?)FoAGDW#S#@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z=Mj7Z>kE$me$#H+Vo`*nRqlc4Clr_w?P9y(pFUcS8L#LIo#6_oypZ0i$>KBUUnvgUjA z86nlfDy{$S3-X-%tOq?VTIl)fDmbO=uPG%wL)scRN9F*7nSB8Lz#^#DVNks;mxM2hUX6aH7395b;5onh2bN}w@;=X&Gh$o2Ti>yt@ke#m`RPZ3?z}&@bj5kz*Ct;yE_w%b^~xVy zveeSBJW`^oYuV((a#rzMGJAN=c07J7x$r~r+$fW4J%U=%yLY#SB$^1X>zpKLILRz1 z#?_=cZK3a8#RV4yz(70YlB~_p8I4G8!OBZC#qc3&@`jy zk;)05{FIow4S(AX=dHEnxTliL$gkGwcRKZat^IuEtLK6~ozqy?95Gu(J@rdQePGY( m;#<52uf(d?Zd23q@rdX@5qwPB{BO@y-gF(6>w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZRljZ*Nd49hQ*7wLRKFBXn z9;qE3`thDkDHAgz10!+>0n-gIgcuomE|&MiiAwsmgzdlgl=Ga!ts+(1R|O)SC-ux$ z%wD|Yk4X|owLr4$%G=?#2`ME7*R%ike0{ZUV=nKULyA5zOEzh>y9le-um8V`*>jp- zNZHeF<5de9IxZG&JbN-=O4sF8H#B%(=1M5**sDK|Sb6W%+6lL~+OT@9&Kdw+lG z+py%dBxhGz<|PNuw1Rquqd6-~i>hz(x4NiZ-_tc`LG;J%S*PzZS-mOeoV-5bRg n??FOu1*4B&iMoDZ?(2uDr~Q@k_!ghv^z@$F?78XRChi0PpH@#! diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int-v2_ca_bc.der deleted file mode 100644 index 8b9d746c730c6b89ebd537db33f6890ef0fa3dcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmXqLVoo$@V)9(T%*4pV#KKs+!^VJ@jZ>@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z3o36( zZk4+EWZAL_>TF?*$D=h*`c%K#)#Q6rDbhG$#VejYBHA3&B3QXMC7PUj#4P^*8cR<+ zzgCOn)qhNEN3M9On;1XT;0$?iDsgt(>{f@U*iDiiSIc)_d2&FyLnArh_1UbMBHtw0 zs_s0FynEv1qDRN}e!aI#rrY{yqWMXDyU_=ffVCn&e5Fia6TY@kA z;6Hxr)tl&k)3h@!PCA)RyJEhtNPc%CA&^sfoAHdrI~JPEyk66+$gqE(P2#FhPlc

e0D$e@xO}p<5`Zp);S{SCKg8F92{G^i#A#{y7(kX0{|M2OVI!T diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int-v3_ca.der deleted file mode 100644 index 5bc1c59f5480b14b84dc23b7497f7d4b7015e5e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmXqLVvaUwVsc)<%*4pV#KOq3<+lMZ8>d#AN85K^Mn+av27`1%ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHxxAx28lBB@RS+GXXcgYmKnzh&tTBR$i>ve$jGoE zMP&D{3$vKM=CZ1uExva9&GZRB4&9cDJl}ccCd)f%*&p7Gs$sHc%A9&!p8OFOPw0|4 zCO&uZ>B5P5ikF1)L`shz(P5N6ZPL#hF#E4y*Oy24t@z*eZoalj^x`Z5#X@)Q;t>9DcaNUlD^8UQ7d%^C!)q2l&DpIa{b8={wC4h$AuB{rODIaQeycs! znW?C(#*$;=YMb}!sz>P8{sY~wRu|3Pv2{t5Zj{UMz!mKqugAwJhACYxPPSlP9dbTJU1tMdfQe%R&AS9VIT43!pm6}Nq?3~-=7iN`3uOuYOw5c7jL0DbOgF#~Vq_@MsJbk{vG??Z>AI&s)GSMVT-|*^Q-S~cr?>Sr zneGM_I>HZkEkD>Ga;M&dMfLik?8iIoU4G2CwO|Kt!;FAgYyUlXcW~#Md4(5`iFY|g z1RZ{+b-7qff7UX~B{A1Oca{I&ruJ7+aMs5sp*7AOXKdC_dcQL;waayFp8Ai*{rBg- z&{=jxFYieBy2q~DmWHn5Q_KAIj%ja9 l)?wwfw|&I#o2aj~W9yh6Dz5pcd#AN85K^Mn+av27@9)ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&if?1Bo*8h?g10XXcgYmKnz~UOpFXn zEe$QB#CeU7xdx5RRCko2fj-1h8bH?|oD!d!s*B5&O^iy&fyKzmz}&>h&tTBR$i>ve z$jGoWJRoa{&IGwd8DfjL9@$Hpsx09<^)n;GW$l^Y+s~{NJ=E9a_UhQ2ZAQOsZPuL= zJwKsiQFiCcedqfk%Z~Kgw|NBhF8X;q;Lhy3h6mLnIVY-=2{W!NR(bOJg}?*+ z7uHQopX{|KW){Eq>#b%%E>@z4^%hDT6`4DGIs3b{y6ap1d9DoC7l}3B*bsC)c4=Q{ zWS-%y63bTyw_I*BmU#a76z_&iLEm=yr1*jrULk(Rd>07nv7LGMu1bpQ%Yp-PDbgp` zh&-M-znwYx-Ts%4wN#W@Jx>^%MRClWmhe z6zjbBaZYmCr@!UlADNgL85og62$-CJA;idV%Q5y*;Y5j7+*4*9KD6n9S&z}Jzp?k2 z?kr7S@v&#g@&?u;Ev`{fldfNRD_%N@E9tpe=rjN4A3OHsC}*zzHRnKD=J}1cRoN~# z3ICgScKO4dkt)reNB3##`^?zRReWWqW5cd{(Q<2Y=LE!Z*!j+DRxzn9US0P|G{W`m z$~6kIijVG|NXzuyapv{3QY+^z*5w~F8cvGn{kX(`)z7dNFbN zGVN$S)Adrp8Xg+!e4BfZT;4n7_sb>jMUa;g*p2d#vQGb r%=+z^`ZuC&qt9a33F`|#Z8<-k|CC2`!|~%$lWdN%e#qD>aU=}@{Eb-7 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int_bc-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int_bc-v1_ca.der deleted file mode 100644 index fdfd38a3d202447da05a6273ce2b085eab3b9995..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmXqLVoo$@V)9(T%*4pV#KIVU?v?>B8>d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHh8a^k#(CI-evCPoIP=7xq*;=D%4 zT!U(=yG7GL9pV;+GUNE%%;I981A*>|PfZ0m3B_?uj7rF1!^q0O+{DPwV9>G&zu*xdbj-84b{>xs}Q;S z;XW5H$|}e!PI<+uEjD#pk>@q%dk&e2-zue5Zo0VVc=OF)q*blv^>e8l?{=H$V38*q zn&t1Fdsn&Qt+VY%!yTtvcK`YqSjNJ&y1)9A@NS-kTXygMbjk5nV*I7scQU8$=8b#z zN%f>{K4yMCr3{?oE7@8EOXMYGmGvi9}usWit*diWXrWH zt8SE1^h&(8?(xrmc0Jg3vT^nu z$=lob`h*p)Bx%n6aX$9$YSU|algegY-4SVjtxw3@Wv*95`lJ1PyvqY}>)f{g)|BY? z5O{QU$^>UVw{T@e%Y)YPA}TleI@aZfGCoc+TNB?|q8O<-=?>2~@gIlS%&uk`R{qM4 nE|7U9Auy{*XJ$UfxhzJ%Emxk3@KtR8DfDk|^{yF3a}8So*l0xs diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int_bc-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int_bc-v1_ca_bc.der deleted file mode 100644 index 02704b07375f86b7f203807e67fe2d5e80aabe4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmXqLVoo<`V)9?W%*4pV#KLI(TEl>sjZ>@5qwPB{BO@y-gF&t#w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z!$3})*U-ek*vQ1lz|`E>EJ~c$ z2$^e8M|J1u7-&J9qg-YjpPN}+40I#VCGn}LAXlNguZd9!IfNKl8JL?G`56qF7`d35 z7#SJ%dwddK)ur8SZu~68u;qrr(+PEnYd;C*2`#kE5t2LpH{0-;jp!2b=d9Zf*R0I> zqYx1)HE~yYYk=g=zV_2LixyeriA>ui$H(+XXXgF+uQWdG6sVp#hq+1n?%tVo&p zH5d{~S}HERwA++@ms?-XttePWMD)NAz&H;h7cpe$w#W`Mdn8zMXI?xXAqdNMbAuo-Lp0s zEnZiaX?Bqlz9iL7xX$+V!6IIZwwT2y=3n|#=l^J@bDVRL7=ORqAf$Hg`|B6Gxl=yYK0os9$o5?mF7;2X zU%qmlbCl@c^a}He!c7fbd;W=S$vfmA)mz|k@{aP_0H?L0;<|jrtAMUae^h$lG(+xn p1N%=W?rP+CCMml?)q=9R=JCF_p3+=%0KqWcxE-f^4RA*S-ADH$A$xi#$WfeZQ`;jKdT;7o%_S^ zh(=D-^0(X8zGs%vf8csj}qxKp~4wreQgif zKW~Y?X12*acn@p7-6zS65;e{Lt^KMGF3I^H@=Yw8=qUdnnR#WSIFqLI6wZBN8bMzq zOK!2}t@B=?VPCLD*Rj^_wtd4_?P(KIxj7Ogt^7Z^?Q~f4NOzrhL_$VU0&9quq0fDl zSeN#rwwGUqd|l)noq6~5naP2ZD~)fn@4pj&<>j5PY3sS8IVB=hB6H?^ekQBb_dOzH z)2yKWc*f1XOw5c7jL0DbOg+F5Vq{2`UG}10AiP?#TKvrF!rP~E>@_Veo!`%^#`Jud zx3bu-BQqKG-q?DayUBKr#dO7~M?Ehj>lQF+zi+jeay2qL)gWexkLN>w(O=WQ^=*)w zCUyRElCWG$$Z>Jk%c6n~hj;zz5<7h3$=&B-b%$MFEBxVbv0?apd(|@A-_xajrb!E5 z(-Vq6`#LhVBxOOJj%RXE=xM`W9u@12v!|Ej_TQeHYsx)Gewjs5yq|*Qv3_a4U4e7` z%AfEjev@*%U~r&bC(dM&XUqfX-Oh|pECrf7Wq(%uaoB&&D_r}feRcN!lh@y6IQ^X` jbx_jl@S2xh&Rev9Ot$cvm=YEs%g?tPRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`O zLQ;!MGV{_6r41xOqRc!(Wrp#Yc_r~l$+~4m@yUrmhJlgb+NdwiBSnTgcw;Fn41{+84Q{jxtN+5 z85ypfcgUz_whFF0_VB_~wdhSBJh%MYpf5h*lh4El5-A7k#2Wv^O+6pexY{r9&?n)E z$7fa?+}r&BOs{FjA^DdR?=`sEY1htTIUic{?@ojr-K!#~Y9D zF=Smz`I1x>&T>~PN%Ho#M`3Rkm2b#<|A;yFO^?vJ-S_WIb#;EzY8}-nw7A*FF)1!I zoB!xh^WSpEZa!FD@^SV%%_X}l>hCX8mwA*?=<(WYn$OpLmv*kQ6XTuyW6pNRF8QhK zlNikSPhP#D#hoi&boKG3DGRo0hRZ)~=YO^FpM;Xl7oV8Q@}q~8IxenRb=e_k(VOop zepg=JWwT%Q?4(d;OLHb>Mg~UY5CWzlU3vaE@bSyc59frKdHe5Z&2y5u{MXPWSKFsN-u>L_%tt$N z*C(1>dCO$K@s6p2&63bvyfyZ(bR2|z71mVDwC_80_y5_aFNKN{{j?^|-v3*3shanH z`NFR(sn)l21%l5vhHWy<749l_^=%j4b4KfPF2D8egJGOFnlPbn?i zHi2W?)5HT@bEZyH5}YWLebN0B?<0*>f+A(vJ3Y-_$BKymzMvg4GiGsH-i0f?=X2!U q!wi2Mn8M__>*+?8C7IR}zl1zA^bm23ns#(&WVO$s?xSDXCIbNXdr`#z diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int_bc-v3_ca.der deleted file mode 100644 index c4b89c52bb0a80f1560fd32caf61157b98d0b0a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmXqLVoo$@V)9(T%*4pV#KQ1XAk~1EjZ>@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZF%9SC$!d}^vLy5pJ{m5{@Rk(GhDiIJbdpox)-sfm%1 zVOiGfAMa*LOfi?*zATeTFs$f!WI+BgT`d#aU8O<%MyGeJjdNYX7N=`qTQQ@?U;r>jd$xSp-0W8-$2Q#+TIsmi?a}mGdLG->zFvFp z2@6kt-`0Omf~K2^+m@v1nV40zprs?|9wrXR1>*{v*w3O9ZCAK`*K&& zi8ba z!l`~ZrKY2*UUI_2d#m~`pWO29-@M+3?6O|VLyk6SGQAhSJBcex&MV(5{et@fDXv5J o=dRtty1@L{LaVNbWkGW{JpHxi?uspkisKACBXx|WQm_050IxYv1poj5 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v1_int_bc-v3_ca_missing_bc.der deleted file mode 100644 index 0cf8d90db555b6b89d6fd918ea95fbbba415d9c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 892 zcmXqLVy-Y~VoF%R%*4pV#KJhgKHY$qjZ>@5qwPB{BO@y-gF&eww*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Zdp zDMmGs8|R%^eXOLu$bV+y$wgkD-FkJBgNwvtufzzuE+!A6zmm+Jhryx9N(PXIbuP zd^b6=^-PaxL1#d8k4$5YfAy-hD(X4i1v8iDq&iH=apk&Krn2?ljjRjY`xS26Jju(9 zE!-o&H8|H|%E@Dswp^OC?ts}WhouUZ50~zYs diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v1_ca.der deleted file mode 100644 index 8353d1197a2ba8abf07d7b91a4955a172419428c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmXqLVvaUwVsc)<%*4pV#KKtio!fwyjZ>@5qwPB{BO@y-gF(6>w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z08GxJJx%M9a_6Ak3Vc@0erjEzi;3{1@pO`^nkjgYwp z6;yYKnt=+$A+lx0@wu7B#X#4^Cnd+Hrs|@&tcg(xIaC-~8JL?G`56qF7`d357#SI^ zHET>*`*4Ot^Xi>l3eGztjKpU;=XXq3SwC-0ij~l<`b;xZm0v73TS_bXcAnpMzRpv- zzVAuL)ABIBg7#Z~&g`t8_E1m#P4P2>zJRs-N~Sw(j3(LqVyY0n+D$|)3k1{??{y*Ds*>~-`W|eC%R9;`ctk~&f-^8+8 z_oOGXC%;?Q))4XEd~dnI&CP4B^6piu{P8CEnwYOpDz~GP0UOP=%%Wx~t=<%JpSD8N7!S>py#z*-a4?FS<1CaFQ&SPS)9n zmmNy;7o7<-_^q#dQthn#`6sjFU%avtE15aRPDsho=eCgc48yD2tg_nDah0Ows!b^rhX diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v1_ca_bc.der deleted file mode 100644 index ae3403b03843f346685bbbacd5c2797e699f1efa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmXqLVoo$@V)9(T%*4pV#KLgg(%*oWjZ>@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z2`NsqZuhzbm--!u5T} z-W3LK$f$`dcpk65_SjbqtBJbOLcPykmxtb!t1Uf~y4mMuHGeegOFo|sZWSA~wL3O{ zEc_MpE3qldFp|yg-{EZ6*Y02XtTHsL_62_~+*qWYVlcz*&PhR4?h0d}#oIpdtc=py zeyeA%>9W&nEo7OP85tOnLkO69fFZ=laGI(9o0^1NMD?ayA-3;cK9u#TFSOn6*lc>M zVlp>V@U{3Zoe1f$m=fh87m0keIh!ARz42pulkCDhIiEjibv`%Qw|w#A_z+F$RF4-0 z7ryv48wtBMUE;E^K5^3hwLGi&)VieacT|Nd3ptD#y`%q>&A0qkDSK$4pH1lX+1cDH zxb}pfUn$~uT2-5G-JA(0v&s@bWlc{JeDNTqi=nP&+SHAWyBFqbdd4r4X=;D`=u%v< z6tlPV>Ya}td)8d+?%Z6kIbJO5$MU?6*pI1w!r>j+hq{eQB34a*`uH*Xz5VmWSCr&! lTm8p^Gc0cUGlM5Bd~+*rr~HcgBy0cc_ZEShUBYSpGXSLVNI3ui diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v2_ca.der deleted file mode 100644 index 9d33839564a283f2fb985a04a7346837d334543a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmXqLVvaUwVsc)<%*4pV#KN%mkCFi|8>d#AN85K^Mn+av27`1%ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHxxAx28lBB@RS+FXXcgY0;%Lg137VCLlXmIBNHP7Qwsz0C~;mRWUfI4 z)g7W{paOA-Y?*OY&~@=i$?>VFASWSQ*2IVsDvYcQ%uS5^3yz#}y_=i$e!jzDRmR1~ zPMG#F-P}7}YW1>NN4MzKKlW3b{(om+iddcG$!)8BH#aSP?ZU9Z>XkmpeQ~_{a>9|8>|1v(e7@Q4`b*hi zUfyqsM58>_gZ^IcOnWYA9kI@N61QxI{2|kKi;OI)HICkil{@z9hfdF#*_j=7+U0!{ zJ(+Jl>F@Nll=%^>#ddnt-Do%AwryK7_k7acw>R(prR8Q%d}d6Yv@L(TUxx!<)*YM9 z-AOgCzWl5;RIyy}=}u3>tm5p`nFs!CWIU5>*cSXjTj}G*hd))tVt0IhvCZ}}$Ks25 zq9q^S$7GvLlMyIheNOM>f|GYR-9t+h;Um j=e6uti+A`)Nd#v;@-y1s!lm`qy-lntu0+`3dXgjnZ3s;? diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v2_ca_bc.der deleted file mode 100644 index 6de66842415438a55ee428c7dfe0620f2f9db1ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmXqLVoo$@V)9(T%*4pV#KJJw^sxai8>d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH2 zu0b``-J)rr4snY@nQ?q>W^pmlfk2nUr>25jh2pp-MkVC1VPs`sZerwTFlb`rVrpV! zWH`Lpef3M9JC(1}4*4E_D)Z!Rl4Wv{SY6ckus9`Lc65_v^sgYfd3=Z(7fszJY7; zBJK$uM?N(3Z7I@TrlHnsD6&>C^Y`ahE5hdc1T22G@SA*rVtIew`~1VDNshrszh7MJ zD1X=WS)fhPE%kE~3U07IkLXWpy>4#%T|UxzTFk8Z?yqjePbv3(9w2qLoYUIVlJyX4|+S|xADSmR$m&1-fwk4i?mwD7^e)zqgP0yV~ z)UzUv#{QUXz{_13%EZjbz=#||z|;c_Ax4I(B^TcO?G-fPP^bY=*s+;E8Rb6Mx6`ey~5E(0L*G3IASh?^Fkuu7@v7Z5i{#9g0?tiLvJ!UFy5xAmZ zibKYtTfJK)H(Y<4nV~+8G(`T6tl80! zt!Vzz?B?}Z))OvmpB?I(ow7&%PkgYRdh4F2D%%&eWQsoB{Z(ayNklB`Zyw==$hh+1%9qac9trJl#)%;l-K;4dsVg?|Sb908RQ*q5uE@ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v3_ca.der deleted file mode 100644 index ac2ba8db68a3b133ed371e80f6d5a8e3b9384827..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmXqLVvaUwVsc)<%*4pV#KJiF)>Z>vHcqWJkGAi;jEt zk%YQn(Von`N+LTJ7XL|l_}=X7z1Uj!TI)OS&t80CV$$~abek`i`O5omv<08`4Jbi}soy+QDlV@o<-mi14mvD_&BpnD#N=Czj{GFx($u3m3H zefB}IPt4MU+Zz`+=4~zJJDx4=oE-ivtJ2PFO`_02K4#mp8P~hbcmLY>zDob*ziqJGDq`R(SqA zD~-Pq`I9ZSbTctCGB6^C5HQ^ULx_h23epLq^W`cUIpp z?Pfo7tET0|{Hmh|9!|feGuP(N>(8Bk_^%#a9>Tom*^+5mU)5@3KU!^eeOW(qdSG@d z%Y}`$q4&i^mefr+^7`woWp!&7NdB_4ytL`cqY#4}yGdUCyZ-Ns`J8NAk>|{DYp3C| zc^0jo&%W0$aniOZ2y@+OdfD`JYO&<3m|N%0Jnnk=PNz+Sf9~1`4!b5gc1@j=zxh^n n^L$q2UsW#;JKw)HiY|dzDsQ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int-v3_ca_missing_bc.der deleted file mode 100644 index b0104b19d963ab4ba6c12633fdc35b6c64add86c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 886 zcmXqLVlFahVv1V8%*4pV#KLeW_>TcE8>d#AN85K^Mn+av27@9)ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&if?1Bo*8h?g0~XXcgYmKnz~UOpFXn zEse~h#CeU7xdx5RRCko2fj-1h8bH?|oD!d!s*B5&O^iy&fyKzmz}&>h&tTBR$i>ve z$jETItL}1mY-jBg_g9>X=5bfOKMP)Yew~F?Vn%e#^i<*b^K>u9c~45XfBI88R}xda zx4h5Ggo@mwQ{8$V9IDtjV?CQ^$E*#!->Lj9!iMFsPAiNf72kR5es+Ir zm#KfDaq9%jdy<7r%!~|-$RPwwPQVaiWC*_JFMT_F+ZZwcoN%z0iL+)80V)QkeDP)&6CZ zswV8%x$|p>URJu%{bQz#rZ$^iS@LLchFn*3xpB|WDeS9;eSoQheMRZZh^mkn%^gqd zKS}I*bLG#Az%4peTV_>N>_&7@}0<`rtTCX)`wbS<}< z%sjCAaOhHtIhV#>d@VW?MI7*`Td#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH!v@`X3;b=D)Xjnl z&AM%KG8D9b{JESnt$u&gvV#4qHmK#kHu!sD*Ei*aU4ptRw?D3%-u15Jf2YZG=czRU zn=1MCWXT=)$+rk}Gd~C2K9S zy`Glyt6sP033t(CVrFDuL=GWf>H&rjBf}XR4V~=Oi|;4h_$tH{rNHbf8ZgQ)|`Cgg7E<>WjW2(sYK7qfP`cE~g*2(g(7JM~J;$WW4W7Ek+ z`)591+<&iNcZpVmn&qVIlwyX&GiAM!4DJVyH}6jk{Uf%KPcCZv^g6@N_#Y=tR;^{x zN@$pJv}Tjn!7Rp?ii$TiCT;L!O|j1Z&YQ`_viYI<$smRWMd#;Pie(sN`$wqDNqX-s zdT9Okhk{+HZert_sK?EH$^n9R3Z{jwOZ#`<>`YhjIzMmAGdm?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4W$hvL88n&LS;trnRzAgNy)lphVjXXK!$;wIIp3Jfw7T^k%6hXiD{HL zuMslWppNR!(J|11I7hk6I6gPCxESb0piAOYQ+2VpuZd9!IfNKl8JL?G`56qF7`d35 z7#SJ%`IZEolaYV^C!_oQhGVtY=C^!Up!rJb*gNgykizq;mo=&Ny+8NcSB>N6G4|g& z&tzV#PKwDOqc-B{ed+pM%2|DiDlW}LZm%$W|Gi@?LH&(GWU*A|)8mWEVW=hY6 zOBb_^HvPX-6a8S;wH@+I+rIK!eri?uU-hh8_sp9d24RtMvBO8DLxAl#~YXYUS?L0ekRX=uXr?0EaFIK$%psu{Cz$WgY+HtL;8P}Au42pd#i(RHwxcIHo zRlSh*Zr|(6a&3{DrH;>5{cUQMru(P;@2#*G^L|}_w%&h1MBHbtbj7!io!2^wHnJWm qG@dDFb#STEiV0tDyzg#uPLgikVjK8jHCItjT;G#zPxmq}Ndf>Dg;eMO diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int_bc-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int_bc-v2_ca.der deleted file mode 100644 index aa60d303b1b146e53884c161ec5a18d1881ca172..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmXqLVoo$@V)9(T%*4pV#KLHN`>Fvi8>d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHh8a^k#(CI-evCPoIP7KVmV;=D%4 zT!U(=yG7GL9pV;+GUNE%%;I981A*>|PfZ0m3B_?uj7rF1!^q0O+{DPwV9>7fw8RFf-DayJs`g$A5VzydGRMKGqr9$SCH^u%NSvCyn7jz zys9<)ed16W*RFyM9rM2{NUP@0t~71qE7|9@RC=%Qf`xyge_MvH`M2FCl1J;Ou`%<( zWc8`G+q7TH3Rj+Bbh_}vIjrGNXs>GKj!pj+YcyuaD6o3UuvJhC}U<(y+=F1-zQ;iNah5A;`z$P5)wZaa;z1fcW-yRgs1PmZQq^3sx}8i zC|p{&T>0(Fz0yp~j0}v(Ap}f4zz||&5EpnV8vV>{>uT|tvvx0Fjt(%-D&wkPd*Qa4 zee;(C=eYi@o^QT+Npt6EWliSgAzci=_v$=-UZPOG-|C{>&cor0jkpz7{}mBlyFF^@ z1i`bLgg}Kk=LUIitbWN8Y=bd@g)dyt6-( zky~s>(z}+8ZiU>zVfUF{+kZ$>_jzDmmr}IsYwK*Lb1u^+{8Lx%?)EwBeq-{Z4_8~} zzt_C{VU2C!{8tP1+J52aDm*p2>gqouwoBTztl_t^)jsJP#p|=@25yx%eB`|90|(m< ntHWN2OB(z9rsgn;>^alV|FHGs+MJiY`ls?|rDh9nj0*(-XTv~w diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int_bc-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int_bc-v2_ca_bc.der deleted file mode 100644 index dfc67228d8813e9c2f8808c9d36e80284a41156c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmXqLVoo<`V)9?W%*4pV#KJgRaH#<=8>d#AN85K^Mn+av27_EfZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHh&hJlgL9Rk~UlXGeatJZ9GB7tW@-rATF>*0A zF)}i2i}o|*S{_OEvN zk2l&L?M}Tae&A8EsQ7X9mv-Ck-CuK{{k8b{OKdM1mZ|u!^blKlIcClo?cgh0^w&qp zf7Q9NWLb4o#4EM4^@lfHsP`mSATI?V1c(JKGc&>KLrSr31l-}9bcRnOzf(Db5 z<39P12^%dCAwXuEJ#b_XB(?sv|A%1fmc%ul$zn5|yN z+a`r)nr*yZqLjs&=Fap*Ei~R}ZuPF;{&Po}NAMyqmG(S;6^j`bT)AEI*`Za;r87{+qCwFWrhU|5u5KSKIN3 zA6ph)owg`~KW3jn^A-zEjYFk(Jo>NwT`ppOzR98d!x_#~jPK1nV-)@_c1{mlI)4q9 ze2Q_w9LXJPRJbz1*RBKy79XpEYmq@f-5@rl|hF`aVpd`{=r*?-x>6*pP%xf<((2Uh`%&P?P0 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v2_int_bc-v3_ca.der deleted file mode 100644 index f081b0bba28908f9692394ec613cb0cc14648ae8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmXqLVoo$@V)9(T%*4pV#KP#(7iz%E#;Mij(e|B}k&%^^!63_!+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4J8c3K%&e%{AEV*nRzAgNy)lp#_`FC26E!Oh9(BaMkYoErj`aKQR2Kt z$XtVJs=GzgKpo;11)vLZGmDFX4g|UBnt!cDI2^yf**yKu<*4`0leSLF*>L--nOk&$^pULGjVV|2!>l*l z+}-DryZPYr-hX1R!R=EsnV1Dc$aZzBqm9lg78zID05Q||rA zDXQmY{nM&yZF|{h_;P(vIoI^5c`J`yN);`=cBK6BV)Kqw*-B;$vb$RjU48t-!`b$A zfp_V3o{0x0q+P%HYVY5_Z;sDu<<;L2tJ;$LDW=b)L3sV&3ExxJ%?UL)`*r1g&4Rs= zDYc7tGFW**Y(=VBX1uKZpvSd#AN85K^Mn+av27^*VZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&ixI1c@^9NR=7IXXcf}Cnf8a8OJ9l#^+`h7XwuQ1q|fGc@0erjEzi; z3`{MJ4Wq<)jgYwpjcrtSmx+N9#9i7z*C3n{pPH(R$DvJ(O2|RR$jZRn#K_NJ(8S2a z)Wpchux{5hU1<@aLWwO?WcU8bt2XA_vUBEpx7nh9{#G3Qc4W!d^^-oBz1*?$>Kwb@ z^P28EFiuVG{&1!IH=&W+?o+32YLY2u_ zD^Jbq?rd&1fx?DG3|Wd(en_fU7ixTW@b9T}znb0{ZniH{v_hLj>HlfVdGDtgJ~#3I zedzG)MDN`{>y$*MP2HQYoPGX> zr)wP_u6n}0Y_ne0nHSp`CLT1(TXr^i)ol?8RA%DBG=3MvZUuAu`K+$Hi zi{9_nd9v@+WnJzVyb`^CZT03rmBg(Peug!iMN0zr-n|widSH+0B2CxH--6Og<4W8& zJ1uIzDsVP4isb^=?Yr#XzjD~`i2nNH*W%+!tGW{Oq^ua!<5P3KKB~EFE4x|YQ_vIZ zkF&a?Ua*_}ck@kf?g#-hp??Z?tUJ1h0&a?~ZT2G07{t zoi`)-e9ufW0}?{m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4Mh!vL88n&JY~l5nRz9;Wrp#|i3W1wyoM$Q#zrPa2Bzjl=27CjM#x-) z3aUFq%|Hd>5Luu@ax;sIfv$^BN{&xW)kSex6QdGxs4%iJFgG#sGZ-{6axpbAGBWI1 z9#vVk@BezkRb3u;pRJj=EM>3O&KJ*$R3F@*Q4r?y*Lv5&96kRR+jUR1+qbj7n))g8 zQ?{+k#de03mW^M|ZP0$JQ>nh>wfWKgEE7&0Y6QD&{56V?y0^+H z@4UO>{i(S}cV7tT?O6I*N}Y$)C=I>^y1mY+@4Y=dGT`_qtfS{h*mxe>4Ri zy?t=IR!r^eY$r(9SGZPE%fk<@3}XJZftDL(A<)| z&hkc9hTYT)$C;QJ85og62$*hwA;idV^h>j1qvA4wV?SoykSLC^D*DH2#y9;K>$66A z diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int-v1_ca_bc.der deleted file mode 100644 index 9947637dab794efc0bc52506263ff537c947a6c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 868 zcmXqLVooq)FR?K>|cBP%O|L6#x60Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S~UOpFXn%}tG?#CeU7 zxdzo#cZ;ThI>apsK)2*(78e5@2y{t&YN{@}6Ea1am>C%ukwXZWdVnFs$gtsn`IFhIzps4IYJH<%W>DT}E4_PC-1oi3 zQW{w;&t#=s+4}Upx-mcgcc(Eq);V{v;<3Z!*UJj7ZG0zXbCGXN8=vV1JL_X2zUgju zl?`peizgV&?YY5!cG*h*r#zMEli6PU;5hz!vcj=#w_AjcH`wGSZB2`f%qtBp>p!@e zrM35tSnJ0f+H23>ye$4^J=dc4nDY9phwJx>wI?fzeA<5Drb%G_y`Qxc4R$|XeXY!I z)hf%c)2Dj=v|N&W!=cDxYMT8^_IEe*G-J9pRc!m&IREbTWqO}yZLIb>8=LmnucmHF o%EYf7F{fPS#WwqNdX+u3`{}D4H8ZXz^|t1urt<~bmrp+d07_X?rT_o{ diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int-v2_ca.der deleted file mode 100644 index bdf1ba217ba60576aac24a01d9052017a9479d8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmXqLVvaUwVsc)<%*4pV#KLIs?y3PV8>d#AN85K^Mn+av27`1%ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHxxAx28lBB@RS+HXXcgYmKnt-CmP6!^BS5M7#o=w8JJoaT1JWU8Xh&tTBR$i>ve$jEU0 zx^8xJpPiTepI;3gJb{*VQq#(P&z$wN3JdSaotwv=#(%?&jYl?sPioGDTX9Ep+*Y~e z8icklN|rgeSD)w1Jz=rH2j}YU6Og;L*_j$foG-RVK&zIf~9PPbdEE%$jlh#hLkznf^)aUavKIjvV+D zdBIZkwW_3oVdlCTU(Px8;T;O@$z?k7My=MHrE^%UH_S59HQTqfSG3SKX7{`mCrcz4 zLoQep8eg97cWHO!{%3pC_f{F?+Z8H%@>@&h8d_vcW-OdkJynzGS+UZc>Y6>9RnPBx zR-~!*Gvi@mlxD4!5?|Pso$S6jlk(S}(O+ei>F4pqZU3{b$sLUzOX7mMTDQ)SOk3>1 hm?`zvlh^feP!>mpj`|esZ63cZ#5ye2-`?=+834O=JE{Nx diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int-v2_ca_bc.der deleted file mode 100644 index 7fb8dd4855b91967a5631c02ef43f4deb9967d68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmXqLVoo$@V)9(T%*4pV#KPD!JJW!djZ>@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZF%9SC$ud}^vLy5pJ{m5{@Rk(GhDiIJbdpox)-sfm%1 zVd6>Nw)K3)6O6>4R#&mQbEWH9K4je8akF0YMUhLO` z(lo=@(d{$L5A(f$5*d2ee@cPkM(5`Te{6h|Zt!{K*%0m0wT+i2b+FrLPg^|wul1f{ z=@Jhf-oS@Vi-mZSo6qS?UABDL{AJataSW{cwd1cUf4x5SkoP1*-%V*Zy}st(C|EJg zyW*{@^EZJh=U-`G@cOeih{LbPG}+evoSAp#iL4Vj=^M_rNPlZQYT6MnM{tjwaJ|~e z{=o0r3~3syLKn+!C|tZPaH5dy)udgGr;c0tui6-_e`4FGX%pFlA4onG*n4>|d*br? zZH+4Tqgks;dgd}QGcqtDhY&FJ07Hn8q55W1f#ug+@4x$gT#Y++e&gEYY-*fNp-k^27FAPp3IKR?YpSw~`B#iG^ z(-pxr#(Nkpn9gju%|F}Mz%nZ9kdQFzw}6ul+a)$T3I%Fh2`uO7XwUwr{N(k`uG3{J zp7dP1#WhXRWB!#*+KcpfIC2e7%w*q@Sbnjz^sU9Nvur;%sV(n1$=elk>YsJaVm+<) zc%v2bT@!4}5BUnNDE}kxaP&$9Uz;}*SFPHd*xoZLGnx;zwpgG4{4nhb&&+g&3sY|1 m{5FMO_Gl>wlVD$upkLePq;NfjjKD?OTNbm?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4Mh!vL88n&JY~l5nRz9;Kq@)WKu(<3(8R#l$i&FN)Y8y6N}SgSnQKr% zb%&@Ks6ZSd3v@wlW^pmlb@55b@u{gGCm~$c#HfTEDvYcQ%uS5^3;!;ia3^W8;?Bbv4@k=y85$ri}DiSNzFbwb^# z>xDyZ<+s>WujW7J_%eOnt$oL=o~S&j-ubtkvpDq3xf_iMoYtIzH`R`<7i464{_yu%T2Pijl+51qNsxA5R?kE=6og*;#8v92lLrqHK5Vdfh( zf-3gOPq-E%&=WP``hol<(H7MQtS@-C1*@cce+fyOW|4c>F=noJw$5XIHA%L|mYjR* lg+=mPrmYV<=CQlsp43q$$H#1W+?zA}@&mtAIPO{B3;^UlN1Xrw diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int-v3_ca_missing_bc.der deleted file mode 100644 index 37759b59115fda3c7c5dff0ef77644e566aa28d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 886 zcmXqLVlFahVv1V8%*4pV#KQPu&Tj)=HcqWJkGAi;jEth&tTBR$i>ve z$jGqpmYkoUMw7BZ!j&bHlV@CczVwyI)AHYs)90+wG)bDXY2~Tw>%zPpwltf+aLWt1 zbu#vkX!_a2`Jt7aa+aOWrdKo9m7QkM=Zm%cC;IJ?`W+vmz^#-2bJsF!BqmFr>FItp zK|e`9xAGpFbX|35R`MN1lkkblmNiVin)mb0#G9Ay%Gj;m?R#BZ<2ei0yjP7e?uT3W zD|6O;%jeQ7j*^vAdH=7v;_FF;q=2=>R;9Tj@0g5^6@1By{?J={*w(dq*1V_-PwvI$ z*PY)in5kv?NVWIoyVi1MMut>{@`aq&yaS{6d_8Q*DlxT>DO;;Kbf19U zYAv=5X@~W5;=X*X*U-4-+wGodwZU@37ZFL}-S;ld;Vu+4ovyWWkA21NSw0S}&s~3B zka+Py_I_FQtXfUJv(Xps{WaO-p~8~?bl$hPl9Rdzbk&sWPs_RJNNtah*lF=%avA5b z&^Fe|44g-{Z?oTf#B}Or9U03!L#b)FR?K>|cBP%O|L6IT10Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SUdvg@wux);O~;~X+Sx5NZ0FX`wmkm(jLo_ASNy*6=N@r; zyl7?Fp4k~wzn{y#yxso(=7^;Ea$nObsx?1tth#3XNWf(3H1i)Ue%}*zJip)Ix1(VG z*57)Ciq~1A%1?3Ee7hJBU~IldsKKuK!Q>YYtAun{l^+s&{o&En8FH`XvTfJ;^j!{r zPFRPQTOn0XL{_=4r%UajRp&s`fuN&W+ae-N%>+=C_-7Sg*3#IqwYnyRC z>zR!-GZc_(2kBomO7sV*BMsP%jQI=#xg)Pz^3+HZSU0j q@^0_*{p(+?6>6KBz3};hH+Pge{yViDdhVz-F%CE}Bkb;}InlM{gq137VCLlXmIBNHP7 zQ*#r`C~;mRWUfJD8`a%qVqgSump0H{2sg#2rt0ExXcMCna*#2yGB7tW@-rATF>*0A zF)}h7EXYYvZFQE~uu=5j#&xTHy^4)G&z2wj;8v4|%>P`!$CrhQ(&{I^s-F0N<)@Ra zDgMH&LEc$C0tdvFSFE%3Xq=`ZE*lVjWbT2gU2A&;^1ZyXShaT_KOVk)$Myd&^ndkj zJegMd%E(BsIYs|XmezygI!4D9*iSv=#(2a3?0vq1+1G`%4nJS{((6Rhw>d(q&z0mh z@2aX~d^zX#RiEoxF7qOzxf>PQw7OX%1eRtUw>mca{b9kkpXPo`@pW7D-%LhJOE@?; zYO-jF!RN!a8z()mw+_FR5zn>BYeC3&r<@og?`pPJ(&d+fIXJQ(O-ir`niFv({;lb! zMP>;be_HCgx&#M%GBGnUFd~N#Fi`;;mOLTSg$_3wcr)D=@eA=;pIWr$$HP`K! z3nkv=4|r@<+V(g(^Ed46*r2obe3@}{uhFZ6HdoKj@ik07@pv0&^9!K{HTeeb z*bjBz!)#-gALmhgGi`|p!?spGJM|)u<;gaS)Ghv(y!4$lZTBiU&q6*Pdlk84xoWJtev70H|F5DD3{)(mX)Sh#{Ox-5`aTU%Ke!hRY=Pk`^ p+V#Jm#hIkFy;{O5_V3~&VTIF%CE}Bkb<2$6lM@Z(#CZ)(42+FTj0{XI z3{9iNd5w^{293>Bca))lKEzQPKt~}Q6rY-^i_4Wwj7rFX#mLIQ+{DPwV9>;S?^v+=AC%*<*R;DeBGp%#l5U6k3W9Tt~2fP3HeLjRd$rZyP5jz2TMsSB{W9xz;he^o42{t#A&s||{ z&v6QV_1G^`e4^g{(isQRO+UIH%}HK=PxPH$X5qPgR-!tuX6Cs?CoqZbnUkTn%ZyEE zz0#Ar*KKMa8>_0umMuwe&h0srdTv^cBL8%2!vpC(iRNn>SF)sE-ujH|;z0Ux`l6pBuN=HRdM23Kc1F#mc~+V4rkiB)@9CeB)#Tx2e#%vP mTSnS(>FK#A{`6$6e;v`e@hAH_{VC_T-rK|&9|>dZOa%b+156?S diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int_missing_bc-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int_missing_bc-v2_ca_bc.der deleted file mode 100644 index 1dcba8d3b83af3bf24f4c4bf4f676976539c878a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 892 zcmXqLVy-Y~VoF%R%*4pV#KL&9PSb#wjZ>@5qwPB{BO@y-gF&eww*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZpConbIa2LH$oRm;$d~MIZmkp~PW+XpK{-9j> zOa8H6l6x7uaom&-i>j8o?AW7n=))1#qxU-|oY=>6*;Mk|yi2zAQ5?E%FWhPbe_YYi z3|wXSV&l`fS{wFcf7*U{{j1G;Uv6~TKf`0yx~UIldLGM}ZXy5cP`L7O@frN{`mL8P z6n*vVm|xqE`Z-b4UH_FcF*7nSB8Lz#Q2|4Uks)%=>tm)#5| zU*k?QbrEB)olwc9A{Dp#M)F=GEv;!2=j*K2in_J-OxOFp+|H9~4&S=h@cj0wz0;SN zX*^#%(ZTKOj<%3TllEG$Z2YlMgKtq$iPvYZOZ9C2H{wL{nihzd-zS& zneu(>6aP;LEZp&WyUCXuKQh@HZk!IRUwQA-oxiuLeBK(ig>1Ot*l6i}-xK#e@lk7tz0)UY`>#NDp4@5qwPB{BO@y-gF%rYw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Zh&tTBR$i>ve z$jESCVMVndXYL=7fL(vzzIB=Hes|N7HGSK@TW^hi^zvS0q?_9!nWLR^rt#ddZdI70 zx4uB+jL>Idqdodk-VcVD`pKYao>qlB)GPWKD%C>gd%lfH5L%JKaAUz(Nbbn(Y$ zrI|l7HXiZ6d&g%-z7yY$y2YmH(kIUDEh_nI;Ai-3%fvYgH`u8b{`}LEd7-m+$nbMmwG`>C9DB+UsoqnIQYdu4Wj#Smkbv=f|XNsn{y)Tc0POmWRm&+Qw3F<7j4@+B<`GB6^C5HL9bLx_=~p#68pW4W6m@v?V~rI;gaybZT@?$%tj zZn64G3m?&~+{)9gO-#HXW@vP7(?wCXm9oKab$2;0QAzrmyu#_Z_>WyrpK*w3WMzL8 zalBZuIAo3Q9-Hb7N{)@!?^w3j%Kb>V{OFsM_ol1;ZmVbPpXmb(5v!`R?7uWVo``i^ z@v`$|+Dm@Tdev20-7|WkHoU*_>)iQPpUv9IaYC8L3+MK=%6{wEZB^=HvYG#Vt@6oD z0ahnoM(+%scjM2y%jrBy;`)>H^{$2l#Af6;ZaitbennH^^r@25ig;SZBbRyad3M07 pKmX=zjo$K?LcYIkuHW4zqWxU{*vG~DsyN*?Xjc{7<2L>&2msSRRyY6v diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_missing_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der deleted file mode 100644 index afc1baeadbb9e9ea61b27b41e007a839ef5ac0a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 908 zcmXqLV(u_#Vk%g`%*4pV#KN%1;DrG%8>d#AN85K^Mn+av27_8dZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH`F%J1c@^9D3uwRW>Q%v{S)V6Q0LpB`hZ1|BqVfNy}nx9{Pd{;`ZWMiCT zQagqF+a(>|GY5OF#~$au^UBhBtAqaJIE9K;Kc?@QyqT$e|GEiJTqtFDD++271BdhO(U&6vs9%X$;es+IbZ&bR?#^lf5+Mxcp zAAIdbyH}MzzCH8Q4qL@thjq6dj$YUHB7e=5B|G>h^8Y$BzjDgDU%Fb>r7iOt6kp#u z^kBdBF=1ohzk#g_mU0U+F*7nSB8Lz#kpV-9kwH-C8^SzVvg zllUsBHrAW*t^Vfsb0>N3`1fv2M)eHqYnRJ+UYvbiIBwdP?Z^G~gDQSnF7w^EziLPO zoWCoah!jpeoN2e-8y*LOkk;@-YX+wL8tH30ZHuZL-6V tKW^=w%+E8Ojs?EVn7rxZhnqVl-u7}{Ep&G`%SV-)8~@3+FKoK+2LQiGWGw&y diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_self_signed.der b/security/manager/ssl/tests/unit/test_cert_version/v3_self_signed.der deleted file mode 100644 index 70cc61d2480a4715641e4a760e7720ccaff741d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmXqLV)i#^VlrRA%*4pV#LBQhRbI=0myJ`a&7D}zC%A-4f18*?ZNn=n&o zu%WPlAc(^u%;lVzlbM!Zl$V)kC}to65@Z+V_02EMD@n}EQwYmUEjJV~5CVyF33CSo z`znN_7MEn^r5lPHh=N3!dHBkV*0AF)}jTVp)Di#VKyz_kTxTO4&$vC(8w{*z)km z^+Qe_u6<6b2I|iZwAcKN+I#De>Nn*~)ry!)hSK@pHLf50t9^3z>yGE2v|D%FTvU{{Eq~VwB>}#V6vIC-OVWMeRTQGgM&D|LiTk>R%@D ztYb;CUE{dfwqL1?Q8-;DFr`LDr|NN4YqHwRhtq2npVxn^_Nz2d)4xkrfQ z6}C$up9{@9ye#7SoR@A}8N(^JeuidlasB0M>#yz85c)DdTKuOapAS4P9LqJ#zVcOefB(aqIf2JK|3UF;(VrKKW}J O6N@qfn7c0KUIhSAKTB`` diff --git a/security/manager/ssl/tests/unit/test_cert_version/v3_self_signed_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v3_self_signed_bc.der deleted file mode 100644 index 44e21bebd0c3167275a30794fdeb177224523698..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 872 zcmXqLVoot=V)9wQ%*4pV#LBQhRbJ14myJ`a&7D}zCfA-4f18*?ZNn=n&o zu%WPlAc(^u%;lVzlbM!Zl$V)kC}to65@Z+V_02EMD@n}EQwYmUEjJV~5CVyF33CSo z`znN_7MEn^r5j2aNPt9{c?8RhdYt{C%&|d6GR*nlcT@8l z9{c7u98SLMyx2!^v%=j!!W~g3S0@QF`uEtqozWlvQHrzTcYw3s47)R%0%j!4?p3Yz zvUm9yTKn#C$KK!)A+bIEFLi$!H_BdBjW&~g7&r0TgzwSSucF?!e#(R|ND7e^ zW??d5Kn^fq`T+(QP)$~{_cY#nu}jZR@OIy%&hc2?eCN9ZvR@3QTXLP>v}k4VK^e{9 zP}y&r?O&B1UJ&u@K(fzrhpmIm4LKW4L9x=8J1 zzQ4yZs_ghuZ~c=Q%hKGJ{;2=(xlZxl$^CuKp}!s;*m<$Bx9aJQ`h>swFW&tSS6Gv1 zIA7xP-m5q6FrA4>?$r>>YEpd@(2|kNrak|{iM2ES39pE;pWVv)c!gE^Hc}us@M;d+ErFO^jm_2<9Go&8+ beVQ+DZCf$lfptf3Z&e7~nW8DYBvkV)9zR%*4pd#KNR1(q+KQ#;Mij(e|B}k&%^^!64m`+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4Mh!vL88n&JY|OQnRz9;Kq@)WKu(<3(8R#l$i&FN)ZD;4N}SgSnQKr$ zb%)3q$Uqz-T4oZTlpLR$3UUg->m+Va3OOrrbod=1}{;D0WT#)btUR}L@fianunXYu(escGstp%;{U%jA}=>%DtCWqqWrTJ5o!`PYIkdik=dR+%mK zNJ^Hg4B8>{G{%G>`o6~e>9PLx9P-S^7iO&f!Lv)`p|h~gbIV(LZ*JUDKD2}5($iO> z_c*nU3OY4g=3Za9z2ThyAK93!&nF)>-v2T2{F3E6r^ek2Jl**B@$)@G87;5W=iKUqff?*^-{g>7=KZ3&;YDRh_A;Viwg z57!DAJCu6r{?<7D!R?`T=j7QslOuett@W!7itF~XOe%4D(!OM;`0BT}%QiFQl^(~8{_UMX$LU;BYS?%>V*um4x<*zxpw!Im%fvYQHd^`5aSFTW;n>EDq_PWyH* z&3`oC!*FGi*JjfRPj{?ZR5M5AOASkc*sG7;>z5mzy)s>Q`m(pPglB}!;oiK_a3yo; zUcXtT8m~OpT`wJ@u0*0vU{y>#kxPSnZWenG`L3uoF*H_!2n slzGE(HLPQ9{RM7cCqtR5<>yYuzWJTQy7KYE)0X`zFPGceG%S_@0JZx~LI3~& diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int-v1_ca_bc.der deleted file mode 100644 index 45c889f517e9ccaa985553fb9b17c5c2256c0fdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pd#KIUbP11mujZ>@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z1sFc5w~ymm)3>^&w%rR&wg5_p;tNzf@w2 z|JEFMdD+e0m+rX}146^Iv$y>FT+X{TCz`M5*mi3_{tf!wCXZFTd2-)H&$wHn*tZv6bQe3OEjpj_y}&lK zI@3cs>}&8&yM6VpYq#uq`rP_E&+A{0)IZNi-1UL;sN;;apO(z@d8YA8K=tCsWR+*P zvU)$CI%Z~X@-q3%0)MUhjD3RPw=z^+>`uHs44#rZW%KUq1U~tA*K%_09^nOJ-g=-gx1y zm*(2@^2XIt>y5v8tlRZGGuXG|)vaeUlnU4FDW6qn_@;m6#=c9dZ*s4mVYSx9jc+1{ u#@pLn(h2)@KHf|{W-ND8Ow)Sb%{i3`A?Kzvo_=}Pj>TcNqsou?s;2;Wvsq*S diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int-v2_ca.der deleted file mode 100644 index 5d2e7e592b423813217843b02306dcc797377321..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9zR%*4pd#KOcbR$#!(#;Mij(e|B}k&%^^!64m`+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4Mh!vL88n&JY|OQnRz9;Wk&JIi3W1wyoM$Q#zrPa2BzkwmQmuoM#x-) z0;)Si&Oip@5YaM|_@w0c)Kpy*7d0^|A%_MdD+6;ABR_*d6C)Q>6C)$Tapf7SFALx4 z?MakW(IPc!AMKyb7#5|iECG$*?d0+GM*E3{dR()-`=lo(f zcR_^u{ie>PzTPEzFH+XE@cp{!vZW>HSNeX_ez~O8otrN${pg-!xcTetm*4i?c)Vk2 ze!Y3VtQc2cz2N(O)=r5nQrik+o^QTf`ZRWp`CE=Ioh@xlXFD$aT-sr_X6iEMiIJ?c z1pn+X{5<>bv(DSw=Dpbae0Re>%RkvoV(YJ1o@Sn(8no7N!`~+fqL1vX6#Zl;u7CbF zO{XFBVC?$(j%I_e67eg1u5NfD*On>#U2~&;j~U;&GS8iUXCl{gv$>ykzwoB;?c{on zw$Hbjm>C%u7xNlG5{RrY3zGo@a)1Go4=}(O8OjdT95|^{{K)XqOdG*{Vog56KGNidwEa z*L0a@5BvWd`GQ-gC8Ca2e0nFk`1+=`4C(vq50|am!h1vB^tWMRS|*#vdG0yQRnbbf zr<5i9PV&3-ZeJ3g;qvykpX?S*nY=su-^ReInmR>fP?bcM}6|&AE{D9RSNPSs4HT diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int-v2_ca_bc.der deleted file mode 100644 index ea00b7b5f26e375fe7edb41715787a9f3ec13c98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pd#KQRLMZWd#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHm3PyG^`2ijI!x%nKwU2mD^Hu-GVEg)l86K3&X{XX$uO{u9d%X+c`gQ?nA%NPb^e#<^8F9_`gVK!Nq7ffBR{h z%d^ih#un#D)V<_u;D`zrS;)9n>&IoobC0H+)O>mE>aG%X_9MP&k78q~AY3um65*i3D>&?q8{c z4MpoOGBGnUFfQgbfFu)HVHPF>2IK$(CL&;fF)~c>(U1(+`7GqP_^{e(wiQ1ybqrFO zv1486^W>H5dDgIc%|0sq>Vf*tR}rE3tWA>$BvNIlh+_-hEBD`5-;~*RwCN zOLGV)9zR%*4pd#KLgqFq;7{8>d#AN85K^Mn+av27`1%ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHxxAx28lBB@RS+GXXcgYmKnzCe&6eO|Ee)LY}A5BpSuOCFp()?Lt0P#$J^?Vi;F@$}|3f?C{G7uv4I_3LTu zkzK!O;od*@CggwI)V=g`;Y3-Z9b87;FU-Fz>^F){$@<){wsOKJwH}A%*UWfV9+8zj z6t>NIt&ET_2)wvEH}?=@V@5!X`hK=>7;kJ>#xcz4dDBnVSICIJIA3}pXGnv@?9iwTdsEh zt3BWDpUMnaex!D{%HP|IrEZi(l;}(o7iryNc$)KTV@tK|9@FC=Z|Z&d|7<>&#@U?} znbVn=85tNC^BO=Bh^#ORlK}&AfB};aFu)iY!tQUluu!R!alvc4+ucFeM?_2LCOL*K~`cwa!u`t5|xyK8$4eq-ix5=)}UA89t z%gV3%%@eil6@Fh14SW6S+4itSmX~6dWfz<<@n8MFQ@ljZ>@5qwPB{BO@y-gF%rYw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z50*80?vt+!VRRE~Q~ld0qpS6xd5)b#me-Aka|72; zVix^$u_Y_~`=i$83AuqE!;+@*`E5$%i}pJmI>}Y?d>HGt3Za7`t~DMj_Lqf7&R^c$ zBR9d*FQ#r;tr2ggW_sDvX|w7%TMcLJ+#=(``14_J<+a~?i({02cNtE0|GV#MZ$ZJH ziu=xSuicXMSZAusH`P13&kj7pTIccT$knGuUx$9!TgKE<{<{86@!sPq&-*WJVfNne z{lSSW!;fD}>T_~-t}1Kfjy<;akkiq9C8f0<8aDUeXl-<9uHF^EYFoLj`Nzy@OiW9+ z?frdr?lGU&@x@Hcj0}v6c?}@RMpl@G$$$Ylz<`Mg7+{PH0fKsmN_Gf*TxOV(^>9&5 zi)sDRJx<~w+jQp7u`^tKhr3n6s_?A-lxvbNE}y8|Tz|voQtBCt2<7TuzDpIVT+TlW zcqv=bHv7Zz9oNnTeCDn0f7D)ce1mmmOOsIfw$FlG$#>>WdDs6m$(jH4oS5}hJ{(^z z%$`!VB$_|m_w0v0^LLkIYn--rEI+*Y(n+iHZ_W3KPS-O&SIX;A(elWPb6MsYg_koX zzbXtq&(NE%wr~BT&MA(Tw|6^;i{0%zb|d<>kdB+o)!E`JiX@u~U$yz2W$TYCI4N>l y$!%qXO3Kal+^eakGf!u^I$zXT5ZGRK(&2*+r^C;E@n^5UQPx~^>*+_Qkcj}UyH#ZX diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int_bc-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int_bc-v1_ca.der deleted file mode 100644 index 87bfaf85a4e4747ce3264ed623c3bb0a7ef69eb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmXqLVoo<`V)9?W%*4pd#BBJ*!+@8KQ>)FR?K>|cBP%O|L6#x60Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SZXJ@uAJO2#I)IFS;li8BbIdDGkY!cgP9zD-gs%_5+^;U zAV$M2z2x@eB)O~*mx)&9KbxPNENyqL5}S1Rlj5rVPfn-R3zjm@y!~tccmC6pXY|aI z_7?su=&|N@MAqbt&j(v{ua^pWa=$uzy>+XRig?kb##LTN1D;205ZTmPyJr6LgSM8E)JWSC{t)6V&*s=QqxXx{aOKg^aXw+gV- zPdb+>I)8O;t4opC$9oxkTp4G34!qx*D&N}2XzLQ#aWP>(%Y#o^rR|=NwlvRrQI|01 z?g{PuAGy<(UMigwa7i>$N_Lja(QAT#>@Q!Ak1pSEFM7@$d+&~R@9d4{8~L_f&EI+3 z(#ApdTdGo9-?7}iq8ogbnmQtcu7B4~*qO#HamPY?0lQ{hw`=jHgBcq(Y?)Q*DgCdr z@IFVrzWdIT8zSdQ%G;YJ-8~t%b?zGZ<_DKP|5uK16DtZ_Y191qr7qVQW9=gXf1UoA qM@4Dpm~5zuv3lvDxqD7Uf2XwMXDRQhNvrHz^rKffoHW%FVg>-h#z+PL diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int_bc-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int_bc-v1_ca_bc.der deleted file mode 100644 index 1dac8ee6280e10d5608e1ee480d8245bec06d24e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 881 zcmXqLV$L;aVhUZr%*4pd#GITfZNSUMsnzDu_MMlJk(HIfAlH!FfRl|ml!Z;0DKywn z*gz1(;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`O zLQ;!MGV{_6r41xOqRc!(Wrp#Yc_r~l$+|#Raw3pnAScdiXkuV&WMX7sYHn;1CC+Pv z%rz*Zx^q+vlpxNLE;9kTAU-t}BO}9Gn=YT0 zoMV#3!p1xI8a*iec)0$E%A%izq93yt^JcoIKC81RyLGkh&;Lv)nJa(>Tlw)8aS|)_XW^tDN0lbYkxbi)AjNGYgMZrw3bX zJZz*tvaw|9H8Ep{>34T5_%LDn-d9iKt12>^4Wy?ZxiHJtwzO`Vj#SHH--vzn*tu45eMa`aYJr$jjzw7%C zbDkNdwo4CPvywkOr72~ye}F*X?0zA?4c~H|Z}a*6uWa`X=P){!q(A%BM9t#Utpc5! z?%FVQ99j2!j)K6>Y$0Kh3`r(Y7GthZ!wK?gN4GBfG5?&wluw^KPj~DrxMjKJ;_9@c zOCRmHwext`V)IN36D5Y+#0cHurm4;Uc|R{XnkMjzzq@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZY_WUiBSnTOc+@in41{+84Q{jxtN+585w5JcwLd% zex&`N`I9f!&*N5U-v8^p?gp_`YI$;N3EfGf7`+Z}RMmTK`?(X5$|f_Z5-eE0*|_@F?`C z?$rL6uP>mJm!+Du-9`5K3FYO6vp$}W?YwXH?!v<`&FaEqF7{HshfKC8+bZ#?&U^g( zgVMx{2WFOj-RS<}vu;&4LxEcN@^#W&*Kb^Sl63O_;|&3N5!{zftvLU&W1*79YIC9U za{4!(Ub@bAar)Mp)x3JQ-`tLC-OdygH)Y4U@+TD{i>o%4L^C`pw^+X{L!;W^eCO=+ z$J5;Z9A#o=WMEv(YXC_mvcfD(1`Nmn224c20Aplu(F`gzS@L{qsOo#2=Kn|if}btj z+|-lJQF2^xTIX86c^?IQRr#8~ohzDf>u9>ife$l3X+2o9zWneknR$h~_!T-5>Syof zzTsHqwE2B=^TDZws&bDVCw|w{kFx2teA%Jiy3A9oEzjFXxp|*)OQ&qfrF=EUGiOsD z+$m3#t~@X&`SL-fr~vsA;afSUa;X-TuwG(1 z+4}79`V#kRn@??e)$#qg#*cO{v4|gc%-67lg>c=AT)40>abejpua1lP!G)zc^H=2l t2>e=kWBHAv&f*_BctuY1T3@T@5qwPB{BO@y-gF&t#w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z0agKDE3D5=csj0eH+||UWgd8%AtPIRejQk7+O^jSjO^l2To7Vm= zK6_%<{#y&ba0gzysg;#ssg#h~WyFzXxcGJM(maKo6A$S;lFxsxxagLxuJUchUED$! zZb`RhWwe~$`e3|5?t%U|4Rn74IX)35*crC+y8 zFnfD{KKbRdMa$$;)#$Z?$}Oy$^;0FMUSV^5boSWvW(C#4_o8iJ2%$dqp zxIpUqy4!!JOCDWm?|<9+e$w>!F?lIx*Pi$`ao)oBZGzHobgh?)_s%yf>CUL%S^c7> zO!Q0e!o62}(~gOssoc`%EdFuF+NX?+i8&ud{4(=dbIaqeFl}EU?wrc>f!C|9&|KYp z@i)PmyVsx1uUUTS>TuAZpIk_8#nHL`;)u!&#*`z uEa^H~;i~xXThHOvI&H~KQL4KPT7S=9n>+pal7}W`Uw6zt@5qwPB{BO@y-gF%)dw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZY_WUiBSnTOc+@in41{+84Q{jxtN+585wrZeW{h{ zx4-B47l&^XW=}X{o0j?BGpYJhj7`gn*P0uoUAc3G|;Icf5wY-Y@N?e>KrS- zdF*JIx9av|J{fP0ex2Xnx&Mj&&W0QA5}Ur92$Is~_!}vZcHh$Ra#N37_P4oHORINU z{McDtm7HX=MAf?LT!-6nl=lx?o+?!SnRez;ea_9N0U{3{XT0{GcHQa6 zEM4oDEoW!04Hn#`JBO3;w8{Rf*Sx-YwQ?E$S<(?>v)qlnS-`*M{RI(|-?~bRFXm*j zUz@vTX?TLjnP+bkg4Qu^3CciP)Tl zPC3~&AsaV-UiR$ZB?T7uh9=u(%;wdfBaUu%kI0sPw4(dh>($0t%m+hP1vgFfVtN+C tc~*$|!tu6ga~2&~afDqmz-6||=6$mlT=zY0U(0zVb^q6L=i*j|Ljd;pP-XxC diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v1_int_bc-v3_ca_missing_bc.der deleted file mode 100644 index f328e5f5803b5d30cef586758d4065bd383c2571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898 zcmXqLVy-i2VoF=U%*4pd#KQPGNyUJdjZ>@5qwPB{BO@y-gF&eww*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZEafs2pbO$tQ+4sUuZd9!Iiwg_8JL?G`56qF7`d35 z7#SIE>6ty%+zkslNS?eZXq-wkk!PGmDCXj|+y@?QEHLX{UYIn_Wk( z-nCSVo;3M$li~3X?J}`=R%hAUc9B!GzdohKmu5~3E#r@r`MfmlSoriO z)<2?8E~pRUJG(|Jt?!2GPFKf?%O9&YCr7NW2v9v>bEIr;`i^&RSC(9yypQ3&@2X78 zS?|tO-RjA!+uC2=vS&4`uSUM8;w!!W+~H=j3`Ubo6K zBe7*y^Rwykk?;R;t6JDu{BzmEb$HG%?>C*_Ux@clHsAO3{mGqcKW@FKHmOfZq-zlX Dsy15< diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int-v1_ca.der deleted file mode 100644 index e6eb034fcd9a8a576bdf48ac5acaf298978facda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9zR%*4pd#KOq5yT*W*jZ>@5qwPB{BO@y-gF(6>w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z08GxJJx%M9a_6Ak3Vc@0erjEzi;3{1@pO{2tljgYwp z1ypy4oPi9)A);j_@kzzv_oRk?TP z?_95PeVlgk$Nr3f09}Cv?hih!pF4MJMAMs#P5N)TS+?~s*6%3eGH&N~O57hbS$ZA6 z!Ys3d-BRX?zV`|XFYMV@!)UZJ_}lfpCfO@f?)_!SO_SjHw!(7BB^J?jW~bKm9K2p& z!)w~u+`j(I&KFyi?R#vRAJ^t=K2vOW!oIj?N@dZrY6*6a_~%o^bvG#fQCJt__+nkyatd2A}h?oWWazNV8G-93@}E9@aBzTvFBE}>r|Vt+@JjRmi|}f2Yrm$ z(wXnoS+BMH6SWGvXPuDot#ihy-uFhGQ58}vKL4qWobh_k6PfAfpKO1oYLyeRp!sZs zA8-Bo20o@Q5+4O$tva_-cHz$O*A6zRmzE{Oi)CK7F?thJANI}9>S)5G)_dQZA6`)X zS0#AxFi+Et$4^hjYkn$JluwH_RsSb>L4xIvr2hHK;oV=RTwjxOfYFMJPf0*gBsgd8 zd0(4(Po}Y6DXb`!zbt-|;hrVq{0T)#l4luahxyqa|NZ1>qEl4&YLyFbcxn&aYc-m{ qxzjQ7%BF2L#e(q%47gf!bi-{woid*1cgUm8WNOp@X_Eg_e*pl_=te65 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int-v1_ca_bc.der deleted file mode 100644 index 6e95cd2543c6d22c10aa560619196cd3ce5c772d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pd#KN$=`-lNA8>d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHqpM0-xD`J+O*BK=BJ9Vz1GcD zF3R$04}Lk_-1)>?$kagh;Ib6CK;aAaZqZq3&Tn@%Pn*Ax>*t$4N6zdp+%uulOzXMP zrlV5J&C=et$S|-xNcnfEA&>dw#$P*L?@178iV^Q#_9WuvVV3JjmnL6dxIjMi z@9T4+n?+qzU+xTM3BBZycCmd|yvkVz=_Gs6BYX!ZRnKg`CTqGm?!*g;lIA(HdyPLl zW$rJ?{KXVH|7sQ26zklu<%gzx*)f^vuK0|Em!1AUS@RcVyNWIiZkW7xdZ+!?8tZM^ zOI936^krgZWMEv(YXC_mvcfD(1`Nmn224c20ApmBd3n;;F2|-%_k<$XYc}1U`nKd2 zlX@RVW*hI`t8U_qHR%_Yzg)~D)xJ<6@J`qC&gr{UtnX&F+*{MNXw$Y?t*`WA>_mT; zu&5sNfBSltUV(r2zLG8xL-8t?)6yb8@{^B-hQ?MJPcJpJlf3wg>-xN#_Yc$H3!% zyojyYhvi=%ENw1iZ9L____L1^L#p3-X@O63|E!eP(RI~1bkybGR-QG%o~v@UuREdt uL2PUH5}iZm%APDwk}AD5OHXTl`J%##^C|IjEKj#KCvM%@^11YJDGLBkMNt?4 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int-v2_ca.der deleted file mode 100644 index 8412a42dcec20c965694a547ff1490530c83db06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmXqLVoo$@V)9(T%*4pd#9U)C#ekQMQ>)FR?K>|cBP%O|LAoKg0Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%SD zoqch>_O1tqcWpa6&xdnHylr;Ov7_v3nKpTB-|i|P&Xlw@+?LVRL{jKe;r%+6oh%2_ z8aO|Eu+*w`@m<;=-%xq?-I4=^ndt?pro6{lKku*847Gl7+UI)svc3rwHTtrhcU+R6 zt6ZJGP=1~MwjH;!zmyigZx;DhR$#E}{mJ0v)!NTJ3e2mLREoAmH?9vp6v*XMdB3SY z)O6DHhAatVqpp1x%TDns^s6kbO;{Z>bN)USIe|58CRHy!H~w&IGq`#5K-899U#6aA zVrFDuT+C|#Ng%SqEKCLr$N>gSKEMEDWSGX6dRFje`L<=bZ7LRPG8S0w`MGYhf3CFH zqMM)HeS@;ZHc#i(i!DevW$O09QFsrt=&PKBpahMhCzH8uvv}QIwsWFrRnAw|DEaO; zrN-(P65omTSQIQwc(&-s)k#jyYd?51-&((7{*Nu&ZU;wkXSF;w|M-~s=RN+t+j=8o zt4!By_0Y)v$jth9{^z(LG3}1;hW8xJZ1%2yobJ1a-Ba(_!Emp#oT%_nVf#8SslT1> z6C<3GP1_kBCQapvpF8>RvTMqdCOCbc_jXIoQ`4FUp6XBb9-Lt_Tky?~qOjPO57!;s o+EhL(XRN!f_jZ53_n#e)UOsmFd+$ev*8Dx({vW#C3Tk!&0HkR~Z~y=R diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int-v2_ca_bc.der deleted file mode 100644 index 2254ecdccf8ec93f12bb36c3c3e6ff4b50b4d7e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmXqLVoo<`V)9?W%*4pd#O&Yv$bgrPQ>)FR?K>|cBP%O|L6#x60Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S5* zU@rL4NiqCU#MUo71-m0pYP>ifz;?e#)M$q2VP~gFq8Fr1V<}8g3>FEEdyJEKI?-`k| zIi7#K;BxfFTUMp7#-*ou*$y)8xOVGQR^yztz9(9~>akcH+uId$M7f0PSw?F7-t>)v zysQrHlcZ#l>sF|jWW43wawurS)H6$V1+3rjV1CwxWhcMAd#rR<`he~2UDg~No96$s zv0}g8oot=5BfoN0-~0EkH!an9Zh7_9{RwQF-%MpaRB-g%q$4Kx-IwpuS#s(0aY@-_ z>V9@Qu1w5~42+9;4Is%xR+xp!fB`wcfQbkgV2ljRvq~4OC^&TV`GRZDwuXJ)tDy8w z`P*5Qd3#F*rE|A$VC^)q-Oe-5}Z{exz#w*@oKgHb0fQM zHfy|CxA;%jB;$kIg1o&;Ssm?|ma@)Mc*XhQM9I;ajJ1JVPwP$ZaNWWik|wcC`cy9C z{=*e^amSAa)LykY_AJG3hgB3;sO!o4c@zImyBH{P@TA_-Ti$u8XI^mDm|Qo?Yx)20 zYIU*a)_E#&{Qovu$Zk8Zuzt>oX}_YxSa{N#=I@Bu(sim*`{pMN&j^Wvv|np4t+enw uWm+ttHMLj#%*9jE9xKkh+%+ZF{p1$U%?_1cbXKPJJ@hzo`;SI^tug@B=1_Y8 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int-v3_ca.der deleted file mode 100644 index 58571751d18f3efea22599fef113023b27720049..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9zR%*4pd#KQ1KTh4%&jZ>@5qwPB{BO@y-gF(6>w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z08GxJJx%Z%fb6Ak3Vc@0erjEzi;3`{Kz45Gw&jgYwp z1ypy4oPi9)A);j_@kzvwu_``~1sfZtUaYb?_~K02DtTQ=*+&F2>upN!*N%)Kv~ z?co0p!U=gC+48>rb8g4$eSYPgn$_2FVS>nAkD%8|8Sko>>fYV&vGK;r4wab?-_)acfD)T&3a#3Dy z(&g55u4R6Q=bQG%TQyDTx7?dwS6J>*+7%PFGd6bP;=BJY?t14QEW69{cH`r+E3=Fy zZMbox>7+-M!#uTpFWEf)x|x2OcBJxCYs9XTtzl{>zz>SevBc$mdiE9&7&-cxQb zKWV>yb$2OKZ`sYn^3F!)4L%nce`fLb9X4~;4BY%F`E{VKg8jjwTE%x@5qwPB{BO@y-gF%rYw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZLVX+_oHl|8d8x z#^jDYmB)o1I~^~Din`dv>Bpw>-@-)35{FKj&UQ20yk?tqg zo@RVL6XVDG`6d%HBLm}NUIR$7krifPGGIUsFkqqr1{fnloi_W4oxeYuhD}~`da=yc z#dfd$N9Nu>q2IPretq%`Qz2V{xtw)hYLzZGs%3uGn|eoO8vm=V16OxGC~W_tXW=?A zc>a&gH|6J^Oq)1!-L6y9H>#gbFuT9qaruRW#M!-v84NyMX?cDwA;bJTLzM6;!LJ2E zpZA^(le{$7qK-GeM)qaS7oX}m1so5i+y6RoENRt^YXaX=zV&pRFHSgZa)Lo*f3Ya% z{Mx0GSA6zM-KjscS%vkM4U==@W()f{v7Z)Ry;rBXcFwV<4awYh-{!l{IrR6;|631l zH~d)8pSzXA>P&23?N@<+(_5}B+ctZK&8{7BQ!m|oD7iKD_`BSfQ*S;$`&VM(9RSW& BTkrq? diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int_bc-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int_bc-v1_ca.der deleted file mode 100644 index 7c70010fdb8d569b356f4d2745aa054fba4a4548..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmXqLVoo<`V)9?W%*4pd#2gZJ-hh{lQ>)FR?K>|cBP%O|L6#x60Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S~UOpFXn&5aDA#CeU7 zxdz2lcZ;HdJj5*$WhOv(#HXg}qC2XIQ3*Lr7+D#Zn;7{S44N3Zn3@;)&AyY`B4X=|9{c^OVX;cl`}dm zF0OW6y+BAjTz<-m-`m};#z);=a^}l=c87JU3$I^Z_CUsPe&*~OPVp<}T+`b;YpRC` z=S`(VMJ8rO2FAs_29RVTE6l=Vz&%jJ^{vII1Les`K=`TOJ!{q>Ct7fw=Ro9g3|w|%3F@%>`{RrA6)E?X^P zw=7{@ovFq6*COd;dw$xw_){(p6`9xmENyaLTJ>eaqQj3ElUQGb?Y@0muJGfAi4OCB znO4UC_Km$Dx7$5*YuV0d>8GAts|%~dF+Fj~Dq4H{ sjYHWY4%Zonf1Ui*AMm{8)}5826_Y+Z6nYXq*?sX-KCWs;{h-xr0H_^IU;qFB diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int_bc-v1_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int_bc-v1_ca_bc.der deleted file mode 100644 index 0dccbc48dfb971554fc6fc18b3d9d798e6b804ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 882 zcmXqLV$L&YVhUTp%*4pd#KIJ=!(_nA#;Mij(e|B}k&%^^!64U=+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4W$hvL88n&LS;trnRzAgNy)lphVjXXK!$;wIIp3Jfw7T^k%6hXiCL65 zuMslWpp5FyQ87@0I7hn71n7eJ)Kpz8?rLIGLJk>5RtDxKMt%l^CPpr%CPqevWua~p zC-v&x|5s~L!dmg^aOdkao|X@p)NX4?$L_1w-d$AmDeq+CMxDjx=cA3eZZ>SZ%B*uO z#p#%XRNH2E`Ca1C|Noq2`w&~Kcl9FM^j7kO%$d{L$@Mt=x8zL~&R%7%%lmJw zZn3uLoS3pj_7}%DR{Lwm*B|uV@3edKfn<~1m8H{KHZsOfD4ok|mM?ODuA5}?MUD?Y z*9#?>$88N;%)OPxP4<>~hx+^_i~-BV6^uV=8t2V=KWEvM$M=`qZ?^ONt#SU?wjCyJ zQ9%X_Ee?ij1l}l=)^Vvm`pjc6D449OF0mjHs+#kB2)%8UA>) zX06xec~2)_I;3-7S6pH7wDpHV%iND}=aa@_aCgefew4 z%qttuxg0d^`#$$!VB!z=NN>G+XHE7fME9>_<@sgaSyS59EW4aNDdVx1`KQf$;um(> zH8*senJ*F-pSS6isp;Hvr_C%gxAb2vUa&pq0@sw*Pc3xWY&oEx@XgQa&fPR zK`(2fV}_;p7RJ{nyOKEBHKf!oYn|8?eNscwCh`B`HSYseJFe=8gv&IAnx67HwsgH2 tL#)fk`;CGJSOQfX(j%Sw*(Nbq#9Vya&#^(?{^{#k#fPeVwtJnB1prO*Mr8m1 diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int_bc-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int_bc-v2_ca.der deleted file mode 100644 index 06eb1b8662387cde6e6bf6177c9325942ae9c52a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pd#KNeY>1M#o#;Mij(e|B}k&%^^!63_!+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4J8c3K%&e%{AEV*nRzAgNy)lER&t_&oH(zciGi_^iIIV+g`rWDIIj^h z*Pxi{Zc#Llhqy(e%mnC;_|#O8Q&1e$#HfTECXB2M%uS5^3z#c3S9n{)RpC0<-LUz6zdgKK*mS@oabgg{u$Cqy)D_d|E8ya%SyzA&-v| zw@&PK6g~LB=K1Q=Pxc=_IsbU|vZ8NoXSk)8rfCIND^_1In~}WQ1p1zcWn9a|pCQm1`z9wQwE#i)mS30%B5+e^{;k z=DmA86EhR|NHUQXW??d5Kn^fqA_4{&Bg6KKJ7?TJ&vdRh%wUm%?vcYu_a?9B zI$|KK^exqs;o2#)KPj*LcfB)cT-(T~>D75!DQp+#*5iFU7S=F5Jl>%f9Fw$~VNUII zo!US49^YO+O`m?RH@8E&M802h+Qn3+s7RjVy*ITdfB$C?mdrKHuG(yG_%q)dO8bwl z?78!4{?5d}{LFr7_a}k7-=0#ssq<5|{FURR3-hcvmIkm(KSAI zo3G)SJQ9_uB9i?b>US?Rz1Zm@JoC1*mqk#XQ4RkC-cFb4|6d9I->$&amv%*ttuWz% reCMT(OEOh|X10IQaz5q$&Fyd9sZ`VFI}`)^nv1h%%$xOa)t}Pd#AN85K^Mn+av27_EfZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHh&hJlRuV&`|;B>9eeuFdI-Vy^3AIwle0`_#HKcyFfEjQA%URdMp$^YU9Q+t(@@ zh8MW12JmmLzU;m$dij<|Ck@u+D&;DC3tly+C|!G{*c;ylDT`Aw`(na=U#gV}$iM5{ z^M}98^oNJ@UCp~XQ+Gf6BD!I(W%SqcKiSQ%F|i#AcKjo9@|?ls(i`dr51hRFI{W9v zQ!iG0=6HVRuZ76zJfFPRb-gbhetCVidfA=0W8$IL-R8(vO-l-zVe&}u_UYENCV`XU zfuWZUtWuKa{VMamE5x)qMsJ1mkGjpK@7|Otzgf(x+sEX_`t+Xciy8%!>W)U?*8%y) z=a;LWt!83oWMEv(YXC_svcfD(1`Nmn224u80ApkjoYR;YV>V+U!*i9GgxQ-PHEGC& zrhR-?D)y$wch0x2ET>#!LyHOL3QzFr?&!WXH|e(um$&<7L-U`8cV?~K-0+>dXo7s+ zp~bUrA8GnH_d|Ql+>cQ&Eg6J=E&A#ZkP_Qv@AjSPcZYMw_wH}U_O*1JNLdR%j*IQ sDW@&U9}dj5?8@O^?6tVi>ffXjm)tspAF?i}`1E|wQ_F_1z)Q}$02z=d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH}Z@NlN?G>MfChBpNFWO6T<)N<;U|MgX$Bytjty1w7R_o=B(*3j+V{A;d>E4G#v zoxT`&Joxf`(=G!r~zJ~4RDskt3 zoNM-HeY3}x3^E)iw!=)^PB*fZd6(T diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v2_int_bc-v3_ca_missing_bc.der deleted file mode 100644 index d23ffa9395cb3463542dc3fdde29e7e19302aecd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898 zcmXqLVy-i2VoF=U%*4pd#KIW5@|poJ8>d#AN85K^Mn+av27^*VZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&ixI1c@^9NR=7IXXcf}Cnf8a8OJ9l#^+`h7XwuQ1q|fGc@0erjEzi; z3`{MJjiSVPjgYwpbyRnjj)4}$S;}Q5Ko`WPrt0ExUlXGea!4_*0A zF)}i|JUNY-_hj?zi7#@V>8m#BYTnK^d!T4?r=}#8B{K88$ob8Cf@V9mh!?fSM(XL= zc6O`Hk#&4soBohz-361~;WuMg0<$C6E%jS*t5qc}^J&ECD>FH#O}m%O`2U;7;=KV? z>2I$Wi%dKq#9_75ZddHB*5^|?TCNuE%8gkQwD)g+=-u$Wt1Tx=^({Ok?X)Rl)vBUZ zo}X^G&h4uUc_uRR)T|F&sq-B78QzuREB?0aW$FDZJspiNwF~DpJqo_K@9V7P)>jiv zE4AEbTrfOux2&?jZf5Zs{;c;R6T{!`a}Tl7$uKKQeV=Y$QE1haXUk&JHt`MPF0nT@ zRTpFDYra?@{^6aG~EuGi4?0n@?6c)X}**oo;z2%*+JD;4sZlYpw^ZA>{jttkWxK^`&yglKK z-lckxmH)4#d+8jXa_-oT_t(;n$B9h%o_*wmyG4PHZH#~2!!_r=l@~-^3W&D;R@&53 zl(CmxASUVP;kT}<_dT2{7eDFm9F@7v$?MlzdnROaJ044_ckivroZ9l`9s_H!jp0eR zrT;?ZUAz{aQ<&|t>2@4LUD){(JL|S?J<4YP C5L*EN diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int-v1_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int-v1_ca.der deleted file mode 100644 index 10ffa492283cb247c7f2e42272df5c7536690fe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9zR%*4pd#KLfUOT7Uv8>d#AN85K^Mn+av27`1%ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHxxAx28lBB@RS+HXXcgYmKnw;CmP6!^BS5M7#o=w8JL(9wP%d?V7|K%wsF8v}^>L8=ZzsT*|)%l$dom`Z2!hQPt zQ?v z{nXia0rRSliu>bz7kX^!a+L~}&Sg4#Eb+}{apNq@$3;g{H2;+^WQv{=xZu-;{tv6p z*43VDV!2$@X5nl$XPL#Mm~AVT{q1*}!CIN^u}Z!2d@9R|mkl+N-xtQ$B&i%acPadU zRatQB!r(x|NkLD3zG_(5viWc7^qN-+g*NHl9Ffh>0wPW=S*K;1RI_xi!1@ed>DzDC zN-{AsGB7UYHGm`#Sz#6?0|w*(1129}fH5){wae(J+qgtnOh`5f8N})Qg-fCdxM`-JAgDLZX% zMX$-ZGFetGjfpX@+(PR9l)FR?K>|cBP%O|L6#x60Vf-CC<~h~Q)sZE zuz?_m!y(M&oS2iDmS2>YnP@0xAOaF(7v}ZNFU>1S%*;~=%S~UOpFXn%}q_B#CeU7 zxdz2lcZ;HdJj5*$WhOuu#HXg}qC2XIQ3*Lr7+D#Zn;7{S44N3Zn3@&a~$SMZGD~MpLt74sI!1COgcUFSIsCb$Z+3 z?jyUtc5C%^=j}Q93g%hd8Wmg8(##dS@>`nTTkOBW@H~r8 z<>pf+W=00a#k>ZPWFjlf!eqdJ9ALmi1Pm}n29=kxU!$xHD{k!5|5A2i_QHLuCr!Nh zld10nr=0j@ar5C0sh@TEe?#|5%zK(@xZ#PS>+h8_7(y3Z+^O5v-}&pAW8&B4 zd%hNWr3Rcc5EPR7;N-j_H|$s5zo7g%m5OJMXWGA%c#!e`ynUI{j0@cxnj(whHnwe= zJe8sKcEjIC8a-)CXBq95VKaE}@?T2PCB6roU!Pr*zP75}@XPw3#$!ga_Hk}FJRz8) zU2wugzq1lk|Hx+~+)rm&c=SMSU`)-L&U;HDW9MEIVborml-(a>9lddpVKJA}9Tg7S s3r73dX0$0-2LFgD4mCGAueCVV-9}1&zHilBm9-Ze_^)S#X};zK0DtF9`~Uy| diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int-v2_ca.der deleted file mode 100644 index f664fa1d686cbe5797722ff08fb3c21ef006a249..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmXqLVoo$@V)9(T%*4pd#GKyaZotdNsnzDu_MMlJk(HIfAl;DLfRl|ml!Z;0DKywn z*gz1(;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`O zLQ;!MGV{_6MGb^OqRc!zWybNDc_q4KM)Aps26E!Oh9(BaMkYoErWQtqQR2Kt$XtU0 zsyjr^KnCIv(K3_xq~!S2R9zGoH8Cn7hXx}n19KB2KZ8LNBNtN>BO}A1cRy-Oudl1u zxqf5sd8H2%gpQlNn<6XwnzzpNU542&uk|-l?meD)-1g_>w;R0#EA_4vuJN#b&os;S z+?&I8oSL`h98qTP`W>njXu08mYH_C=$DX^WO`#=8$0RI*_wO<{$;P_&6Z2C9`^B)bGo#! z<0TU_BLm}NUIR!1krifPGGIUsFktcl1{fnlZ6p7y8Og_W>SPbTeYiRQ^U^Ja_gFuc z2k}piztYtzqBZY+?CK=JK*bZ!JtIBLg*SQ1Z4PS8S`zWeVP04Jog=nAtu0BHzkYlF zVMp;{@1-+xIOjZfSm9l8d;eucZg=?uw^vJrG^~5Tdwfao#~&98R|L2-1q98liwX`B z-T8R8ef)nt-_=VUb)G(ttLhhAC*|};$xGL{WPeJ|fg=+_W={LYbl~yommU|6CN(T= zdRPv r;$Dr_N7u~G2|gMsShQ&UiL8hO-m`WJHEA+`ro}xhG5M0G-NOL@bm~$k diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int-v2_ca_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int-v2_ca_bc.der deleted file mode 100644 index a8f9dbcf48ee06296b142f5dc6c53ceebd87d07a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmXqLV$LvVVhUKm%*4pd#KOe<^^O5A8>d#AN85K^Mn+av27@d^ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGHaM~U+q zA#)9isqPj<19^yBB+5*HE{IP})kSwy6QdGxm@u+3FgG#sGZ-{6axpbAGBWJViqJi1 z`|s${J1-83BqcT9m?UoebDB`Ttx@Ni+Z(iY)TktB%S#p=FiCo6##Sq>JSSOU-ORtI z45iEW7w=zTJY6$VFJq;w)C$SP=Q--#F0nj+D{Sr=``<|BYOuI@s2WGohAGl9F@BpL zT@K)T6nP=`RC*lyw@aJe>7HzwnJr%2_J8xnKljDm564bDw({=#1&S=ypIpsg95<~n(tX?6Rn;DiksPIr!v3xO4IGV6&`>giPOGX9$yia%pARn zb7wM7h}4s%esdN-NDoUbUw~|6VCa6e$k;x+71cjxTe?7KZC rne_~FPHDSxM9fzYpJiJNj6?sxlIi+e__nTlX}S0t(AHJs3}Kp diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int-v3_ca.der deleted file mode 100644 index d90a72c019da25cbeec85a8b9d0f2a69a5ff303a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmXqLVoow>V)9zR%*4pd#KO?OQp$jrjZ>@5qwPB{BO@y-gF(6>w*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Z09GxJJxfmCv$ft)z6p^1U9k%^IksimPwlsK;uGS{Gh z>JE`JkbyWvw9F(vDLFnh7336zi<%gfkVAu!m4Ug5k)Oe!iIIz`iII_E!3nLmzq`V+ zTjJ6a|M>*{OIYNp6T_fNk5MrD_y`O^yP9*@i~!6498ksVk1I1>TC{Xo&DMt zyq{HIrR~XUt8*$WW=-FF<=vv+llE^Fm?YQZZt?L-&qV=`v%cy_xHYfOT$}MfMI||O zP2%l_Q!6BeWa^bmV_4ce-y6U2=bCW+nC!EU4YmBupUf&(JZ|UA4&e z`K_aS%QAA&(N|Uz_F1HtpI3-+l26-oD8=0-L1HTNxdS>=Vx%W_`7F3{VSd}9dUNhs zTF0kcPJf@fe&Sy3odRl?Ll>o7*n1{2FjnP4d4IQAZQf^}{-%Fy-~6iX=P$bIwPwk` z|C~(Bj0}v6c?}>5L{^xE$$$Ylz<|jI7+{PHY=3T7H=3+g&i0z?f3H|tGP!7TYuoh1 z_b$u}F9s+e8 zyKd((>EO$mU*7Ia+WWmH#!SHZ14FA^{EtJwzi5~#^L{C}?vaz5b?MI5hGoYX&Mqlg z(mF|jxq9X6jyYu?mCEN|KQ*`Ds*t>B=ycm@pSQ%xO=7k@gxW^;+( zTZYT=URfJYI$VCV>&o>jD=Z!Fe&_hRDp_YASCXel;E7{>r#yAUyWh-Av^;C^^m4)3 r+e)omu2(PBIQlQ0Y*D+Var^PEi?aXXWfpJ)^>_tetoB_lFJ}kH+klgeIh2J>m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4HXRJK%&e%;$_D1nRz9;Kq@&gJ~y+t7$_Z|lx!d;&TD95U~FV!WMFD( zVh|S0lFYQH5KG4td479R6-6TMpg#qCPsb+gC<5UrY1&4 zhNWwx^pY6VWlEWCX6Vc^f3q~PiBo5pAy3E8xgV@ujxKE5#ht0WCTY%*q)YDMUzR2A z%@)w(vG{yhy@;8QXT{}BJCtuOUAbV#@!q`eGR1*M-{<-5*yJ}cq{6ScF!pEK`7Pyw zf6ga*zH^>yTQYO9e97nM6N(o(1x>1&vTKR)!*i=w9O_m)W+cmbU-7w0so?glvsd;N zI;V){P5ANXomu8XzD425s+(6`b^r6&rRhfG3p=)q9YHzgrzHGOm*x(7zDM?ez{w!t zm4Yl+diokRZSHb9Id@@SwHMp}1#egj^&Ac@c=6#8vsOH-=bwIo$YgC{qi=2^H0RxPYL6~v3Wsk?S4YGUUixhXv zzx`y_c@Fo~ZHAFqf7YDP_{=-C&ubIo>#Mv5udhsr+i>UR^rnwDqtj1a@%Ruc#P{^k ztPC-=bNMwqHmeH`X5^QC?`rRREA^+0S)P;sJc~+fVQl%)v@d$P6J#I$U#+Tc7@&XV z{n^W%KDVdMPjzga%cr%Ep(v-_=fZ~<*VXG?zwnp5mA&=daLI{~HCN1*<=R)52B%H> z*v3(Ou<87{E>-jXx*d_%9%y@5qwPB{BO@y-gF%rYw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|Za^k#(CI-evCPoIP z=0?U*;=D%4T!U(=yGheP9pWa1G83RX;!{&~aXGGuQ3*MW7+D#Zn;7{S44N3Zn3@}0zfg>xJW*G?|zQ|gf8h=|U{PF+yC1FxKFa2cFJDn8q?v%lueJ+AJ zFP*N4sRkYv%erc};l;{JjSCLOMIJuMQ|4K=pZWgw3&|IZw??uS%bA@p;W}fGBOmCw z(zd7NYon~S4fhN8q5^}(C9?XQ&(7EJuRV1;WR;uUGPR|19=u?@8)EzXc(IC*YM+hy z)=neeb1pOXthmd>%*epFnAZT3Y-EL5m<$+@0}Pm`fC0wH;A|FZG z%tiDs9(x#9vrNTV`Et~iiANW_Q2Co(k*VF6YW$e3!uaVi+`#zkv zIX?e(;`Y>O=Z_s<8vZn5OUKU3JNev|&h24|4|?Jea%EaC6OYooGuaODyWRC2Gti9Jc4C61?;O5u4gQ{esWiH*v!AeZzQfY`CK}#&m}CyWXYhe yeey}c&8hAJ5B9(Qx^i)>3a`U~O`q>?VzBV8bLz-Hq<`3bZ+5Rwr_m?<>a zP}o2a#NiO;a!$<2Ov^9I%S<#BGY|m@vJ3P2=9lJ`BxdF*gk`3d8;TeRfyB9lxdVcI z6+%*rOEUA)4V4WPL88n&Qf0>RnRzAgxtYbqK#BOIWZg2u_~b+&!$3})*U-ek*vQ1l zz|`E-AWEFq2$^e8M|EfE7-&J9rCeqLbU}P-sxBV)H8Cn7hZG|#19KB2KZ8LNBNtN> zBO}B1_*PL9UoPE)Gqt=YTfhH0y(vuQgPWsd$H6D|DpOkYEbm?0!5nd~<4v^fxt4m% z3Ky&Yzw^$0`;tE8%+853E{dd7FwL5rF?ZvFquM9!57j3;dHVE29jD}@AMyt_+woj8 z->hdU?Q+=R#2%)JUZ2s|;-?WE+V9T2>09TqIuSM5$%npm{M^MV$Xu6V zJL~1!4dHA3>L*;SWy#S9U$^6p*Ut|j26G=N7Xwn6-J*Cby6B*5A*#UbzzdpRvtHJ@tqCgKtd^&v!mr zmTj?q$I72q{kMGiKbMJ_k%4hBuK^_S$O^MC889FR7%*u81B{Wu?YiVIg&7L5?isd5 zswyVGyknogJrO)(`tqX69i~Ad31^mfU+~&|_fOQ#-)5WV=1*ODN&3|WikGQc zX6t0@E^PfAl94!lOTuOiu?5^)Zo90#*_HC|@{Ig@H%q5R3JY@o?!Nbm_1&|5M#ulN zD(Qay&{?f%b7yLP#jD7zWTlXB5cXG4s#Nqo1tHd?#P?IG_2TH{$EpU%hXiZl3X8*89mu^~)!lO5FF!ANl|Q D5_?`j diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int_missing_bc-v2_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int_missing_bc-v2_ca.der deleted file mode 100644 index 01a71eaf3cf0db27c87c220b59456e32ef23d6a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 892 zcmXqLVy-Y~VoF%R%*4pd#KO>Vaiak*8>d#AN85K^Mn+av27@9)ZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&if?1Bo*8h?g11XXcf}=Vlfc10~{~UOpFXn zEey?~#CeU7xdzo#cax@pI>b#1WhOv(#HXg};&NOQqY`o$F|sl+H!<=v7&I|*F*PwV zG8{Z&_vY&~74a+g>y}2oG-^;~X3Lq>+%F=?d3bBemv7Ft%;)WY>@etPxKa}N*Klsw%$^Iyh+>n<;Lek|_W zanq1{MuW@oL#!#=suWyyNUv2ANDwZ+_xr%RuSeQ_+IHNZx;m=TWv|WP@R82{s8NPr(u6vdE~e(io_IzwtdXpaQOej^)>H*{F$)L@#y7ZLxD=` z?4B-Z(?{paay!;`GchwVFfQgbfFv7PVHPF>2IK$(CMsZnF)}p#T(#+Y@Hz`!$@kwF zy%xRNHo0TU#8c*W7F*s)#DDvK$;>Q3a$QP#s^)aIKO&P1_4Tr*UogC}^OtMT@8daE zr>5^%ynN*w3%N^Nv;9|n)o7h)dvQ%bZu#TyOAo(9=ha<_ z&h6<^&G%x3J(jDS`C8X}Q){h>I?wjciSP3YPW3m*?BS7AbyvL8wxY1W^7g8yaud#AN85K^Mn+av27^*VZUas>=1>+kVW!Yv zLtz6!5QjsU%Q-P8GcCU;FEi0l%s>Pr$S%z5n_rq&l9-vN5SE!*ZYW|P1QO>G<_-w< zRR~EfF3HSGH&ixI1c@^9NR=7KXXcf}=Vlfc10~{uR^x zGxoI3x#IJ%|C9T%b<20xUYHU!ZOKOuhmAVX&&$8(6z4zKl$5W3-}D*X9&2Ws zUUjU${{K&D7^~Zrb&5GBmCCu~zRX{&)m&2^Cx49fVWZ9|@0Cv#zhpSiTzI25xa?Ek zyO?~j*q>Xu?p%n7d3ZP8nSb39ErEH_pCwI7^_i2`trsjma%MlP<0X%qTnDNa^4HAQ zdLa3xuJ`M^;EJm@3?CWSXB~esPu#-mYTB&4@0pbb9Xt~st67L2edej@YyBl>)7GQ0 zA`^AzrY1OY9Ol2KzLklYk%4hBuK^_S$O^MC889FR7%*u81B{V@>p7!;!uwYfy`?l0 zXUa()CEId^G_IOu(akPzd^SG}$xd7%$``ZwG4mJmJt{{cmOfm2HzzLt znm5P%Q%Bqq9fO=JpDrj}^S~|UWq+d3t=;yg^=`5>#QfMja}Q7drGVc*7WQACcf#lF z_f+M-89TJz?YsZ%0H4!+0me7iOV8EG-MA>h?h}~!>#ayYhqCJ3 zuKyd~@`bAw#{LWQ?#kmlbx7a3QnqmY&J#zDt@C>}C-ix%)5FH=zTYHlSgl?w1%w(r zS#8P3axzD~b&j)NkISc=h~hb}r-M#^(XF=#EqAN06$#Ze(VP;n#ekn*+qGXPi> BSDXL< diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int_missing_bc-v3_ca.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int_missing_bc-v3_ca.der deleted file mode 100644 index ad4e12d4070a5bbcec7cb5f295408b69b7db883b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 892 zcmXqLVy-Y~VoF%R%*4pd#KJJW(b#~OjZ>@5qwPB{BO@y-gF%rYw*e;`b0`a&FjHu- zp|F7NzBYs2+K?@Hxw}t0*P}8a|ZROA%vM)Y9$F^| z+MPLLmzf$hsaL(X*tl?cYKPz4AD1m{t+#yCI&-8c{CB}ujpA3Qwpj`~nHio6C@d9F z65g`QJ@!_`*LKE-+_`bDyNoWF9S>djE^ue5QLDklsebW>k9nA19MDY`xzX~}v~uqH z+?l;Q7grXQuV3eKdqa$OzuJCh535a=E(LlkqP~0W_v3Zhdgn9?;yX5^ z?>Bn9K=V_@>AF^ReVe_L!;f%o&JQ$Fi>&9rkQR4$)7<=uRB@I2p_b~^nMo;kcBh>` zDt5U;VdlQCqD;(;42+9;4Is%zR+xp!fB`wcfQbqiV2lh(#=FiipFDciy{%zIwfC=G z*X-vWTzBE>?JbUd)oSaa)lS|!EHUvdN+iPupYD%2>^nQ&99D4B_;*4qa95a| zRBip=*qlIyio3~-Iv;L%3(oaznQSTkZ9=oRLKgpv)nE2ETvV31x=iy<+td)3W+v|2 zA1YEM&t3TNr{YNIi~Xrg502VSpYQwDHhkGNUZ0K80q=kDM82>1ZN}VZmv(-_!JO!5 x_LLh-?OEh&_jY~cP+&ARiC@~7`he|S^Q1`rtJwk4hORcYX%nA4n0jc!X#j;3O~3#E diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v4_bc_ee-v3_int_missing_bc-v3_ca_missing_bc.der deleted file mode 100644 index 00d3e60b2c28b84805202d7e031067e6433f5777..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 914 zcmXqLV(v3&Vk%p}%*4pd#2oL#Wx&hEsnzDu_MMlJk(HIfpw^JvfRl|ml!Z;0DKywn z*gz1(;SlC>PRz+n%P-2yOf(cT5CI9Y3-kKsm*$luX67k`Wu}%JiWmri#JPmI1A=`O zLQ;!MGV{_6wGA{uqRc!>WybNDc_s0=nZ?CGiTI>sU7$#EB9efCoH(zciGi_^iIIV+ zrLkF*IIj^h*PyYD>h3c!FoL*GyUYaWrufuUkh2Imw24s(Ip`Q!8JL?G`56qF7`d35 z7#SIMb}+YCzsO(oar-o-yDd8(|9Q0e@%%HDEnAC))@D!pvgGT2HKVxFlsNC&bHREV zoBs6A{*X60Pi%suwpEK%txAqh0-xT$gfCMrB^*rZ7hfb$aDGnxCh;}LiWR>lA1?dl za%$B(w?`d+?;d=1$@%Ht4m0j~P4B~wiMxC5@5!mqzT*(0CEopg&%O$tRd1if?cLX| z(k~Hb64SZTd#STRZ1w!w6bHK~);${!_q#Qex7s@Q9@*niveKw4{r%^qCi-R3^Z!k` zk#l!Tot6K!$d=vuve9pY^zXZNs*$n+;CbtdYsHEO^lMUHy;w zChZo%O;3u7Ht%@d&BV;ez_^�Fs(yg;|&k7?1-DnAU&+#>k*G<8AhN#*-~9QTi6K zcXj_MSzP^|m8bLF`Q#S8bs0i|^GsIzpPANi@PuWUQ7-=+sraKSJuW=Hv`3voch(yx z+rFiS+xdU=+#NOnzq5<|~IxneFE%kig5LfBx8~y(=oeeJfN-l({*< zZzI1I|L(JWfs8389e-Aw9Vp`)@YRv5A|G zPk5Xux%GI%-03WQG5J%rEG++$aa~#c)sYXad9Ne_m7aLr`L-y}yQ)ZFV~E&uhYWL0s!l5 BUO@l= diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_self_signed.der b/security/manager/ssl/tests/unit/test_cert_version/v4_self_signed.der deleted file mode 100644 index 95545ad2abe1c521c3806e0db301072990c3587e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmXqLV)i#^VlrRA%*4pd#LBQhRo>WumyJ`a&7D}zC%A-4f18*?ZNn=n&o zu%WPlAc(^u%;lVzlbM!Zl$V)kC}to65@Z+V_02EMD@n}EQwYmUEjJV~5CVyF33CSo z`znN_7MEn^r5lPHh=N3!dHBjq;)_#r(&CFV)ALeO4CKUl4NVLzj0_DeP0Wmpqr`cQ zkh%19N)w|JazHS$GB7tW@-rATF>*0AF)}h-KiBfBrNTaIij1)TQQFlJ1;PXgHGm<?exooyw5iK?k#!lcJYDZ-7_cHxEKvR_Pk6BhwbEn^~UM|UzVVMUmx-B?fe|@`fJp@yLW~TC zfy<-b-iy=KDV^kBx$d>wqpx=+e7X8{$At!qAE|HrkEYq}_&w9#E&P|T#h#5vf1Z9^ zXP9AK;UH}{!A13W!k_v_3P;UMbXUaf;p+a>5qe^gSKsl44-Q2Mw$8T;Y*o%{3t&&s zExLTsZGC_{dspoRnS&~`Z^W{+D6q^~O)^+Eq|vieJta(WR>pGZWgJ1_synVS+l3E NH9K|5VfGI~a{&-4M*si- diff --git a/security/manager/ssl/tests/unit/test_cert_version/v4_self_signed_bc.der b/security/manager/ssl/tests/unit/test_cert_version/v4_self_signed_bc.der deleted file mode 100644 index f394dabbfcc13b5a42e9841b63117e5bf70feb82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 872 zcmXqLVoot=V)9wQ%*4pd#LBQhRo>iymyJ`a&7D}zCfA-4f18*?ZNn=n&o zu%WPlAc(^u%;lVzlbM!Zl$V)kC}to65@Z+V_02EMD@n}EQwYmUEjJV~5CVyF33CSo z`znN_7MEn^r5j2aNPt9{c?8Q$;)_#r(&CFV)ALeO;**jM798dY?17lr)~eUd8QgY6%=33B|SUmTCc$W58uBx1^?f+>a)k*xaON5ZZQ1Qh<(!J zTbIM*Qq243gZA6?y$#aK8UL;e5i8$m@kU0%^LJeRNAp!i{MM^- zk8WE1^~jywC+#9d?H6xepz)=;{hh(2IS(HwuZsJW%jw*?|L@`h&69pk=y#0%`JJ&m zUt49@(e=weT)%JBmEL(REZ(&L_wu$qyLQ}-FM7;2SJ2Vpl<}`;nPIX_%!~|-i+K$o zDMVJ7g~@;cIlzGF2N+Brfr%*OL)eJ$<`nyhnyPu(m}dGD8xUNgen3eV)I%;>(ZTfo8A z`|@JWm94S9^JiA9FnAv$lUANIl?!YPer1S<6k4*Y9uog|OSa{F;+|de>pw3l|8ZT(@ZV?A z!V8BEG07Ob-Pd(x_0wtlRr}Wcm~WbAl;9mFZ5;O}bE)IcOK*AiE?@2CeY@?h(sut~ g%`47dnl(Dw7}~>*9SQyRgx8AotE=_2eg8iJ03t?Q4gdfE From df1c4096c1a243906e82002c618a281f42f95a94 Mon Sep 17 00:00:00 2001 From: Jeff Walden Date: Mon, 29 Jun 2015 15:45:54 -0700 Subject: [PATCH 39/63] Bug 1146136 - Followup to condition tests using |super| syntax on class syntax being enabled. r=bustage --HG-- extra : rebase_source : eca42ec2b1ba7b38658419a4d61b65f9c318d998 --- .../destructuring-pattern-parenthesized.js | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/js/src/tests/ecma_6/Expressions/destructuring-pattern-parenthesized.js b/js/src/tests/ecma_6/Expressions/destructuring-pattern-parenthesized.js index 4543fde27d18..eb295c160563 100644 --- a/js/src/tests/ecma_6/Expressions/destructuring-pattern-parenthesized.js +++ b/js/src/tests/ecma_6/Expressions/destructuring-pattern-parenthesized.js @@ -82,9 +82,26 @@ var repair = {}, demolition = {}; Function("var a, b; [(repair.man), b] = [1, 2];")(); Function("var a, b; [(demolition['man']) = 'motel', b] = [1, 2];")(); Function("var a, b; [(demolition['man' + {}]) = 'motel', b] = [1, 2];")(); // evade constant-folding -Function("var a, b; var obj = { x() { [(super.man), b] = [1, 2]; } };")(); -Function("var a, b; var obj = { x() { [(super[8]) = 'motel', b] = [1, 2]; } };")(); -Function("var a, b; var obj = { x() { [(super[8 + {}]) = 'motel', b] = [1, 2]; } };")(); // evade constant-folding + +function classesEnabled() +{ + try + { + new Function("class B { constructor() { } }; class D extends B { constructor() { super(); } }"); + return true; + } + catch (e if e instanceof SyntaxError) + { + return false; + } +} + +if (classesEnabled()) +{ + Function("var a, b; var obj = { x() { [(super.man), b] = [1, 2]; } };")(); + Function("var a, b; var obj = { x() { [(super[8]) = 'motel', b] = [1, 2]; } };")(); + Function("var a, b; var obj = { x() { [(super[8 + {}]) = 'motel', b] = [1, 2]; } };")(); // evade constant-folding +} // In strict mode, assignment to funcall *immediately* triggers ReferenceError // before we can recognize this doesn't even match the destructuring grammar to From d9381c2d1631d77c2186f98f025bba9326c0105d Mon Sep 17 00:00:00 2001 From: Jeff Walden Date: Tue, 23 Jun 2015 11:47:20 -0700 Subject: [PATCH 40/63] Bug 1146136 - Followup mop-up to require that in destructuring patterns, an assignment target with a default value must not be parenthesized. (That is, |var [(a = 3)] = [];| is invalid, while |var [a = 3] = [];| is valid.) r=evilpie, r=efaust --HG-- extra : rebase_source : 21d19e424b8ae71917d46edca15e682ffe04daaa --- js/src/frontend/Parser.cpp | 4 ++-- .../destructuring-pattern-parenthesized.js | 22 +++++++++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp index 9362c8474c3b..88008e9631ba 100644 --- a/js/src/frontend/Parser.cpp +++ b/js/src/frontend/Parser.cpp @@ -3472,7 +3472,7 @@ Parser::checkDestructuringObject(BindData* d target = member->pn_right; } - if (target->isKind(PNK_ASSIGN)) + if (handler.isUnparenthesizedAssignment(target)) target = target->pn_left; if (handler.isUnparenthesizedDestructuringPattern(target)) { @@ -3510,7 +3510,7 @@ Parser::checkDestructuringArray(BindData* da report(ParseError, false, target, JSMSG_BAD_DESTRUCT_TARGET); return false; } - } else if (element->isKind(PNK_ASSIGN)) { + } else if (handler.isUnparenthesizedAssignment(element)) { target = element->pn_left; } else { target = element; diff --git a/js/src/tests/ecma_6/Expressions/destructuring-pattern-parenthesized.js b/js/src/tests/ecma_6/Expressions/destructuring-pattern-parenthesized.js index eb295c160563..ca495c88684b 100644 --- a/js/src/tests/ecma_6/Expressions/destructuring-pattern-parenthesized.js +++ b/js/src/tests/ecma_6/Expressions/destructuring-pattern-parenthesized.js @@ -65,10 +65,16 @@ checkError("var a, b; ({a, b}) = { a: 1, b: 2 };", ReferenceError, ReferenceErro // *Nested* parenthesized destructuring patterns, on the other hand, do trigger // grammar refinement. But subtargets in a destructuring pattern must be // either object/array literals that match the destructuring pattern refinement -// *or* valid simple assignment targets. Parenthesized object/array patterns -// are neither. And so 12.14.5.1 third bullet requires an early SyntaxError. +// *or* valid simple assignment targets (or such things with a default, with the +// entire subtarget unparenthesized: |a = 3| is fine, |(a) = 3| is fine for +// destructuring in an expression, |(a = 3)| is forbidden). Parenthesized +// object/array patterns are neither. And so 12.14.5.1 third bullet requires an +// early SyntaxError. checkError("var a, b; ({ a: ({ b: b }) } = { a: { b: 42 } });", SyntaxError, SyntaxError); +checkError("var a, b; ({ a: { b: (b = 7) } } = { a: {} });", SyntaxError, SyntaxError); checkError("var a, b; ({ a: ([b]) } = { a: [42] });", SyntaxError, SyntaxError); +checkError("var a, b; [(a = 5)] = [1];", SyntaxError, SyntaxError); +checkError("var a, b; ({ a: (b = 7)} = { b: 1 });", SyntaxError, SyntaxError); Function("var a, b; [(a), b] = [1, 2];")(); Function("var a, b; [(a) = 5, b] = [1, 2];")(); @@ -103,6 +109,18 @@ if (classesEnabled()) Function("var a, b; var obj = { x() { [(super[8 + {}]) = 'motel', b] = [1, 2]; } };")(); // evade constant-folding } +// As noted above, when the assignment element has an initializer, the +// assignment element must not be parenthesized. +checkError("var a, b; [(repair.man = 17)] = [1];", SyntaxError, SyntaxError); +checkError("var a, b; [(demolition['man'] = 'motel')] = [1, 2];", SyntaxError, SyntaxError); +checkError("var a, b; [(demolition['man' + {}] = 'motel')] = [1];", SyntaxError, SyntaxError); // evade constant-folding +if (classesEnabled()) +{ + checkError("var a, b; var obj = { x() { [(super.man = 5)] = [1]; } };", SyntaxError, SyntaxError); + checkError("var a, b; var obj = { x() { [(super[8] = 'motel')] = [1]; } };", SyntaxError, SyntaxError); + checkError("var a, b; var obj = { x() { [(super[8 + {}] = 'motel')] = [1]; } };", SyntaxError, SyntaxError); // evade constant-folding +} + // In strict mode, assignment to funcall *immediately* triggers ReferenceError // before we can recognize this doesn't even match the destructuring grammar to // begin with. Bleh. :-( Probably they should all be made SyntaxError in the From 17522ef3e0a6996fff8ad11d3db22075bff1b2c5 Mon Sep 17 00:00:00 2001 From: Jeff Walden Date: Tue, 16 Jun 2015 23:52:31 -0700 Subject: [PATCH 41/63] Bug 1175347 - Consider the last-ditch locale (currently en-GB) and any and all locales implied by the default locale to be present in all [[availableLocale]] spec lists. r=abargull, r=till --HG-- extra : rebase_source : 330389c97288dac48ac8089eed677b7caea238ca --- js/src/builtin/Intl.js | 241 +++++++++++++++++++++++++++++++++-------- 1 file changed, 193 insertions(+), 48 deletions(-) diff --git a/js/src/builtin/Intl.js b/js/src/builtin/Intl.js index 13980d23fd04..6134b19a7d73 100644 --- a/js/src/builtin/Intl.js +++ b/js/src/builtin/Intl.js @@ -437,44 +437,138 @@ function CanonicalizeLanguageTag(locale) { } -// mappings from some commonly used old-style language tags to current flavors -// with script codes +function localeContainsNoUnicodeExtensions(locale) { + // No "-u-", no possible Unicode extension. + if (callFunction(std_String_indexOf, locale, "-u-") === -1) + return true; + + // "-u-" within privateuse also isn't one. + if (callFunction(std_String_indexOf, locale, "-u-") > callFunction(std_String_indexOf, locale, "-x-")) + return true; + + // An entirely-privateuse tag doesn't contain extensions. + if (callFunction(std_String_startsWith, locale, "x-")) + return true; + + // Otherwise, we have a Unicode extension sequence. + return false; +} + + +// The last-ditch locale is used if none of the available locales satisfies a +// request. "en-GB" is used based on the assumptions that English is the most +// common second language, that both en-GB and en-US are normally available in +// an implementation, and that en-GB is more representative of the English used +// in other locales. +function lastDitchLocale() { + // Per bug 1177929, strings don't clone out of self-hosted code as atoms, + // breaking IonBuilder::constant. Put this in a function for now. + return "en-GB"; +} + + +// Certain old, commonly-used language tags that lack a script, are expected to +// nonetheless imply one. This object maps these old-style tags to modern +// equivalents. var oldStyleLanguageTagMappings = { "pa-PK": "pa-Arab-PK", "zh-CN": "zh-Hans-CN", "zh-HK": "zh-Hant-HK", "zh-SG": "zh-Hans-SG", - "zh-TW": "zh-Hant-TW" + "zh-TW": "zh-Hant-TW", }; +var localeCandidateCache = { + runtimeDefaultLocale: undefined, + candidateDefaultLocale: undefined, +}; + + +var localeCache = { + runtimeDefaultLocale: undefined, + defaultLocale: undefined, +}; + + +/** + * Compute the candidate default locale: the locale *requested* to be used as + * the default locale. We'll use it if and only if ICU provides support (maybe + * fallback support, e.g. supporting "de-ZA" through "de" support implied by a + * "de-DE" locale). + */ +function DefaultLocaleIgnoringAvailableLocales() { + const runtimeDefaultLocale = RuntimeDefaultLocale(); + if (runtimeDefaultLocale === localeCandidateCache.runtimeDefaultLocale) + return localeCandidateCache.candidateDefaultLocale; + + // If we didn't get a cache hit, compute the candidate default locale and + // cache it. Fall back on the last-ditch locale when necessary. + var candidate; + if (!IsStructurallyValidLanguageTag(runtimeDefaultLocale)) { + candidate = lastDitchLocale(); + } else { + candidate = CanonicalizeLanguageTag(runtimeDefaultLocale); + + // The default locale must be in [[availableLocales]], and that list + // must not contain any locales with Unicode extension sequences, so + // remove any present in the candidate. + candidate = removeUnicodeExtensions(candidate); + + if (callFunction(std_Object_hasOwnProperty, oldStyleLanguageTagMappings, candidate)) + candidate = oldStyleLanguageTagMappings[candidate]; + } + + // Cache the candidate locale until the runtime default locale changes. + localeCandidateCache.runtimeDefaultLocale = runtimeDefaultLocale; + localeCandidateCache.candidateDefaultLocale = candidate; + + assert(IsStructurallyValidLanguageTag(candidate), + "the candidate must be structurally valid"); + assert(localeContainsNoUnicodeExtensions(candidate), + "the candidate must not contain a Unicode extension sequence"); + + return candidate; +} + + /** * Returns the BCP 47 language tag for the host environment's current locale. * * Spec: ECMAScript Internationalization API Specification, 6.2.4. */ function DefaultLocale() { - // The locale of last resort is used if none of the available locales - // satisfies a request. "en-GB" is used based on the assumptions that - // English is the most common second language, that both en-GB and en-US - // are normally available in an implementation, and that en-GB is more - // representative of the English used in other locales. - var localeOfLastResort = "en-GB"; + const runtimeDefaultLocale = RuntimeDefaultLocale(); + if (runtimeDefaultLocale === localeCache.runtimeDefaultLocale) + return localeCache.defaultLocale; - var locale = RuntimeDefaultLocale(); - if (!IsStructurallyValidLanguageTag(locale)) - return localeOfLastResort; - - locale = CanonicalizeLanguageTag(locale); - if (callFunction(std_Object_hasOwnProperty, oldStyleLanguageTagMappings, locale)) - locale = oldStyleLanguageTagMappings[locale]; - - if (!(collatorInternalProperties.availableLocales()[locale] && - numberFormatInternalProperties.availableLocales()[locale] && - dateTimeFormatInternalProperties.availableLocales()[locale])) + // If we didn't have a cache hit, compute the candidate default locale. + // Then use it as the actual default locale if ICU supports that locale + // (perhaps via fallback). Otherwise use the last-ditch locale. + var candidate = DefaultLocaleIgnoringAvailableLocales(); + var locale; + if (BestAvailableLocaleIgnoringDefault(collatorInternalProperties.availableLocales(), + candidate) && + BestAvailableLocaleIgnoringDefault(numberFormatInternalProperties.availableLocales(), + candidate) && + BestAvailableLocaleIgnoringDefault(dateTimeFormatInternalProperties.availableLocales(), + candidate)) { - locale = localeOfLastResort; + locale = candidate; + } else { + locale = lastDitchLocale(); } + + assert(IsStructurallyValidLanguageTag(locale), + "the computed default locale must be structurally valid"); + assert(locale === CanonicalizeLanguageTag(locale), + "the computed default locale must be canonical"); + assert(localeContainsNoUnicodeExtensions(locale), + "the computed default locale must not contain a Unicode extension sequence"); + + localeCache.runtimeDefaultLocale = runtimeDefaultLocale; + localeCache.defaultLocale = locale; + return locale; } @@ -500,22 +594,28 @@ function IsWellFormedCurrencyCode(currency) { /********** Locale and Parameter Negotiation **********/ - /** * Add old-style language tags without script code for locales that in current - * usage would include a script subtag. Returns the availableLocales argument - * provided. - * - * Spec: ECMAScript Internationalization API Specification, 9.1. + * usage would include a script subtag. Also add an entry for the last-ditch + * locale, in case ICU doesn't directly support it (but does support it through + * fallback, e.g. supporting "en-GB" indirectly using "en" support). */ -function addOldStyleLanguageTags(availableLocales) { +function addSpecialMissingLanguageTags(availableLocales) { + // Certain old-style language tags lack a script code, but in current usage + // they *would* include a script code. Map these over to modern forms. var oldStyleLocales = std_Object_getOwnPropertyNames(oldStyleLanguageTagMappings); for (var i = 0; i < oldStyleLocales.length; i++) { var oldStyleLocale = oldStyleLocales[i]; if (availableLocales[oldStyleLanguageTagMappings[oldStyleLocale]]) availableLocales[oldStyleLocale] = true; } - return availableLocales; + + // Also forcibly provide the last-ditch locale. + var lastDitch = lastDitchLocale(); + assert(lastDitch === "en-GB" && availableLocales["en"], + "shouldn't be a need to add every locale implied by the last-" + + "ditch locale, merely just the last-ditch locale"); + availableLocales[lastDitch] = true; } @@ -553,6 +653,50 @@ function CanonicalizeLocaleList(locales) { } +function BestAvailableLocaleHelper(availableLocales, locale, considerDefaultLocale) { + assert(IsStructurallyValidLanguageTag(locale), "invalid BestAvailableLocale locale structure"); + assert(locale === CanonicalizeLanguageTag(locale), "non-canonical BestAvailableLocale locale"); + assert(localeContainsNoUnicodeExtensions(locale), "locale must contain no Unicode extensions"); + + // In the spec, [[availableLocales]] is formally a list of all available + // locales. But in our implementation, it's an *incomplete* list, not + // necessarily including the default locale (and all locales implied by it, + // e.g. "de" implied by "de-CH"), if that locale isn't in every + // [[availableLocales]] list (because that locale is supported through + // fallback, e.g. "de-CH" supported through "de"). + // + // If we're considering the default locale, augment the spec loop with + // additional checks to also test whether the current prefix is a prefix of + // the default locale. + + var defaultLocale; + if (considerDefaultLocale) + defaultLocale = DefaultLocale(); + + var candidate = locale; + while (true) { + if (availableLocales[candidate]) + return candidate; + + if (considerDefaultLocale && candidate.length <= defaultLocale.length) { + if (candidate === defaultLocale) + return candidate; + if (callFunction(std_String_startsWith, defaultLocale, candidate + "-")) + return candidate; + } + + var pos = callFunction(std_String_lastIndexOf, candidate, "-"); + if (pos === -1) + return undefined; + + if (pos >= 2 && candidate[pos - 2] === "-") + pos -= 2; + + candidate = callFunction(std_String_substring, candidate, 0, pos); + } +} + + /** * Compares a BCP 47 language tag against the locales in availableLocales * and returns the best available match. Uses the fallback @@ -562,21 +706,16 @@ function CanonicalizeLocaleList(locales) { * Spec: RFC 4647, section 3.4. */ function BestAvailableLocale(availableLocales, locale) { - assert(IsStructurallyValidLanguageTag(locale), "invalid BestAvailableLocale locale structure"); - assert(locale === CanonicalizeLanguageTag(locale), "non-canonical BestAvailableLocale locale"); - assert(callFunction(std_String_indexOf, locale, "-u-") === -1, "locale shouldn't contain -u-"); + return BestAvailableLocaleHelper(availableLocales, locale, true); +} - var candidate = locale; - while (true) { - if (availableLocales[candidate]) - return candidate; - var pos = callFunction(std_String_lastIndexOf, candidate, "-"); - if (pos === -1) - return undefined; - if (pos >= 2 && candidate[pos - 2] === "-") - pos -= 2; - candidate = callFunction(std_String_substring, candidate, 0, pos); - } + +/** + * Identical to BestAvailableLocale, but does not consider the default locale + * during computation. + */ +function BestAvailableLocaleIgnoringDefault(availableLocales, locale) { + return BestAvailableLocaleHelper(availableLocales, locale, false); } @@ -1357,8 +1496,10 @@ var collatorInternalProperties = { var locales = this._availableLocales; if (locales) return locales; - return (this._availableLocales = - addOldStyleLanguageTags(intl_Collator_availableLocales())); + + locales = intl_Collator_availableLocales(); + addSpecialMissingLanguageTags(locales); + return (this._availableLocales = locales); }, relevantExtensionKeys: ["co", "kn"] }; @@ -1471,8 +1612,10 @@ var numberFormatInternalProperties = { var locales = this._availableLocales; if (locales) return locales; - return (this._availableLocales = - addOldStyleLanguageTags(intl_NumberFormat_availableLocales())); + + locales = intl_NumberFormat_availableLocales(); + addSpecialMissingLanguageTags(locales); + return (this._availableLocales = locales); }, relevantExtensionKeys: ["nu"] }; @@ -2504,8 +2647,10 @@ var dateTimeFormatInternalProperties = { var locales = this._availableLocales; if (locales) return locales; - return (this._availableLocales = - addOldStyleLanguageTags(intl_DateTimeFormat_availableLocales())); + + locales = intl_DateTimeFormat_availableLocales(); + addSpecialMissingLanguageTags(locales); + return (this._availableLocales = locales); }, relevantExtensionKeys: ["ca", "nu"] }; From 39aec8bb6a8509235103635b4242ba96b8d02cb6 Mon Sep 17 00:00:00 2001 From: Jeff Walden Date: Fri, 26 Jun 2015 17:49:18 -0700 Subject: [PATCH 42/63] Bug 1175347 - Add a JSAPI test for exposing availability of locales derived from the default locale. r=itsatest, rs=till over IRL --HG-- extra : rebase_source : e90510c3ed1c0d60b72eaf657c88feceaa3e01f7 --- js/src/jsapi-tests/moz.build | 1 + .../jsapi-tests/testIntlAvailableLocales.cpp | 58 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 js/src/jsapi-tests/testIntlAvailableLocales.cpp diff --git a/js/src/jsapi-tests/moz.build b/js/src/jsapi-tests/moz.build index bae900fe7080..709b66054ed4 100644 --- a/js/src/jsapi-tests/moz.build +++ b/js/src/jsapi-tests/moz.build @@ -47,6 +47,7 @@ UNIFIED_SOURCES += [ 'testHashTable.cpp', 'testIndexToString.cpp', 'testIntern.cpp', + 'testIntlAvailableLocales.cpp', 'testIntString.cpp', 'testIntTypesABI.cpp', 'testIsInsideNursery.cpp', diff --git a/js/src/jsapi-tests/testIntlAvailableLocales.cpp b/js/src/jsapi-tests/testIntlAvailableLocales.cpp new file mode 100644 index 000000000000..78a463c08537 --- /dev/null +++ b/js/src/jsapi-tests/testIntlAvailableLocales.cpp @@ -0,0 +1,58 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * vim: set ts=8 sts=4 et sw=4 tw=99: + */ +/* 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/. */ + +#include "jsapi-tests/tests.h" + +BEGIN_TEST(testIntlAvailableLocales) +{ + // This test should only attempt to run if we have Intl support. + JS::Rooted haveIntl(cx); + EVAL("typeof Intl !== 'undefined'", &haveIntl); + if (!haveIntl.toBoolean()) + return true; + + // Assumption: our Intl support always includes "de" (German) support, + // and our Intl support *does not* natively support de-ZA-ghijk. :-) + CHECK(JS_SetDefaultLocale(rt, "de-ZA-abcde-x-private")); + + EXEC("if (Intl.Collator().resolvedOptions().locale !== 'de-ZA-abcde-x-private') \n" + " throw 'unexpected default locale';"); + EXEC("var used = Intl.Collator('de-ZA-abcde').resolvedOptions().locale; \n" + "if (used !== 'de-ZA-abcde') \n" + " throw 'bad locale when using truncated default: ' + used;"); + EXEC("if (Intl.Collator('de-ZA').resolvedOptions().locale !== 'de-ZA') \n" + " throw 'bad locale when using more-truncated default';"); + EXEC("if (Intl.Collator('de-ZA-ghijk').resolvedOptions().locale !== 'de-ZA') \n" + " throw 'unexpected default locale';"); + + EXEC("if (Intl.Collator('de-ZA-abcde-x-private', { localeMatcher: 'lookup' }).resolvedOptions().locale !== \n" + " 'de-ZA-abcde-x-private') \n" + "{ \n" + " throw 'unexpected default locale with lookup matcher'; \n" + "}"); + EXEC("if (Intl.Collator('de-ZA-abcde').resolvedOptions().locale !== 'de-ZA-abcde') \n" + " throw 'bad locale when using truncated default';"); + EXEC("if (Intl.Collator('de-ZA').resolvedOptions().locale !== 'de-ZA') \n" + " throw 'bad locale when using more-truncated default';"); + EXEC("if (Intl.Collator('de').resolvedOptions().locale !== 'de') \n" + " throw 'bad locale when using most-truncated default';"); + + CHECK(JS_SetDefaultLocale(rt, "en-US-u-co-phonebk")); + EXEC("if (Intl.Collator().resolvedOptions().locale !== 'en-US') \n" + " throw 'unexpected default locale where proposed default included a Unicode extension';"); + + CHECK(JS_SetDefaultLocale(rt, "this is not a language tag at all, yo")); + + EXEC("if (Intl.Collator().resolvedOptions().locale !== 'en-GB') \n" + " throw 'unexpected last-ditch locale';"); + EXEC("if (Intl.Collator('en-GB').resolvedOptions().locale !== 'en-GB') \n" + " throw 'unexpected used locale when specified, with last-ditch locale as default';"); + + JS_ResetDefaultLocale(rt); + return true; +} +END_TEST(testIntlAvailableLocales) From 5042cc24cd0b3f1dc22f343bf481903559d70018 Mon Sep 17 00:00:00 2001 From: Botond Ballo Date: Mon, 29 Jun 2015 18:29:48 -0400 Subject: [PATCH 43/63] Bug 1178514 - Mark one-argument constructors in IPDL tests as 'explicit'. r=bent --HG-- extra : source : 90e22606e13f4b8bdfd2cf74b0f81d7a94c99dee --- ipc/ipdl/test/cxx/IPDLUnitTestProcessChild.h | 2 +- ipc/ipdl/test/cxx/TestBridgeMain.h | 4 ++-- ipc/ipdl/test/cxx/TestDataStructures.h | 2 +- ipc/ipdl/test/cxx/TestOpens.h | 4 ++-- ipc/ipdl/test/cxx/TestShutdown.h | 8 ++++---- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ipc/ipdl/test/cxx/IPDLUnitTestProcessChild.h b/ipc/ipdl/test/cxx/IPDLUnitTestProcessChild.h index 407a8d1f0a99..693cc7360fed 100644 --- a/ipc/ipdl/test/cxx/IPDLUnitTestProcessChild.h +++ b/ipc/ipdl/test/cxx/IPDLUnitTestProcessChild.h @@ -16,7 +16,7 @@ class IPDLUnitTestProcessChild : public mozilla::ipc::ProcessChild typedef mozilla::ipc::ProcessChild ProcessChild; public: - IPDLUnitTestProcessChild(ProcessId aParentPid) : + explicit IPDLUnitTestProcessChild(ProcessId aParentPid) : ProcessChild(aParentPid) { } diff --git a/ipc/ipdl/test/cxx/TestBridgeMain.h b/ipc/ipdl/test/cxx/TestBridgeMain.h index 2395bbdb9620..a5c7c10cbc09 100644 --- a/ipc/ipdl/test/cxx/TestBridgeMain.h +++ b/ipc/ipdl/test/cxx/TestBridgeMain.h @@ -42,7 +42,7 @@ class TestBridgeMainSubParent : public PTestBridgeMainSubParent { public: - TestBridgeMainSubParent(Transport* aTransport) + explicit TestBridgeMainSubParent(Transport* aTransport) : mTransport(aTransport) {} virtual ~TestBridgeMainSubParent() {} @@ -126,7 +126,7 @@ class TestBridgeMainSubChild : public PTestBridgeMainSubChild { public: - TestBridgeMainSubChild(Transport* aTransport) + explicit TestBridgeMainSubChild(Transport* aTransport) : mGotHi(false) , mTransport(aTransport) {} diff --git a/ipc/ipdl/test/cxx/TestDataStructures.h b/ipc/ipdl/test/cxx/TestDataStructures.h index a372b3c71bcc..f77cfa100aa0 100644 --- a/ipc/ipdl/test/cxx/TestDataStructures.h +++ b/ipc/ipdl/test/cxx/TestDataStructures.h @@ -20,7 +20,7 @@ class TestDataStructuresSub : public PTestDataStructuresSubChild { public: - TestDataStructuresSub(uint32_t i) : mI(i) + explicit TestDataStructuresSub(uint32_t i) : mI(i) { } virtual ~TestDataStructuresSub() { } diff --git a/ipc/ipdl/test/cxx/TestOpens.h b/ipc/ipdl/test/cxx/TestOpens.h index e8219f030b53..b83645a823d5 100644 --- a/ipc/ipdl/test/cxx/TestOpens.h +++ b/ipc/ipdl/test/cxx/TestOpens.h @@ -40,7 +40,7 @@ namespace _ipdltest2 { class TestOpensOpenedParent : public PTestOpensOpenedParent { public: - TestOpensOpenedParent(Transport* aTransport) + explicit TestOpensOpenedParent(Transport* aTransport) : mTransport(aTransport) {} virtual ~TestOpensOpenedParent() {} @@ -83,7 +83,7 @@ namespace _ipdltest2 { class TestOpensOpenedChild : public PTestOpensOpenedChild { public: - TestOpensOpenedChild(Transport* aTransport) + explicit TestOpensOpenedChild(Transport* aTransport) : mGotHi(false) , mTransport(aTransport) {} diff --git a/ipc/ipdl/test/cxx/TestShutdown.h b/ipc/ipdl/test/cxx/TestShutdown.h index 249ca415f1a7..c79cbb8fc629 100644 --- a/ipc/ipdl/test/cxx/TestShutdown.h +++ b/ipc/ipdl/test/cxx/TestShutdown.h @@ -22,7 +22,7 @@ class TestShutdownSubsubParent : public PTestShutdownSubsubParent { public: - TestShutdownSubsubParent(bool expectParentDeleted) : + explicit TestShutdownSubsubParent(bool expectParentDeleted) : mExpectParentDeleted(expectParentDeleted) { } @@ -44,7 +44,7 @@ class TestShutdownSubParent : public PTestShutdownSubParent { public: - TestShutdownSubParent(bool expectCrash) : + explicit TestShutdownSubParent(bool expectCrash) : mExpectCrash(expectCrash), mDeletedCount(0) { @@ -131,7 +131,7 @@ class TestShutdownSubsubChild : public PTestShutdownSubsubChild { public: - TestShutdownSubsubChild(bool expectParentDeleted) : + explicit TestShutdownSubsubChild(bool expectParentDeleted) : mExpectParentDeleted(expectParentDeleted) { } @@ -152,7 +152,7 @@ class TestShutdownSubChild : public PTestShutdownSubChild { public: - TestShutdownSubChild(bool expectCrash) : mExpectCrash(expectCrash) + explicit TestShutdownSubChild(bool expectCrash) : mExpectCrash(expectCrash) { } From 459a5b589b9df3ede8b974a65d50004afba77181 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 18 Jun 2015 18:09:37 -0700 Subject: [PATCH 44/63] Bug 1176163 - Remove remaining uses of PL_DHashTableEnumerate() from xpcom/. r=froydnj. --HG-- extra : rebase_source : 5e79d10647c138a28370d36d28a1c1227af8167b --- xpcom/glue/nsBaseHashtable.h | 90 ++++++++++-------------------------- xpcom/glue/nsTHashtable.h | 45 ++++++------------ xpcom/glue/pldhash.cpp | 29 ++---------- xpcom/tests/TestPLDHash.cpp | 9 ++-- 4 files changed, 44 insertions(+), 129 deletions(-) diff --git a/xpcom/glue/nsBaseHashtable.h b/xpcom/glue/nsBaseHashtable.h index fe0c98181cc8..1ad304eaf87f 100644 --- a/xpcom/glue/nsBaseHashtable.h +++ b/xpcom/glue/nsBaseHashtable.h @@ -167,10 +167,17 @@ public: */ uint32_t EnumerateRead(EnumReadFunction aEnumFunc, void* aUserArg) const { - s_EnumReadArgs enumData = { aEnumFunc, aUserArg }; - return PL_DHashTableEnumerate(const_cast(&this->mTable), - s_EnumReadStub, - &enumData); + uint32_t n = 0; + for (auto iter = this->mTable.Iter(); !iter.Done(); iter.Next()) { + auto entry = static_cast(iter.Get()); + PLDHashOperator op = aEnumFunc(entry->GetKey(), entry->mData, aUserArg); + n++; + MOZ_ASSERT(!(op & PL_DHASH_REMOVE)); + if (op & PL_DHASH_STOP) { + break; + } + } + return n; } /** @@ -196,10 +203,19 @@ public: */ uint32_t Enumerate(EnumFunction aEnumFunc, void* aUserArg) { - s_EnumArgs enumData = { aEnumFunc, aUserArg }; - return PL_DHashTableEnumerate(&this->mTable, - s_EnumStub, - &enumData); + uint32_t n = 0; + for (auto iter = this->mTable.RemovingIter(); !iter.Done(); iter.Next()) { + auto entry = static_cast(iter.Get()); + PLDHashOperator op = aEnumFunc(entry->GetKey(), entry->mData, aUserArg); + n++; + if (op & PL_DHASH_REMOVE) { + iter.Remove(); + } + if (op & PL_DHASH_STOP) { + break; + } + } + return n; } /** @@ -273,33 +289,6 @@ public: #endif protected: - /** - * used internally during EnumerateRead. Allocated on the stack. - * @param func the enumerator passed to EnumerateRead - * @param userArg the userArg passed to EnumerateRead - */ - struct s_EnumReadArgs - { - EnumReadFunction func; - void* userArg; - }; - - static PLDHashOperator s_EnumReadStub(PLDHashTable* aTable, - PLDHashEntryHdr* aHdr, - uint32_t aNumber, - void* aArg); - - struct s_EnumArgs - { - EnumFunction func; - void* userArg; - }; - - static PLDHashOperator s_EnumStub(PLDHashTable* aTable, - PLDHashEntryHdr* aHdr, - uint32_t aNumber, - void* aArg); - struct s_SizeOfArgs { SizeOfEntryExcludingThisFun func; @@ -375,37 +364,6 @@ nsBaseHashtableET::~nsBaseHashtableET() // nsBaseHashtable definitions // -template -PLDHashOperator -nsBaseHashtable::s_EnumReadStub( - PLDHashTable* aTable, PLDHashEntryHdr* aHdr, uint32_t aNumber, void* aArg) -{ - EntryType* ent = static_cast(aHdr); - s_EnumReadArgs* eargs = (s_EnumReadArgs*)aArg; - - PLDHashOperator res = (eargs->func)(ent->GetKey(), ent->mData, eargs->userArg); - - NS_ASSERTION(!(res & PL_DHASH_REMOVE), - "PL_DHASH_REMOVE return during const enumeration; ignoring."); - - if (res & PL_DHASH_STOP) { - return PL_DHASH_STOP; - } - - return PL_DHASH_NEXT; -} - -template -PLDHashOperator -nsBaseHashtable::s_EnumStub( - PLDHashTable* aTable, PLDHashEntryHdr* aHdr, uint32_t aNumber, void* aArg) -{ - EntryType* ent = static_cast(aHdr); - s_EnumArgs* eargs = (s_EnumArgs*)aArg; - - return (eargs->func)(ent->GetKey(), ent->mData, eargs->userArg); -} - template size_t nsBaseHashtable::s_SizeOfStub( diff --git a/xpcom/glue/nsTHashtable.h b/xpcom/glue/nsTHashtable.h index 9d97349fb620..10eac4c7cb0e 100644 --- a/xpcom/glue/nsTHashtable.h +++ b/xpcom/glue/nsTHashtable.h @@ -199,8 +199,19 @@ public: */ uint32_t EnumerateEntries(Enumerator aEnumFunc, void* aUserArg) { - s_EnumArgs args = { aEnumFunc, aUserArg }; - return PL_DHashTableEnumerate(&mTable, s_EnumStub, &args); + uint32_t n = 0; + for (auto iter = mTable.RemovingIter(); !iter.Done(); iter.Next()) { + auto entry = static_cast(iter.Get()); + PLDHashOperator op = aEnumFunc(entry, aUserArg); + n++; + if (op & PL_DHASH_REMOVE) { + iter.Remove(); + } + if (op & PL_DHASH_STOP) { + break; + } + } + return n; } /** @@ -318,23 +329,6 @@ protected: static void s_InitEntry(PLDHashEntryHdr* aEntry, const void* aKey); - /** - * passed internally during enumeration. Allocated on the stack. - * - * @param userFunc the Enumerator function passed to - * EnumerateEntries by the client - * @param userArg the userArg passed unaltered - */ - struct s_EnumArgs - { - Enumerator userFunc; - void* userArg; - }; - - static PLDHashOperator s_EnumStub(PLDHashTable* aTable, - PLDHashEntryHdr* aEntry, - uint32_t aNumber, void* aArg); - /** * passed internally during sizeOf counting. Allocated on the stack. * @@ -467,19 +461,6 @@ nsTHashtable::s_InitEntry(PLDHashEntryHdr* aEntry, new (aEntry) EntryType(reinterpret_cast(aKey)); } -template -PLDHashOperator -nsTHashtable::s_EnumStub(PLDHashTable* aTable, - PLDHashEntryHdr* aEntry, - uint32_t aNumber, - void* aArg) -{ - // dereferences the function-pointer to the user's enumeration function - return (*reinterpret_cast(aArg)->userFunc)( - static_cast(aEntry), - reinterpret_cast(aArg)->userArg); -} - template size_t nsTHashtable::s_SizeOfStub(PLDHashEntryHdr* aEntry, diff --git a/xpcom/glue/pldhash.cpp b/xpcom/glue/pldhash.cpp index 7cc191689077..81ed041bcfc1 100644 --- a/xpcom/glue/pldhash.cpp +++ b/xpcom/glue/pldhash.cpp @@ -845,23 +845,6 @@ PL_DHashTableEnumerate(PLDHashTable* aTable, PLDHashEnumerator aEtor, return aTable->Enumerate(aEtor, aArg); } -struct SizeOfEntryExcludingThisArg -{ - size_t total; - PLDHashSizeOfEntryExcludingThisFun sizeOfEntryExcludingThis; - MallocSizeOf mallocSizeOf; - void* arg; // the arg passed by the user -}; - -static PLDHashOperator -SizeOfEntryExcludingThisEnumerator(PLDHashTable* aTable, PLDHashEntryHdr* aHdr, - uint32_t aNumber, void* aArg) -{ - SizeOfEntryExcludingThisArg* e = (SizeOfEntryExcludingThisArg*)aArg; - e->total += e->sizeOfEntryExcludingThis(aHdr, e->mallocSizeOf, e->arg); - return PL_DHASH_NEXT; -} - MOZ_ALWAYS_INLINE size_t PLDHashTable::SizeOfExcludingThis( PLDHashSizeOfEntryExcludingThisFun aSizeOfEntryExcludingThis, @@ -871,15 +854,11 @@ PLDHashTable::SizeOfExcludingThis( return 0; } - size_t n = 0; - n += aMallocSizeOf(mEntryStore); + size_t n = aMallocSizeOf(mEntryStore); if (aSizeOfEntryExcludingThis) { - SizeOfEntryExcludingThisArg arg2 = { - 0, aSizeOfEntryExcludingThis, aMallocSizeOf, aArg - }; - PL_DHashTableEnumerate(const_cast(this), - SizeOfEntryExcludingThisEnumerator, &arg2); - n += arg2.total; + for (auto iter = Iter(); !iter.Done(); iter.Next()) { + n += aSizeOfEntryExcludingThis(iter.Get(), aMallocSizeOf, aArg); + } } return n; } diff --git a/xpcom/tests/TestPLDHash.cpp b/xpcom/tests/TestPLDHash.cpp index d86a2d5254b0..28f5a8bb715a 100644 --- a/xpcom/tests/TestPLDHash.cpp +++ b/xpcom/tests/TestPLDHash.cpp @@ -64,14 +64,11 @@ static bool test_pldhash_lazy_storage() // No result to check here, but call it to make sure it doesn't crash. PL_DHashTableRemove(&t, (const void*)2); - // Using a null |enumerator| should be fine because it shouldn't be called - // for an empty table. - PLDHashEnumerator enumerator = nullptr; - if (PL_DHashTableEnumerate(&t, enumerator, nullptr) != 0) { - return false; // enumeration count is non-zero? + for (auto iter = t.Iter(); !iter.Done(); iter.Next()) { + return false; // shouldn't hit this on an empty table } - for (auto iter = t.Iter(); !iter.Done(); iter.Get()) { + for (auto iter = t.RemovingIter(); !iter.Done(); iter.Next()) { return false; // shouldn't hit this on an empty table } From 1f96bf701402c15407c411fdbf4fb4a035dceeca Mon Sep 17 00:00:00 2001 From: "L. David Baron" Date: Mon, 29 Jun 2015 16:46:16 -0700 Subject: [PATCH 45/63] Bug 1122526 patch 1 - Factor in the scale from ancestors when computing scale for layer with OMT animation of transform. r=roc --- layout/base/FrameLayerBuilder.cpp | 5 ++++ .../animate-layer-scale-inherit-1-ref.html | 24 +++++++++++++++++ .../animate-layer-scale-inherit-1.html | 27 +++++++++++++++++++ layout/reftests/transform/reftest.list | 2 ++ 4 files changed, 58 insertions(+) create mode 100644 layout/reftests/transform/animate-layer-scale-inherit-1-ref.html create mode 100644 layout/reftests/transform/animate-layer-scale-inherit-1.html diff --git a/layout/base/FrameLayerBuilder.cpp b/layout/base/FrameLayerBuilder.cpp index 156a116f674f..f7d127daa39b 100644 --- a/layout/base/FrameLayerBuilder.cpp +++ b/layout/base/FrameLayerBuilder.cpp @@ -4700,9 +4700,14 @@ ChooseScaleAndSetTransform(FrameLayerBuilder* aLayerBuilder, if (aContainerFrame->GetContent() && nsLayoutUtils::HasAnimationsForCompositor( aContainerFrame->GetContent(), eCSSProperty_transform)) { + // compute scale using the animation on the container (ignoring + // its ancestors) scale = nsLayoutUtils::ComputeSuitableScaleForAnimation( aContainerFrame->GetContent(), aVisibleRect.Size(), aContainerFrame->PresContext()->GetVisibleArea().Size()); + // multiply by the scale inherited from ancestors + scale.width *= aIncomingScale.mXScale; + scale.height *= aIncomingScale.mYScale; } else { // Scale factors are normalized to a power of 2 to reduce the number of resolution changes scale = RoundToFloatPrecision(ThebesMatrix(transform2d).ScaleFactors(true)); diff --git a/layout/reftests/transform/animate-layer-scale-inherit-1-ref.html b/layout/reftests/transform/animate-layer-scale-inherit-1-ref.html new file mode 100644 index 000000000000..3f2974597f31 --- /dev/null +++ b/layout/reftests/transform/animate-layer-scale-inherit-1-ref.html @@ -0,0 +1,24 @@ + +Testcase, bug 1122526 + + +

+
+
+
diff --git a/layout/reftests/transform/animate-layer-scale-inherit-1.html b/layout/reftests/transform/animate-layer-scale-inherit-1.html new file mode 100644 index 000000000000..b04c4a8fa965 --- /dev/null +++ b/layout/reftests/transform/animate-layer-scale-inherit-1.html @@ -0,0 +1,27 @@ + +Testcase, bug 1122526 + + +
+
+
+
diff --git a/layout/reftests/transform/reftest.list b/layout/reftests/transform/reftest.list index ad09aa38d009..80c58967edc0 100644 --- a/layout/reftests/transform/reftest.list +++ b/layout/reftests/transform/reftest.list @@ -132,3 +132,5 @@ pref(svg.transform-origin.enabled,true) == transform-origin-svg-1a.svg transform pref(svg.transform-origin.enabled,true) == transform-origin-svg-1b.svg transform-origin-svg-1-ref.svg pref(svg.transform-origin.enabled,true) == transform-origin-svg-2a.svg transform-origin-svg-2-ref.svg pref(svg.transform-origin.enabled,true) == transform-origin-svg-2b.svg transform-origin-svg-2-ref.svg +# Bug 1122526 +== animate-layer-scale-inherit-1.html animate-layer-scale-inherit-1-ref.html From 0f46845bc4f422858d02b3d73b14c445fd2c146d Mon Sep 17 00:00:00 2001 From: "L. David Baron" Date: Mon, 29 Jun 2015 16:46:16 -0700 Subject: [PATCH 46/63] Bug 1122526 patch 2 - Only do OMTA transform scale choosing for layers that are for transform display items. r=roc This fixes the scaling choice when we have more than one layer for the same element, e.g., because it animates both transform and opacity. --- layout/base/FrameLayerBuilder.cpp | 4 +++ .../animate-layer-scale-inherit-2-ref.html | 24 ++++++++++++++ .../animate-layer-scale-inherit-2.html | 31 +++++++++++++++++++ layout/reftests/transform/reftest.list | 1 + 4 files changed, 60 insertions(+) create mode 100644 layout/reftests/transform/animate-layer-scale-inherit-2-ref.html create mode 100644 layout/reftests/transform/animate-layer-scale-inherit-2.html diff --git a/layout/base/FrameLayerBuilder.cpp b/layout/base/FrameLayerBuilder.cpp index f7d127daa39b..3bf53ce38235 100644 --- a/layout/base/FrameLayerBuilder.cpp +++ b/layout/base/FrameLayerBuilder.cpp @@ -4643,6 +4643,7 @@ static bool ChooseScaleAndSetTransform(FrameLayerBuilder* aLayerBuilder, nsDisplayListBuilder* aDisplayListBuilder, nsIFrame* aContainerFrame, + nsDisplayItem* aContainerItem, const nsRect& aVisibleRect, const Matrix4x4* aTransform, const ContainerLayerParameters& aIncomingScale, @@ -4698,6 +4699,8 @@ ChooseScaleAndSetTransform(FrameLayerBuilder* aLayerBuilder, // If the container's transform is animated off main thread, fix a suitable scale size // for animation if (aContainerFrame->GetContent() && + aContainerItem && + aContainerItem->GetType() == nsDisplayItem::TYPE_TRANSFORM && nsLayoutUtils::HasAnimationsForCompositor( aContainerFrame->GetContent(), eCSSProperty_transform)) { // compute scale using the animation on the container (ignoring @@ -4891,6 +4894,7 @@ FrameLayerBuilder::BuildContainerLayerFor(nsDisplayListBuilder* aBuilder, aContainerItem ? aContainerItem->GetVisibleRectForChildren() : aContainerFrame->GetVisualOverflowRectRelativeToSelf(); if (!ChooseScaleAndSetTransform(this, aBuilder, aContainerFrame, + aContainerItem, bounds.Intersect(childrenVisible), aTransform, aParameters, containerLayer, state, scaleParameters)) { diff --git a/layout/reftests/transform/animate-layer-scale-inherit-2-ref.html b/layout/reftests/transform/animate-layer-scale-inherit-2-ref.html new file mode 100644 index 000000000000..714f6f2224e0 --- /dev/null +++ b/layout/reftests/transform/animate-layer-scale-inherit-2-ref.html @@ -0,0 +1,24 @@ + +Testcase, bug 1122526 + + +
+
+
+
diff --git a/layout/reftests/transform/animate-layer-scale-inherit-2.html b/layout/reftests/transform/animate-layer-scale-inherit-2.html new file mode 100644 index 000000000000..f7297d12134b --- /dev/null +++ b/layout/reftests/transform/animate-layer-scale-inherit-2.html @@ -0,0 +1,31 @@ + +Testcase, bug 1122526 + + +
+
+
+
diff --git a/layout/reftests/transform/reftest.list b/layout/reftests/transform/reftest.list index 80c58967edc0..a54f82bdd402 100644 --- a/layout/reftests/transform/reftest.list +++ b/layout/reftests/transform/reftest.list @@ -134,3 +134,4 @@ pref(svg.transform-origin.enabled,true) == transform-origin-svg-2a.svg transform pref(svg.transform-origin.enabled,true) == transform-origin-svg-2b.svg transform-origin-svg-2-ref.svg # Bug 1122526 == animate-layer-scale-inherit-1.html animate-layer-scale-inherit-1-ref.html +== animate-layer-scale-inherit-2.html animate-layer-scale-inherit-2-ref.html From fdfacfe99e5332e76201b3f0e5bbd90b3c4eb361 Mon Sep 17 00:00:00 2001 From: "L. David Baron" Date: Mon, 29 Jun 2015 16:46:17 -0700 Subject: [PATCH 47/63] Bug 1122526 patch 3 - Correctly account for transform:none when finding maximum scale for a transform animation. r=roc The patch works by not handling transform:none specially at all, which will lead to a scale of 1 (instead of the current 0). This is the patch that actually fixes the original problem reported in bug 1122526. This patch also fixes bug 1165196. --- layout/base/nsLayoutUtils.cpp | 5 -- .../animate-layer-scale-inherit-3.html | 46 +++++++++++++++++++ layout/reftests/transform/reftest.list | 1 + 3 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 layout/reftests/transform/animate-layer-scale-inherit-3.html diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp index 88a4ae547615..d1c6cbbbc32c 100644 --- a/layout/base/nsLayoutUtils.cpp +++ b/layout/base/nsLayoutUtils.cpp @@ -460,11 +460,6 @@ GetScaleForValue(const StyleAnimationValue& aValue, nsIFrame* aFrame) nsCSSValueSharedList* list = aValue.GetCSSValueSharedListValue(); MOZ_ASSERT(list->mHead); - if (list->mHead->mValue.GetUnit() == eCSSUnit_None) { - // There is an animation, but no actual transform yet. - return gfxSize(); - } - RuleNodeCacheConditions dontCare; TransformReferenceBox refBox(aFrame); gfx3DMatrix transform = nsStyleTransformMatrix::ReadTransforms( diff --git a/layout/reftests/transform/animate-layer-scale-inherit-3.html b/layout/reftests/transform/animate-layer-scale-inherit-3.html new file mode 100644 index 000000000000..8d7fd110c210 --- /dev/null +++ b/layout/reftests/transform/animate-layer-scale-inherit-3.html @@ -0,0 +1,46 @@ + + +Testcase, bug 1122526 + + +
+
+
+
+ + diff --git a/layout/reftests/transform/reftest.list b/layout/reftests/transform/reftest.list index a54f82bdd402..682bac53f1c4 100644 --- a/layout/reftests/transform/reftest.list +++ b/layout/reftests/transform/reftest.list @@ -135,3 +135,4 @@ pref(svg.transform-origin.enabled,true) == transform-origin-svg-2b.svg transform # Bug 1122526 == animate-layer-scale-inherit-1.html animate-layer-scale-inherit-1-ref.html == animate-layer-scale-inherit-2.html animate-layer-scale-inherit-2-ref.html +== animate-layer-scale-inherit-3.html animate-layer-scale-inherit-1-ref.html From e9742befac7de14f0cb1bb44d8103ee0de19f3e4 Mon Sep 17 00:00:00 2001 From: "L. David Baron" Date: Mon, 29 Jun 2015 16:46:17 -0700 Subject: [PATCH 48/63] Bug 1122526 patch 4 - Use the nearest widget size as the maximum size for an animated layer, in case it's a popup larger than the toplevel window. r=roc --- layout/base/FrameLayerBuilder.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/layout/base/FrameLayerBuilder.cpp b/layout/base/FrameLayerBuilder.cpp index 3bf53ce38235..9a08ee759d27 100644 --- a/layout/base/FrameLayerBuilder.cpp +++ b/layout/base/FrameLayerBuilder.cpp @@ -4703,11 +4703,25 @@ ChooseScaleAndSetTransform(FrameLayerBuilder* aLayerBuilder, aContainerItem->GetType() == nsDisplayItem::TYPE_TRANSFORM && nsLayoutUtils::HasAnimationsForCompositor( aContainerFrame->GetContent(), eCSSProperty_transform)) { + // Use the size of the nearest widget as the maximum size. This + // is important since it might be a popup that is bigger than the + // pres context's size. + nsPresContext* presContext = aContainerFrame->PresContext(); + nsIWidget* widget = aContainerFrame->GetNearestWidget(); + nsSize displaySize; + if (widget) { + IntSize widgetSize = widget->GetClientSize(); + int32_t p2a = presContext->AppUnitsPerDevPixel(); + displaySize.width = NSIntPixelsToAppUnits(widgetSize.width, p2a); + displaySize.height = NSIntPixelsToAppUnits(widgetSize.height, p2a); + } else { + displaySize = presContext->GetVisibleArea().Size(); + } // compute scale using the animation on the container (ignoring // its ancestors) scale = nsLayoutUtils::ComputeSuitableScaleForAnimation( aContainerFrame->GetContent(), aVisibleRect.Size(), - aContainerFrame->PresContext()->GetVisibleArea().Size()); + displaySize); // multiply by the scale inherited from ancestors scale.width *= aIncomingScale.mXScale; scale.height *= aIncomingScale.mYScale; From 20dc82c90cb94ffe709052776221a1343a74b03b Mon Sep 17 00:00:00 2001 From: Jonathan Griffin Date: Mon, 29 Jun 2015 16:55:17 -0700 Subject: [PATCH 49/63] Bug 1177782 - Enable --screenshot-on-fail for mochitests, r=jgriffin --- testing/config/mozharness/android_arm_4_3_config.py | 4 ++-- testing/config/mozharness/android_arm_config.py | 4 ++-- testing/config/mozharness/android_panda_config.py | 3 ++- testing/config/mozharness/android_x86_config.py | 2 +- testing/config/mozharness/b2g_desktop_config.py | 3 ++- testing/config/mozharness/b2g_emulator_config.py | 2 ++ testing/config/mozharness/linux_config.py | 3 ++- testing/config/mozharness/mac_config.py | 3 ++- testing/config/mozharness/taskcluster_linux_config.py | 2 +- testing/config/mozharness/windows_config.py | 3 ++- 10 files changed, 18 insertions(+), 11 deletions(-) diff --git a/testing/config/mozharness/android_arm_4_3_config.py b/testing/config/mozharness/android_arm_4_3_config.py index dbe4e73d210e..04e4f4e2cf57 100644 --- a/testing/config/mozharness/android_arm_4_3_config.py +++ b/testing/config/mozharness/android_arm_4_3_config.py @@ -11,7 +11,7 @@ config = { "--xre-path=%(xre_path)s", "--utility-path=%(utility_path)s", "--http-port=%(http_port)s", "--ssl-port=%(ssl_port)s", "--certificate-path=%(certs_path)s", "--symbols-path=%(symbols_path)s", - "--quiet", "--log-raw=%(raw_log_file)s", + "--quiet", "--log-raw=%(raw_log_file)s", "--screenshot-on-fail", "--total-chunks=16", ], }, @@ -22,7 +22,7 @@ config = { "--xre-path=%(xre_path)s", "--utility-path=%(utility_path)s", "--http-port=%(http_port)s", "--ssl-port=%(ssl_port)s", "--certificate-path=%(certs_path)s", "--symbols-path=%(symbols_path)s", - "--quiet", "--log-raw=%(raw_log_file)s", + "--quiet", "--log-raw=%(raw_log_file)s", "--screenshot-on-fail", "--total-chunks=4", "--subsuite=webgl", ], diff --git a/testing/config/mozharness/android_arm_config.py b/testing/config/mozharness/android_arm_config.py index 40ceeb1e1db5..344b0827dec5 100644 --- a/testing/config/mozharness/android_arm_config.py +++ b/testing/config/mozharness/android_arm_config.py @@ -12,7 +12,7 @@ config = { "--deviceIP=%(device_ip)s", "--devicePort=%(device_port)s", "--http-port=%(http_port)s", "--ssl-port=%(ssl_port)s", "--certificate-path=%(certs_path)s", "--symbols-path=%(symbols_path)s", - "--quiet", "--log-raw=%(raw_log_file)s", + "--quiet", "--log-raw=%(raw_log_file)s", "--screenshot-on-fail", "--total-chunks=16", ], }, @@ -24,7 +24,7 @@ config = { "--deviceIP=%(device_ip)s", "--devicePort=%(device_port)s", "--http-port=%(http_port)s", "--ssl-port=%(ssl_port)s", "--certificate-path=%(certs_path)s", "--symbols-path=%(symbols_path)s", - "--quiet", "--log-raw=%(raw_log_file)s", + "--quiet", "--log-raw=%(raw_log_file)s", "--screenshot-on-fail", "--total-chunks=4", "--subsuite=webgl", ], diff --git a/testing/config/mozharness/android_panda_config.py b/testing/config/mozharness/android_panda_config.py index f1c67492dfc4..6079534346a4 100644 --- a/testing/config/mozharness/android_panda_config.py +++ b/testing/config/mozharness/android_panda_config.py @@ -79,7 +79,8 @@ config = { "--ssl-port=%(ssl_port)s", "--symbols-path=%(symbols_path)s", "--quiet", - "--log-raw=%(raw_log_file)s" + "--log-raw=%(raw_log_file)s", + "--screenshot-on-fail", ], "run_filename": "runtestsremote.py", "testsdir": "mochitest" diff --git a/testing/config/mozharness/android_x86_config.py b/testing/config/mozharness/android_x86_config.py index 4097e96124a2..1a4c64012948 100644 --- a/testing/config/mozharness/android_x86_config.py +++ b/testing/config/mozharness/android_x86_config.py @@ -11,7 +11,7 @@ config = { "--deviceIP=%(device_ip)s", "--devicePort=%(device_port)s", "--http-port=%(http_port)s", "--ssl-port=%(ssl_port)s", "--certificate-path=%(certs_path)s", "--symbols-path=%(symbols_path)s", - "--quiet", "--log-raw=%(raw_log_file)s", + "--quiet", "--log-raw=%(raw_log_file)s", "--screenshot-on-fail", ], }, "reftest": { diff --git a/testing/config/mozharness/b2g_desktop_config.py b/testing/config/mozharness/b2g_desktop_config.py index 7e17ba66e38b..755095f0854e 100644 --- a/testing/config/mozharness/b2g_desktop_config.py +++ b/testing/config/mozharness/b2g_desktop_config.py @@ -16,7 +16,8 @@ config = { "--symbols-path=%(symbols_path)s", "--browser-arg=%(browser_arg)s", "--quiet", - "--log-raw=%(raw_log_file)s" + "--log-raw=%(raw_log_file)s", + "--screenshot-on-fail", ], "run_filename": "runtestsb2g.py", "testsdir": "mochitest" diff --git a/testing/config/mozharness/b2g_emulator_config.py b/testing/config/mozharness/b2g_emulator_config.py index 40aa6b008dbb..f9f0f98aca18 100644 --- a/testing/config/mozharness/b2g_emulator_config.py +++ b/testing/config/mozharness/b2g_emulator_config.py @@ -72,6 +72,7 @@ config = { "--quiet", "--log-raw=%(raw_log_file)s", "--certificate-path=%(certificate_path)s", + "--screenshot-on-fail", "%(test_path)s" ], "run_filename": "runtestsb2g.py", @@ -93,6 +94,7 @@ config = { "--chrome", "--log-raw=%(raw_log_file)s", "--certificate-path=%(certificate_path)s", + "--screenshot-on-fail", "%(test_path)s" ], "run_filename": "runtestsb2g.py", diff --git a/testing/config/mozharness/linux_config.py b/testing/config/mozharness/linux_config.py index 7f79e3bbc0a2..12bb30305427 100644 --- a/testing/config/mozharness/linux_config.py +++ b/testing/config/mozharness/linux_config.py @@ -33,7 +33,8 @@ config = { "--setpref=webgl.force-enabled=true", "--quiet", "--log-raw=%(raw_log_file)s", - "--use-test-media-devices" + "--use-test-media-devices", + "--screenshot-on-fail", ], "run_filename": "runtests.py", "testsdir": "mochitest" diff --git a/testing/config/mozharness/mac_config.py b/testing/config/mozharness/mac_config.py index 8d2cd095adea..bf385df727f7 100644 --- a/testing/config/mozharness/mac_config.py +++ b/testing/config/mozharness/mac_config.py @@ -31,7 +31,8 @@ config = { "--symbols-path=%(symbols_path)s", "--certificate-path=tests/certs", "--quiet", - "--log-raw=%(raw_log_file)s" + "--log-raw=%(raw_log_file)s", + "--screenshot-on-fail", ], "run_filename": "runtests.py", "testsdir": "mochitest" diff --git a/testing/config/mozharness/taskcluster_linux_config.py b/testing/config/mozharness/taskcluster_linux_config.py index d46a176b210f..b436b02b2687 100644 --- a/testing/config/mozharness/taskcluster_linux_config.py +++ b/testing/config/mozharness/taskcluster_linux_config.py @@ -11,7 +11,7 @@ config = { "--appname=%(binary_path)s", "--utility-path=tests/bin", "--extra-profile-file=tests/bin/plugins", "--symbols-path=%(symbols_path)s", "--certificate-path=tests/certs", "--setpref=webgl.force-enabled=true", - "--quiet", "--log-raw=%(raw_log_file)s" + "--quiet", "--log-raw=%(raw_log_file)s", "--screenshot-on-fail", ], "webapprt_options": [ "--app=%(app_path)s", "--utility-path=tests/bin", diff --git a/testing/config/mozharness/windows_config.py b/testing/config/mozharness/windows_config.py index 8d2cd095adea..bf385df727f7 100644 --- a/testing/config/mozharness/windows_config.py +++ b/testing/config/mozharness/windows_config.py @@ -31,7 +31,8 @@ config = { "--symbols-path=%(symbols_path)s", "--certificate-path=tests/certs", "--quiet", - "--log-raw=%(raw_log_file)s" + "--log-raw=%(raw_log_file)s", + "--screenshot-on-fail", ], "run_filename": "runtests.py", "testsdir": "mochitest" From 2fead310bb27398e84d7f46be2b779fc87de191b Mon Sep 17 00:00:00 2001 From: Eric Rahm Date: Mon, 29 Jun 2015 17:16:31 -0700 Subject: [PATCH 50/63] Bug 1177565 - Stop warning if EnsureScriptEnvironment returns NS_ERROR_NOT_AVAILABLE. r=smaug --- docshell/base/nsDocShell.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp index f0f967cb63d3..8d984a841157 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -4585,8 +4585,7 @@ nsDocShell::GetDocument() nsPIDOMWindow* nsDocShell::GetWindow() { - NS_ENSURE_SUCCESS(EnsureScriptEnvironment(), nullptr); - return mScriptGlobal; + return NS_SUCCEEDED(EnsureScriptEnvironment()) ? mScriptGlobal : nullptr; } NS_IMETHODIMP From 7320c1e1836283630190437d86e87b3a000e3bcb Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 18 Jun 2015 16:44:35 -0700 Subject: [PATCH 51/63] Bug 1176159 (part 1) - Remove pref_SaveTypes. r=bsmedberg. Because SAVE_ALL is the only value ever used. --HG-- extra : rebase_source : fbbb49dc8cc5051913d62102581db86a1fa8db49 --- modules/libpref/Preferences.cpp | 1 - modules/libpref/prefapi.cpp | 9 ++------- modules/libpref/prefapi_private_data.h | 3 --- 3 files changed, 2 insertions(+), 11 deletions(-) diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp index 118eeb64b4e2..e5eb4bf477c2 100644 --- a/modules/libpref/Preferences.cpp +++ b/modules/libpref/Preferences.cpp @@ -960,7 +960,6 @@ Preferences::WritePrefFile(nsIFile* aFile) memset(valueArray, 0, gHashTable->EntryCount() * sizeof(char*)); pref_saveArgs saveArgs; saveArgs.prefArray = valueArray; - saveArgs.saveTypes = SAVE_ALL; // get the lines that we're supposed to be writing to the file PL_DHashTableEnumerate(gHashTable, pref_savePref, &saveArgs); diff --git a/modules/libpref/prefapi.cpp b/modules/libpref/prefapi.cpp index 8b603e25b1f1..e5428476ec81 100644 --- a/modules/libpref/prefapi.cpp +++ b/modules/libpref/prefapi.cpp @@ -343,13 +343,8 @@ pref_savePref(PLDHashTable *table, PLDHashEntryHdr *heh, uint32_t i, void *arg) pref->flags & PREF_STICKY_DEFAULT)) { sourcePref = &pref->userPref; } else { - if (argData->saveTypes == SAVE_ALL_AND_DEFAULTS) { - prefPrefix.AssignLiteral("pref(\""); - sourcePref = &pref->defaultPref; - } - else - // do not save default prefs that haven't changed - return PL_DHASH_NEXT; + // do not save default prefs that haven't changed + return PL_DHASH_NEXT; } // strings are in quotes! diff --git a/modules/libpref/prefapi_private_data.h b/modules/libpref/prefapi_private_data.h index 82141adcefd6..c288edcfc816 100644 --- a/modules/libpref/prefapi_private_data.h +++ b/modules/libpref/prefapi_private_data.h @@ -19,12 +19,9 @@ class PrefSetting; } } -enum pref_SaveTypes { SAVE_NONSHARED, SAVE_SHARED, SAVE_ALL, SAVE_ALL_AND_DEFAULTS }; - // Passed as the arg to pref_savePref struct pref_saveArgs { char **prefArray; - pref_SaveTypes saveTypes; }; PLDHashOperator From a38880a83a8a302332f990af59a3b661d881a22f Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 18 Jun 2015 17:58:24 -0700 Subject: [PATCH 52/63] Bug 1176159 (part 2) - Remove uses of PL_DHashTableEnumerate() from libpref. r=bsmedberg. --HG-- extra : rebase_source : 15488918c1d6b4f7cc994016485d0619061d51a9 --- modules/libpref/Preferences.cpp | 10 +- modules/libpref/nsPrefBranch.cpp | 35 ++--- modules/libpref/prefapi.cpp | 172 ++++++++++--------------- modules/libpref/prefapi_private_data.h | 13 +- 4 files changed, 86 insertions(+), 144 deletions(-) diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp index e5eb4bf477c2..abb00e09cca9 100644 --- a/modules/libpref/Preferences.cpp +++ b/modules/libpref/Preferences.cpp @@ -737,7 +737,11 @@ void Preferences::GetPreferences(InfallibleTArray* aPrefs) { aPrefs->SetCapacity(gHashTable->Capacity()); - PL_DHashTableEnumerate(gHashTable, pref_GetPrefs, aPrefs); + for (auto iter = gHashTable->Iter(); !iter.Done(); iter.Next()) { + auto entry = static_cast(iter.Get()); + dom::PrefSetting *pref = aPrefs->AppendElement(); + pref_GetPrefFromEntry(entry, pref); + } } NS_IMETHODIMP @@ -958,11 +962,9 @@ Preferences::WritePrefFile(nsIFile* aFile) nsAutoArrayPtr valueArray(new char*[gHashTable->EntryCount()]); memset(valueArray, 0, gHashTable->EntryCount() * sizeof(char*)); - pref_saveArgs saveArgs; - saveArgs.prefArray = valueArray; // get the lines that we're supposed to be writing to the file - PL_DHashTableEnumerate(gHashTable, pref_savePref, &saveArgs); + pref_savePrefs(gHashTable, valueArray); /* Sort the preferences to make a readable file on disk */ NS_QuickSort(valueArray, gHashTable->EntryCount(), sizeof(char *), diff --git a/modules/libpref/nsPrefBranch.cpp b/modules/libpref/nsPrefBranch.cpp index a14f68cf617a..7e8a69ce1e69 100644 --- a/modules/libpref/nsPrefBranch.cpp +++ b/modules/libpref/nsPrefBranch.cpp @@ -46,17 +46,6 @@ } #endif -// Definitions -struct EnumerateData { - const char *parent; - nsTArray *pref_list; -}; - -// Prototypes -static PLDHashOperator - pref_enumChild(PLDHashTable *table, PLDHashEntryHdr *heh, - uint32_t i, void *arg); - using mozilla::dom::ContentChild; static ContentChild* @@ -545,7 +534,6 @@ NS_IMETHODIMP nsPrefBranch::GetChildList(const char *aStartingAt, uint32_t *aCou char **outArray; int32_t numPrefs; int32_t dwIndex; - EnumerateData ed; nsAutoTArray prefArray; NS_ENSURE_ARG(aStartingAt); @@ -558,9 +546,14 @@ NS_IMETHODIMP nsPrefBranch::GetChildList(const char *aStartingAt, uint32_t *aCou // this will contain a list of all the pref name strings // allocate on the stack for speed - ed.parent = getPrefName(aStartingAt); - ed.pref_list = &prefArray; - PL_DHashTableEnumerate(gHashTable, pref_enumChild, &ed); + const char* parent = getPrefName(aStartingAt); + size_t parentLen = strlen(parent); + for (auto iter = gHashTable->Iter(); !iter.Done(); iter.Next()) { + auto entry = static_cast(iter.Get()); + if (strncmp(entry->key, parent, parentLen) == 0) { + prefArray.AppendElement(entry->key); + } + } // now that we've built up the list, run the callback on // all the matching elements @@ -773,18 +766,6 @@ const char *nsPrefBranch::getPrefName(const char *aPrefName) return mPrefRoot.get(); } -static PLDHashOperator -pref_enumChild(PLDHashTable *table, PLDHashEntryHdr *heh, - uint32_t i, void *arg) -{ - PrefHashEntry *he = static_cast(heh); - EnumerateData *d = reinterpret_cast(arg); - if (strncmp(he->key, d->parent, strlen(d->parent)) == 0) { - d->pref_list->AppendElement(he->key); - } - return PL_DHASH_NEXT; -} - //---------------------------------------------------------------------------- // nsPrefLocalizedString //---------------------------------------------------------------------------- diff --git a/modules/libpref/prefapi.cpp b/modules/libpref/prefapi.cpp index e5428476ec81..4fe4250b4067 100644 --- a/modules/libpref/prefapi.cpp +++ b/modules/libpref/prefapi.cpp @@ -318,74 +318,54 @@ pref_SetPref(const dom::PrefSetting& aPref) return rv; } -PLDHashOperator -pref_savePref(PLDHashTable *table, PLDHashEntryHdr *heh, uint32_t i, void *arg) +void +pref_savePrefs(PLDHashTable* aTable, char** aPrefArray) { - pref_saveArgs *argData = static_cast(arg); - PrefHashEntry *pref = static_cast(heh); + int32_t j = 0; + for (auto iter = aTable->Iter(); !iter.Done(); iter.Next()) { + auto pref = static_cast(iter.Get()); - PR_ASSERT(pref); - if (!pref) - return PL_DHASH_NEXT; + nsAutoCString prefValue; + nsAutoCString prefPrefix; + prefPrefix.AssignLiteral("user_pref(\""); - nsAutoCString prefValue; - nsAutoCString prefPrefix; - prefPrefix.AssignLiteral("user_pref(\""); + // where we're getting our pref from + PrefValue* sourcePref; - // where we're getting our pref from - PrefValue* sourcePref; + if (PREF_HAS_USER_VALUE(pref) && + (pref_ValueChanged(pref->defaultPref, + pref->userPref, + (PrefType) PREF_TYPE(pref)) || + !(pref->flags & PREF_HAS_DEFAULT) || + pref->flags & PREF_STICKY_DEFAULT)) { + sourcePref = &pref->userPref; + } else { + // do not save default prefs that haven't changed + continue; + } - if (PREF_HAS_USER_VALUE(pref) && - (pref_ValueChanged(pref->defaultPref, - pref->userPref, - (PrefType) PREF_TYPE(pref)) || - !(pref->flags & PREF_HAS_DEFAULT) || - pref->flags & PREF_STICKY_DEFAULT)) { - sourcePref = &pref->userPref; - } else { - // do not save default prefs that haven't changed - return PL_DHASH_NEXT; + // strings are in quotes! + if (pref->flags & PREF_STRING) { + prefValue = '\"'; + str_escape(sourcePref->stringVal, prefValue); + prefValue += '\"'; + + } else if (pref->flags & PREF_INT) { + prefValue.AppendInt(sourcePref->intVal); + + } else if (pref->flags & PREF_BOOL) { + prefValue = (sourcePref->boolVal) ? "true" : "false"; + } + + nsAutoCString prefName; + str_escape(pref->key, prefName); + + aPrefArray[j++] = ToNewCString(prefPrefix + + prefName + + NS_LITERAL_CSTRING("\", ") + + prefValue + + NS_LITERAL_CSTRING(");")); } - - // strings are in quotes! - if (pref->flags & PREF_STRING) { - prefValue = '\"'; - str_escape(sourcePref->stringVal, prefValue); - prefValue += '\"'; - } - - else if (pref->flags & PREF_INT) - prefValue.AppendInt(sourcePref->intVal); - - else if (pref->flags & PREF_BOOL) - prefValue = (sourcePref->boolVal) ? "true" : "false"; - - nsAutoCString prefName; - str_escape(pref->key, prefName); - - argData->prefArray[i] = ToNewCString(prefPrefix + - prefName + - NS_LITERAL_CSTRING("\", ") + - prefValue + - NS_LITERAL_CSTRING(");")); - - return PL_DHASH_NEXT; -} - -PLDHashOperator -pref_GetPrefs(PLDHashTable *table, - PLDHashEntryHdr *heh, - uint32_t i, - void *arg) -{ - if (heh) { - PrefHashEntry *entry = static_cast(heh); - dom::PrefSetting *pref = - static_cast*>(arg)->AppendElement(); - - pref_GetPrefFromEntry(entry, pref); - } - return PL_DHASH_NEXT; } static void @@ -549,23 +529,6 @@ nsresult PREF_GetBoolPref(const char *pref_name, bool * return_value, bool get_d return rv; } -/* Delete a branch. Used for deleting mime types */ -static PLDHashOperator -pref_DeleteItem(PLDHashTable *table, PLDHashEntryHdr *heh, uint32_t i, void *arg) -{ - PrefHashEntry* he = static_cast(heh); - const char *to_delete = (const char *) arg; - int len = strlen(to_delete); - - /* note if we're deleting "ldap" then we want to delete "ldap.xxx" - and "ldap" (if such a leaf node exists) but not "ldap_1.xxx" */ - if (to_delete && (PL_strncmp(he->key, to_delete, (uint32_t) len) == 0 || - (len-1 == (int)strlen(he->key) && PL_strncmp(he->key, to_delete, (uint32_t)(len-1)) == 0))) - return PL_DHASH_REMOVE; - - return PL_DHASH_NEXT; -} - nsresult PREF_DeleteBranch(const char *branch_name) { @@ -588,8 +551,22 @@ PREF_DeleteBranch(const char *branch_name) if ((len > 1) && branch_name[len - 1] != '.') branch_dot += '.'; - PL_DHashTableEnumerate(gHashTable, pref_DeleteItem, - (void*) branch_dot.get()); + /* Delete a branch. Used for deleting mime types */ + const char *to_delete = branch_dot.get(); + MOZ_ASSERT(to_delete); + len = strlen(to_delete); + for (auto iter = gHashTable->RemovingIter(); !iter.Done(); iter.Next()) { + auto entry = static_cast(iter.Get()); + + /* note if we're deleting "ldap" then we want to delete "ldap.xxx" + and "ldap" (if such a leaf node exists) but not "ldap_1.xxx" */ + if (PL_strncmp(entry->key, to_delete, (uint32_t) len) == 0 || + (len-1 == (int)strlen(entry->key) && + PL_strncmp(entry->key, to_delete, (uint32_t)(len-1)) == 0)) { + iter.Remove(); + } + } + gDirty = true; return NS_OK; } @@ -616,26 +593,6 @@ PREF_ClearUserPref(const char *pref_name) return NS_OK; } -static PLDHashOperator -pref_ClearUserPref(PLDHashTable *table, PLDHashEntryHdr *he, uint32_t, - void *arg) -{ - PrefHashEntry *pref = static_cast(he); - - PLDHashOperator nextOp = PL_DHASH_NEXT; - - if (PREF_HAS_USER_VALUE(pref)) - { - pref->flags &= ~PREF_USERSET; - - if (!(pref->flags & PREF_HAS_DEFAULT)) { - nextOp = PL_DHASH_REMOVE; - } - static_cast*>(arg)->push_back(std::string(pref->key)); - } - return nextOp; -} - nsresult PREF_ClearAllUserPrefs() { @@ -647,7 +604,18 @@ PREF_ClearAllUserPrefs() return NS_ERROR_NOT_INITIALIZED; std::vector prefStrings; - PL_DHashTableEnumerate(gHashTable, pref_ClearUserPref, static_cast(&prefStrings)); + for (auto iter = gHashTable->RemovingIter(); !iter.Done(); iter.Next()) { + auto pref = static_cast(iter.Get()); + + if (PREF_HAS_USER_VALUE(pref)) { + prefStrings.push_back(std::string(pref->key)); + + pref->flags &= ~PREF_USERSET; + if (!(pref->flags & PREF_HAS_DEFAULT)) { + iter.Remove(); + } + } + } for (std::string& prefString : prefStrings) { pref_DoCallback(prefString.c_str()); diff --git a/modules/libpref/prefapi_private_data.h b/modules/libpref/prefapi_private_data.h index c288edcfc816..0fdfcf9403cb 100644 --- a/modules/libpref/prefapi_private_data.h +++ b/modules/libpref/prefapi_private_data.h @@ -19,17 +19,8 @@ class PrefSetting; } } -// Passed as the arg to pref_savePref -struct pref_saveArgs { - char **prefArray; -}; - -PLDHashOperator -pref_savePref(PLDHashTable *table, PLDHashEntryHdr *heh, uint32_t i, void *arg); - -PLDHashOperator -pref_GetPrefs(PLDHashTable *table, - PLDHashEntryHdr *heh, uint32_t i, void *arg); +void +pref_savePrefs(PLDHashTable* aTable, char** aPrefArray); nsresult pref_SetPref(const mozilla::dom::PrefSetting& aPref); From 085aa479e62f38b3b96a23eb588f8b501eaaa69c Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Wed, 17 Jun 2015 10:52:48 -0400 Subject: [PATCH 53/63] Bug 1175621 - make WrapRunnable* more efficient by utilizing moves in wrapper functions; r=ekr Calls to WrapRunnable* copy their arguments already; we don't need to copy them a second time when constructing the actual runnable. In addition to making things more efficient, this change also permits calls to WrapRunnable to correctly handle objects that can only be moved, and not copied. --- media/mtransport/runnable_utils.h | 23 ++++++++++--------- .../src/peerconnection/PeerConnectionImpl.cpp | 2 +- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/media/mtransport/runnable_utils.h b/media/mtransport/runnable_utils.h index cfb39f4b82da..465c42e2897c 100644 --- a/media/mtransport/runnable_utils.h +++ b/media/mtransport/runnable_utils.h @@ -11,6 +11,7 @@ #include "nsThreadUtils.h" #include "mozilla/IndexSequence.h" +#include "mozilla/Move.h" #include "mozilla/RefPtr.h" #include "mozilla/Tuple.h" @@ -109,8 +110,8 @@ class runnable_args_func : public detail::runnable_args_base { public: // |explicit| to pacify static analysis when there are no |args|. - explicit runnable_args_func(FunType f, Args... args) - : mFunc(f), mArgs(args...) + explicit runnable_args_func(FunType f, Args&&... args) + : mFunc(f), mArgs(Forward(args)...) {} NS_IMETHOD Run() { @@ -127,15 +128,15 @@ template runnable_args_func* WrapRunnableNM(FunType f, Args... args) { - return new runnable_args_func(f, args...); + return new runnable_args_func(f, Move(args)...); } template class runnable_args_func_ret : public detail::runnable_args_base { public: - runnable_args_func_ret(Ret* ret, FunType f, Args... args) - : mReturn(ret), mFunc(f), mArgs(args...) + runnable_args_func_ret(Ret* ret, FunType f, Args&&... args) + : mReturn(ret), mFunc(f), mArgs(Forward(args)...) {} NS_IMETHOD Run() { @@ -153,15 +154,15 @@ template runnable_args_func_ret* WrapRunnableNMRet(R* ret, FunType f, Args... args) { - return new runnable_args_func_ret(ret, f, args...); + return new runnable_args_func_ret(ret, f, Move(args)...); } template class runnable_args_memfn : public detail::runnable_args_base { public: - runnable_args_memfn(Class obj, M method, Args... args) - : mObj(obj), mMethod(method), mArgs(args...) + runnable_args_memfn(Class obj, M method, Args&&... args) + : mObj(obj), mMethod(method), mArgs(Forward(args)...) {} NS_IMETHOD Run() { @@ -179,7 +180,7 @@ template runnable_args_memfn* WrapRunnable(Class obj, M method, Args... args) { - return new runnable_args_memfn(obj, method, args...); + return new runnable_args_memfn(obj, method, Move(args)...); } template @@ -187,7 +188,7 @@ class runnable_args_memfn_ret : public detail::runnable_args_base(args)...) {} NS_IMETHOD Run() { @@ -206,7 +207,7 @@ template runnable_args_memfn_ret* WrapRunnableRet(R* ret, Class obj, M method, Args... args) { - return new runnable_args_memfn_ret(ret, obj, method, args...); + return new runnable_args_memfn_ret(ret, obj, method, Move(args)...); } static inline nsresult RUN_ON_THREAD(nsIEventTarget *thread, detail::runnable_args_base *runnable, uint32_t flags) { diff --git a/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp b/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp index 8075d3c340a0..32ce924d9e42 100644 --- a/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp +++ b/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp @@ -154,7 +154,7 @@ public: class WrappableJSErrorResult { public: WrappableJSErrorResult() : isCopy(false) {} - WrappableJSErrorResult(WrappableJSErrorResult &other) : mRv(), isCopy(true) {} + WrappableJSErrorResult(const WrappableJSErrorResult &other) : mRv(), isCopy(true) {} ~WrappableJSErrorResult() { if (isCopy) { MOZ_ASSERT(NS_IsMainThread()); From 36bcfecacee0dae96a70135bc0c1b279838ba2c2 Mon Sep 17 00:00:00 2001 From: Sebastian Kaspari Date: Mon, 29 Jun 2015 16:44:06 +0200 Subject: [PATCH 54/63] Bug 1172071 - Add icon label to search engine bar. r=mcomella --HG-- extra : commitid : 9rMRfX8xqwA extra : rebase_source : e0e8f974910e943f8290607b387d81853344790f --- mobile/android/base/home/SearchEngineBar.java | 71 ++++++++++++++++--- .../layout/search_engine_bar_label.xml | 21 ++++++ .../browser/robocop/testAddSearchEngine.java | 6 +- 3 files changed, 87 insertions(+), 11 deletions(-) create mode 100644 mobile/android/base/resources/layout/search_engine_bar_label.xml diff --git a/mobile/android/base/home/SearchEngineBar.java b/mobile/android/base/home/SearchEngineBar.java index 02eecb4d0cdb..9b13db8dedd0 100644 --- a/mobile/android/base/home/SearchEngineBar.java +++ b/mobile/android/base/home/SearchEngineBar.java @@ -7,15 +7,21 @@ import android.content.Context; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.Paint; +import android.graphics.drawable.Drawable; +import android.support.v4.content.ContextCompat; +import android.support.v4.graphics.drawable.DrawableCompat; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.TypedValue; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; +import android.widget.FrameLayout; import android.widget.ImageView; import org.mozilla.gecko.R; @@ -29,6 +35,7 @@ public class SearchEngineBar extends TwoWayView private static final String LOGTAG = "Gecko" + SearchEngineBar.class.getSimpleName(); private static final float ICON_CONTAINER_MIN_WIDTH_DP = 72; + private static final float LABEL_CONTAINER_WIDTH_DP = 48; private static final float DIVIDER_HEIGHT_DP = 1; public interface OnSearchBarClickListener { @@ -39,6 +46,7 @@ public class SearchEngineBar extends TwoWayView private final Paint dividerPaint; private final float minIconContainerWidth; private final float dividerHeight; + private final int labelContainerWidth; private int iconContainerWidth; private OnSearchBarClickListener onSearchBarClickListener; @@ -53,6 +61,7 @@ public class SearchEngineBar extends TwoWayView final DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); minIconContainerWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ICON_CONTAINER_MIN_WIDTH_DP, displayMetrics); dividerHeight = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, DIVIDER_HEIGHT_DP, displayMetrics); + labelContainerWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, LABEL_CONTAINER_WIDTH_DP, displayMetrics); iconContainerWidth = (int) minIconContainerWidth; @@ -69,6 +78,11 @@ public class SearchEngineBar extends TwoWayView OnSearchBarClickListener.class.getSimpleName() + " is not initialized"); } + if (position == 0) { + // Ignore click on label + return; + } + final SearchEngine searchEngine = adapter.getItem(position); onSearchBarClickListener.onSearchBarClickListener(searchEngine); } @@ -85,10 +99,10 @@ public class SearchEngineBar extends TwoWayView protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); - final int searchEngineCount = getCount(); + final int searchEngineCount = adapter.getCount() - 1; if (searchEngineCount > 0) { - final float availableWidthPerContainer = getMeasuredWidth() / searchEngineCount; + final float availableWidthPerContainer = (getMeasuredWidth() - labelContainerWidth) / searchEngineCount; final int desiredIconContainerSize = (int) Math.max( availableWidthPerContainer, @@ -110,6 +124,9 @@ public class SearchEngineBar extends TwoWayView } public class SearchEngineAdapter extends BaseAdapter { + private static final int VIEW_TYPE_SEARCH_ENGINE = 0; + private static final int VIEW_TYPE_LABEL = 1; + List searchEngines = new ArrayList<>(); public void setSearchEngines(final List searchEngines) { @@ -119,12 +136,14 @@ public class SearchEngineBar extends TwoWayView @Override public int getCount() { - return searchEngines.size(); + // Adding offset for label at position 0 (Bug 1172071) + return searchEngines.size() + 1; } @Override public SearchEngine getItem(final int position) { - return searchEngines.get(position); + // Returning null for the label at position 0 (Bug 1172071) + return position == 0 ? null : searchEngines.get(position - 1); } @Override @@ -132,19 +151,51 @@ public class SearchEngineBar extends TwoWayView return position; } + @Override + public int getItemViewType(int position) { + return position == 0 ? VIEW_TYPE_LABEL : VIEW_TYPE_SEARCH_ENGINE; + } + + @Override + public int getViewTypeCount() { + return 2; + } + @Override public View getView(final int position, final View convertView, final ViewGroup parent) { - final View view; - if (convertView == null) { - view = LayoutInflater.from(getContext()).inflate(R.layout.search_engine_bar_item, parent, false); + if (position == 0) { + return getLabelView(convertView, parent); } else { - view = convertView; + return getSearchEngineView(position, convertView, parent); + } + } + + private View getLabelView(View view, final ViewGroup parent) { + if (view == null) { + view = LayoutInflater.from(getContext()).inflate(R.layout.search_engine_bar_label, parent, false); } - view.setLayoutParams(new LayoutParams(iconContainerWidth, ViewGroup.LayoutParams.MATCH_PARENT)); + Drawable icon = DrawableCompat.wrap(ContextCompat.getDrawable(parent.getContext(), R.drawable.search_icon_active)); + DrawableCompat.setTint(icon, getResources().getColor(R.color.disabled_grey)); + + final ImageView iconView = (ImageView) view.findViewById(R.id.search_engine_label); + iconView.setImageDrawable(icon); + iconView.setScaleType(ImageView.ScaleType.FIT_XY); + + return view; + } + + private View getSearchEngineView(final int position, View view, final ViewGroup parent) { + if (view == null) { + view = LayoutInflater.from(getContext()).inflate(R.layout.search_engine_bar_item, parent, false); + } + + LayoutParams params = (LayoutParams) view.getLayoutParams(); + params.width = iconContainerWidth; + view.setLayoutParams(params); final ImageView faviconView = (ImageView) view.findViewById(R.id.search_engine_icon); - final SearchEngine searchEngine = searchEngines.get(position); + final SearchEngine searchEngine = getItem(position); faviconView.setImageBitmap(searchEngine.getIcon()); final String desc = getResources().getString(R.string.search_bar_item_desc, searchEngine.getEngineIdentifier()); diff --git a/mobile/android/base/resources/layout/search_engine_bar_label.xml b/mobile/android/base/resources/layout/search_engine_bar_label.xml new file mode 100644 index 000000000000..c0c0d064381f --- /dev/null +++ b/mobile/android/base/resources/layout/search_engine_bar_label.xml @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/mobile/android/tests/browser/robocop/testAddSearchEngine.java b/mobile/android/tests/browser/robocop/testAddSearchEngine.java index e2a3e70a28ab..c6898d8bab04 100644 --- a/mobile/android/tests/browser/robocop/testAddSearchEngine.java +++ b/mobile/android/tests/browser/robocop/testAddSearchEngine.java @@ -156,7 +156,11 @@ public class testAddSearchEngine extends AboutHomeTest { return false; } - return (searchResultList.getAdapter().getCount() + searchEngineBar.getAdapter().getCount() == expectedCount); + final int actualCount = searchResultList.getAdapter().getCount() + + searchEngineBar.getAdapter().getCount() + - 1; // Subtract one for the search engine bar label (Bug 1172071) + + return (actualCount == expectedCount); } }, MAX_WAIT_TEST_MS); From 6ffb209ae8a7d6aaaf6db0b7cad70b18293bc18c Mon Sep 17 00:00:00 2001 From: Sebastian Kaspari Date: Mon, 29 Jun 2015 18:38:40 +0200 Subject: [PATCH 55/63] Bug 1176018 - Do not set CATEGORY_BROWSABLE for Intents with file URI scheme. r=margaret --HG-- extra : commitid : IMXIcWI75iv extra : amend_source : a4c847a13972587839e3f3a9950861498f9543a6 --- mobile/android/base/GeckoAppShell.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mobile/android/base/GeckoAppShell.java b/mobile/android/base/GeckoAppShell.java index 9d471875f4b0..ee3c694e0be1 100644 --- a/mobile/android/base/GeckoAppShell.java +++ b/mobile/android/base/GeckoAppShell.java @@ -1197,8 +1197,11 @@ public class GeckoAppShell final Intent intent = getOpenURIIntentInner(context, targetURI, mimeType, action, title); if (intent != null) { - // Only handle applications which can accept arbitrary data from a browser. - intent.addCategory(Intent.CATEGORY_BROWSABLE); + // Setting category on file:// URIs breaks about:downloads (Bug 1176018) + if (!targetURI.startsWith("file:")) { + // Only handle applications which can accept arbitrary data from a browser. + intent.addCategory(Intent.CATEGORY_BROWSABLE); + } // Some applications use this field to return to the same browser after processing the // Intent. While there is some danger (e.g. denial of service), other major browsers already From c349a80edd737f6eb419893de930abd1a917162e Mon Sep 17 00:00:00 2001 From: Margaret Leibovic Date: Fri, 26 Jun 2015 13:08:54 -0700 Subject: [PATCH 56/63] Bug 1177839 - Don't return null from stripURI. r=sebastian --HG-- extra : rebase_source : bf8a9b6fa4f88c322499e24446a1e6dc0511cfe6 --- mobile/android/base/db/LocalReadingListAccessor.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mobile/android/base/db/LocalReadingListAccessor.java b/mobile/android/base/db/LocalReadingListAccessor.java index 07e07f332d5c..d9abb1b206ae 100644 --- a/mobile/android/base/db/LocalReadingListAccessor.java +++ b/mobile/android/base/db/LocalReadingListAccessor.java @@ -205,6 +205,10 @@ public class LocalReadingListAccessor implements ReadingListAccessor { * Gets the URI from an about:reader URI if applicable, else returns the URI. */ private String stripURI(final String uri) { - return !AboutPages.isAboutReader(uri) ? uri : ReaderModeUtils.getUrlFromAboutReader(uri); + if (!AboutPages.isAboutReader(uri)) { + return uri; + } + final String strippedUrl = ReaderModeUtils.getUrlFromAboutReader(uri); + return strippedUrl != null ? strippedUrl : uri; } } From 22557d9312e8a036ba44b0219ace8b2e58bd3c82 Mon Sep 17 00:00:00 2001 From: Nick Alexander Date: Thu, 25 Jun 2015 12:59:16 -0700 Subject: [PATCH 57/63] Bug 1144386 - Avoid non-resource files when packaging resources for GeckoView. r=mcomella This was just an error (on my part): I double-escaped slashes, thinking that Make required escaping as well as the shell. --HG-- extra : commitid : HLuwTvkaIl4 extra : rebase_source : 9d85d958d99a7ed5c35befdcee0245ec034e1354 extra : histedit_source : eaaac0578cacf96da86a2566144a93166be4396e --- mobile/android/base/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/android/base/Makefile.in b/mobile/android/base/Makefile.in index fed34f3438f1..75884c9acf75 100644 --- a/mobile/android/base/Makefile.in +++ b/mobile/android/base/Makefile.in @@ -351,7 +351,7 @@ all_resources = \ # $(1): zip file to add to (or create). # $(2): directory to zip contents of. define zip_directory_with_relative_paths -cd $(2) && zip -q $(1) -r * -x $(subst *,\\*,$(not_android_res_files)) +cd $(2) && zip -q $(1) -r * -x $(subst *,\*,$(not_android_res_files)) endef From f2870bd3a62e627ecc0fe5bfb6685cd2b172b423 Mon Sep 17 00:00:00 2001 From: Nick Alexander Date: Thu, 25 Jun 2015 16:48:15 -0700 Subject: [PATCH 58/63] Bug 1174757 - Pre: Don't archive geckoview resources when not necessary. r=glandium This is a small optimization that will also make it easier to flip the MOZ_DISABLE_GECKOVIEW conditional. We don't currently package geckolibs without geckoview, and it's reasonable to do both if we want one. --HG-- extra : commitid : FcLlG6E3PRQ extra : rebase_source : ea22994bfa6815468763128995d41c0d6c625d60 extra : histedit_source : a25e0c5c4b5a97bde8871b5e4139e0f0fd4f6a36 --- mobile/android/base/Makefile.in | 8 +++++++- toolkit/mozapps/installer/upload-files.mk | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/mobile/android/base/Makefile.in b/mobile/android/base/Makefile.in index 75884c9acf75..1ad17b0d9737 100644 --- a/mobile/android/base/Makefile.in +++ b/mobile/android/base/Makefile.in @@ -355,12 +355,14 @@ cd $(2) && zip -q $(1) -r * -x $(subst *,\*,$(not_android_res_files)) endef +ifndef MOZ_DISABLE_GECKOVIEW # We delete the archive before updating so that resources removed from # the filesystem are removed from the archive. geckoview_resources.zip: $(all_resources) $(GLOBAL_DEPS) $(REPORT_BUILD) $(RM) -rf $@ $(foreach dir,$(ANDROID_RES_DIRS),$(call zip_directory_with_relative_paths,$(CURDIR)/$@,$(dir))) +endif # All of generated/org/mozilla/gecko/R.java, gecko.ap_, and R.txt are # produced by aapt; this saves aapt invocations. The trailing @@ -493,8 +495,12 @@ gradle-omnijar: $(abspath $(DIST)/fennec/$(OMNIJAR_NAME)) .PHONY: gradle-targets gradle-omnijar -libs:: geckoview_resources.zip classes.dex jni-stubs.inc GeneratedJNIWrappers.cpp $(CURDIR)/fennec_ids.txt +ifndef MOZ_DISABLE_GECKOVIEW +libs:: geckoview_resources.zip $(INSTALL) geckoview_resources.zip $(FINAL_TARGET) +endif + +libs:: classes.dex jni-stubs.inc GeneratedJNIWrappers.cpp $(CURDIR)/fennec_ids.txt $(INSTALL) classes.dex $(FINAL_TARGET) @(diff jni-stubs.inc $(topsrcdir)/mozglue/android/jni-stubs.inc >/dev/null && diff GeneratedJNIWrappers.cpp $(topsrcdir)/widget/android/GeneratedJNIWrappers.cpp >/dev/null) || \ (echo '*****************************************************' && \ diff --git a/toolkit/mozapps/installer/upload-files.mk b/toolkit/mozapps/installer/upload-files.mk index 7b646ede0fdd..278ce2ee1c5f 100644 --- a/toolkit/mozapps/installer/upload-files.mk +++ b/toolkit/mozapps/installer/upload-files.mk @@ -367,6 +367,7 @@ endif # Create Android ARchives and metadata for download by local # developers using Gradle. ifdef MOZ_ANDROID_GECKOLIBS_AAR +ifndef MOZ_DISABLE_GECKOVIEW geckoaar-revision := $(BUILDID) UPLOAD_EXTRA_FILES += \ @@ -392,8 +393,11 @@ INNER_MAKE_GECKOLIBS_AAR= \ --distdir '$(_ABS_DIST)' \ '$(_ABS_DIST)' else +INNER_MAKE_GECKOLIBS_AAR=echo 'Android geckolibs.aar packaging requires packaging geckoview' +endif # MOZ_DISABLE_GECKOVIEW +else INNER_MAKE_GECKOLIBS_AAR=echo 'Android geckolibs.aar packaging is disabled' -endif +endif # MOZ_ANDROID_GECKOLIBS_AAR ifdef MOZ_OMX_PLUGIN DIST_FILES += libomxplugin.so libomxplugingb.so libomxplugingb235.so \ From ba0489a42473fd3b266370bd37578e48b0a3c404 Mon Sep 17 00:00:00 2001 From: Brad Lassey Date: Mon, 22 Jun 2015 11:54:40 -0400 Subject: [PATCH 59/63] bug 1175898 - crash in mozilla::CrossProcessMutex::ShareToProcess(int) r=billm --- ipc/glue/SharedMemoryBasic_mach.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ipc/glue/SharedMemoryBasic_mach.cpp b/ipc/glue/SharedMemoryBasic_mach.cpp index 20b4e226a86c..7622e6aa719f 100644 --- a/ipc/glue/SharedMemoryBasic_mach.cpp +++ b/ipc/glue/SharedMemoryBasic_mach.cpp @@ -565,6 +565,10 @@ bool SharedMemoryBasic::ShareToProcess(base::ProcessId pid, Handle* aNewHandle) { + if (pid == getpid()) { + *aNewHandle = mPort; + return mach_port_mod_refs(mach_task_self(), *aNewHandle, MACH_PORT_RIGHT_SEND, 1) == KERN_SUCCESS; + } StaticMutexAutoLock smal(gMutex); MemoryPorts* ports = GetMemoryPortsForPid(pid); From 9065e35812c0f806f83e4e4e6658806e82b23760 Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Mon, 29 Jun 2015 21:04:26 -0400 Subject: [PATCH 60/63] Backed out changeset c961b404bca1 (bug 1173801) for making the Win8 timeouts worse than they were to start. --- browser/components/privatebrowsing/test/browser/browser.ini | 1 - 1 file changed, 1 deletion(-) diff --git a/browser/components/privatebrowsing/test/browser/browser.ini b/browser/components/privatebrowsing/test/browser/browser.ini index 74f2c2ca06b5..18bc27fafad3 100644 --- a/browser/components/privatebrowsing/test/browser/browser.ini +++ b/browser/components/privatebrowsing/test/browser/browser.ini @@ -16,7 +16,6 @@ support-files = title.sjs [browser_privatebrowsing_DownloadLastDirWithCPS.js] -skip-if = (os == "win" && os_version == "6.2") # bug 1173801 [browser_privatebrowsing_aboutHomeButtonAfterWindowClose.js] [browser_privatebrowsing_aboutSessionRestore.js] [browser_privatebrowsing_cache.js] From 976586cb5f39686191be79c323a42f561847e2c7 Mon Sep 17 00:00:00 2001 From: Jan de Mooij Date: Mon, 29 Jun 2015 18:36:44 -0700 Subject: [PATCH 61/63] Bug 1177825 - Remove JSVAL_* constants. r=evilpie --- dom/base/nsJSEnvironment.cpp | 4 +-- dom/devicestorage/nsDeviceStorage.cpp | 6 ++-- dom/ipc/TabChild.cpp | 2 +- dom/mobilemessage/MobileMessageCallback.cpp | 4 +-- dom/plugins/base/nsJSNPRuntime.cpp | 2 +- dom/system/OSFileConstants.cpp | 2 +- dom/workers/XMLHttpRequest.cpp | 2 +- dom/workers/XMLHttpRequest.h | 2 +- ipc/testshell/XPCShellEnvironment.cpp | 4 +-- js/ipc/JavaScriptShared.cpp | 2 +- js/public/Value.h | 12 +------ js/src/ctypes/CTypes.cpp | 35 +++++++++++-------- js/src/jsapi-tests/testArgumentsObject.cpp | 2 +- js/src/jsapi-tests/testArrayBuffer.cpp | 4 +-- js/src/jsapi-tests/testDeepFreeze.cpp | 10 +++--- js/src/jsapi-tests/testFunctionProperties.cpp | 4 +-- js/src/jsapi-tests/testLookup.cpp | 6 ++-- js/src/jsapi-tests/testLooselyEqual.cpp | 4 +-- js/src/jsapi-tests/testNewObject.cpp | 2 +- .../testObjectEmulatingUndefined.cpp | 22 ++++++------ js/src/jsapi-tests/testParseJSON.cpp | 14 ++++---- js/src/jsapi-tests/testResolveRecursion.cpp | 8 ++--- js/src/jsapi-tests/testXDR.cpp | 2 +- js/src/jsapi.cpp | 2 +- js/src/jsapi.h | 2 +- js/src/vm/Value.cpp | 10 +++--- js/xpconnect/src/XPCConvert.cpp | 2 +- js/xpconnect/src/XPCWrappedNative.cpp | 14 ++++---- js/xpconnect/src/XPCWrappedNativeJSOps.cpp | 2 +- js/xpconnect/wrappers/XrayWrapper.cpp | 4 +-- storage/mozStorageStatementJSHelper.cpp | 2 +- storage/mozStorageStatementRow.cpp | 2 +- toolkit/devtools/server/nsJSInspector.cpp | 4 +-- xpcom/base/CycleCollectedJSRuntime.cpp | 2 +- 34 files changed, 97 insertions(+), 104 deletions(-) diff --git a/dom/base/nsJSEnvironment.cpp b/dom/base/nsJSEnvironment.cpp index b68129ef2b2d..861bf9b9fd3d 100644 --- a/dom/base/nsJSEnvironment.cpp +++ b/dom/base/nsJSEnvironment.cpp @@ -1092,12 +1092,12 @@ nsJSContext::AddSupportsPrimitiveTojsvals(nsISupports *aArg, JS::Value *aArgv) case nsISupportsPrimitive::TYPE_PRTIME : case nsISupportsPrimitive::TYPE_VOID : { NS_WARNING("Unsupported primitive type used"); - *aArgv = JSVAL_NULL; + aArgv->setNull(); break; } default : { NS_WARNING("Unknown primitive type used"); - *aArgv = JSVAL_NULL; + aArgv->setNull(); break; } } diff --git a/dom/devicestorage/nsDeviceStorage.cpp b/dom/devicestorage/nsDeviceStorage.cpp index 1ba45430d1e9..07dd2492c23e 100644 --- a/dom/devicestorage/nsDeviceStorage.cpp +++ b/dom/devicestorage/nsDeviceStorage.cpp @@ -1913,12 +1913,12 @@ nsIFileToJsval(nsPIDOMWindow* aWindow, DeviceStorageFile* aFile) MOZ_ASSERT(aWindow); if (!aFile) { - return JSVAL_NULL; + return JS::NullValue(); } if (aFile->mEditable) { // TODO - needs janv's file handle support. - return JSVAL_NULL; + return JS::NullValue(); } nsString fullPath; @@ -2531,7 +2531,7 @@ public: } AutoJSContext cx; - JS::Rooted result(cx, JSVAL_NULL); + JS::Rooted result(cx, JS::NullValue()); if (mFile) { result = nsIFileToJsval(window, mFile); diff --git a/dom/ipc/TabChild.cpp b/dom/ipc/TabChild.cpp index 4617a0f1e25c..4e06d18f2642 100644 --- a/dom/ipc/TabChild.cpp +++ b/dom/ipc/TabChild.cpp @@ -503,7 +503,7 @@ TabChildBase::DispatchMessageManagerMessage(const nsAString& aMessageName, const nsAString& aJSONData) { AutoSafeJSContext cx; - JS::Rooted json(cx, JSVAL_NULL); + JS::Rooted json(cx, JS::NullValue()); StructuredCloneData cloneData; JSAutoStructuredCloneBuffer buffer; if (JS_ParseJSON(cx, diff --git a/dom/mobilemessage/MobileMessageCallback.cpp b/dom/mobilemessage/MobileMessageCallback.cpp index 10b554bd3442..47bd301bfaa7 100644 --- a/dom/mobilemessage/MobileMessageCallback.cpp +++ b/dom/mobilemessage/MobileMessageCallback.cpp @@ -205,7 +205,7 @@ MobileMessageCallback::NotifyMessageDeleted(bool *aDeleted, uint32_t aSize) { if (aSize == 1) { AutoJSContext cx; - JS::Rooted val(cx, aDeleted[0] ? JSVAL_TRUE : JSVAL_FALSE); + JS::Rooted val(cx, JS::BooleanValue(*aDeleted)); return NotifySuccess(val); } @@ -234,7 +234,7 @@ NS_IMETHODIMP MobileMessageCallback::NotifyMessageMarkedRead(bool aRead) { AutoJSContext cx; - JS::Rooted val(cx, aRead ? JSVAL_TRUE : JSVAL_FALSE); + JS::Rooted val(cx, JS::BooleanValue(aRead)); return NotifySuccess(val); } diff --git a/dom/plugins/base/nsJSNPRuntime.cpp b/dom/plugins/base/nsJSNPRuntime.cpp index 52f700c86f59..11c66bcc6f05 100644 --- a/dom/plugins/base/nsJSNPRuntime.cpp +++ b/dom/plugins/base/nsJSNPRuntime.cpp @@ -487,7 +487,7 @@ NPVariantToJSVal(NPP npp, JSContext *cx, const NPVariant *variant) case NPVariantType_Void : return JS::UndefinedValue(); case NPVariantType_Null : - return JSVAL_NULL; + return JS::NullValue(); case NPVariantType_Bool : return BOOLEAN_TO_JSVAL(NPVARIANT_TO_BOOLEAN(*variant)); case NPVariantType_Int32 : diff --git a/dom/system/OSFileConstants.cpp b/dom/system/OSFileConstants.cpp index fc9dbb9602aa..e3c63c52066e 100644 --- a/dom/system/OSFileConstants.cpp +++ b/dom/system/OSFileConstants.cpp @@ -915,7 +915,7 @@ bool DefineOSFileConstants(JSContext *cx, JS::Handle global) #endif // defined(MOZ_WIDGET_GONK) #if defined(DEBUG) - JS::Rooted valDebug(cx, JSVAL_TRUE); + JS::Rooted valDebug(cx, JS::TrueValue()); if (!JS_SetProperty(cx, objSys, "DEBUG", valDebug)) { return false; } diff --git a/dom/workers/XMLHttpRequest.cpp b/dom/workers/XMLHttpRequest.cpp index 6b61e824fe99..f422b6a2dd7e 100644 --- a/dom/workers/XMLHttpRequest.cpp +++ b/dom/workers/XMLHttpRequest.cpp @@ -1187,7 +1187,7 @@ EventRunnable::PreDispatch(JSContext* aCx, WorkerPrivate* aWorkerPrivate) if (NS_SUCCEEDED(mResponseTextResult)) { mResponseResult = mResponseTextResult; if (mResponseText.IsVoid()) { - mResponse = JSVAL_NULL; + mResponse.setNull(); } } else { diff --git a/dom/workers/XMLHttpRequest.h b/dom/workers/XMLHttpRequest.h index a3c4d14b0d68..330cb5f89bc3 100644 --- a/dom/workers/XMLHttpRequest.h +++ b/dom/workers/XMLHttpRequest.h @@ -251,7 +251,7 @@ public: NullResponseText() { mStateData.mResponseText.SetIsVoid(true); - mStateData.mResponse = JSVAL_NULL; + mStateData.mResponse.setNull(); } bool MozAnon() const diff --git a/ipc/testshell/XPCShellEnvironment.cpp b/ipc/testshell/XPCShellEnvironment.cpp index c1b2c0ed3f8f..1580c4197d03 100644 --- a/ipc/testshell/XPCShellEnvironment.cpp +++ b/ipc/testshell/XPCShellEnvironment.cpp @@ -367,7 +367,7 @@ XPCShellEnvironment::ProcessFile(JSContext *cx, JSErrorReporter older; ok = JS_ExecuteScript(cx, script, &result); - if (ok && result != JSVAL_VOID) { + if (ok && !result.isUndefined()) { /* Suppress error reports from JS::ToString(). */ older = JS_SetErrorReporter(JS_GetRuntime(cx), nullptr); str = JS::ToString(cx, result); @@ -584,7 +584,7 @@ XPCShellEnvironment::EvaluateString(const nsString& aString, JS::Rooted result(cx); bool ok = JS_ExecuteScript(cx, script, &result); - if (ok && result != JSVAL_VOID) { + if (ok && !result.isUndefined()) { JSErrorReporter old = JS_SetErrorReporter(JS_GetRuntime(cx), nullptr); JSString* str = JS::ToString(cx, result); nsAutoJSString autoStr; diff --git a/js/ipc/JavaScriptShared.cpp b/js/ipc/JavaScriptShared.cpp index c591b54954c9..300e375db0e6 100644 --- a/js/ipc/JavaScriptShared.cpp +++ b/js/ipc/JavaScriptShared.cpp @@ -270,7 +270,7 @@ JavaScriptShared::toVariant(JSContext* cx, JS::HandleValue from, JSVariant* to) { RootedObject obj(cx, from.toObjectOrNull()); if (!obj) { - MOZ_ASSERT(from == JSVAL_NULL); + MOZ_ASSERT(from.isNull()); *to = NullVariant(); return true; } diff --git a/js/public/Value.h b/js/public/Value.h index c2bd82420146..6934f1d10e61 100644 --- a/js/public/Value.h +++ b/js/public/Value.h @@ -1676,6 +1676,7 @@ class ValueOperations bool isFalse() const { return value()->isFalse(); } bool isNumber() const { return value()->isNumber(); } bool isInt32() const { return value()->isInt32(); } + bool isInt32(int32_t i32) const { return value()->isInt32(i32); } bool isDouble() const { return value()->isDouble(); } bool isString() const { return value()->isString(); } bool isSymbol() const { return value()->isSymbol(); } @@ -1998,17 +1999,6 @@ PRIVATE_TO_JSVAL(void* ptr) return IMPL_TO_JSVAL(PRIVATE_PTR_TO_JSVAL_IMPL(ptr)); } -// JS constants. For efficiency, prefer predicates (e.g. v.isNull()) and -// constructing values from scratch (e.g. Int32Value(0)). These constants are -// stored in memory and initialized at startup, so testing against them and -// using them requires memory loads and will be correspondingly slow. -extern JS_PUBLIC_DATA(const jsval) JSVAL_NULL; -extern JS_PUBLIC_DATA(const jsval) JSVAL_ZERO; -extern JS_PUBLIC_DATA(const jsval) JSVAL_ONE; -extern JS_PUBLIC_DATA(const jsval) JSVAL_FALSE; -extern JS_PUBLIC_DATA(const jsval) JSVAL_TRUE; -extern JS_PUBLIC_DATA(const jsval) JSVAL_VOID; - namespace JS { extern JS_PUBLIC_DATA(const HandleValue) NullHandleValue; diff --git a/js/src/ctypes/CTypes.cpp b/js/src/ctypes/CTypes.cpp index 53dbc3d14260..9dd4445b4c77 100644 --- a/js/src/ctypes/CTypes.cpp +++ b/js/src/ctypes/CTypes.cpp @@ -1889,7 +1889,8 @@ InitTypeClasses(JSContext* cx, HandleObject ctypesObj) // Create objects representing the special types void_t and voidptr_t. RootedObject typeObj(cx, CType::DefineBuiltin(cx, ctypesObj, "void_t", CTypeProto, CDataProto, "void", - TYPE_void_t, JSVAL_VOID, JSVAL_VOID, &ffi_type_void)); + TYPE_void_t, JS::UndefinedValue(), JS::UndefinedValue(), + &ffi_type_void)); if (!typeObj) return false; @@ -4191,7 +4192,7 @@ CType::GetSafeSize(JSObject* obj, size_t* result) jsval size = JS_GetReservedSlot(obj, SLOT_SIZE); - // The "size" property can be an int, a double, or JSVAL_VOID + // The "size" property can be an int, a double, or JS::UndefinedValue() // (for arrays of undefined length), and must always fit in a size_t. if (size.isInt32()) { *result = size.toInt32(); @@ -4215,9 +4216,10 @@ CType::GetSize(JSObject* obj) MOZ_ASSERT(!size.isUndefined()); - // The "size" property can be an int, a double, or JSVAL_VOID + // The "size" property can be an int, a double, or JS::UndefinedValue() // (for arrays of undefined length), and must always fit in a size_t. - // For callers who know it can never be JSVAL_VOID, return a size_t directly. + // For callers who know it can never be JS::UndefinedValue(), return a size_t + // directly. if (size.isInt32()) return size.toInt32(); return Convert(size.toDouble()); @@ -4230,7 +4232,7 @@ CType::IsSizeDefined(JSObject* obj) jsval size = JS_GetReservedSlot(obj, SLOT_SIZE); - // The "size" property can be an int, a double, or JSVAL_VOID + // The "size" property can be an int, a double, or JS::UndefinedValue() // (for arrays of undefined length), and must always fit in a size_t. MOZ_ASSERT(size.isInt32() || size.isDouble() || size.isUndefined()); return !size.isUndefined(); @@ -4709,7 +4711,7 @@ PointerType::ConstructData(JSContext* cx, // The third argument is an optional error sentinel that js-ctypes will return // if an exception is raised while executing the closure. The type must match // the return type of the callback. - jsval errVal = JSVAL_VOID; + Value errVal = JS::UndefinedValue(); if (args.length() == 3) errVal = args[2]; @@ -4930,8 +4932,8 @@ ArrayType::CreateInternal(JSContext* cx, return nullptr; } - RootedValue sizeVal(cx, JSVAL_VOID); - RootedValue lengthVal(cx, JSVAL_VOID); + RootedValue sizeVal(cx, JS::UndefinedValue()); + RootedValue lengthVal(cx, JS::UndefinedValue()); if (lengthDefined) { // Check for overflow, and convert to an int or double as required. size_t size = length * baseSize; @@ -5084,7 +5086,7 @@ ArrayType::GetSafeLength(JSObject* obj, size_t* result) jsval length = JS_GetReservedSlot(obj, SLOT_LENGTH); - // The "length" property can be an int, a double, or JSVAL_VOID + // The "length" property can be an int, a double, or JS::UndefinedValue() // (for arrays of undefined length), and must always fit in a size_t. if (length.isInt32()) { *result = length.toInt32(); @@ -5109,9 +5111,10 @@ ArrayType::GetLength(JSObject* obj) MOZ_ASSERT(!length.isUndefined()); - // The "length" property can be an int, a double, or JSVAL_VOID + // The "length" property can be an int, a double, or JS::UndefinedValue() // (for arrays of undefined length), and must always fit in a size_t. - // For callers who know it can never be JSVAL_VOID, return a size_t directly. + // For callers who know it can never be JS::UndefinedValue(), return a size_t + // directly. if (length.isInt32()) return length.toInt32(); return Convert(length.toDouble()); @@ -5441,7 +5444,8 @@ StructType::Create(JSContext* cx, unsigned argc, jsval* vp) // non-instantiable as CData, will have no 'prototype' property, and will // have undefined size and alignment and no ffi_type. RootedObject result(cx, CType::Create(cx, typeProto, nullptr, TYPE_struct, - name.toString(), JSVAL_VOID, JSVAL_VOID, nullptr)); + name.toString(), JS::UndefinedValue(), + JS::UndefinedValue(), nullptr)); if (!result) return false; @@ -6426,7 +6430,8 @@ FunctionType::CreateInternal(JSContext* cx, // Create a new CType object with the common properties and slots. RootedObject typeObj(cx, CType::Create(cx, typeProto, dataProto, TYPE_function, - nullptr, JSVAL_VOID, JSVAL_VOID, nullptr)); + nullptr, JS::UndefinedValue(), + JS::UndefinedValue(), nullptr)); if (!typeObj) return nullptr; @@ -7951,7 +7956,7 @@ CDataFinalizer::Methods::Dispose(JSContext* cx, unsigned argc, jsval* vp) MOZ_ASSERT(CType::GetTypeCode(objCodeType) == TYPE_function); RootedObject resultType(cx, FunctionType::GetFunctionInfo(objCodeType)->mReturnType); - RootedValue result(cx, JSVAL_VOID); + RootedValue result(cx, JS::UndefinedValue()); int errnoStatus; #if defined(XP_WIN) @@ -8029,7 +8034,7 @@ CDataFinalizer::Cleanup(CDataFinalizer::Private* p, JSObject* obj) JS_SetPrivate(obj, nullptr); for (int i = 0; i < CDATAFINALIZER_SLOTS; ++i) { - JS_SetReservedSlot(obj, i, JSVAL_NULL); + JS_SetReservedSlot(obj, i, JS::NullValue()); } } diff --git a/js/src/jsapi-tests/testArgumentsObject.cpp b/js/src/jsapi-tests/testArgumentsObject.cpp index 754fea580f03..5880d21ceab3 100644 --- a/js/src/jsapi-tests/testArgumentsObject.cpp +++ b/js/src/jsapi-tests/testArgumentsObject.cpp @@ -94,7 +94,7 @@ ExhaustiveTest(const char funcode[]) for (size_t k = 0; k < j; k++) CHECK_SAME(elems[k], INT_TO_JSVAL(i + k)); for (size_t k = j; k < MAX_ELEMS - 1; k++) - CHECK_SAME(elems[k], JSVAL_NULL); + CHECK(elems[k].isNull()); CHECK_SAME(elems[MAX_ELEMS - 1], INT_TO_JSVAL(42)); } } diff --git a/js/src/jsapi-tests/testArrayBuffer.cpp b/js/src/jsapi-tests/testArrayBuffer.cpp index 693d6ce5f252..f83a2b3698f6 100644 --- a/js/src/jsapi-tests/testArrayBuffer.cpp +++ b/js/src/jsapi-tests/testArrayBuffer.cpp @@ -68,9 +68,9 @@ BEGIN_TEST(testArrayBuffer_bug720949_steal) CHECK(JS_GetProperty(cx, view, "length", &v)); CHECK_SAME(v, INT_TO_JSVAL(0)); CHECK_EQUAL(JS_GetArrayBufferByteLength(obj), 0u); - v = JSVAL_VOID; + v.setUndefined(); JS_GetElement(cx, obj, 0, &v); - CHECK_SAME(v, JSVAL_VOID); + CHECK(v.isUndefined()); // Transfer to a new ArrayBuffer JS::RootedObject dst(cx, JS_NewArrayBufferWithContents(cx, size, contents)); diff --git a/js/src/jsapi-tests/testDeepFreeze.cpp b/js/src/jsapi-tests/testDeepFreeze.cpp index efc7183ebb6b..d6623775f609 100644 --- a/js/src/jsapi-tests/testDeepFreeze.cpp +++ b/js/src/jsapi-tests/testDeepFreeze.cpp @@ -14,7 +14,7 @@ BEGIN_TEST(testDeepFreeze_bug535703) JS::RootedObject obj(cx, v.toObjectOrNull()); CHECK(JS_DeepFreezeObject(cx, obj)); // don't crash EVAL("Object.isFrozen(x)", &v); - CHECK_SAME(v, JSVAL_TRUE); + CHECK(v.isTrue()); return true; } END_TEST(testDeepFreeze_bug535703) @@ -33,9 +33,9 @@ BEGIN_TEST(testDeepFreeze_deep) JS::RootedValue b(cx); EVAL("Object.isFrozen(a)", &b); - CHECK_SAME(b, JSVAL_TRUE); + CHECK(b.isTrue()); EVAL("Object.isFrozen(o)", &b); - CHECK_SAME(b, JSVAL_TRUE); + CHECK(b.isTrue()); return true; } END_TEST(testDeepFreeze_deep) @@ -52,9 +52,9 @@ BEGIN_TEST(testDeepFreeze_loop) JS::RootedValue b(cx); EVAL("Object.isFrozen(x)", &b); - CHECK_SAME(b, JSVAL_TRUE); + CHECK(b.isTrue()); EVAL("Object.isFrozen(y)", &b); - CHECK_SAME(b, JSVAL_TRUE); + CHECK(b.isTrue()); return true; } END_TEST(testDeepFreeze_loop) diff --git a/js/src/jsapi-tests/testFunctionProperties.cpp b/js/src/jsapi-tests/testFunctionProperties.cpp index 20a098ccc490..e79f5ec28879 100644 --- a/js/src/jsapi-tests/testFunctionProperties.cpp +++ b/js/src/jsapi-tests/testFunctionProperties.cpp @@ -16,10 +16,10 @@ BEGIN_TEST(testFunctionProperties) JS::RootedValue y(cx); CHECK(JS_GetProperty(cx, obj, "arguments", &y)); - CHECK_SAME(y, JSVAL_NULL); + CHECK(y.isNull()); CHECK(JS_GetProperty(cx, obj, "caller", &y)); - CHECK_SAME(y, JSVAL_NULL); + CHECK(y.isNull()); return true; } diff --git a/js/src/jsapi-tests/testLookup.cpp b/js/src/jsapi-tests/testLookup.cpp index f912a2fac896..09900af72055 100644 --- a/js/src/jsapi-tests/testLookup.cpp +++ b/js/src/jsapi-tests/testLookup.cpp @@ -19,7 +19,7 @@ BEGIN_TEST(testLookup_bug522590) // Calling mkobj() multiple times must create multiple functions in ES5. EVAL("mkobj().f !== mkobj().f", &x); - CHECK_SAME(x, JSVAL_TRUE); + CHECK(x.isTrue()); // Now make x.f a method. EVAL("mkobj()", &x); @@ -86,9 +86,9 @@ BEGIN_TEST(testLookup_bug570195) CHECK(JS_DefineProperty(cx, global, "document", obj, 0)); JS::RootedValue v(cx); EVAL("document.all ? true : false", &v); - CHECK_SAME(v, JSVAL_FALSE); + CHECK(v.isFalse()); EVAL("document.hasOwnProperty('all')", &v); - CHECK_SAME(v, JSVAL_TRUE); + CHECK(v.isTrue()); return true; } END_TEST(testLookup_bug570195) diff --git a/js/src/jsapi-tests/testLooselyEqual.cpp b/js/src/jsapi-tests/testLooselyEqual.cpp index 3e09bf86c946..0bbca1a7ae1c 100644 --- a/js/src/jsapi-tests/testLooselyEqual.cpp +++ b/js/src/jsapi-tests/testLooselyEqual.cpp @@ -55,8 +55,8 @@ struct LooseEqualityData sNaN = DOUBLE_TO_JSVAL(numeric_limits::signaling_NaN()); d42 = DOUBLE_TO_JSVAL(42.0); i42 = INT_TO_JSVAL(42); - undef = JSVAL_VOID; - null = JSVAL_NULL; + undef = JS::UndefinedValue(); + null = JS::NullValue(); obj = OBJECT_TO_JSVAL(JS::CurrentGlobalOrNull(cx)); poszero = DOUBLE_TO_JSVAL(0.0); negzero = DOUBLE_TO_JSVAL(-0.0); diff --git a/js/src/jsapi-tests/testNewObject.cpp b/js/src/jsapi-tests/testNewObject.cpp index 335c3736b8c2..77c115d9be86 100644 --- a/js/src/jsapi-tests/testNewObject.cpp +++ b/js/src/jsapi-tests/testNewObject.cpp @@ -106,7 +106,7 @@ BEGIN_TEST(testNewObject_1) obj = JS_New(cx, ctor, JS::HandleValueArray::subarray(argv, 0, 3)); CHECK(obj); CHECK(JS_GetElement(cx, ctor, 0, &v)); - CHECK_SAME(v, JSVAL_ZERO); + CHECK(v.isInt32(0)); return true; } diff --git a/js/src/jsapi-tests/testObjectEmulatingUndefined.cpp b/js/src/jsapi-tests/testObjectEmulatingUndefined.cpp index 54b9ebf279fd..8ba4b4b634a5 100644 --- a/js/src/jsapi-tests/testObjectEmulatingUndefined.cpp +++ b/js/src/jsapi-tests/testObjectEmulatingUndefined.cpp @@ -29,10 +29,10 @@ BEGIN_TEST(testObjectEmulatingUndefined_truthy) JS::RootedValue result(cx); EVAL("if (new ObjectEmulatingUndefined()) true; else false;", &result); - CHECK_SAME(result, JSVAL_FALSE); + CHECK(result.isFalse()); EVAL("if (!new ObjectEmulatingUndefined()) true; else false;", &result); - CHECK_SAME(result, JSVAL_TRUE); + CHECK(result.isTrue()); EVAL("var obj = new ObjectEmulatingUndefined(); \n" "var res = []; \n" @@ -40,7 +40,7 @@ BEGIN_TEST(testObjectEmulatingUndefined_truthy) " res.push(Boolean(obj)); \n" "res.every(function(v) { return v === false; });", &result); - CHECK_SAME(result, JSVAL_TRUE); + CHECK(result.isTrue()); return true; } @@ -55,16 +55,16 @@ BEGIN_TEST(testObjectEmulatingUndefined_equal) JS::RootedValue result(cx); EVAL("if (new ObjectEmulatingUndefined() == undefined) true; else false;", &result); - CHECK_SAME(result, JSVAL_TRUE); + CHECK(result.isTrue()); EVAL("if (new ObjectEmulatingUndefined() == null) true; else false;", &result); - CHECK_SAME(result, JSVAL_TRUE); + CHECK(result.isTrue()); EVAL("if (new ObjectEmulatingUndefined() != undefined) true; else false;", &result); - CHECK_SAME(result, JSVAL_FALSE); + CHECK(result.isFalse()); EVAL("if (new ObjectEmulatingUndefined() != null) true; else false;", &result); - CHECK_SAME(result, JSVAL_FALSE); + CHECK(result.isFalse()); EVAL("var obj = new ObjectEmulatingUndefined(); \n" "var res = []; \n" @@ -72,7 +72,7 @@ BEGIN_TEST(testObjectEmulatingUndefined_equal) " res.push(obj == undefined); \n" "res.every(function(v) { return v === true; });", &result); - CHECK_SAME(result, JSVAL_TRUE); + CHECK(result.isTrue()); EVAL("var obj = new ObjectEmulatingUndefined(); \n" "var res = []; \n" @@ -80,7 +80,7 @@ BEGIN_TEST(testObjectEmulatingUndefined_equal) " res.push(obj == null); \n" "res.every(function(v) { return v === true; });", &result); - CHECK_SAME(result, JSVAL_TRUE); + CHECK(result.isTrue()); EVAL("var obj = new ObjectEmulatingUndefined(); \n" "var res = []; \n" @@ -88,7 +88,7 @@ BEGIN_TEST(testObjectEmulatingUndefined_equal) " res.push(obj != undefined); \n" "res.every(function(v) { return v === false; });", &result); - CHECK_SAME(result, JSVAL_TRUE); + CHECK(result.isTrue()); EVAL("var obj = new ObjectEmulatingUndefined(); \n" "var res = []; \n" @@ -96,7 +96,7 @@ BEGIN_TEST(testObjectEmulatingUndefined_equal) " res.push(obj != null); \n" "res.every(function(v) { return v === false; });", &result); - CHECK_SAME(result, JSVAL_TRUE); + CHECK(result.isTrue()); return true; } diff --git a/js/src/jsapi-tests/testParseJSON.cpp b/js/src/jsapi-tests/testParseJSON.cpp index 13537b6a203e..7fc56d183de4 100644 --- a/js/src/jsapi-tests/testParseJSON.cpp +++ b/js/src/jsapi-tests/testParseJSON.cpp @@ -39,13 +39,13 @@ BEGIN_TEST(testParseJSON_success) { // Primitives JS::RootedValue expected(cx); - expected = JSVAL_TRUE; + expected = JS::TrueValue(); CHECK(TryParse(cx, "true", expected)); - expected = JSVAL_FALSE; + expected = JS::FalseValue(); CHECK(TryParse(cx, "false", expected)); - expected = JSVAL_NULL; + expected = JS::NullValue(); CHECK(TryParse(cx, "null", expected)); expected = INT_TO_JSVAL(0); @@ -107,16 +107,16 @@ BEGIN_TEST(testParseJSON_success) obj = &v.toObject(); CHECK(JS_IsArrayObject(cx, obj)); CHECK(JS_GetProperty(cx, obj, "length", &v2)); - CHECK_SAME(v2, JSVAL_ZERO); + CHECK(v2.isInt32(0)); CHECK(Parse(cx, "[1]", &v)); CHECK(v.isObject()); obj = &v.toObject(); CHECK(JS_IsArrayObject(cx, obj)); CHECK(JS_GetProperty(cx, obj, "0", &v2)); - CHECK_SAME(v2, JSVAL_ONE); + CHECK(v2.isInt32(1)); CHECK(JS_GetProperty(cx, obj, "length", &v2)); - CHECK_SAME(v2, JSVAL_ONE); + CHECK(v2.isInt32(1)); // Objects @@ -361,7 +361,7 @@ TryParse(JSContext* cx, const char (&input)[N], JS::HandleValue filter) JS::RootedValue v(cx); str = input; CHECK(JS_ParseJSONWithReviver(cx, str.chars(), str.length(), filter, &v)); - CHECK_SAME(v, JSVAL_NULL); + CHECK(v.isNull()); return true; } END_TEST(testParseJSON_reviver) diff --git a/js/src/jsapi-tests/testResolveRecursion.cpp b/js/src/jsapi-tests/testResolveRecursion.cpp index 1cc98e7c8744..bd59faeed37e 100644 --- a/js/src/jsapi-tests/testResolveRecursion.cpp +++ b/js/src/jsapi-tests/testResolveRecursion.cpp @@ -42,7 +42,7 @@ BEGIN_TEST(testResolveRecursion) /* Start the essence of the test via invoking the first resolve hook. */ JS::RootedValue v(cx); EVAL("obj1.x", &v); - CHECK_SAME(v, JSVAL_FALSE); + CHECK(v.isFalse()); CHECK_EQUAL(resolveEntryCount, 4); CHECK_EQUAL(resolveExitCount, 4); @@ -86,7 +86,7 @@ doResolve(JS::HandleObject obj, JS::HandleId id, bool* resolvedp) /* First resolve hook invocation. */ CHECK_EQUAL(resolveEntryCount, 1); EVAL("obj2.y = true", &v); - CHECK_SAME(v, JSVAL_TRUE); + CHECK(v.isTrue()); CHECK(JS_DefinePropertyById(cx, obj, id, JS::FalseHandleValue, JSPROP_RESOLVING)); *resolvedp = true; return true; @@ -103,7 +103,7 @@ doResolve(JS::HandleObject obj, JS::HandleId id, bool* resolvedp) EVAL("obj1.x", &v); CHECK(v.isUndefined()); EVAL("obj1.y", &v); - CHECK_SAME(v, JSVAL_ZERO); + CHECK(v.isInt32(0)); *resolvedp = true; return true; } @@ -118,7 +118,7 @@ doResolve(JS::HandleObject obj, JS::HandleId id, bool* resolvedp) EVAL("obj2.x", &v); CHECK(v.isUndefined()); EVAL("obj1.y = 0", &v); - CHECK_SAME(v, JSVAL_ZERO); + CHECK(v.isInt32(0)); *resolvedp = true; return true; } diff --git a/js/src/jsapi-tests/testXDR.cpp b/js/src/jsapi-tests/testXDR.cpp index ab1804848b04..e1cc401337f1 100644 --- a/js/src/jsapi-tests/testXDR.cpp +++ b/js/src/jsapi-tests/testXDR.cpp @@ -67,7 +67,7 @@ BEGIN_TEST(testXDR_bug506491) // confirm EVAL("f() === 'ok';\n", &v2); - JS::RootedValue trueval(cx, JSVAL_TRUE); + JS::RootedValue trueval(cx, JS::TrueValue()); CHECK_SAME(v2, trueval); return true; } diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp index 98a6519c021b..bc5a561332c6 100644 --- a/js/src/jsapi.cpp +++ b/js/src/jsapi.cpp @@ -1439,7 +1439,7 @@ JS_ComputeThis(JSContext* cx, jsval* vp) assertSameCompartment(cx, JSValueArray(vp, 2)); CallReceiver call = CallReceiverFromVp(vp); if (!BoxNonStrictThis(cx, call)) - return JSVAL_NULL; + return NullValue(); return call.thisv(); } diff --git a/js/src/jsapi.h b/js/src/jsapi.h index 3a486d401f69..a2492935c2d4 100644 --- a/js/src/jsapi.h +++ b/js/src/jsapi.h @@ -2514,7 +2514,7 @@ struct JSPropertyDescriptor { JS::Value value; JSPropertyDescriptor() - : obj(nullptr), attrs(0), getter(nullptr), setter(nullptr), value(JSVAL_VOID) + : obj(nullptr), attrs(0), getter(nullptr), setter(nullptr), value(JS::UndefinedValue()) {} void trace(JSTracer* trc); diff --git a/js/src/vm/Value.cpp b/js/src/vm/Value.cpp index a2e41efca55e..4f47d9a57f2e 100644 --- a/js/src/vm/Value.cpp +++ b/js/src/vm/Value.cpp @@ -6,12 +6,10 @@ #include "js/Value.h" -const jsval JSVAL_NULL = IMPL_TO_JSVAL(BUILD_JSVAL(JSVAL_TAG_NULL, 0)); -const jsval JSVAL_ZERO = IMPL_TO_JSVAL(BUILD_JSVAL(JSVAL_TAG_INT32, 0)); -const jsval JSVAL_ONE = IMPL_TO_JSVAL(BUILD_JSVAL(JSVAL_TAG_INT32, 1)); -const jsval JSVAL_FALSE = IMPL_TO_JSVAL(BUILD_JSVAL(JSVAL_TAG_BOOLEAN, false)); -const jsval JSVAL_TRUE = IMPL_TO_JSVAL(BUILD_JSVAL(JSVAL_TAG_BOOLEAN, true)); -const jsval JSVAL_VOID = IMPL_TO_JSVAL(BUILD_JSVAL(JSVAL_TAG_UNDEFINED, 0)); +static const jsval JSVAL_NULL = IMPL_TO_JSVAL(BUILD_JSVAL(JSVAL_TAG_NULL, 0)); +static const jsval JSVAL_FALSE = IMPL_TO_JSVAL(BUILD_JSVAL(JSVAL_TAG_BOOLEAN, false)); +static const jsval JSVAL_TRUE = IMPL_TO_JSVAL(BUILD_JSVAL(JSVAL_TAG_BOOLEAN, true)); +static const jsval JSVAL_VOID = IMPL_TO_JSVAL(BUILD_JSVAL(JSVAL_TAG_UNDEFINED, 0)); namespace JS { diff --git a/js/xpconnect/src/XPCConvert.cpp b/js/xpconnect/src/XPCConvert.cpp index 3f07318e7898..367602b717f6 100644 --- a/js/xpconnect/src/XPCConvert.cpp +++ b/js/xpconnect/src/XPCConvert.cpp @@ -1274,7 +1274,7 @@ XPCConvert::NativeArray2JS(MutableHandleValue d, const void** s, *pErr = NS_ERROR_XPC_BAD_CONVERT_NATIVE; uint32_t i; - RootedValue current(cx, JSVAL_NULL); + RootedValue current(cx, JS::NullValue()); #define POPULATE(_t) \ PR_BEGIN_MACRO \ diff --git a/js/xpconnect/src/XPCWrappedNative.cpp b/js/xpconnect/src/XPCWrappedNative.cpp index 5303aded3986..688b5fd89822 100644 --- a/js/xpconnect/src/XPCWrappedNative.cpp +++ b/js/xpconnect/src/XPCWrappedNative.cpp @@ -1387,7 +1387,7 @@ XPCWrappedNative::CallMethod(XPCCallContext& ccx, bool CallMethodHelper::Call() { - mCallContext.SetRetVal(JSVAL_VOID); + mCallContext.SetRetVal(JS::UndefinedValue()); XPCJSRuntime::Get()->SetPendingException(nullptr); @@ -1536,14 +1536,14 @@ CallMethodHelper::GetOutParamSource(uint8_t paramIndex, MutableHandleValue srcp) if (paramInfo.IsOut() && !paramInfo.IsRetval()) { MOZ_ASSERT(paramIndex < mArgc || paramInfo.IsOptional(), "Expected either enough arguments or an optional argument"); - jsval arg = paramIndex < mArgc ? mArgv[paramIndex] : JSVAL_NULL; + jsval arg = paramIndex < mArgc ? mArgv[paramIndex] : JS::NullValue(); if (paramIndex < mArgc) { RootedObject obj(mCallContext); if (!arg.isPrimitive()) obj = &arg.toObject(); if (!obj || !JS_GetPropertyById(mCallContext, obj, mIdxValueId, srcp)) { // Explicitly passed in unusable value for out param. Note - // that if i >= mArgc we already know that |arg| is JSVAL_NULL, + // that if i >= mArgc we already know that |arg| is JS::NullValue(), // and that's ok. ThrowBadParam(NS_ERROR_XPC_NEED_OUT_OBJECT, paramIndex, mCallContext); @@ -1807,7 +1807,7 @@ CallMethodHelper::ConvertIndependentParam(uint8_t i) // indirectly, regardless of in/out-ness. if (type_tag == nsXPTType::T_JSVAL) { // Root the value. - dp->val.j = JSVAL_VOID; + dp->val.j.setUndefined(); if (!js::AddRawValueRoot(mCallContext, &dp->val.j, "XPCWrappedNative::CallMethod param")) return false; } @@ -1841,9 +1841,9 @@ CallMethodHelper::ConvertIndependentParam(uint8_t i) if (i < mArgc) src = mArgv[i]; else if (type_tag == nsXPTType::T_JSVAL) - src = JSVAL_VOID; + src.setUndefined(); else - src = JSVAL_NULL; + src.setNull(); } nsID param_iid; @@ -1957,7 +1957,7 @@ CallMethodHelper::ConvertDependentParam(uint8_t i) // Handle the 'in' case. MOZ_ASSERT(i < mArgc || paramInfo.IsOptional(), "Expected either enough arguments or an optional argument"); - src = i < mArgc ? mArgv[i] : JSVAL_NULL; + src = i < mArgc ? mArgv[i] : JS::NullValue(); } nsID param_iid; diff --git a/js/xpconnect/src/XPCWrappedNativeJSOps.cpp b/js/xpconnect/src/XPCWrappedNativeJSOps.cpp index efcf38d5cd17..71a5c94f5b68 100644 --- a/js/xpconnect/src/XPCWrappedNativeJSOps.cpp +++ b/js/xpconnect/src/XPCWrappedNativeJSOps.cpp @@ -479,7 +479,7 @@ XPC_WN_Shared_Convert(JSContext* cx, HandleObject obj, JSType type, MutableHandl vp.set(JS_GetNaNValue(cx)); return true; case JSTYPE_BOOLEAN: - vp.set(JSVAL_TRUE); + vp.setBoolean(true); return true; case JSTYPE_VOID: case JSTYPE_STRING: diff --git a/js/xpconnect/wrappers/XrayWrapper.cpp b/js/xpconnect/wrappers/XrayWrapper.cpp index 9922a45b391d..8da20efffba8 100644 --- a/js/xpconnect/wrappers/XrayWrapper.cpp +++ b/js/xpconnect/wrappers/XrayWrapper.cpp @@ -1255,9 +1255,9 @@ XPCWrappedNativeXrayTraits::resolveNativeProperty(JSContext* cx, HandleObject wr desc.setAttributes(JSPROP_ENUMERATE); desc.setGetter(nullptr); desc.setSetter(nullptr); - desc.value().set(JSVAL_VOID); + desc.value().setUndefined(); - RootedValue fval(cx, JSVAL_VOID); + RootedValue fval(cx, JS::UndefinedValue()); if (member->IsConstant()) { if (!member->GetConstantValue(ccx, iface, desc.value().address())) { JS_ReportError(cx, "Failed to convert constant native property to JS value"); diff --git a/storage/mozStorageStatementJSHelper.cpp b/storage/mozStorageStatementJSHelper.cpp index e3097a7ae939..9db095e55b19 100644 --- a/storage/mozStorageStatementJSHelper.cpp +++ b/storage/mozStorageStatementJSHelper.cpp @@ -61,7 +61,7 @@ stepFunc(JSContext *aCtx, bool hasMore = false; rv = stmt->ExecuteStep(&hasMore); if (NS_SUCCEEDED(rv) && !hasMore) { - *_vp = JSVAL_FALSE; + _vp->setBoolean(false); (void)stmt->Reset(); return true; } diff --git a/storage/mozStorageStatementRow.cpp b/storage/mozStorageStatementRow.cpp index 4761ef2c7fd5..ee5409831c1a 100644 --- a/storage/mozStorageStatementRow.cpp +++ b/storage/mozStorageStatementRow.cpp @@ -102,7 +102,7 @@ StatementRow::GetProperty(nsIXPConnectWrappedNative *aWrapper, } } else if (type == mozIStorageValueArray::VALUE_TYPE_NULL) { - *_vp = JSVAL_NULL; + _vp->setNull(); } else { NS_ERROR("unknown column type returned, what's going on?"); diff --git a/toolkit/devtools/server/nsJSInspector.cpp b/toolkit/devtools/server/nsJSInspector.cpp index 46b283024935..59ae33d046d5 100644 --- a/toolkit/devtools/server/nsJSInspector.cpp +++ b/toolkit/devtools/server/nsJSInspector.cpp @@ -52,7 +52,7 @@ NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(nsJSInspector) NS_IMPL_CYCLE_COLLECTION_TRACE_JSVAL_MEMBER_CALLBACK(mLastRequestor) NS_IMPL_CYCLE_COLLECTION_TRACE_END -nsJSInspector::nsJSInspector() : mNestedLoopLevel(0), mRequestors(1), mLastRequestor(JSVAL_NULL) +nsJSInspector::nsJSInspector() : mNestedLoopLevel(0), mRequestors(1), mLastRequestor(JS::NullValue()) { } @@ -99,7 +99,7 @@ nsJSInspector::ExitNestedEventLoop(uint32_t *out) if (mNestedLoopLevel > 0) mLastRequestor = mRequestors.ElementAt(mNestedLoopLevel - 1); else - mLastRequestor = JSVAL_NULL; + mLastRequestor = JS::NullValue(); } else { return NS_ERROR_FAILURE; } diff --git a/xpcom/base/CycleCollectedJSRuntime.cpp b/xpcom/base/CycleCollectedJSRuntime.cpp index ae9364006270..8df331ff987f 100644 --- a/xpcom/base/CycleCollectedJSRuntime.cpp +++ b/xpcom/base/CycleCollectedJSRuntime.cpp @@ -849,7 +849,7 @@ struct ClearJSHolder : TraceCallbacks { virtual void Trace(JS::Heap* aPtr, const char*, void*) const override { - *aPtr = JSVAL_VOID; + aPtr->setUndefined(); } virtual void Trace(JS::Heap* aPtr, const char*, void*) const override From ee8577610770a1792693355736a61178e9c3cf2c Mon Sep 17 00:00:00 2001 From: Chris Pearce Date: Tue, 30 Jun 2015 13:50:50 +1200 Subject: [PATCH 62/63] Bug 1160441 - Change exception code when MediaSource.addSourceBuffer() fails due to user disabling MP4. r=edwin --- dom/media/mediasource/MediaSource.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dom/media/mediasource/MediaSource.cpp b/dom/media/mediasource/MediaSource.cpp index fb4fdaebafa1..b8a9facf9cc1 100644 --- a/dom/media/mediasource/MediaSource.cpp +++ b/dom/media/mediasource/MediaSource.cpp @@ -100,12 +100,12 @@ IsTypeSupported(const nsAString& aType) || AndroidBridge::Bridge()->GetAPIVersion() < 16 #endif )) { - break; + return NS_ERROR_DOM_INVALID_STATE_ERR; } if ((mimeType.EqualsASCII("video/webm") || mimeType.EqualsASCII("audio/webm")) && !Preferences::GetBool("media.mediasource.webm.enabled", false)) { - break; + return NS_ERROR_DOM_INVALID_STATE_ERR; } found = true; break; From 8e2753e13c4abaa12315057dbcfa7200c89228ce Mon Sep 17 00:00:00 2001 From: Jeff Walden Date: Mon, 29 Jun 2015 21:13:00 -0700 Subject: [PATCH 63/63] Bug 1175347 - Fix a test that assumes too much in compacting builds. r=intermittent-orange in a CLOSED TREE --- js/src/jit-test/tests/debug/Frame-newTargetEval-01.js | 2 ++ js/src/jit-test/tests/debug/Frame-newTargetEval-02.js | 2 ++ 2 files changed, 4 insertions(+) diff --git a/js/src/jit-test/tests/debug/Frame-newTargetEval-01.js b/js/src/jit-test/tests/debug/Frame-newTargetEval-01.js index 38c26b0167d2..4a40d622c634 100644 --- a/js/src/jit-test/tests/debug/Frame-newTargetEval-01.js +++ b/js/src/jit-test/tests/debug/Frame-newTargetEval-01.js @@ -1,5 +1,7 @@ // Test that new.target is acceptably usable in RematerializedFrames. +gczeal(0); + load(libdir + "jitopts.js"); if (!jitTogglesMatch(Opts_Ion2NoOffthreadCompilation)) diff --git a/js/src/jit-test/tests/debug/Frame-newTargetEval-02.js b/js/src/jit-test/tests/debug/Frame-newTargetEval-02.js index c9d3f1e64c25..3eb9114c547e 100644 --- a/js/src/jit-test/tests/debug/Frame-newTargetEval-02.js +++ b/js/src/jit-test/tests/debug/Frame-newTargetEval-02.js @@ -1,5 +1,7 @@ // Test that new.target is acceptably usable in RematerializedFrames. +gczeal(0); + load(libdir + "jitopts.js"); if (!jitTogglesMatch(Opts_Ion2NoOffthreadCompilation))