Bug 1298774 - Part 7: Make nsStyleFilter use css::URLValue for url() storage instead of FragmentOrURL. r=cjku

MozReview-Commit-ID: FyhH9QG9vYq

--HG--
extra : rebase_source : 300a97e42ae9b27d83e7316e502295c597fad7cd
This commit is contained in:
Cameron McCormack 2016-10-11 14:56:12 +08:00
Родитель e07dbc8da6
Коммит 840196223a
7 изменённых файлов: 20 добавлений и 38 удалений

Просмотреть файл

@ -4153,11 +4153,7 @@ StyleAnimationValue::ExtractComputedValue(nsCSSPropertyID aProperty,
const nsStyleFilter& filter = filters[i];
int32_t type = filter.GetType();
if (type == NS_STYLE_FILTER_URL) {
nsIDocument* doc = aStyleContext->PresContext()->Document();
RefPtr<mozilla::css::URLValue> url =
FragmentOrURLToURLValue(filter.GetURL(), doc);
item->mValue.SetURLValue(url);
item->mValue.SetURLValue(filter.GetURL());
} else {
nsCSSKeyword functionName =
nsCSSProps::ValueToKeywordEnum(type,

Просмотреть файл

@ -6088,8 +6088,9 @@ nsComputedDOMStyle::CreatePrimitiveValueForStyleFilter(
RefPtr<nsROCSSPrimitiveValue> value = new nsROCSSPrimitiveValue;
// Handle url().
if (aStyleFilter.GetType() == NS_STYLE_FILTER_URL) {
MOZ_ASSERT(aStyleFilter.GetURL()->GetSourceURL());
SetValueToFragmentOrURL(aStyleFilter.GetURL(), value);
MOZ_ASSERT(aStyleFilter.GetURL() &&
aStyleFilter.GetURL()->GetURI());
SetValueToURLValue(aStyleFilter.GetURL(), value);
return value.forget();
}

Просмотреть файл

@ -9766,7 +9766,7 @@ SetStyleFilterToCSSValue(nsStyleFilter* aStyleFilter,
{
nsCSSUnit unit = aValue.GetUnit();
if (unit == eCSSUnit_URL) {
return aStyleFilter->SetURL(&aValue);
return aStyleFilter->SetURL(aValue.GetURLStructValue());
}
MOZ_ASSERT(unit == eCSSUnit_Function, "expected a filter function");

Просмотреть файл

@ -1132,7 +1132,7 @@ nsStyleFilter::nsStyleFilter(const nsStyleFilter& aSource)
{
MOZ_COUNT_CTOR(nsStyleFilter);
if (aSource.mType == NS_STYLE_FILTER_URL) {
CopyURL(aSource);
SetURL(aSource.mURL);
} else if (aSource.mType == NS_STYLE_FILTER_DROP_SHADOW) {
SetDropShadow(aSource.mDropShadow);
} else if (aSource.mType != NS_STYLE_FILTER_NONE) {
@ -1154,7 +1154,7 @@ nsStyleFilter::operator=(const nsStyleFilter& aOther)
}
if (aOther.mType == NS_STYLE_FILTER_URL) {
CopyURL(aOther);
SetURL(aOther.mURL);
} else if (aOther.mType == NS_STYLE_FILTER_DROP_SHADOW) {
SetDropShadow(aOther.mDropShadow);
} else if (aOther.mType != NS_STYLE_FILTER_NONE) {
@ -1175,7 +1175,7 @@ nsStyleFilter::operator==(const nsStyleFilter& aOther) const
}
if (mType == NS_STYLE_FILTER_URL) {
return EqualURIs(mURL, aOther.mURL);
return DefinitelyEqualURIs(mURL, aOther.mURL);
} else if (mType == NS_STYLE_FILTER_DROP_SHADOW) {
return *mDropShadow == *aOther.mDropShadow;
} else if (mType != NS_STYLE_FILTER_NONE) {
@ -1193,19 +1193,11 @@ nsStyleFilter::ReleaseRef()
mDropShadow->Release();
} else if (mType == NS_STYLE_FILTER_URL) {
NS_ASSERTION(mURL, "expected pointer");
delete mURL;
mURL->Release();
}
mURL = nullptr;
}
void
nsStyleFilter::CopyURL(const nsStyleFilter& aOther)
{
ReleaseRef();
mURL = new FragmentOrURL(*aOther.mURL);
mType = NS_STYLE_FILTER_URL;
}
void
nsStyleFilter::SetFilterParameter(const nsStyleCoord& aFilterParameter,
int32_t aType)
@ -1216,17 +1208,11 @@ nsStyleFilter::SetFilterParameter(const nsStyleCoord& aFilterParameter,
}
bool
nsStyleFilter::SetURL(const nsCSSValue* aValue)
nsStyleFilter::SetURL(css::URLValue* aURL)
{
if (!aValue->GetURLValue()) {
return false;
}
ReleaseRef();
mURL = new FragmentOrURL();
mURL->SetValue(aValue);
mURL = aURL;
mURL->AddRef();
mType = NS_STYLE_FILTER_URL;
return true;
}

Просмотреть файл

@ -3652,12 +3652,12 @@ struct nsStyleFilter
void SetFilterParameter(const nsStyleCoord& aFilterParameter,
int32_t aType);
mozilla::FragmentOrURL* GetURL() const {
NS_ASSERTION(mType == NS_STYLE_FILTER_URL, "wrong filter type");
mozilla::css::URLValue* GetURL() const {
MOZ_ASSERT(mType == NS_STYLE_FILTER_URL, "wrong filter type");
return mURL;
}
bool SetURL(const nsCSSValue* aValue);
bool SetURL(mozilla::css::URLValue* aValue);
nsCSSShadowArray* GetDropShadow() const {
NS_ASSERTION(mType == NS_STYLE_FILTER_DROP_SHADOW, "wrong filter type");
@ -3667,12 +3667,11 @@ struct nsStyleFilter
private:
void ReleaseRef();
void CopyURL(const nsStyleFilter& aOther);
int32_t mType; // see NS_STYLE_FILTER_* constants in nsStyleConsts.h
nsStyleCoord mFilterParameter; // coord, percent, factor, angle
union {
mozilla::FragmentOrURL* mURL;
mozilla::css::URLValue* mURL;
nsCSSShadowArray* mDropShadow;
};
};

Просмотреть файл

@ -303,7 +303,7 @@ nsSVGFilterChainObserver::nsSVGFilterChainObserver(const nsTArray<nsStyleFilter>
// CanvasRenderingContext2D.
nsCOMPtr<nsIURI> filterURL = aFilteredFrame
? nsSVGEffects::GetFilterURI(aFilteredFrame, i)
: aFilters[i].GetURL()->Resolve(aFilteredElement);
: aFilters[i].GetURL()->ResolveLocalRef(aFilteredElement);
RefPtr<nsSVGFilterReference> reference =
new nsSVGFilterReference(filterURL, aFilteredElement, this);
@ -1020,7 +1020,7 @@ nsSVGEffects::GetFilterURI(nsIFrame* aFrame, uint32_t aIndex)
MOZ_ASSERT(effects->mFilters.Length() > aIndex);
MOZ_ASSERT(effects->mFilters[aIndex].GetType() == NS_STYLE_FILTER_URL);
return ResolveFragmentOrURL(aFrame, effects->mFilters[aIndex].GetURL());
return ResolveURLUsingLocalRef(aFrame, effects->mFilters[aIndex].GetURL());
}
already_AddRefed<nsIURI>
@ -1029,7 +1029,7 @@ nsSVGEffects::GetFilterURI(nsIFrame* aFrame, const nsStyleFilter& aFilter)
MOZ_ASSERT(aFrame->StyleEffects()->mFilters.Length());
MOZ_ASSERT(aFilter.GetType() == NS_STYLE_FILTER_URL);
return ResolveFragmentOrURL(aFrame, aFilter.GetURL());
return ResolveURLUsingLocalRef(aFrame, aFilter.GetURL());
}
already_AddRefed<nsIURI>

Просмотреть файл

@ -131,7 +131,7 @@ nsSVGFilterInstance::GetFilterFrame(nsIFrame* aTargetFrame)
// CanvasRenderingContext2D.
nsCOMPtr<nsIURI> url = aTargetFrame
? nsSVGEffects::GetFilterURI(aTargetFrame, mFilter)
: mFilter.GetURL()->Resolve(mTargetContent);
: mFilter.GetURL()->ResolveLocalRef(mTargetContent);
if (!url) {
NS_NOTREACHED("an nsStyleFilter of type URL should have a non-null URL");