Bug 1310463 - Part 3: Add FFI functions for setting list-style-image. r=xidorn
MozReview-Commit-ID: LNK4UbfMfRk
--- a/layout/style/ServoBindings.cpp
+++ b/layout/style/ServoBindings.cpp
@@ -716,42 +716,52 @@ Gecko_SetNullImageValue(nsStyleImage* aI
void
Gecko_SetGradientImageValue(nsStyleImage* aImage, nsStyleGradient* aGradient)
{
MOZ_ASSERT(aImage);
aImage->SetGradientData(aGradient);
}
-void
-Gecko_SetUrlImageValue(nsStyleImage* aImage,
- const uint8_t* aURLString, uint32_t aURLStringLength,
- ThreadSafeURIHolder* aBaseURI,
- ThreadSafeURIHolder* aReferrer,
- ThreadSafePrincipalHolder* aPrincipal)
+static already_AddRefed<nsStyleImageRequest>
+CreateStyleImageRequest(nsStyleImageRequest::Mode aModeFlags,
+ const uint8_t* aURLString, uint32_t aURLStringLength,
+ ThreadSafeURIHolder* aBaseURI,
+ ThreadSafeURIHolder* aReferrer,
+ ThreadSafePrincipalHolder* aPrincipal)
{
- MOZ_ASSERT(aImage);
MOZ_ASSERT(aURLString);
MOZ_ASSERT(aBaseURI);
MOZ_ASSERT(aReferrer);
MOZ_ASSERT(aPrincipal);
nsString url;
nsDependentCSubstring urlString(reinterpret_cast<const char*>(aURLString),
aURLStringLength);
AppendUTF8toUTF16(urlString, url);
RefPtr<nsStringBuffer> urlBuffer = nsCSSValue::BufferFromString(url);
RefPtr<nsStyleImageRequest> req =
- new nsStyleImageRequest(nsStyleImageRequest::Mode::Track |
+ new nsStyleImageRequest(aModeFlags, urlBuffer, do_AddRef(aBaseURI),
+ do_AddRef(aReferrer), do_AddRef(aPrincipal));
+ return req.forget();
+}
+
+void
+Gecko_SetUrlImageValue(nsStyleImage* aImage,
+ const uint8_t* aURLString, uint32_t aURLStringLength,
+ ThreadSafeURIHolder* aBaseURI,
+ ThreadSafeURIHolder* aReferrer,
+ ThreadSafePrincipalHolder* aPrincipal)
+{
+ RefPtr<nsStyleImageRequest> req =
+ CreateStyleImageRequest(nsStyleImageRequest::Mode::Track |
nsStyleImageRequest::Mode::Lock,
- urlBuffer,
- do_AddRef(aBaseURI),
- do_AddRef(aReferrer),
- do_AddRef(aPrincipal));
+ aURLString, aURLStringLength,
+ aBaseURI, aReferrer, aPrincipal);
aImage->SetImageRequest(req.forget());
}
void
Gecko_CopyImageValueFrom(nsStyleImage* aImage, const nsStyleImage* aOther)
{
MOZ_ASSERT(aImage);
MOZ_ASSERT(aOther);
@@ -787,16 +797,42 @@ Gecko_CreateGradient(uint8_t aShape,
for (uint32_t i = 0; i < aStopCount; i++) {
result->mStops.AppendElement(dummyStop);
}
return result;
}
void
+Gecko_SetListStyleImageNone(nsStyleList* aList)
+{
+ aList->mListStyleImage = nullptr;
+}
+
+void
+Gecko_SetListStyleImage(nsStyleList* aList,
+ const uint8_t* aURLString, uint32_t aURLStringLength,
+ ThreadSafeURIHolder* aBaseURI,
+ ThreadSafeURIHolder* aReferrer,
+ ThreadSafePrincipalHolder* aPrincipal)
+{
+ aList->mListStyleImage =
+ CreateStyleImageRequest(nsStyleImageRequest::Mode::Track |
+ nsStyleImageRequest::Mode::Lock,
+ aURLString, aURLStringLength,
+ aBaseURI, aReferrer, aPrincipal);
+}
+
+void
+Gecko_CopyListStyleImageFrom(nsStyleList* aList, const nsStyleList* aSource)
+{
+ aList->mListStyleImage = aSource->mListStyleImage;
+}
+
+void
Gecko_EnsureTArrayCapacity(void* aArray, size_t aCapacity, size_t aElemSize)
{
auto base =
reinterpret_cast<nsTArray_base<nsTArrayInfallibleAllocator,
nsTArray_CopyWithMemutils>*>(aArray);
base->EnsureCapacity<nsTArrayInfallibleAllocator>(aCapacity, aElemSize);
}
--- a/layout/style/ServoBindings.h
+++ b/layout/style/ServoBindings.h
@@ -258,16 +258,25 @@ void Gecko_SetUrlImageValue(nsStyleImage
void Gecko_CopyImageValueFrom(nsStyleImage* image, const nsStyleImage* other);
nsStyleGradient* Gecko_CreateGradient(uint8_t shape,
uint8_t size,
bool repeating,
bool legacy_syntax,
uint32_t stops);
+// list-style-image style.
+void Gecko_SetListStyleImageNone(nsStyleList* style_struct);
+void Gecko_SetListStyleImage(nsStyleList* style_struct,
+ const uint8_t* string_bytes, uint32_t string_length,
+ ThreadSafeURIHolder* base_uri,
+ ThreadSafeURIHolder* referrer,
+ ThreadSafePrincipalHolder* principal);
+void Gecko_CopyListStyleImageFrom(nsStyleList* dest, const nsStyleList* src);
+
// Display style.
void Gecko_SetMozBinding(nsStyleDisplay* style_struct,
const uint8_t* string_bytes, uint32_t string_length,
ThreadSafeURIHolder* base_uri,
ThreadSafeURIHolder* referrer,
ThreadSafePrincipalHolder* principal);
void Gecko_CopyMozBindingFrom(nsStyleDisplay* des, const nsStyleDisplay* src);