зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1356060 - Just use nsString in URLValueData. r=heycam
This switches over from using nsStringBuffer to nsString for URLValueData's |mString| member. This avoids various tedious conversions and can provide potential performance improvements by avoiding length calculations. MozReview-Commit-ID: 5eRifUZrAso
This commit is contained in:
Родитель
678a2ca3dc
Коммит
152fcf01fe
|
@ -1675,17 +1675,12 @@ nsAttrValue::LoadImage(nsIDocument* aDocument)
|
|||
{
|
||||
NS_ASSERTION(Type() == eURL, "wrong type");
|
||||
|
||||
#ifdef DEBUG
|
||||
{
|
||||
nsString val;
|
||||
ToString(val);
|
||||
NS_ASSERTION(!val.IsEmpty(),
|
||||
"How did we end up with an empty string for eURL");
|
||||
}
|
||||
#endif
|
||||
|
||||
MiscContainer* cont = GetMiscContainer();
|
||||
mozilla::css::URLValue* url = cont->mValue.mURL;
|
||||
|
||||
NS_ASSERTION(!url->mString.IsEmpty(),
|
||||
"How did we end up with an empty string for eURL");
|
||||
|
||||
mozilla::css::ImageValue* image =
|
||||
new css::ImageValue(url->GetURI(), url->mString,
|
||||
do_AddRef(url->mExtraData), aDocument);
|
||||
|
|
|
@ -962,14 +962,8 @@ nsGenericHTMLElement::ParseBackgroundAttribute(int32_t aNamespaceID,
|
|||
return false;
|
||||
}
|
||||
|
||||
nsString value(aValue);
|
||||
RefPtr<nsStringBuffer> buffer = nsCSSValue::BufferFromString(value);
|
||||
if (MOZ_UNLIKELY(!buffer)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mozilla::css::URLValue *url =
|
||||
new mozilla::css::URLValue(uri, buffer, baseURI, doc->GetDocumentURI(),
|
||||
new mozilla::css::URLValue(uri, aValue, baseURI, doc->GetDocumentURI(),
|
||||
NodePrincipal());
|
||||
aResult.SetTo(url, &aValue);
|
||||
return true;
|
||||
|
|
|
@ -967,14 +967,11 @@ ServoBundledURI::IntoCssUrl()
|
|||
MOZ_ASSERT(mExtraData->GetReferrer());
|
||||
MOZ_ASSERT(mExtraData->GetPrincipal());
|
||||
|
||||
nsString url;
|
||||
nsDependentCSubstring urlString(reinterpret_cast<const char*>(mURLString),
|
||||
mURLStringLength);
|
||||
AppendUTF8toUTF16(urlString, url);
|
||||
RefPtr<nsStringBuffer> urlBuffer = nsCSSValue::BufferFromString(url);
|
||||
NS_ConvertUTF8toUTF16 url(reinterpret_cast<const char*>(mURLString),
|
||||
mURLStringLength);
|
||||
|
||||
RefPtr<css::URLValue> urlValue =
|
||||
new css::URLValue(urlBuffer, do_AddRef(mExtraData));
|
||||
new css::URLValue(url, do_AddRef(mExtraData));
|
||||
return urlValue.forget();
|
||||
}
|
||||
|
||||
|
@ -1000,14 +997,11 @@ CreateStyleImageRequest(nsStyleImageRequest::Mode aModeFlags,
|
|||
MOZ_ASSERT(aURI.mExtraData->GetReferrer());
|
||||
MOZ_ASSERT(aURI.mExtraData->GetPrincipal());
|
||||
|
||||
nsString url;
|
||||
nsDependentCSubstring urlString(reinterpret_cast<const char*>(aURI.mURLString),
|
||||
aURI.mURLStringLength);
|
||||
AppendUTF8toUTF16(urlString, url);
|
||||
RefPtr<nsStringBuffer> urlBuffer = nsCSSValue::BufferFromString(url);
|
||||
NS_ConvertUTF8toUTF16 url(reinterpret_cast<const char*>(aURI.mURLString),
|
||||
aURI.mURLStringLength);
|
||||
|
||||
RefPtr<nsStyleImageRequest> req =
|
||||
new nsStyleImageRequest(aModeFlags, urlBuffer, do_AddRef(aURI.mExtraData));
|
||||
new nsStyleImageRequest(aModeFlags, url, do_AddRef(aURI.mExtraData));
|
||||
return req.forget();
|
||||
}
|
||||
|
||||
|
|
|
@ -8192,11 +8192,9 @@ CSSParserImpl::SetValueToURL(nsCSSValue& aValue, const nsString& aURL)
|
|||
return false;
|
||||
}
|
||||
|
||||
RefPtr<nsStringBuffer> buffer(nsCSSValue::BufferFromString(aURL));
|
||||
|
||||
// Note: urlVal retains its own reference to |buffer|.
|
||||
mozilla::css::URLValue *urlVal =
|
||||
new mozilla::css::URLValue(buffer, mBaseURI, mSheetURI, mSheetPrincipal);
|
||||
new mozilla::css::URLValue(aURL, mBaseURI, mSheetURI, mSheetPrincipal);
|
||||
aValue.SetURLValue(urlVal);
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -30,10 +30,10 @@ using namespace mozilla;
|
|||
using namespace mozilla::css;
|
||||
|
||||
static bool
|
||||
IsLocalRefURL(nsStringBuffer* aString)
|
||||
IsLocalRefURL(const nsString& aString)
|
||||
{
|
||||
// Find the first non-"C0 controls + space" character.
|
||||
char16_t* current = static_cast<char16_t*>(aString->Data());
|
||||
const char16_t* current = aString.get();
|
||||
for (; *current != '\0'; current++) {
|
||||
if (*current > 0x20) {
|
||||
// if the first non-"C0 controls + space" character is '#', this is a
|
||||
|
@ -46,9 +46,9 @@ IsLocalRefURL(nsStringBuffer* aString)
|
|||
}
|
||||
|
||||
static bool
|
||||
MightHaveRef(nsStringBuffer* aString)
|
||||
MightHaveRef(const nsString& aString)
|
||||
{
|
||||
char16_t* current = static_cast<char16_t*>(aString->Data());
|
||||
const char16_t* current = aString.get();
|
||||
for (; *current != '\0'; current++) {
|
||||
if (*current == '#') {
|
||||
return true;
|
||||
|
@ -2795,25 +2795,23 @@ nsCSSValue::Array::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) cons
|
|||
}
|
||||
|
||||
css::URLValueData::URLValueData(already_AddRefed<PtrHolder<nsIURI>> aURI,
|
||||
nsStringBuffer* aString,
|
||||
const nsAString& aString,
|
||||
already_AddRefed<URLExtraData> aExtraData)
|
||||
: mURI(Move(aURI))
|
||||
, mString(aString)
|
||||
, mExtraData(Move(aExtraData))
|
||||
, mURIResolved(true)
|
||||
{
|
||||
MOZ_ASSERT(mString);
|
||||
MOZ_ASSERT(mExtraData);
|
||||
MOZ_ASSERT(mExtraData->GetPrincipal());
|
||||
}
|
||||
|
||||
css::URLValueData::URLValueData(nsStringBuffer* aString,
|
||||
css::URLValueData::URLValueData(const nsAString& aString,
|
||||
already_AddRefed<URLExtraData> aExtraData)
|
||||
: mString(aString)
|
||||
, mExtraData(Move(aExtraData))
|
||||
, mURIResolved(false)
|
||||
{
|
||||
MOZ_ASSERT(aString);
|
||||
MOZ_ASSERT(mExtraData);
|
||||
MOZ_ASSERT(mExtraData->GetPrincipal());
|
||||
}
|
||||
|
@ -2824,11 +2822,9 @@ css::URLValueData::Equals(const URLValueData& aOther) const
|
|||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
bool eq;
|
||||
// Cast away const so we can call nsIPrincipal::Equals.
|
||||
const URLExtraData* self = mExtraData;
|
||||
const URLExtraData* other = aOther.mExtraData;
|
||||
return NS_strcmp(nsCSSValue::GetBufferValue(mString),
|
||||
nsCSSValue::GetBufferValue(aOther.mString)) == 0 &&
|
||||
return mString == aOther.mString &&
|
||||
(GetURI() == aOther.GetURI() || // handles null == null
|
||||
(mURI && aOther.mURI &&
|
||||
NS_SUCCEEDED(mURI->Equals(aOther.mURI, &eq)) &&
|
||||
|
@ -2845,9 +2841,7 @@ bool
|
|||
css::URLValueData::DefinitelyEqualURIs(const URLValueData& aOther) const
|
||||
{
|
||||
return mExtraData->BaseURI() == aOther.mExtraData->BaseURI() &&
|
||||
(mString == aOther.mString ||
|
||||
NS_strcmp(nsCSSValue::GetBufferValue(mString),
|
||||
nsCSSValue::GetBufferValue(aOther.mString)) == 0);
|
||||
(mString == aOther.mString);
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -2867,7 +2861,7 @@ css::URLValueData::GetURI() const
|
|||
MOZ_ASSERT(!mURI);
|
||||
nsCOMPtr<nsIURI> newURI;
|
||||
NS_NewURI(getter_AddRefs(newURI),
|
||||
NS_ConvertUTF16toUTF8(nsCSSValue::GetBufferValue(mString)),
|
||||
NS_ConvertUTF16toUTF8(mString),
|
||||
nullptr, mExtraData->BaseURI());
|
||||
mURI = new PtrHolder<nsIURI>(newURI.forget());
|
||||
mURIResolved = true;
|
||||
|
@ -2987,7 +2981,7 @@ size_t
|
|||
css::URLValueData::SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
|
||||
{
|
||||
size_t n = 0;
|
||||
n += mString->SizeOfIncludingThisIfUnshared(aMallocSizeOf);
|
||||
n += mString.SizeOfExcludingThisIfUnshared(aMallocSizeOf);
|
||||
|
||||
// Measurement of the following members may be added later if DMD finds it
|
||||
// is worthwhile:
|
||||
|
@ -2996,7 +2990,7 @@ css::URLValueData::SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) cons
|
|||
return n;
|
||||
}
|
||||
|
||||
URLValue::URLValue(nsStringBuffer* aString, nsIURI* aBaseURI, nsIURI* aReferrer,
|
||||
URLValue::URLValue(const nsAString& aString, nsIURI* aBaseURI, nsIURI* aReferrer,
|
||||
nsIPrincipal* aOriginPrincipal)
|
||||
: URLValueData(aString, do_AddRef(new URLExtraData(aBaseURI, aReferrer,
|
||||
aOriginPrincipal)))
|
||||
|
@ -3004,7 +2998,7 @@ URLValue::URLValue(nsStringBuffer* aString, nsIURI* aBaseURI, nsIURI* aReferrer,
|
|||
MOZ_ASSERT(NS_IsMainThread());
|
||||
}
|
||||
|
||||
URLValue::URLValue(nsIURI* aURI, nsStringBuffer* aString, nsIURI* aBaseURI,
|
||||
URLValue::URLValue(nsIURI* aURI, const nsAString& aString, nsIURI* aBaseURI,
|
||||
nsIURI* aReferrer, nsIPrincipal* aOriginPrincipal)
|
||||
: URLValueData(do_AddRef(new PtrHolder<nsIURI>(aURI)),
|
||||
aString,
|
||||
|
@ -3026,7 +3020,7 @@ css::URLValue::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
|
|||
return n;
|
||||
}
|
||||
|
||||
css::ImageValue::ImageValue(nsIURI* aURI, nsStringBuffer* aString,
|
||||
css::ImageValue::ImageValue(nsIURI* aURI, const nsAString& aString,
|
||||
already_AddRefed<URLExtraData> aExtraData,
|
||||
nsIDocument* aDocument)
|
||||
: URLValueData(do_AddRef(new PtrHolder<nsIURI>(aURI)),
|
||||
|
@ -3035,7 +3029,7 @@ css::ImageValue::ImageValue(nsIURI* aURI, nsStringBuffer* aString,
|
|||
Initialize(aDocument);
|
||||
}
|
||||
|
||||
css::ImageValue::ImageValue(nsStringBuffer* aString,
|
||||
css::ImageValue::ImageValue(const nsAString& aString,
|
||||
already_AddRefed<URLExtraData> aExtraData)
|
||||
: URLValueData(aString, Move(aExtraData))
|
||||
{
|
||||
|
|
|
@ -102,11 +102,11 @@ protected:
|
|||
// For both constructors principal of aExtraData must not be null.
|
||||
// Construct with a base URI; this will create the actual URI lazily from
|
||||
// aString and aExtraData.
|
||||
URLValueData(nsStringBuffer* aString,
|
||||
URLValueData(const nsAString& aString,
|
||||
already_AddRefed<URLExtraData> aExtraData);
|
||||
// Construct with the actual URI.
|
||||
URLValueData(already_AddRefed<PtrHolder<nsIURI>> aURI,
|
||||
nsStringBuffer* aString,
|
||||
const nsAString& aString,
|
||||
already_AddRefed<URLExtraData> aExtraData);
|
||||
|
||||
public:
|
||||
|
@ -161,7 +161,7 @@ private:
|
|||
// invalid, even once resolved.
|
||||
mutable PtrHandle<nsIURI> mURI;
|
||||
public:
|
||||
RefPtr<nsStringBuffer> mString;
|
||||
nsString mString;
|
||||
RefPtr<URLExtraData> mExtraData;
|
||||
private:
|
||||
mutable bool mURIResolved;
|
||||
|
@ -182,13 +182,13 @@ private:
|
|||
struct URLValue final : public URLValueData
|
||||
{
|
||||
// These two constructors are safe to call only on the main thread.
|
||||
URLValue(nsStringBuffer* aString, nsIURI* aBaseURI, nsIURI* aReferrer,
|
||||
URLValue(const nsAString& aString, nsIURI* aBaseURI, nsIURI* aReferrer,
|
||||
nsIPrincipal* aOriginPrincipal);
|
||||
URLValue(nsIURI* aURI, nsStringBuffer* aString, nsIURI* aBaseURI,
|
||||
URLValue(nsIURI* aURI, const nsAString& aString, nsIURI* aBaseURI,
|
||||
nsIURI* aReferrer, nsIPrincipal* aOriginPrincipal);
|
||||
|
||||
// This constructor is safe to call from any thread.
|
||||
URLValue(nsStringBuffer* aString,
|
||||
URLValue(const nsAString& aString,
|
||||
already_AddRefed<URLExtraData> aExtraData)
|
||||
: URLValueData(aString, Move(aExtraData)) {}
|
||||
|
||||
|
@ -203,16 +203,15 @@ struct ImageValue final : public URLValueData
|
|||
// Not making the constructor and destructor inline because that would
|
||||
// force us to include imgIRequest.h, which leads to REQUIRES hell, since
|
||||
// this header is included all over.
|
||||
// aString must not be null.
|
||||
//
|
||||
// This constructor is only safe to call from the main thread.
|
||||
ImageValue(nsIURI* aURI, nsStringBuffer* aString,
|
||||
ImageValue(nsIURI* aURI, const nsAString& aString,
|
||||
already_AddRefed<URLExtraData> aExtraData,
|
||||
nsIDocument* aDocument);
|
||||
|
||||
// This constructor is safe to call from any thread, but Initialize
|
||||
// must be called later for the object to be useful.
|
||||
ImageValue(nsStringBuffer* aString,
|
||||
ImageValue(const nsAString& aString,
|
||||
already_AddRefed<URLExtraData> aExtraData);
|
||||
|
||||
ImageValue(const ImageValue&) = delete;
|
||||
|
@ -856,9 +855,9 @@ public:
|
|||
{
|
||||
MOZ_ASSERT(mUnit == eCSSUnit_URL || mUnit == eCSSUnit_Image,
|
||||
"not a URL value");
|
||||
return GetBufferValue(mUnit == eCSSUnit_URL ?
|
||||
mValue.mURL->mString :
|
||||
mValue.mImage->mString);
|
||||
return mUnit == eCSSUnit_URL ?
|
||||
mValue.mURL->mString.get() :
|
||||
mValue.mImage->mString.get();
|
||||
}
|
||||
|
||||
// Not making this inline because that would force us to include
|
||||
|
|
|
@ -1991,9 +1991,9 @@ nsStyleImageRequest::nsStyleImageRequest(Mode aModeFlags,
|
|||
|
||||
nsStyleImageRequest::nsStyleImageRequest(
|
||||
Mode aModeFlags,
|
||||
nsStringBuffer* aURLBuffer,
|
||||
const nsAString& aURL,
|
||||
already_AddRefed<URLExtraData> aExtraData)
|
||||
: mImageValue(new css::ImageValue(aURLBuffer, Move(aExtraData)))
|
||||
: mImageValue(new css::ImageValue(aURL, Move(aExtraData)))
|
||||
, mModeFlags(aModeFlags)
|
||||
, mResolved(false)
|
||||
{
|
||||
|
|
|
@ -340,7 +340,7 @@ public:
|
|||
// on the main thread before get() can be used.
|
||||
nsStyleImageRequest(
|
||||
Mode aModeFlags,
|
||||
nsStringBuffer* aURLBuffer,
|
||||
const nsAString& aURL,
|
||||
already_AddRefed<mozilla::URLExtraData> aExtraData);
|
||||
|
||||
bool Resolve(nsPresContext* aPresContext);
|
||||
|
|
Загрузка…
Ссылка в новой задаче