Bug 1324700 - Resolve filter property for servo. r?heycam
MozReview-Commit-ID: 6IHs682rZfH
--- a/dom/canvas/CanvasRenderingContext2D.cpp
+++ b/dom/canvas/CanvasRenderingContext2D.cpp
@@ -3012,32 +3012,59 @@ CanvasRenderingContext2D::ParseFilter(co
nsCOMPtr<nsIPresShell> presShell = GetPresShell();
if (!presShell) {
aError.Throw(NS_ERROR_FAILURE);
return false;
}
nsString usedFont;
- RefPtr<nsStyleContext> parentContext =
- GetFontStyleContext(mCanvasElement, GetFont(),
- presShell, usedFont, aError);
- if (!parentContext) {
- aError.Throw(NS_ERROR_FAILURE);
+ if (presShell->StyleSet()->IsGecko()) {
+ RefPtr<nsStyleContext> parentContext =
+ GetFontStyleContext(mCanvasElement, GetFont(),
+ presShell, usedFont, aError);
+ if (!parentContext) {
+ aError.Throw(NS_ERROR_FAILURE);
+ return false;
+ }
+ RefPtr<nsStyleContext> sc =
+ ResolveFilterStyle(aString, presShell, parentContext, aError);
+
+ if (!sc) {
+ return false;
+ }
+ aFilterChain = sc->StyleEffects()->mFilters;
+ return true;
+ }
+
+ // For stylo
+ MOZ_ASSERT(presShell->StyleSet()->IsServo());
+
+ RefPtr<ServoComputedValues> parentStyle =
+ GetFontStyleForServo(mCanvasElement,
+ GetFont(),
+ presShell,
+ usedFont,
+ aError);
+ if (!parentStyle) {
return false;
}
- RefPtr<nsStyleContext> sc =
- ResolveFilterStyle(aString, presShell, parentContext, aError);
-
- if (!sc) {
- return false;
- }
-
- aFilterChain = sc->StyleEffects()->mFilters;
+ RefPtr<ServoComputedValues> computedValues =
+ ResolveFilterStyleForServo(aString,
+ parentStyle,
+ presShell,
+ aError);
+ if (!computedValues) {
+ return false;
+ }
+
+ const nsStyleEffects* effects = Servo_GetStyleEffects(computedValues);
+ // XXX: This mFilters is a one shot object, we probably could avoid copying.
+ aFilterChain = effects->mFilters;
return true;
}
void
CanvasRenderingContext2D::SetFilter(const nsAString& aFilter, ErrorResult& aError)
{
nsTArray<nsStyleFilter> filterChain;
if (ParseFilter(aFilter, filterChain, aError)) {