Backed out changesets 6c097bdfc079, 51f5d900cd27, 9fdf99c07466, and b322938b37ef (bug 798843) due to intermittent Windows test failures.
authorRyan VanderMeulen <ryanvm@gmail.com>
Fri, 13 Sep 2013 11:15:54 -0400
changeset 147034 c88b666cff54e59c9a99b84b0cb202fd9e7ab19a
parent 147033 ed0014600bc7473f9d5d251399ef09ba4e173624
child 147035 01003151c3d5b1071f1cd0a73cf66de844fd4f71
push id25283
push userryanvm@gmail.com
push dateFri, 13 Sep 2013 20:07:11 +0000
treeherdermozilla-central@7dbdc0fbda87 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs798843
milestone26.0a1
backs out6c097bdfc0790f22e44432b073163ea1af432fa3
51f5d900cd27bf875ccc24e89c39c71849b5bb57
9fdf99c07466a28afff4e1a1182631ee478a36d9
b322938b37ef87655606364b47897ca4b42ed022
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out changesets 6c097bdfc079, 51f5d900cd27, 9fdf99c07466, and b322938b37ef (bug 798843) due to intermittent Windows test failures.
gfx/thebes/gfxFont.cpp
gfx/thebes/gfxFont.h
gfx/thebes/gfxSVGGlyphs.cpp
gfx/thebes/gfxSVGGlyphs.h
layout/generic/nsTextFrame.cpp
layout/generic/nsTextFrame.h
layout/reftests/text-svgglyphs/resources/README
layout/reftests/text-svgglyphs/resources/glyphs-objectcolor.svg
layout/reftests/text-svgglyphs/resources/glyphs-objectopacity.svg
layout/reftests/text-svgglyphs/resources/glyphs-objectstroke.svg
layout/reftests/text-svgglyphs/resources/svg.woff
layout/style/nsCSSKeywordList.h
layout/style/nsCSSParser.cpp
layout/style/nsCSSPropList.h
layout/style/nsCSSProps.cpp
layout/style/nsCSSProps.h
layout/style/nsComputedDOMStyle.cpp
layout/style/nsRuleNode.cpp
layout/style/nsStyleAnimation.cpp
layout/style/nsStyleConsts.h
layout/style/nsStyleStruct.h
layout/style/test/Makefile.in
layout/style/test/property_database.js
layout/style/test/test_bug798843_pref.html
layout/svg/nsSVGGlyphFrame.cpp
layout/svg/nsSVGGlyphFrame.h
layout/svg/nsSVGPathGeometryFrame.cpp
layout/svg/nsSVGTextFrame2.cpp
layout/svg/nsSVGTextFrame2.h
layout/svg/nsSVGUtils.cpp
layout/svg/nsSVGUtils.h
--- a/gfx/thebes/gfxFont.cpp
+++ b/gfx/thebes/gfxFont.cpp
@@ -285,21 +285,21 @@ gfxFontEntry::GetSVGGlyphExtents(gfxCont
     svgToAppSpace.Scale(1.0f / gfxSVGGlyphs::SVG_UNITS_PER_EM,
                         1.0f / gfxSVGGlyphs::SVG_UNITS_PER_EM);
 
     return mSVGGlyphs->GetGlyphExtents(aGlyphId, svgToAppSpace, aResult);
 }
 
 bool
 gfxFontEntry::RenderSVGGlyph(gfxContext *aContext, uint32_t aGlyphId,
-                             int aDrawMode, gfxTextContextPaint *aContextPaint)
+                             int aDrawMode, gfxTextObjectPaint *aObjectPaint)
 {
     NS_ASSERTION(mSVGInitialized, "SVG data has not yet been loaded. TryGetSVGData() first.");
     return mSVGGlyphs->RenderGlyph(aContext, aGlyphId, gfxFont::DrawMode(aDrawMode),
-                                   aContextPaint);
+                                   aObjectPaint);
 }
 
 bool
 gfxFontEntry::TryGetSVGData(gfxFont* aFont)
 {
     if (!gfxPlatform::GetPlatform()->OpenTypeSVGEnabled()) {
         return false;
     }
@@ -2113,17 +2113,17 @@ struct GlyphBuffer {
     GlyphBuffer()
         : mNumGlyphs(0) { }
 
     cairo_glyph_t *AppendGlyph() {
         return &mGlyphBuffer[mNumGlyphs++];
     }
 
     void Flush(cairo_t *aCR, gfxFont::DrawMode aDrawMode, bool aReverse,
-               gfxTextContextPaint *aContextPaint,
+               gfxTextObjectPaint *aObjectPaint,
                const gfxMatrix& aGlobalMatrix, bool aFinish = false) {
         // Ensure there's enough room for a glyph to be added to the buffer
         // and we actually have glyphs to draw
         if ((!aFinish && mNumGlyphs < GLYPH_BUFFER_SIZE) || !mNumGlyphs) {
             return;
         }
 
         if (aReverse) {
@@ -2134,48 +2134,48 @@ struct GlyphBuffer {
             }
         }
 
         if (aDrawMode == gfxFont::GLYPH_PATH) {
             cairo_glyph_path(aCR, mGlyphBuffer, mNumGlyphs);
         } else {
             if ((aDrawMode & (gfxFont::GLYPH_STROKE | gfxFont::GLYPH_STROKE_UNDERNEATH)) ==
                              (gfxFont::GLYPH_STROKE | gfxFont::GLYPH_STROKE_UNDERNEATH)) {
-                FlushStroke(aCR, aContextPaint, aGlobalMatrix);
+                FlushStroke(aCR, aObjectPaint, aGlobalMatrix);
             }
             if (aDrawMode & gfxFont::GLYPH_FILL) {
                 PROFILER_LABEL("GlyphBuffer", "cairo_show_glyphs");
                 nsRefPtr<gfxPattern> pattern;
-                if (aContextPaint &&
-                    !!(pattern = aContextPaint->GetFillPattern(aGlobalMatrix))) {
+                if (aObjectPaint &&
+                    !!(pattern = aObjectPaint->GetFillPattern(aGlobalMatrix))) {
                     cairo_save(aCR);
                     cairo_set_source(aCR, pattern->CairoPattern());
                 }
 
                 cairo_show_glyphs(aCR, mGlyphBuffer, mNumGlyphs);
 
                 if (pattern) {
                     cairo_restore(aCR);
                 }
             }
             if ((aDrawMode & (gfxFont::GLYPH_STROKE | gfxFont::GLYPH_STROKE_UNDERNEATH)) ==
                               gfxFont::GLYPH_STROKE) {
-                FlushStroke(aCR, aContextPaint, aGlobalMatrix);
+                FlushStroke(aCR, aObjectPaint, aGlobalMatrix);
             }
         }
 
         mNumGlyphs = 0;
     }
 
 private:
-    void FlushStroke(cairo_t *aCR, gfxTextContextPaint *aContextPaint,
+    void FlushStroke(cairo_t *aCR, gfxTextObjectPaint *aObjectPaint,
                      const gfxMatrix& aGlobalMatrix) {
         nsRefPtr<gfxPattern> pattern;
-        if (aContextPaint &&
-            !!(pattern = aContextPaint->GetStrokePattern(aGlobalMatrix))) {
+        if (aObjectPaint &&
+            !!(pattern = aObjectPaint->GetStrokePattern(aGlobalMatrix))) {
             cairo_save(aCR);
             cairo_set_source(aCR, pattern->CairoPattern());
         }
 
         cairo_new_path(aCR);
         cairo_glyph_path(aCR, mGlyphBuffer, mNumGlyphs);
         cairo_stroke(aCR);
 
@@ -2207,17 +2207,17 @@ struct GlyphBufferAzure {
 
     GlyphBufferAzure()
         : mNumGlyphs(0) { }
 
     Glyph *AppendGlyph() {
         return &mGlyphBuffer[mNumGlyphs++];
     }
 
-    void Flush(DrawTarget *aDT, gfxTextContextPaint *aContextPaint, ScaledFont *aFont,
+    void Flush(DrawTarget *aDT, gfxTextObjectPaint *aObjectPaint, ScaledFont *aFont,
                gfxFont::DrawMode aDrawMode, bool aReverse, const GlyphRenderingOptions *aOptions,
                gfxContext *aThebesContext, const Matrix *aInvFontMatrix, const DrawOptions &aDrawOptions,
                bool aFinish = false)
     {
         // Ensure there's enough room for a glyph to be added to the buffer
         if ((!aFinish && mNumGlyphs < GLYPH_BUFFER_SIZE) || !mNumGlyphs) {
             return;
         }
@@ -2230,25 +2230,25 @@ struct GlyphBufferAzure {
         
         gfx::GlyphBuffer buf;
         buf.mGlyphs = mGlyphBuffer;
         buf.mNumGlyphs = mNumGlyphs;
 
         gfxContext::AzureState state = aThebesContext->CurrentState();
         if ((aDrawMode & (gfxFont::GLYPH_STROKE | gfxFont::GLYPH_STROKE_UNDERNEATH)) ==
                          (gfxFont::GLYPH_STROKE | gfxFont::GLYPH_STROKE_UNDERNEATH)) {
-            FlushStroke(aDT, aContextPaint, aFont, aThebesContext, buf, state);
+            FlushStroke(aDT, aObjectPaint, aFont, aThebesContext, buf, state);
         }
         if (aDrawMode & gfxFont::GLYPH_FILL) {
-            if (state.pattern || aContextPaint) {
+            if (state.pattern || aObjectPaint) {
                 Pattern *pat;
 
                 nsRefPtr<gfxPattern> fillPattern;
-                if (!aContextPaint ||
-                    !(fillPattern = aContextPaint->GetFillPattern(aThebesContext->CurrentMatrix()))) {
+                if (!aObjectPaint ||
+                    !(fillPattern = aObjectPaint->GetFillPattern(aThebesContext->CurrentMatrix()))) {
                     if (state.pattern) {
                         pat = state.pattern->GetPattern(aDT, state.patternTransformChanged ? &state.patternTransform : nullptr);
                     } else {
                         pat = nullptr;
                     }
                 } else {
                     pat = fillPattern->GetPattern(aDT);
                 }
@@ -2295,31 +2295,31 @@ struct GlyphBufferAzure {
             }
         }
         if (aDrawMode & gfxFont::GLYPH_PATH) {
             aThebesContext->EnsurePathBuilder();
             aFont->CopyGlyphsToBuilder(buf, aThebesContext->mPathBuilder);
         }
         if ((aDrawMode & (gfxFont::GLYPH_STROKE | gfxFont::GLYPH_STROKE_UNDERNEATH)) ==
                           gfxFont::GLYPH_STROKE) {
-            FlushStroke(aDT, aContextPaint, aFont, aThebesContext, buf, state);
+            FlushStroke(aDT, aObjectPaint, aFont, aThebesContext, buf, state);
         }
 
         mNumGlyphs = 0;
     }
 
 private:
-    void FlushStroke(DrawTarget *aDT, gfxTextContextPaint *aContextPaint,
+    void FlushStroke(DrawTarget *aDT, gfxTextObjectPaint *aObjectPaint,
                      ScaledFont *aFont, gfxContext *aThebesContext,
                      gfx::GlyphBuffer& aBuf, gfxContext::AzureState& aState)
     {
         RefPtr<Path> path = aFont->GetPathForGlyphs(aBuf, aDT);
-        if (aContextPaint) {
+        if (aObjectPaint) {
             nsRefPtr<gfxPattern> strokePattern =
-              aContextPaint->GetStrokePattern(aThebesContext->CurrentMatrix());
+              aObjectPaint->GetStrokePattern(aThebesContext->CurrentMatrix());
             if (strokePattern) {
                 aDT->Stroke(path, *strokePattern->GetPattern(aDT), aState.strokeOptions);
             }
         }
     }
 
 #undef GLYPH_BUFFER_SIZE
 };
@@ -2357,41 +2357,41 @@ ForcePaintingDrawMode(gfxFont::DrawMode 
     return aDrawMode == gfxFont::GLYPH_PATH ?
         gfxFont::DrawMode(gfxFont::GLYPH_FILL | gfxFont::GLYPH_STROKE) :
         aDrawMode;
 }
 
 void
 gfxFont::Draw(gfxTextRun *aTextRun, uint32_t aStart, uint32_t aEnd,
               gfxContext *aContext, DrawMode aDrawMode, gfxPoint *aPt,
-              Spacing *aSpacing, gfxTextContextPaint *aContextPaint,
+              Spacing *aSpacing, gfxTextObjectPaint *aObjectPaint,
               gfxTextRunDrawCallbacks *aCallbacks)
 {
     NS_ASSERTION(aDrawMode == gfxFont::GLYPH_PATH || !(aDrawMode & gfxFont::GLYPH_PATH),
                  "GLYPH_PATH cannot be used with GLYPH_FILL, GLYPH_STROKE or GLYPH_STROKE_UNDERNEATH");
 
     if (aStart >= aEnd)
         return;
 
     const gfxTextRun::CompressedGlyph *charGlyphs = aTextRun->GetCharacterGlyphs();
     const int32_t appUnitsPerDevUnit = aTextRun->GetAppUnitsPerDevUnit();
     const double devUnitsPerAppUnit = 1.0/double(appUnitsPerDevUnit);
     bool isRTL = aTextRun->IsRightToLeft();
     double direction = aTextRun->GetDirection();
     gfxMatrix globalMatrix = aContext->CurrentMatrix();
 
     bool haveSVGGlyphs = GetFontEntry()->TryGetSVGData(this);
-    nsAutoPtr<gfxTextContextPaint> contextPaint;
-    if (haveSVGGlyphs && !aContextPaint) {
+    nsAutoPtr<gfxTextObjectPaint> objectPaint;
+    if (haveSVGGlyphs && !aObjectPaint) {
         // If no pattern is specified for fill, use the current pattern
         NS_ASSERTION((aDrawMode & GLYPH_STROKE) == 0, "no pattern supplied for stroking text");
         nsRefPtr<gfxPattern> fillPattern = aContext->GetPattern();
-        contextPaint = new SimpleTextContextPaint(fillPattern, nullptr,
-                                                  aContext->CurrentMatrix());
-        aContextPaint = contextPaint;
+        objectPaint = new SimpleTextObjectPaint(fillPattern, nullptr,
+                                                aContext->CurrentMatrix());
+        aObjectPaint = objectPaint;
     }
 
     // synthetic-bold strikes are each offset one device pixel in run direction
     // (these values are only needed if IsSyntheticBold() is true)
     double synBoldOnePixelOffset = 0;
     int32_t strikes = 1;
     if (IsSyntheticBold()) {
         double xscale = CalcXScale(aContext);
@@ -2440,48 +2440,48 @@ gfxFont::Draw(gfxTextRun *aTextRun, uint
               if (haveSVGGlyphs) {
                   if (!paintSVGGlyphs) {
                       continue;
                   }
                   gfxPoint point(ToDeviceUnits(glyphX, devUnitsPerAppUnit),
                                  ToDeviceUnits(y, devUnitsPerAppUnit));
                   gfxFont::DrawMode mode = ForcePaintingDrawMode(aDrawMode);
                   if (RenderSVGGlyph(aContext, point, mode,
-                                     glyphData->GetSimpleGlyph(), aContextPaint,
+                                     glyphData->GetSimpleGlyph(), aObjectPaint,
                                      aCallbacks, emittedGlyphs)) {
                       continue;
                   }
               }
 
               // Perhaps we should put a scale in the cairo context instead of
               // doing this scaling here...
               // Multiplying by the reciprocal may introduce tiny error here,
               // but we assume cairo is going to round coordinates at some stage
               // and this is faster
               glyph = glyphs.AppendGlyph();
               glyph->index = glyphData->GetSimpleGlyph();
               glyph->x = ToDeviceUnits(glyphX, devUnitsPerAppUnit);
               glyph->y = ToDeviceUnits(y, devUnitsPerAppUnit);
-              glyphs.Flush(cr, aDrawMode, isRTL, aContextPaint, globalMatrix);
+              glyphs.Flush(cr, aDrawMode, isRTL, aObjectPaint, globalMatrix);
             
               // synthetic bolding by multi-striking with 1-pixel offsets
               // at least once, more if there's room (large font sizes)
               if (IsSyntheticBold()) {
                   double strikeOffset = synBoldOnePixelOffset;
                   int32_t strikeCount = strikes;
                   do {
                       cairo_glyph_t *doubleglyph;
                       doubleglyph = glyphs.AppendGlyph();
                       doubleglyph->index = glyph->index;
                       doubleglyph->x =
                           ToDeviceUnits(glyphX + strikeOffset * appUnitsPerDevUnit,
                                         devUnitsPerAppUnit);
                       doubleglyph->y = glyph->y;
                       strikeOffset += synBoldOnePixelOffset;
-                      glyphs.Flush(cr, aDrawMode, isRTL, aContextPaint, globalMatrix);
+                      glyphs.Flush(cr, aDrawMode, isRTL, aObjectPaint, globalMatrix);
                   } while (--strikeCount > 0);
               }
               emittedGlyphs = true;
           } else {
               uint32_t glyphCount = glyphData->GetGlyphCount();
               if (glyphCount > 0) {
                   const gfxTextRun::DetailedGlyph *details =
                       aTextRun->GetDetailedGlyphs(i);
@@ -2518,42 +2518,42 @@ gfxFont::Draw(gfxTextRun *aTextRun, uint
 
                           if (haveSVGGlyphs) {
                               if (!paintSVGGlyphs) {
                                   continue;
                               }
                               gfxFont::DrawMode mode = ForcePaintingDrawMode(aDrawMode);
                               if (RenderSVGGlyph(aContext, point, mode,
                                                   details->mGlyphID,
-                                                  aContextPaint, aCallbacks,
+                                                  aObjectPaint, aCallbacks,
                                                   emittedGlyphs)) {
                                   continue;
                               }
                           }
 
                           glyph = glyphs.AppendGlyph();
                           glyph->index = details->mGlyphID;
                           glyph->x = ToDeviceUnits(glyphX, devUnitsPerAppUnit);
                           glyph->y = ToDeviceUnits(y + details->mYOffset, devUnitsPerAppUnit);
-                          glyphs.Flush(cr, aDrawMode, isRTL, aContextPaint, globalMatrix);
+                          glyphs.Flush(cr, aDrawMode, isRTL, aObjectPaint, globalMatrix);
 
                           if (IsSyntheticBold()) {
                               double strikeOffset = synBoldOnePixelOffset;
                               int32_t strikeCount = strikes;
                               do {
                                   cairo_glyph_t *doubleglyph;
                                   doubleglyph = glyphs.AppendGlyph();
                                   doubleglyph->index = glyph->index;
                                   doubleglyph->x =
                                       ToDeviceUnits(glyphX + strikeOffset *
                                               appUnitsPerDevUnit,
                                               devUnitsPerAppUnit);
                                   doubleglyph->y = glyph->y;
                                   strikeOffset += synBoldOnePixelOffset;
-                                  glyphs.Flush(cr, aDrawMode, isRTL, aContextPaint, globalMatrix);
+                                  glyphs.Flush(cr, aDrawMode, isRTL, aObjectPaint, globalMatrix);
                               } while (--strikeCount > 0);
                           }
                           emittedGlyphs = true;
                       }
                   }
               }
           }
 
@@ -2572,17 +2572,17 @@ gfxFont::Draw(gfxTextRun *aTextRun, uint
            * flush, since that'll blow away the num_glyphs.
            */
           gfxFontTestStore::CurrentStore()->AddItem(GetName(),
                                                     glyphs.mGlyphBuffer,
                                                     glyphs.mNumGlyphs);
       }
 
       // draw any remaining glyphs
-      glyphs.Flush(cr, aDrawMode, isRTL, aContextPaint, globalMatrix, true);
+      glyphs.Flush(cr, aDrawMode, isRTL, aObjectPaint, globalMatrix, true);
       if (aCallbacks && emittedGlyphs) {
           aCallbacks->NotifyGlyphPathEmitted();
       }
 
     } else {
       RefPtr<ScaledFont> scaledFont = GetScaledFont(dt);
 
       if (!scaledFont) {
@@ -2655,33 +2655,33 @@ gfxFont::Draw(gfxTextRun *aTextRun, uint
               if (haveSVGGlyphs) {
                   if (!paintSVGGlyphs) {
                       continue;
                   }
                   gfxPoint point(ToDeviceUnits(glyphX, devUnitsPerAppUnit),
                                  ToDeviceUnits(y, devUnitsPerAppUnit));
                   gfxFont::DrawMode mode = ForcePaintingDrawMode(aDrawMode);
                   if (RenderSVGGlyph(aContext, point, mode,
-                                     glyphData->GetSimpleGlyph(), aContextPaint,
+                                     glyphData->GetSimpleGlyph(), aObjectPaint,
                                      aCallbacks, emittedGlyphs)) {
                       continue;
                   }
               }
 
               // Perhaps we should put a scale in the cairo context instead of
               // doing this scaling here...
               // Multiplying by the reciprocal may introduce tiny error here,
               // but we assume cairo is going to round coordinates at some stage
               // and this is faster
               glyph = glyphs.AppendGlyph();
               glyph->mIndex = glyphData->GetSimpleGlyph();
               glyph->mPosition.x = ToDeviceUnits(glyphX, devUnitsPerAppUnit);
               glyph->mPosition.y = ToDeviceUnits(y, devUnitsPerAppUnit);
               glyph->mPosition = matInv * glyph->mPosition;
-              glyphs.Flush(dt, aContextPaint, scaledFont,
+              glyphs.Flush(dt, aObjectPaint, scaledFont,
                            aDrawMode, isRTL, renderingOptions,
                            aContext, passedInvMatrix,
                            drawOptions);
 
               // synthetic bolding by multi-striking with 1-pixel offsets
               // at least once, more if there's room (large font sizes)
               if (IsSyntheticBold()) {
                   double strikeOffset = synBoldOnePixelOffset;
@@ -2691,17 +2691,17 @@ gfxFont::Draw(gfxTextRun *aTextRun, uint
                       doubleglyph = glyphs.AppendGlyph();
                       doubleglyph->mIndex = glyph->mIndex;
                       doubleglyph->mPosition.x =
                           ToDeviceUnits(glyphX + strikeOffset * appUnitsPerDevUnit,
                                         devUnitsPerAppUnit);
                       doubleglyph->mPosition.y = glyph->mPosition.y;
                       doubleglyph->mPosition = matInv * doubleglyph->mPosition;
                       strikeOffset += synBoldOnePixelOffset;
-                      glyphs.Flush(dt, aContextPaint, scaledFont,
+                      glyphs.Flush(dt, aObjectPaint, scaledFont,
                                    aDrawMode, isRTL, renderingOptions,
                                    aContext, passedInvMatrix,
                                    drawOptions);
                   } while (--strikeCount > 0);
               }
               emittedGlyphs = true;
           } else {
               uint32_t glyphCount = glyphData->GetGlyphCount();
@@ -2741,28 +2741,28 @@ gfxFont::Draw(gfxTextRun *aTextRun, uint
 
                           if (haveSVGGlyphs) {
                               if (!paintSVGGlyphs) {
                                   continue;
                               }
                               gfxFont::DrawMode mode = ForcePaintingDrawMode(aDrawMode);
                               if (RenderSVGGlyph(aContext, point, mode,
                                                  details->mGlyphID,
-                                                 aContextPaint, aCallbacks,
+                                                 aObjectPaint, aCallbacks,
                                                  emittedGlyphs)) {
                                   continue;
                               }
                           }
 
                           glyph = glyphs.AppendGlyph();
                           glyph->mIndex = details->mGlyphID;
                           glyph->mPosition.x = ToDeviceUnits(glyphX, devUnitsPerAppUnit);
                           glyph->mPosition.y = ToDeviceUnits(y + details->mYOffset, devUnitsPerAppUnit);
                           glyph->mPosition = matInv * glyph->mPosition;
-                          glyphs.Flush(dt, aContextPaint, scaledFont, aDrawMode,
+                          glyphs.Flush(dt, aObjectPaint, scaledFont, aDrawMode,
                                        isRTL, renderingOptions, aContext, passedInvMatrix,
                                        drawOptions);
 
                           if (IsSyntheticBold()) {
                               double strikeOffset = synBoldOnePixelOffset;
                               int32_t strikeCount = strikes;
                               do {
                                   Glyph *doubleglyph;
@@ -2770,17 +2770,17 @@ gfxFont::Draw(gfxTextRun *aTextRun, uint
                                   doubleglyph->mIndex = glyph->mIndex;
                                   doubleglyph->mPosition.x =
                                       ToDeviceUnits(glyphX + strikeOffset *
                                                     appUnitsPerDevUnit,
                                                     devUnitsPerAppUnit);
                                   doubleglyph->mPosition.y = glyph->mPosition.y;
                                   strikeOffset += synBoldOnePixelOffset;
                                   doubleglyph->mPosition = matInv * doubleglyph->mPosition;
-                                  glyphs.Flush(dt, aContextPaint, scaledFont,
+                                  glyphs.Flush(dt, aObjectPaint, scaledFont,
                                                aDrawMode, isRTL, renderingOptions,
                                                aContext, passedInvMatrix, drawOptions);
                               } while (--strikeCount > 0);
                           }
                           emittedGlyphs = true;
                       }
                   }
               }
@@ -2790,66 +2790,66 @@ gfxFont::Draw(gfxTextRun *aTextRun, uint
               double space = aSpacing[i - aStart].mAfter;
               if (i + 1 < aEnd) {
                   space += aSpacing[i + 1 - aStart].mBefore;
               }
               x += direction*space;
           }
       }
 
-      glyphs.Flush(dt, aContextPaint, scaledFont, aDrawMode, isRTL,
+      glyphs.Flush(dt, aObjectPaint, scaledFont, aDrawMode, isRTL,
                    renderingOptions, aContext, passedInvMatrix,
                    drawOptions, true);
       if (aCallbacks && emittedGlyphs) {
           aCallbacks->NotifyGlyphPathEmitted();
       }
 
       dt->SetTransform(oldMat);
 
       dt->SetPermitSubpixelAA(oldSubpixelAA);
     }
 
     *aPt = gfxPoint(x, y);
 }
 
 bool
 gfxFont::RenderSVGGlyph(gfxContext *aContext, gfxPoint aPoint, DrawMode aDrawMode,
-                        uint32_t aGlyphId, gfxTextContextPaint *aContextPaint)
+                        uint32_t aGlyphId, gfxTextObjectPaint *aObjectPaint)
 {
     if (!GetFontEntry()->HasSVGGlyph(aGlyphId)) {
         return false;
     }
 
     const gfxFloat devUnitsPerSVGUnit = GetStyle()->size / gfxSVGGlyphs::SVG_UNITS_PER_EM;
     gfxContextMatrixAutoSaveRestore matrixRestore(aContext);
 
     aContext->Translate(gfxPoint(aPoint.x, aPoint.y));
     aContext->Scale(devUnitsPerSVGUnit, devUnitsPerSVGUnit);
 
-    aContextPaint->InitStrokeGeometry(aContext, devUnitsPerSVGUnit);
+    aObjectPaint->InitStrokeGeometry(aContext, devUnitsPerSVGUnit);
 
     return GetFontEntry()->RenderSVGGlyph(aContext, aGlyphId, aDrawMode,
-                                          aContextPaint);
+                                          aObjectPaint);
 }
 
 bool
 gfxFont::RenderSVGGlyph(gfxContext *aContext, gfxPoint aPoint, DrawMode aDrawMode,
-                        uint32_t aGlyphId, gfxTextContextPaint *aContextPaint,
+                        uint32_t aGlyphId, gfxTextObjectPaint *aObjectPaint,
                         gfxTextRunDrawCallbacks *aCallbacks,
                         bool& aEmittedGlyphs)
 {
     if (aCallbacks) {
         if (aEmittedGlyphs) {
             aCallbacks->NotifyGlyphPathEmitted();
             aEmittedGlyphs = false;
         }
         aCallbacks->NotifyBeforeSVGGlyphPainted();
     }
     bool rendered = RenderSVGGlyph(aContext, aPoint, aDrawMode, aGlyphId,
-                                   aContextPaint);
+                                   aObjectPaint);
     if (aCallbacks) {
         aCallbacks->NotifyAfterSVGGlyphPainted();
     }
     return rendered;
 }
 
 static void
 UnionRange(gfxFloat aX, gfxFloat* aDestMin, gfxFloat* aDestMax)
@@ -5733,27 +5733,27 @@ gfxTextRun::ShrinkToLigatureBoundaries(u
             --(*aEnd);
         }
     }
 }
 
 void
 gfxTextRun::DrawGlyphs(gfxFont *aFont, gfxContext *aContext,
                        gfxFont::DrawMode aDrawMode, gfxPoint *aPt,
-                       gfxTextContextPaint *aContextPaint,
+                       gfxTextObjectPaint *aObjectPaint,
                        uint32_t aStart, uint32_t aEnd,
                        PropertyProvider *aProvider,
                        uint32_t aSpacingStart, uint32_t aSpacingEnd,
                        gfxTextRunDrawCallbacks *aCallbacks)
 {
     nsAutoTArray<PropertyProvider::Spacing,200> spacingBuffer;
     bool haveSpacing = GetAdjustedSpacingArray(aStart, aEnd, aProvider,
         aSpacingStart, aSpacingEnd, &spacingBuffer);
     aFont->Draw(this, aStart, aEnd, aContext, aDrawMode, aPt,
-                haveSpacing ? spacingBuffer.Elements() : nullptr, aContextPaint,
+                haveSpacing ? spacingBuffer.Elements() : nullptr, aObjectPaint,
                 aCallbacks);
 }
 
 static void
 ClipPartialLigature(gfxTextRun *aTextRun, gfxFloat *aLeft, gfxFloat *aRight,
                     gfxFloat aXOrigin, gfxTextRun::LigatureData *aLigature)
 {
     if (aLigature->mClipBeforePart) {
@@ -5884,17 +5884,17 @@ struct BufferAlphaColor {
     gfxContext *mContext;
     gfxFloat mAlpha;
 };
 
 void
 gfxTextRun::Draw(gfxContext *aContext, gfxPoint aPt, gfxFont::DrawMode aDrawMode,
                  uint32_t aStart, uint32_t aLength,
                  PropertyProvider *aProvider, gfxFloat *aAdvanceWidth,
-                 gfxTextContextPaint *aContextPaint,
+                 gfxTextObjectPaint *aObjectPaint,
                  gfxTextRunDrawCallbacks *aCallbacks)
 {
     NS_ASSERTION(aStart + aLength <= GetLength(), "Substring out of range");
     NS_ASSERTION(aDrawMode == gfxFont::GLYPH_PATH || !(aDrawMode & gfxFont::GLYPH_PATH),
                  "GLYPH_PATH cannot be used with GLYPH_FILL, GLYPH_STROKE or GLYPH_STROKE_UNDERNEATH");
     NS_ASSERTION(aDrawMode == gfxFont::GLYPH_PATH || !aCallbacks, "callback must not be specified unless using GLYPH_PATH");
 
     bool skipDrawing = mSkipDrawing;
@@ -5950,17 +5950,17 @@ gfxTextRun::Draw(gfxContext *aContext, g
         bool drawPartial = aDrawMode == gfxFont::GLYPH_FILL ||
                            (aDrawMode == gfxFont::GLYPH_PATH && aCallbacks);
 
         if (drawPartial) {
             DrawPartialLigature(font, aContext, start, ligatureRunStart, &pt,
                                 aProvider, aCallbacks);
         }
 
-        DrawGlyphs(font, aContext, aDrawMode, &pt, aContextPaint, ligatureRunStart,
+        DrawGlyphs(font, aContext, aDrawMode, &pt, aObjectPaint, ligatureRunStart,
                    ligatureRunEnd, aProvider, ligatureRunStart, ligatureRunEnd,
                    aCallbacks);
 
         if (drawPartial) {
             DrawPartialLigature(font, aContext, ligatureRunEnd, end, &pt,
                                 aProvider, aCallbacks);
         }
     }
--- a/gfx/thebes/gfxFont.h
+++ b/gfx/thebes/gfxFont.h
@@ -44,17 +44,17 @@ class gfxTextRun;
 class gfxFont;
 class gfxFontFamily;
 class gfxFontGroup;
 class gfxUserFontSet;
 class gfxUserFontData;
 class gfxShapedText;
 class gfxShapedWord;
 class gfxSVGGlyphs;
-class gfxTextContextPaint;
+class gfxTextObjectPaint;
 
 class nsILanguageAtomService;
 
 #define FONT_MAX_SIZE                  2000.0
 
 #define NO_FONT_LANGUAGE_OVERRIDE      0
 
 struct FontListSizes;
@@ -296,17 +296,17 @@ public:
     // can be safely dereferenced.
     virtual nsresult ReadCMAP();
 
     bool TryGetSVGData(gfxFont* aFont);
     bool HasSVGGlyph(uint32_t aGlyphId);
     bool GetSVGGlyphExtents(gfxContext *aContext, uint32_t aGlyphId,
                             gfxRect *aResult);
     bool RenderSVGGlyph(gfxContext *aContext, uint32_t aGlyphId, int aDrawMode,
-                        gfxTextContextPaint *aContextPaint);
+                        gfxTextObjectPaint *aObjectPaint);
     // Call this when glyph geometry or rendering has changed
     // (e.g. animated SVG glyphs)
     void NotifyGlyphsChanged();
 
     virtual bool MatchesGenericFamily(const nsACString& aGeneric) const {
         return true;
     }
     virtual bool SupportsLangGroup(nsIAtom *aLangGroup) const {
@@ -1507,30 +1507,30 @@ public:
      * this should be updated to the other end of the baseline. In application
      * units, really!
      * @param aSpacing spacing to insert before and after characters (for RTL
      * glyphs, before-spacing is inserted to the right of characters). There
      * are aEnd - aStart elements in this array, unless it's null to indicate
      * that there is no spacing.
      * @param aDrawMode specifies whether the fill or stroke of the glyph should be
      * drawn, or if it should be drawn into the current path
-     * @param aContextPaint information about how to construct the fill and
+     * @param aObjectPaint information about how to construct the fill and
      * stroke pattern. Can be nullptr if we are not stroking the text, which
      * indicates that the current source from aContext should be used for filling
      * 
      * Callers guarantee:
      * -- aStart and aEnd are aligned to cluster and ligature boundaries
      * -- all glyphs use this font
      * 
      * The default implementation builds a cairo glyph array and
      * calls cairo_show_glyphs or cairo_glyph_path.
      */
     virtual void Draw(gfxTextRun *aTextRun, uint32_t aStart, uint32_t aEnd,
                       gfxContext *aContext, DrawMode aDrawMode, gfxPoint *aBaselineOrigin,
-                      Spacing *aSpacing, gfxTextContextPaint *aContextPaint,
+                      Spacing *aSpacing, gfxTextObjectPaint *aObjectPaint,
                       gfxTextRunDrawCallbacks *aCallbacks);
 
     /**
      * Measure a run of characters. See gfxTextRun::Metrics.
      * @param aTight if false, then return the union of the glyph extents
      * with the font-box for the characters (the rectangle with x=0,width=
      * the advance width for the character run,y=-(font ascent), and height=
      * font ascent + font descent). Otherwise, we must return as tight as possible
@@ -1957,19 +1957,19 @@ protected:
     // InitMetricsFromSfntTables or equivalent platform code
     void CalculateDerivedMetrics(Metrics& aMetrics);
 
     // some fonts have bad metrics, this method sanitize them.
     // if this font has bad underline offset, aIsBadUnderlineFont should be true.
     void SanitizeMetrics(gfxFont::Metrics *aMetrics, bool aIsBadUnderlineFont);
 
     bool RenderSVGGlyph(gfxContext *aContext, gfxPoint aPoint, DrawMode aDrawMode,
-                        uint32_t aGlyphId, gfxTextContextPaint *aContextPaint);
+                        uint32_t aGlyphId, gfxTextObjectPaint *aObjectPaint);
     bool RenderSVGGlyph(gfxContext *aContext, gfxPoint aPoint, DrawMode aDrawMode,
-                        uint32_t aGlyphId, gfxTextContextPaint *aContextPaint,
+                        uint32_t aGlyphId, gfxTextObjectPaint *aObjectPaint,
                         gfxTextRunDrawCallbacks *aCallbacks,
                         bool& aEmittedGlyphs);
 
     // Bug 674909. When synthetic bolding text by drawing twice, need to
     // render using a pixel offset in device pixels, otherwise text
     // doesn't appear bolded, it appears as if a bad text shadow exists
     // when a non-identity transform exists.  Use an offset factor so that
     // the second draw occurs at a constant offset in device pixels.
@@ -2813,17 +2813,17 @@ public:
      * 
      * Glyphs should be drawn in logical content order, which can be significant
      * if they overlap (perhaps due to negative spacing).
      */
     void Draw(gfxContext *aContext, gfxPoint aPt,
               gfxFont::DrawMode aDrawMode,
               uint32_t aStart, uint32_t aLength,
               PropertyProvider *aProvider,
-              gfxFloat *aAdvanceWidth, gfxTextContextPaint *aContextPaint,
+              gfxFloat *aAdvanceWidth, gfxTextObjectPaint *aObjectPaint,
               gfxTextRunDrawCallbacks *aCallbacks = nullptr);
 
     /**
      * Computes the ReflowMetrics for a substring.
      * Uses GetSpacing from aBreakProvider.
      * @param aBoundingBoxType which kind of bounding box (loose/tight)
      */
     Metrics MeasureText(uint32_t aStart, uint32_t aLength,
@@ -3240,17 +3240,17 @@ private:
                                  gfxContext *aRefContext,
                                  PropertyProvider *aProvider,
                                  uint32_t aSpacingStart, uint32_t aSpacingEnd,
                                  Metrics *aMetrics);
 
     // **** drawing helper ****
     void DrawGlyphs(gfxFont *aFont, gfxContext *aContext,
                     gfxFont::DrawMode aDrawMode, gfxPoint *aPt,
-                    gfxTextContextPaint *aContextPaint, uint32_t aStart,
+                    gfxTextObjectPaint *aObjectPaint, uint32_t aStart,
                     uint32_t aEnd, PropertyProvider *aProvider,
                     uint32_t aSpacingStart, uint32_t aSpacingEnd,
                     gfxTextRunDrawCallbacks *aCallbacks);
 
     // XXX this should be changed to a GlyphRun plus a maybe-null GlyphRun*,
     // for smaller size especially in the super-common one-glyphrun case
     nsAutoTArray<GlyphRun,1>        mGlyphRuns;
 
--- a/gfx/thebes/gfxSVGGlyphs.cpp
+++ b/gfx/thebes/gfxSVGGlyphs.cpp
@@ -37,21 +37,21 @@
 
 #define SVG_CONTENT_TYPE NS_LITERAL_CSTRING("image/svg+xml")
 #define UTF8_CHARSET NS_LITERAL_CSTRING("utf-8")
 
 using namespace mozilla;
 
 typedef mozilla::dom::Element Element;
 
-mozilla::gfx::UserDataKey gfxTextContextPaint::sUserDataKey;
+mozilla::gfx::UserDataKey gfxTextObjectPaint::sUserDataKey;
 
 const float gfxSVGGlyphs::SVG_UNITS_PER_EM = 1000.0f;
 
-const gfxRGBA SimpleTextContextPaint::sZero = gfxRGBA(0.0f, 0.0f, 0.0f, 0.0f);
+const gfxRGBA SimpleTextObjectPaint::sZero = gfxRGBA(0.0f, 0.0f, 0.0f, 0.0f);
 
 gfxSVGGlyphs::gfxSVGGlyphs(hb_blob_t *aSVGTable, gfxFontEntry *aFontEntry)
     : mSVGData(aSVGTable)
     , mFontEntry(aFontEntry)
 {
     unsigned int length;
     const char* svgData = hb_blob_get_data(mSVGData, &length);
     mHeader = reinterpret_cast<const Header*>(svgData);
@@ -216,28 +216,28 @@ gfxSVGGlyphsDocument::FindGlyphElements(
  * If no such glyph exists, or in the case of an error return false
  * @param aContext The thebes aContext to draw to
  * @param aGlyphId The glyph id
  * @param aDrawMode Whether to fill or stroke or both (see |gfxFont::DrawMode|)
  * @return true iff rendering succeeded
  */
 bool
 gfxSVGGlyphs::RenderGlyph(gfxContext *aContext, uint32_t aGlyphId,
-                          DrawMode aDrawMode, gfxTextContextPaint *aContextPaint)
+                          DrawMode aDrawMode, gfxTextObjectPaint *aObjectPaint)
 {
     if (aDrawMode == gfxFont::GLYPH_PATH) {
         return false;
     }
 
     gfxContextAutoSaveRestore aContextRestorer(aContext);
 
     Element *glyph = mGlyphIdMap.Get(aGlyphId);
     NS_ASSERTION(glyph, "No glyph element. Should check with HasSVGGlyph() first!");
 
-    return nsSVGUtils::PaintSVGGlyph(glyph, aContext, aDrawMode, aContextPaint);
+    return nsSVGUtils::PaintSVGGlyph(glyph, aContext, aDrawMode, aObjectPaint);
 }
 
 bool
 gfxSVGGlyphs::GetGlyphExtents(uint32_t aGlyphId, const gfxMatrix& aSVGToAppSpace,
                               gfxRect *aResult)
 {
     Element *glyph = mGlyphIdMap.Get(aGlyphId);
     NS_ASSERTION(glyph, "No glyph element. Should check with HasSVGGlyph() first!");
@@ -441,18 +441,18 @@ gfxSVGGlyphsDocument::InsertGlyphId(Elem
       }
       id = id * 10 + (ch - '0');
     }
 
     mGlyphIdMap.Put(id, aGlyphElement);
 }
 
 void
-gfxTextContextPaint::InitStrokeGeometry(gfxContext *aContext,
-                                        float devUnitsPerSVGUnit)
+gfxTextObjectPaint::InitStrokeGeometry(gfxContext *aContext,
+                                       float devUnitsPerSVGUnit)
 {
     mStrokeWidth = aContext->CurrentLineWidth() / devUnitsPerSVGUnit;
     aContext->CurrentDash(mDashes, &mDashOffset);
     for (uint32_t i = 0; i < mDashes.Length(); i++) {
         mDashes[i] /= devUnitsPerSVGUnit;
     }
     mDashOffset /= devUnitsPerSVGUnit;
 }
--- a/gfx/thebes/gfxSVGGlyphs.h
+++ b/gfx/thebes/gfxSVGGlyphs.h
@@ -109,21 +109,21 @@ public:
     /**
      * Return true iff there is an SVG glyph for |aGlyphId|
      */
     bool HasSVGGlyph(uint32_t aGlyphId);
 
     /**
      * Render the SVG glyph for |aGlyphId|
      * @param aDrawMode Whether to fill or stroke or both; see gfxFont::DrawMode
-     * @param aContextPaint Information on text context paints.
-     *   See |gfxTextContextPaint|.
+     * @param aObjectPaint Information on outer text object paints.
+     *   See |gfxTextObjectPaint|.
      */
     bool RenderGlyph(gfxContext *aContext, uint32_t aGlyphId, DrawMode aDrawMode,
-                     gfxTextContextPaint *aContextPaint);
+                     gfxTextObjectPaint *aObjectPaint);
 
     /**
      * Get the extents for the SVG glyph associated with |aGlyphId|
      * @param aSVGToAppSpace The matrix mapping the SVG glyph space to the
      *   target context space
      */
     bool GetGlyphExtents(uint32_t aGlyphId, const gfxMatrix& aSVGToAppSpace,
                          gfxRect *aResult);
@@ -155,27 +155,28 @@ private:
       IndexEntry mEntries[1]; /* actual length = mNumEntries */
     } *mDocIndex;
 
     static int CompareIndexEntries(const void *_a, const void *_b);
 };
 
 /**
  * Used for trickling down paint information through to SVG glyphs.
+ * Will be extended in later patch.
  */
-class gfxTextContextPaint
+class gfxTextObjectPaint
 {
 protected:
-    gfxTextContextPaint() { }
+    gfxTextObjectPaint() { }
 
 public:
     static mozilla::gfx::UserDataKey sUserDataKey;
 
     /*
-     * Get text context pattern with the specified opacity value.
+     * Get outer text object pattern with the specified opacity value.
      * This lets us inherit paints and paint opacities (i.e. fill/stroke and
      * fill-opacity/stroke-opacity) separately.
      */
     virtual already_AddRefed<gfxPattern> GetFillPattern(float aOpacity,
                                                         const gfxMatrix& aCTM) = 0;
     virtual already_AddRefed<gfxPattern> GetStrokePattern(float aOpacity,
                                                           const gfxMatrix& aCTM) = 0;
 
@@ -200,46 +201,46 @@ public:
     already_AddRefed<gfxPattern> GetFillPattern(const gfxMatrix& aCTM) {
         return GetFillPattern(GetFillOpacity(), aCTM);
     }
 
     already_AddRefed<gfxPattern> GetStrokePattern(const gfxMatrix& aCTM) {
         return GetStrokePattern(GetStrokeOpacity(), aCTM);
     }
 
-    virtual ~gfxTextContextPaint() { }
+    virtual ~gfxTextObjectPaint() { }
 
 private:
     FallibleTArray<gfxFloat> mDashes;
     gfxFloat mDashOffset;
     gfxFloat mStrokeWidth;
 };
 
 /**
- * For passing in patterns where the text context has no separate pattern
+ * For passing in patterns where the outer text object has no separate pattern
  * opacity value.
  */
-class SimpleTextContextPaint : public gfxTextContextPaint
+class SimpleTextObjectPaint : public gfxTextObjectPaint
 {
 private:
     static const gfxRGBA sZero;
 
 public:
     static gfxMatrix SetupDeviceToPatternMatrix(gfxPattern *aPattern,
                                                 const gfxMatrix& aCTM)
     {
         if (!aPattern) {
             return gfxMatrix();
         }
         gfxMatrix deviceToUser = aCTM;
         deviceToUser.Invert();
         return deviceToUser * aPattern->GetMatrix();
     }
 
-    SimpleTextContextPaint(gfxPattern *aFillPattern, gfxPattern *aStrokePattern,
+    SimpleTextObjectPaint(gfxPattern *aFillPattern, gfxPattern *aStrokePattern,
                           const gfxMatrix& aCTM) :
         mFillPattern(aFillPattern ? aFillPattern : new gfxPattern(sZero)),
         mStrokePattern(aStrokePattern ? aStrokePattern : new gfxPattern(sZero))
     {
         mFillMatrix = SetupDeviceToPatternMatrix(aFillPattern, aCTM);
         mStrokeMatrix = SetupDeviceToPatternMatrix(aStrokePattern, aCTM);
     }
 
--- a/layout/generic/nsTextFrame.cpp
+++ b/layout/generic/nsTextFrame.cpp
@@ -5582,17 +5582,17 @@ nsTextFrame::PaintTextSelectionDecoratio
 bool
 nsTextFrame::PaintTextWithSelection(gfxContext* aCtx,
     const gfxPoint& aFramePt,
     const gfxPoint& aTextBaselinePt, const gfxRect& aDirtyRect,
     PropertyProvider& aProvider,
     uint32_t aContentOffset, uint32_t aContentLength,
     nsTextPaintStyle& aTextPaintStyle,
     const nsCharClipDisplayItem::ClipEdges& aClipEdges,
-    gfxTextContextPaint* aContextPaint,
+    gfxTextObjectPaint* aObjectPaint,
     nsTextFrame::DrawPathCallbacks* aCallbacks)
 {
   NS_ASSERTION(GetContent()->IsSelectionDescendant(), "wrong paint path");
 
   SelectionDetails* details = GetSelectionDetails();
   if (!details) {
     return false;
   }
@@ -5796,17 +5796,17 @@ nsTextFrame::MeasureCharClippedText(Prop
   *aMaxLength = maxLength;
   return maxLength != 0;
 }
 
 void
 nsTextFrame::PaintText(nsRenderingContext* aRenderingContext, nsPoint aPt,
                        const nsRect& aDirtyRect,
                        const nsCharClipDisplayItem& aItem,
-                       gfxTextContextPaint* aContextPaint,
+                       gfxTextObjectPaint* aObjectPaint,
                        nsTextFrame::DrawPathCallbacks* aCallbacks)
 {
   // Don't pass in aRenderingContext here, because we need a *reference*
   // context and aRenderingContext might have some transform in it
   // XXX get the block and line passed to us somehow! This is slow!
   gfxSkipCharsIterator iter = EnsureTextRun(nsTextFrame::eInflated);
   if (!mTextRun)
     return;
@@ -5839,17 +5839,17 @@ nsTextFrame::PaintText(nsRenderingContex
   // Fork off to the (slower) paint-with-selection path if necessary.
   if (IsSelected()) {
     gfxSkipCharsIterator tmp(provider.GetStart());
     int32_t contentOffset = tmp.ConvertSkippedToOriginal(startOffset);
     int32_t contentLength =
       tmp.ConvertSkippedToOriginal(startOffset + maxLength) - contentOffset;
     if (PaintTextWithSelection(ctx, framePt, textBaselinePt, dirtyRect,
                                provider, contentOffset, contentLength,
-                               textPaintStyle, clipEdges, aContextPaint,
+                               textPaintStyle, clipEdges, aObjectPaint,
                                aCallbacks)) {
       return;
     }
   }
 
   nscolor foregroundColor = textPaintStyle.GetTextColor();
   if (!aCallbacks) {
     const nsStyleText* textStyle = StyleText();
@@ -5868,71 +5868,71 @@ nsTextFrame::PaintText(nsRenderingContex
       }
     }
   }
 
   gfxFloat advanceWidth;
   DrawText(ctx, dirtyRect, framePt, textBaselinePt, startOffset, maxLength, provider,
            textPaintStyle, foregroundColor, clipEdges, advanceWidth,
            (GetStateBits() & TEXT_HYPHEN_BREAK) != 0,
-           nullptr, aContextPaint, aCallbacks);
+           nullptr, aObjectPaint, aCallbacks);
 }
 
 static void
 DrawTextRun(gfxTextRun* aTextRun,
             gfxContext* const aCtx,
             const gfxPoint& aTextBaselinePt,
             uint32_t aOffset, uint32_t aLength,
             PropertyProvider* aProvider,
             nscolor aTextColor,
             gfxFloat* aAdvanceWidth,
-            gfxTextContextPaint* aContextPaint,
+            gfxTextObjectPaint* aObjectPaint,
             nsTextFrame::DrawPathCallbacks* aCallbacks)
 {
   gfxFont::DrawMode drawMode = aCallbacks ? gfxFont::GLYPH_PATH :
                                             gfxFont::GLYPH_FILL;
   if (aCallbacks) {
     aCallbacks->NotifyBeforeText(aTextColor);
     aTextRun->Draw(aCtx, aTextBaselinePt, drawMode, aOffset, aLength,
-                   aProvider, aAdvanceWidth, aContextPaint, aCallbacks);
+                   aProvider, aAdvanceWidth, aObjectPaint, aCallbacks);
     aCallbacks->NotifyAfterText();
   } else {
     aCtx->SetColor(gfxRGBA(aTextColor));
     aTextRun->Draw(aCtx, aTextBaselinePt, drawMode, aOffset, aLength,
-                   aProvider, aAdvanceWidth, aContextPaint);
+                   aProvider, aAdvanceWidth, aObjectPaint);
   }
 }
 
 void
 nsTextFrame::DrawTextRun(gfxContext* const aCtx,
                          const gfxPoint& aTextBaselinePt,
                          uint32_t aOffset, uint32_t aLength,
                          PropertyProvider& aProvider,
                          nscolor aTextColor,
                          gfxFloat& aAdvanceWidth,
                          bool aDrawSoftHyphen,
-                         gfxTextContextPaint* aContextPaint,
+                         gfxTextObjectPaint* aObjectPaint,
                          nsTextFrame::DrawPathCallbacks* aCallbacks)
 {
   ::DrawTextRun(mTextRun, aCtx, aTextBaselinePt, aOffset, aLength, &aProvider,
-                aTextColor, &aAdvanceWidth, aContextPaint, aCallbacks);
+                aTextColor, &aAdvanceWidth, aObjectPaint, aCallbacks);
 
   if (aDrawSoftHyphen) {
     // Don't use ctx as the context, because we need a reference context here,
     // ctx may be transformed.
     nsAutoPtr<gfxTextRun> hyphenTextRun(GetHyphenTextRun(mTextRun, nullptr, this));
     if (hyphenTextRun.get()) {
       // For right-to-left text runs, the soft-hyphen is positioned at the left
       // of the text, minus its own width
       gfxFloat hyphenBaselineX = aTextBaselinePt.x + mTextRun->GetDirection() * aAdvanceWidth -
         (mTextRun->IsRightToLeft() ? hyphenTextRun->GetAdvanceWidth(0, hyphenTextRun->GetLength(), nullptr) : 0);
       ::DrawTextRun(hyphenTextRun.get(), aCtx,
                     gfxPoint(hyphenBaselineX, aTextBaselinePt.y),
                     0, hyphenTextRun->GetLength(),
-                    nullptr, aTextColor, nullptr, aContextPaint, aCallbacks);
+                    nullptr, aTextColor, nullptr, aObjectPaint, aCallbacks);
     }
   }
 }
 
 void
 nsTextFrame::DrawTextRunAndDecorations(
     gfxContext* const aCtx, const gfxRect& aDirtyRect,
     const gfxPoint& aFramePt, const gfxPoint& aTextBaselinePt,
@@ -5940,17 +5940,17 @@ nsTextFrame::DrawTextRunAndDecorations(
     PropertyProvider& aProvider,
     const nsTextPaintStyle& aTextStyle,
     nscolor aTextColor,
     const nsCharClipDisplayItem::ClipEdges& aClipEdges,
     gfxFloat& aAdvanceWidth,
     bool aDrawSoftHyphen,
     const TextDecorations& aDecorations,
     const nscolor* const aDecorationOverrideColor,
-    gfxTextContextPaint* aContextPaint,
+    gfxTextObjectPaint* aObjectPaint,
     nsTextFrame::DrawPathCallbacks* aCallbacks)
 {
     const gfxFloat app = aTextStyle.PresContext()->AppUnitsPerDevPixel();
 
     // XXX aFramePt is in AppUnits, shouldn't it be nsFloatPoint?
     nscoord x = NSToCoordRound(aFramePt.x);
     nscoord width = GetRect().width;
     aClipEdges.Intersect(&x, &width);
@@ -6005,17 +6005,17 @@ nsTextFrame::DrawTextRunAndDecorations(
         aDecorationOverrideColor, decPt, 0.0, decSize, ascent,
         metrics.maxAscent, NS_STYLE_TEXT_DECORATION_LINE_OVERLINE, dec.mStyle,
         eNormalDecoration, aCallbacks);
     }
 
     // CSS 2.1 mandates that text be painted after over/underlines, and *then*
     // line-throughs
     DrawTextRun(aCtx, aTextBaselinePt, aOffset, aLength, aProvider, aTextColor,
-                aAdvanceWidth, aDrawSoftHyphen, aContextPaint, aCallbacks);
+                aAdvanceWidth, aDrawSoftHyphen, aObjectPaint, aCallbacks);
 
     // Line-throughs
     for (uint32_t i = aDecorations.mStrikes.Length(); i-- > 0; ) {
       const LineDecoration& dec = aDecorations.mStrikes[i];
       if (dec.mStyle == NS_STYLE_TEXT_DECORATION_STYLE_NONE) {
         continue;
       }
 
@@ -6041,35 +6041,35 @@ nsTextFrame::DrawText(
     uint32_t aOffset, uint32_t aLength,
     PropertyProvider& aProvider,
     const nsTextPaintStyle& aTextStyle,
     nscolor aTextColor,
     const nsCharClipDisplayItem::ClipEdges& aClipEdges,
     gfxFloat& aAdvanceWidth,
     bool aDrawSoftHyphen,
     const nscolor* const aDecorationOverrideColor,
-    gfxTextContextPaint* aContextPaint,
+    gfxTextObjectPaint* aObjectPaint,
     nsTextFrame::DrawPathCallbacks* aCallbacks)
 {
   TextDecorations decorations;
   GetTextDecorations(aTextStyle.PresContext(),
                      aCallbacks ? eUnresolvedColors : eResolvedColors,
                      decorations);
 
   // Hide text decorations if we're currently hiding @font-face fallback text
   const bool drawDecorations = !aProvider.GetFontGroup()->ShouldSkipDrawing() &&
                                decorations.HasDecorationLines();
   if (drawDecorations) {
     DrawTextRunAndDecorations(aCtx, aDirtyRect, aFramePt, aTextBaselinePt, aOffset, aLength,
                               aProvider, aTextStyle, aTextColor, aClipEdges, aAdvanceWidth,
                               aDrawSoftHyphen, decorations,
-                              aDecorationOverrideColor, aContextPaint, aCallbacks);
+                              aDecorationOverrideColor, aObjectPaint, aCallbacks);
   } else {
     DrawTextRun(aCtx, aTextBaselinePt, aOffset, aLength, aProvider,
-                aTextColor, aAdvanceWidth, aDrawSoftHyphen, aContextPaint, aCallbacks);
+                aTextColor, aAdvanceWidth, aDrawSoftHyphen, aObjectPaint, aCallbacks);
   }
 }
 
 int16_t
 nsTextFrame::GetSelectionStatus(int16_t* aSelectionFlags)
 {
   // get the selection controller
   nsCOMPtr<nsISelectionController> selectionController;
--- a/layout/generic/nsTextFrame.h
+++ b/layout/generic/nsTextFrame.h
@@ -369,31 +369,31 @@ public:
   };
 
   // Primary frame paint method called from nsDisplayText.  Can also be used
   // to generate paths rather than paint the frame's text by passing a callback
   // object.  The private DrawText() is what applies the text to a graphics
   // context.
   void PaintText(nsRenderingContext* aRenderingContext, nsPoint aPt,
                  const nsRect& aDirtyRect, const nsCharClipDisplayItem& aItem,
-                 gfxTextContextPaint* aContextPaint = nullptr,
+                 gfxTextObjectPaint* aObjectPaint = nullptr,
                  DrawPathCallbacks* aCallbacks = nullptr);
   // helper: paint text frame when we're impacted by at least one selection.
   // Return false if the text was not painted and we should continue with
   // the fast path.
   bool PaintTextWithSelection(gfxContext* aCtx,
                               const gfxPoint& aFramePt,
                               const gfxPoint& aTextBaselinePt,
                               const gfxRect& aDirtyRect,
                               PropertyProvider& aProvider,
                               uint32_t aContentOffset,
                               uint32_t aContentLength,
                               nsTextPaintStyle& aTextPaintStyle,
                               const nsCharClipDisplayItem::ClipEdges& aClipEdges,
-                              gfxTextContextPaint* aContextPaint,
+                              gfxTextObjectPaint* aObjectPaint,
                               DrawPathCallbacks* aCallbacks);
   // helper: paint text with foreground and background colors determined
   // by selection(s). Also computes a mask of all selection types applying to
   // our text, returned in aAllTypes.
   // Return false if the text was not painted and we should continue with
   // the fast path.
   bool PaintTextWithSelectionColors(gfxContext* aCtx,
                                     const gfxPoint& aFramePt,
@@ -645,50 +645,50 @@ protected:
   void DrawTextRun(gfxContext* const aCtx,
                    const gfxPoint& aTextBaselinePt,
                    uint32_t aOffset,
                    uint32_t aLength,
                    PropertyProvider& aProvider,
                    nscolor aTextColor,
                    gfxFloat& aAdvanceWidth,
                    bool aDrawSoftHyphen,
-                   gfxTextContextPaint* aContextPaint,
+                   gfxTextObjectPaint* aObjectPaint,
                    DrawPathCallbacks* aCallbacks);
 
   void DrawTextRunAndDecorations(gfxContext* const aCtx,
                                  const gfxRect& aDirtyRect,
                                  const gfxPoint& aFramePt,
                                  const gfxPoint& aTextBaselinePt,
                                  uint32_t aOffset,
                                  uint32_t aLength,
                                  PropertyProvider& aProvider,
                                  const nsTextPaintStyle& aTextStyle,
                                  nscolor aTextColor,
                              const nsCharClipDisplayItem::ClipEdges& aClipEdges,
                                  gfxFloat& aAdvanceWidth,
                                  bool aDrawSoftHyphen,
                                  const TextDecorations& aDecorations,
                                  const nscolor* const aDecorationOverrideColor,
-                                 gfxTextContextPaint* aContextPaint,
+                                 gfxTextObjectPaint* aObjectPaint,
                                  DrawPathCallbacks* aCallbacks);
 
   void DrawText(gfxContext* const aCtx,
                 const gfxRect& aDirtyRect,
                 const gfxPoint& aFramePt,
                 const gfxPoint& aTextBaselinePt,
                 uint32_t aOffset,
                 uint32_t aLength,
                 PropertyProvider& aProvider,
                 const nsTextPaintStyle& aTextStyle,
                 nscolor aTextColor,
                 const nsCharClipDisplayItem::ClipEdges& aClipEdges,
                 gfxFloat& aAdvanceWidth,
                 bool aDrawSoftHyphen,
                 const nscolor* const aDecorationOverrideColor = nullptr,
-                gfxTextContextPaint* aContextPaint = nullptr,
+                gfxTextObjectPaint* aObjectPaint = nullptr,
                 DrawPathCallbacks* aCallbacks = nullptr);
 
   // Set non empty rect to aRect, it should be overflow rect or frame rect.
   // If the result rect is larger than the given rect, this returns true.
   bool CombineSelectionUnderlineRect(nsPresContext* aPresContext,
                                        nsRect& aRect);
 
   ContentOffsets GetCharacterOffsetAtFramePointInternal(nsPoint aPoint,
--- a/layout/reftests/text-svgglyphs/resources/README
+++ b/layout/reftests/text-svgglyphs/resources/README
@@ -1,37 +1,11 @@
-.woff files for SVG-in-OpenType testing
-=======================================
-
-There are three .woff files in this directory:
- * nosvg.woff
- * svg.woff
- * rubbish.woff
+Fonts in this directory:
 
-nosvg.woff
-----------
-This font is Liberation Serif with the addition of a glyph with a UVS selector
-(Liberation fonts do not come with UVS glyphs; one had to be added to test that
-SVG glyphs work with UVS selectors). It contains no 'SVG ' table.
-
-svg.woff
---------
-This font is the same as nosvg.woff above, but with the glyphs-*.svg SVG
-documents from this directory embedded in it using the tools described below.
+rubbish.woff contains an SVG table with the contents of rubbish.txt. This is
+not a valid SVG table so no SVG glyphs will be used.
 
-rubbish.woff
-------------
-This font is the same as nosvg.woff above, but with the addition of an 'SVG '
-table with the contents of rubbish.txt. Its purpose is to test that SVG tables
-without valid XML are ignored.
+nosvg.woff is derived from the "Liberation" font. It contains no SVG table.
 
-Creating the Fonts
-------------------
-The tools used here are insertsvg.py from [1] and sfnt2woff from [2].
-
-svg.woff can be recreated with:
-
-woff2sfnt nosvg.woff > nosvg.ttf
-insertsvg.py nosvg.ttf svg.ttf glyphs-*.svg
-sfnt2woff svg.ttf
-
-[1] https://github.com/edf825/SVG-OpenType-Utils
-[2] http://people.mozilla.com/~jkew/woff/
+svg.woff is nosvg.woff with an SVG table added. The
+table contains the glyph documents glyphs-base.svg, glyphs-invalid.svg,
+glyphs-objectcolor.svg, glyphs-objectopacity.svg, glyphs-objectstroke.svg,
+glyphs-paintservers.svg and glyphs-transforms.svg.
--- a/layout/reftests/text-svgglyphs/resources/glyphs-objectcolor.svg
+++ b/layout/reftests/text-svgglyphs/resources/glyphs-objectcolor.svg
@@ -1,24 +1,24 @@
 <svg xmlns="http://www.w3.org/2000/svg">
 <!--
     Test SVG glyphs for text object pattern inheritance
     Covers glyph ID range 48 (N) to 51 (Q)
 -->
-<!-- context-fill, no stroke -->
+<!-- -moz-objectfill, no stroke -->
   <!-- N -->
   <rect x="100" y="-900" width="800" height="800" stroke-width="50"
-    stroke="none" fill="context-fill" id="glyph48"/>
+    stroke="none" fill="-moz-objectFill" id="glyph48"/>
 
   <!-- O -->
   <rect x="50" y="-950" width="900" height="900" stroke-width="100"
-    fill="context-fill" stroke="none" id="glyph49"/>
+    fill="-moz-objectFill" stroke="none" id="glyph49"/>
 
-<!-- context-stroke -->
+<!-- -moz-objectstroke -->
   <!-- P -->
   <rect x="100" y="-900" width="800" height="800" stroke-width="50"
-    stroke="context-stroke" fill="burlywood" id="glyph50"/>
+    stroke="-moz-objectStroke" fill="burlywood" id="glyph50"/>
 
-<!-- both context-stroke and context-fill (but note swapped usage!) -->
+<!-- both -moz-objectstroke and -moz-objectfill -->
   <!-- Q -->
   <rect x="50" y="-950" width="900" height="900" stroke-width="100"
-    fill="context-stroke" stroke="context-fill" id="glyph51"/>
+    fill="-moz-objectStroke" stroke="-moz-objectFill" id="glyph51"/>
 </svg>
--- a/layout/reftests/text-svgglyphs/resources/glyphs-objectopacity.svg
+++ b/layout/reftests/text-svgglyphs/resources/glyphs-objectopacity.svg
@@ -1,56 +1,56 @@
 <svg xmlns="http://www.w3.org/2000/svg">
 <!--
     Test SVG glyphs for text object opacity inheritance
     Covers glyph ID range 52 (R) to 59 (Y)
 -->
   <!-- R -->
   <rect x="100" y="-900" width="800" height="800" stroke-width="50"
-    fill="context-fill" stroke="context-stroke"
-    fill-opacity="context-fill-opacity"
-    stroke-opacity="context-stroke-opacity" id="glyph52"/>
+    fill="-moz-objectFill" stroke="-moz-objectStroke"
+    fill-opacity="-moz-objectFillOpacity"
+    stroke-opacity="-moz-objectStrokeOpacity" id="glyph52"/>
 
   <!-- S -->
   <rect x="100" y="-900" width="800" height="800" stroke-width="50"
-    fill="context-fill" stroke="context-stroke"
-    fill-opacity="context-stroke-opacity"
-    stroke-opacity="context-fill-opacity" id="glyph53"/>
+    fill="-moz-objectFill" stroke="-moz-objectStroke"
+    fill-opacity="-moz-objectStrokeOpacity"
+    stroke-opacity="-moz-objectFillOpacity" id="glyph53"/>
 
   <!-- T -->
   <rect x="100" y="-900" width="800" height="800" stroke-width="50"
-    fill="context-stroke" stroke="context-fill"
-    fill-opacity="context-fill-opacity"
-    stroke-opacity="context-stroke-opacity" id="glyph54"/>
+    fill="-moz-objectStroke" stroke="-moz-objectFill"
+    fill-opacity="-moz-objectFillOpacity"
+    stroke-opacity="-moz-objectStrokeOpacity" id="glyph54"/>
 
   <!-- U -->
   <!--  Test for bug where explicit `inherit' would fail for
       *-opacity="objectStrokeOpacity" or "objectFillOpacity" -->
-  <g style="fill-opacity : context-stroke-opacity; stroke-opacity : context-fill-opacity">
+  <g style="fill-opacity : -moz-objectStrokeOpacity; stroke-opacity : -moz-objectFillOpacity">
     <rect x="100" y="-900" width="800" height="800" stroke-width="50"
-      fill="context-stroke" stroke="context-fill"
+      fill="-moz-objectStroke" stroke="-moz-objectFill"
       fill-opacity="inherit" stroke-opacity="inherit" id="glyph55"/>
   </g>
 
   <!-- W -->
   <rect x="100" y="-900" width="800" height="800" stroke-width="50"
     fill="darkorchid" stroke="goldenrod"
-    fill-opacity="context-fill-opacity"
-    stroke-opacity="context-stroke-opacity" id="glyph57"/>
+    fill-opacity="-moz-objectFillOpacity"
+    stroke-opacity="-moz-objectStrokeOpacity" id="glyph57"/>
 
   <!-- X -->
   <rect x="100" y="-900" width="800" height="800" stroke-width="50"
     fill="darkorchid" stroke="goldenrod"
-    fill-opacity="context-stroke-opacity"
-    stroke-opacity="context-fill-opacity" id="glyph58"/>
+    fill-opacity="-moz-objectStrokeOpacity"
+    stroke-opacity="-moz-objectFillOpacity" id="glyph58"/>
 
   <style type="text/css"><![CDATA[
   #glyph59 {
-    fill-opacity : context-fill-opacity;
-    stroke-opacity : context-stroke-opacity;
+    fill-opacity : -moz-objectFillOpacity;
+    stroke-opacity : -moz-objectStrokeOpacity;
   }
   #ychild {
     color-interpolation : sRGB;
   }
   ]]></style>
   <!-- Y -->
   <g id="glyph59">
     <rect x="100" y="-900" width="800" height="300" stroke="red" stroke-width="50"/>
--- a/layout/reftests/text-svgglyphs/resources/glyphs-objectstroke.svg
+++ b/layout/reftests/text-svgglyphs/resources/glyphs-objectstroke.svg
@@ -6,20 +6,20 @@
   <!-- a -->
   <rect x="100" y="-900" width="800" height="800" stroke="powderblue"
     stroke-width="50" stroke-dashoffset="35"
     stroke-dasharray="50 50" id="glyph67" />
 
   <!-- b -->
   <rect x="100" y="-900" width="800" height="800" stroke="chartreuse"
     stroke-width="50" stroke-dashoffset="35"
-    stroke-dasharray="context-value" id="glyph68" />
+    stroke-dasharray="-moz-objectValue" id="glyph68" />
 
   <!-- c -->
   <rect x="100" y="-900" width="800" height="800" stroke="sienna"
     stroke-width="50" stroke-dasharray="50 50"
-    stroke-dashoffset="context-value" id="glyph69" />
+    stroke-dashoffset="-moz-objectValue" id="glyph69" />
 
   <!-- d -->
   <rect x="100" y="-900" width="800" height="800" stroke="olivedrab"
-    stroke-width="context-value" stroke-dasharray="context-value"
-    stroke-dashoffset="context-value" id="glyph70" />
+    stroke-width="-moz-objectValue" stroke-dasharray="-moz-objectValue"
+    stroke-dashoffset="-moz-objectValue" id="glyph70" />
 </svg>
index 75f7df6329c5fd481c78fc4b998aa99a13d5ea93..dfc77eb680180940f857b33eeec87d5751127f1a
GIT binary patch
literal 87000
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
FhycwL|7HLH
--- a/layout/style/nsCSSKeywordList.h
+++ b/layout/style/nsCSSKeywordList.h
@@ -118,16 +118,21 @@ CSS_KEY(-moz-menuhover, _moz_menuhover)
 CSS_KEY(-moz-menuhovertext, _moz_menuhovertext)
 CSS_KEY(-moz-menubartext, _moz_menubartext)
 CSS_KEY(-moz-menubarhovertext, _moz_menubarhovertext)
 CSS_KEY(-moz-middle-with-baseline, _moz_middle_with_baseline)
 CSS_KEY(-moz-min-content, _moz_min_content)
 CSS_KEY(-moz-myanmar, _moz_myanmar)
 CSS_KEY(-moz-nativehyperlinktext, _moz_nativehyperlinktext)
 CSS_KEY(-moz-none, _moz_none)
+CSS_KEY(-moz-objectfill, _moz_objectfill)
+CSS_KEY(-moz-objectfillopacity, _moz_objectfillopacity)
+CSS_KEY(-moz-objectstroke, _moz_objectstroke)
+CSS_KEY(-moz-objectstrokeopacity, _moz_objectstrokeopacity)
+CSS_KEY(-moz-objectvalue, _moz_objectvalue)
 CSS_KEY(-moz-oddtreerow, _moz_oddtreerow)
 CSS_KEY(-moz-oriya, _moz_oriya)
 CSS_KEY(-moz-persian, _moz_persian)
 CSS_KEY(-moz-plaintext, _moz_plaintext)
 CSS_KEY(-moz-popup, _moz_popup)
 CSS_KEY(-moz-pre-discard-newlines, _moz_pre_discard_newlines)
 CSS_KEY(-moz-pull-down-menu, _moz_pull_down_menu)
 CSS_KEY(-moz-right, _moz_right)
@@ -213,22 +218,17 @@ CSS_KEY(color, color)
 CSS_KEY(color-burn, color_burn)
 CSS_KEY(color-dodge, color_dodge)
 CSS_KEY(common-ligatures, common_ligatures)
 CSS_KEY(column, column)
 CSS_KEY(column-reverse, column_reverse)
 CSS_KEY(condensed, condensed)
 CSS_KEY(contain, contain)
 CSS_KEY(content-box, content_box)
-CSS_KEY(context-fill, context_fill)
-CSS_KEY(context-fill-opacity, context_fill_opacity)
 CSS_KEY(context-menu, context_menu)
-CSS_KEY(context-stroke, context_stroke)
-CSS_KEY(context-stroke-opacity, context_stroke_opacity)
-CSS_KEY(context-value, context_value)
 CSS_KEY(continuous, continuous)
 CSS_KEY(contrast, contrast)
 CSS_KEY(copy, copy)
 CSS_KEY(contextual, contextual)
 CSS_KEY(cover, cover)
 CSS_KEY(crop, crop)
 CSS_KEY(cross, cross)
 CSS_KEY(crosshair, crosshair)
--- a/layout/style/nsCSSParser.cpp
+++ b/layout/style/nsCSSParser.cpp
@@ -4979,18 +4979,17 @@ CSSParserImpl::TranslateDimension(nsCSSV
   VARIANT_AUTO | \
   VARIANT_INHERIT | \
   VARIANT_NONE | \
   VARIANT_NORMAL | \
   VARIANT_SYSFONT | \
   VARIANT_GRADIENT | \
   VARIANT_TIMING_FUNCTION | \
   VARIANT_ALL | \
-  VARIANT_CALC | \
-  VARIANT_OPENTYPE_SVG_KEYWORD
+  VARIANT_CALC
 
 // Note that callers passing VARIANT_CALC in aVariantMask will get
 // full-range parsing inside the calc() expression, and the code that
 // computes the calc will be required to clamp the resulting value to an
 // appropriate range.
 bool
 CSSParserImpl::ParseNonNegativeVariant(nsCSSValue& aValue,
                                        int32_t aVariantMask,
@@ -5129,28 +5128,16 @@ CSSParserImpl::ParseVariant(nsCSSValue& 
       }
       if ((aVariantMask & VARIANT_SYSFONT) != 0) {
         if (eCSSKeyword__moz_use_system_font == keyword &&
             !IsParsingCompoundProperty()) {
           aValue.SetSystemFontValue();
           return true;
         }
       }
-      if ((aVariantMask & VARIANT_OPENTYPE_SVG_KEYWORD) != 0) {
-        static bool sOpentypeSVGEnabled;
-        static bool sOpentypeSVGEnabledCached = false;
-        if (!sOpentypeSVGEnabledCached) {
-          sOpentypeSVGEnabledCached = true;
-          Preferences::AddBoolVarCache(&sOpentypeSVGEnabled,
-                                       "gfx.font_rendering.opentype_svg.enabled");
-        }
-        if (sOpentypeSVGEnabled) {
-          aVariantMask |= VARIANT_KEYWORD;
-        }
-      }
       if ((aVariantMask & VARIANT_KEYWORD) != 0) {
         int32_t value;
         if (nsCSSProps::FindKeyword(keyword, aKeywordTable, value)) {
           aValue.SetIntValue(value, eCSSUnit_Enumerated);
           return true;
         }
       }
     }
@@ -10847,20 +10834,18 @@ CSSParserImpl::SetDefaultNamespaceOnSele
     aSelector.SetNameSpace(kNameSpaceID_Unknown); // wildcard
   }
 }
 
 bool
 CSSParserImpl::ParsePaint(nsCSSProperty aPropID)
 {
   nsCSSValue x, y;
-
-  if (!ParseVariant(x, VARIANT_HC | VARIANT_NONE | VARIANT_URL |
-                       VARIANT_OPENTYPE_SVG_KEYWORD,
-                    nsCSSProps::kContextPatternKTable)) {
+  if (!ParseVariant(x, VARIANT_HCK | VARIANT_NONE | VARIANT_URL,
+                    nsCSSProps::kObjectPatternKTable)) {
     return false;
   }
 
   bool canHaveFallback = x.GetUnit() == eCSSUnit_URL ||
                          x.GetUnit() == eCSSUnit_Enumerated;
   if (canHaveFallback) {
     if (!ParseVariant(y, VARIANT_COLOR | VARIANT_NONE, nullptr))
       y.SetNoneValue();
@@ -10877,20 +10862,18 @@ CSSParserImpl::ParsePaint(nsCSSProperty 
   }
   return true;
 }
 
 bool
 CSSParserImpl::ParseDasharray()
 {
   nsCSSValue value;
-
-  if (ParseVariant(value, VARIANT_INHERIT | VARIANT_NONE |
-                          VARIANT_OPENTYPE_SVG_KEYWORD,
-                   nsCSSProps::kStrokeContextValueKTable)) {
+  if (ParseVariant(value, VARIANT_HK | VARIANT_NONE,
+                   nsCSSProps::kStrokeObjectValueKTable)) {
     // 'inherit', 'initial', and 'none' are only allowed on their own
     if (!ExpectEndProperty()) {
       return false;
     }
   } else {
     nsCSSValueList *cur = value.SetListValue();
     for (;;) {
       if (!ParseNonNegativeVariant(cur->mValue, VARIANT_LPN, nullptr)) {
--- a/layout/style/nsCSSPropList.h
+++ b/layout/style/nsCSSPropList.h
@@ -3337,27 +3337,27 @@ CSS_PROP_SVGRESET(
     eStyleAnimType_EnumU8)
 CSS_PROP_SVG(
     fill,
     fill,
     Fill,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
-    kContextPatternKTable,
+    kObjectPatternKTable,
     offsetof(nsStyleSVG, mFill),
     eStyleAnimType_PaintServer)
 CSS_PROP_SVG(
     fill-opacity,
     fill_opacity,
     FillOpacity,
     CSS_PROPERTY_PARSE_VALUE,
     "",
-    VARIANT_HN | VARIANT_OPENTYPE_SVG_KEYWORD,
-    kContextOpacityKTable,
+    VARIANT_HN | VARIANT_KEYWORD,
+    kObjectOpacityKTable,
     offsetof(nsStyleSVG, mFillOpacity),
     eStyleAnimType_float)
 CSS_PROP_SVG(
     fill-rule,
     fill_rule,
     FillRule,
     CSS_PROPERTY_PARSE_VALUE,
     "",
@@ -3503,39 +3503,39 @@ CSS_PROP_SVGRESET(
     eStyleAnimType_float)
 CSS_PROP_SVG(
     stroke,
     stroke,
     Stroke,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
-    kContextPatternKTable,
+    kObjectPatternKTable,
     offsetof(nsStyleSVG, mStroke),
     eStyleAnimType_PaintServer)
 CSS_PROP_SVG(
     stroke-dasharray,
     stroke_dasharray,
     StrokeDasharray,
     CSS_PROPERTY_PARSE_FUNCTION |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
         // NOTE: Internal values have range restrictions.
     "",
     0,
-    kStrokeContextValueKTable,
+    kStrokeObjectValueKTable,
     CSS_PROP_NO_OFFSET, /* property stored in 2 separate members */
     eStyleAnimType_Custom)
 CSS_PROP_SVG(
     stroke-dashoffset,
     stroke_dashoffset,
     StrokeDashoffset,
     CSS_PROPERTY_PARSE_VALUE,
     "",
-    VARIANT_HLPN | VARIANT_OPENTYPE_SVG_KEYWORD,
-    kStrokeContextValueKTable,
+    VARIANT_HLPN | VARIANT_KEYWORD,
+    kStrokeObjectValueKTable,
     offsetof(nsStyleSVG, mStrokeDashoffset),
     eStyleAnimType_Coord)
 CSS_PROP_SVG(
     stroke-linecap,
     stroke_linecap,
     StrokeLinecap,
     CSS_PROPERTY_PARSE_VALUE,
     "",
@@ -3565,29 +3565,29 @@ CSS_PROP_SVG(
     offsetof(nsStyleSVG, mStrokeMiterlimit),
     eStyleAnimType_float)
 CSS_PROP_SVG(
     stroke-opacity,
     stroke_opacity,
     StrokeOpacity,
     CSS_PROPERTY_PARSE_VALUE,
     "",
-    VARIANT_HN | VARIANT_OPENTYPE_SVG_KEYWORD,
-    kContextOpacityKTable,
+    VARIANT_HN | VARIANT_KEYWORD,
+    kObjectOpacityKTable,
     offsetof(nsStyleSVG, mStrokeOpacity),
     eStyleAnimType_float)
 CSS_PROP_SVG(
     stroke-width,
     stroke_width,
     StrokeWidth,
     CSS_PROPERTY_PARSE_VALUE |
         CSS_PROPERTY_VALUE_NONNEGATIVE,
     "",
-    VARIANT_HLPN | VARIANT_OPENTYPE_SVG_KEYWORD,
-    kStrokeContextValueKTable,
+    VARIANT_HLPN | VARIANT_KEYWORD,
+    kStrokeObjectValueKTable,
     offsetof(nsStyleSVG, mStrokeWidth),
     eStyleAnimType_Coord)
 CSS_PROP_SVG(
     text-anchor,
     text_anchor,
     TextAnchor,
     CSS_PROPERTY_PARSE_VALUE,
     "",
--- a/layout/style/nsCSSProps.cpp
+++ b/layout/style/nsCSSProps.cpp
@@ -788,17 +788,17 @@ const int32_t nsCSSProps::kCaptionSideKT
 const int32_t nsCSSProps::kClearKTable[] = {
   eCSSKeyword_none, NS_STYLE_CLEAR_NONE,
   eCSSKeyword_left, NS_STYLE_CLEAR_LEFT,
   eCSSKeyword_right, NS_STYLE_CLEAR_RIGHT,
   eCSSKeyword_both, NS_STYLE_CLEAR_LEFT_AND_RIGHT,
   eCSSKeyword_UNKNOWN,-1
 };
 
-// See also kContextPatternKTable for SVG paint-specific values
+// See also kObjectPatternKTable for SVG paint-specific values
 const int32_t nsCSSProps::kColorKTable[] = {
   eCSSKeyword_activeborder, LookAndFeel::eColorID_activeborder,
   eCSSKeyword_activecaption, LookAndFeel::eColorID_activecaption,
   eCSSKeyword_appworkspace, LookAndFeel::eColorID_appworkspace,
   eCSSKeyword_background, LookAndFeel::eColorID_background,
   eCSSKeyword_buttonface, LookAndFeel::eColorID_buttonface,
   eCSSKeyword_buttonhighlight, LookAndFeel::eColorID_buttonhighlight,
   eCSSKeyword_buttonshadow, LookAndFeel::eColorID_buttonshadow,
@@ -1263,25 +1263,25 @@ const int32_t nsCSSProps::kListStyleKTab
   eCSSKeyword__moz_ethiopic_halehame, NS_STYLE_LIST_STYLE_MOZ_ETHIOPIC_HALEHAME,
   eCSSKeyword__moz_ethiopic_numeric, NS_STYLE_LIST_STYLE_MOZ_ETHIOPIC_NUMERIC,
   eCSSKeyword__moz_ethiopic_halehame_am, NS_STYLE_LIST_STYLE_MOZ_ETHIOPIC_HALEHAME_AM,
   eCSSKeyword__moz_ethiopic_halehame_ti_er, NS_STYLE_LIST_STYLE_MOZ_ETHIOPIC_HALEHAME_TI_ER,
   eCSSKeyword__moz_ethiopic_halehame_ti_et, NS_STYLE_LIST_STYLE_MOZ_ETHIOPIC_HALEHAME_TI_ET,
   eCSSKeyword_UNKNOWN,-1
 };
 
-const int32_t nsCSSProps::kContextOpacityKTable[] = {
-  eCSSKeyword_context_fill_opacity, NS_STYLE_CONTEXT_FILL_OPACITY,
-  eCSSKeyword_context_stroke_opacity, NS_STYLE_CONTEXT_STROKE_OPACITY,
+const int32_t nsCSSProps::kObjectOpacityKTable[] = {
+  eCSSKeyword__moz_objectfillopacity, NS_STYLE_OBJECT_FILL_OPACITY,
+  eCSSKeyword__moz_objectstrokeopacity, NS_STYLE_OBJECT_STROKE_OPACITY,
   eCSSKeyword_UNKNOWN,-1
 };
 
-const int32_t nsCSSProps::kContextPatternKTable[] = {
-  eCSSKeyword_context_fill, NS_COLOR_CONTEXT_FILL,
-  eCSSKeyword_context_stroke, NS_COLOR_CONTEXT_STROKE,
+const int32_t nsCSSProps::kObjectPatternKTable[] = {
+  eCSSKeyword__moz_objectfill, NS_COLOR_OBJECTFILL,
+  eCSSKeyword__moz_objectstroke, NS_COLOR_OBJECTSTROKE,
   eCSSKeyword_UNKNOWN,-1
 };
 
 const int32_t nsCSSProps::kOrientKTable[] = {
   eCSSKeyword_horizontal, NS_STYLE_ORIENT_HORIZONTAL,
   eCSSKeyword_vertical,   NS_STYLE_ORIENT_VERTICAL,
   eCSSKeyword_auto,       NS_STYLE_ORIENT_AUTO,
   eCSSKeyword_UNKNOWN,    -1
@@ -1741,18 +1741,18 @@ const int32_t nsCSSProps::kStrokeLinejoi
   eCSSKeyword_miter, NS_STYLE_STROKE_LINEJOIN_MITER,
   eCSSKeyword_round, NS_STYLE_STROKE_LINEJOIN_ROUND,
   eCSSKeyword_bevel, NS_STYLE_STROKE_LINEJOIN_BEVEL,
   eCSSKeyword_UNKNOWN, -1
 };
 
 // Lookup table to store the sole objectValue keyword to let SVG glyphs inherit
 // certain stroke-* properties from the outer text object
-const int32_t nsCSSProps::kStrokeContextValueKTable[] = {
-  eCSSKeyword_context_value, NS_STYLE_STROKE_PROP_CONTEXT_VALUE,
+const int32_t nsCSSProps::kStrokeObjectValueKTable[] = {
+  eCSSKeyword__moz_objectvalue, NS_STYLE_STROKE_PROP_OBJECTVALUE,
   eCSSKeyword_UNKNOWN, -1
 };
 
 const int32_t nsCSSProps::kTextAnchorKTable[] = {
   eCSSKeyword_start, NS_STYLE_TEXT_ANCHOR_START,
   eCSSKeyword_middle, NS_STYLE_TEXT_ANCHOR_MIDDLE,
   eCSSKeyword_end, NS_STYLE_TEXT_ANCHOR_END,
   eCSSKeyword_UNKNOWN, -1
--- a/layout/style/nsCSSProps.h
+++ b/layout/style/nsCSSProps.h
@@ -44,18 +44,16 @@
 #define VARIANT_ALL             0x800000  //
 #define VARIANT_IMAGE_RECT    0x01000000  // eCSSUnit_Function
 // This is an extra bit that says that a VARIANT_ANGLE allows unitless zero:
 #define VARIANT_ZERO_ANGLE    0x02000000  // unitless zero for angles
 #define VARIANT_CALC          0x04000000  // eCSSUnit_Calc
 #define VARIANT_ELEMENT       0x08000000  // eCSSUnit_Element
 #define VARIANT_POSITIVE_DIMENSION 0x10000000 // Only lengths greater than 0.0
 #define VARIANT_NONNEGATIVE_DIMENSION 0x20000000 // Only lengths greater than or equal to 0.0
-// Keyword used iff gfx.font_rendering.opentype_svg.enabled is true:
-#define VARIANT_OPENTYPE_SVG_KEYWORD 0x40000000
 
 // Common combinations of variants
 #define VARIANT_AL   (VARIANT_AUTO | VARIANT_LENGTH)
 #define VARIANT_LP   (VARIANT_LENGTH | VARIANT_PERCENT)
 #define VARIANT_LN   (VARIANT_LENGTH | VARIANT_NUMBER)
 #define VARIANT_AH   (VARIANT_AUTO | VARIANT_INHERIT)
 #define VARIANT_AHLP (VARIANT_AH | VARIANT_LP)
 #define VARIANT_AHI  (VARIANT_AH | VARIANT_INTEGER)
@@ -453,17 +451,17 @@ public:
   static const int32_t kBoxPackKTable[];
   static const int32_t kDominantBaselineKTable[];
   static const int32_t kFillRuleKTable[];
   static const int32_t kFilterFunctionKTable[];
   static const int32_t kImageRenderingKTable[];
   static const int32_t kShapeRenderingKTable[];
   static const int32_t kStrokeLinecapKTable[];
   static const int32_t kStrokeLinejoinKTable[];
-  static const int32_t kStrokeContextValueKTable[];
+  static const int32_t kStrokeObjectValueKTable[];
   static const int32_t kVectorEffectKTable[];
   static const int32_t kTextAnchorKTable[];
   static const int32_t kTextRenderingKTable[];
   static const int32_t kColorInterpolationKTable[];
   static const int32_t kColumnFillKTable[];
   static const int32_t kBoxPropSourceKTable[];
   static const int32_t kBoxShadowTypeKTable[];
   static const int32_t kBoxSizingKTable[];
@@ -502,18 +500,18 @@ public:
   static const int32_t kFontWeightKTable[];
   static const int32_t kImageOrientationKTable[];
   static const int32_t kImageOrientationFlipKTable[];
   static const int32_t kIMEModeKTable[];
   static const int32_t kLineHeightKTable[];
   static const int32_t kListStylePositionKTable[];
   static const int32_t kListStyleKTable[];
   static const int32_t kMaskTypeKTable[];
-  static const int32_t kContextOpacityKTable[];
-  static const int32_t kContextPatternKTable[];
+  static const int32_t kObjectOpacityKTable[];
+  static const int32_t kObjectPatternKTable[];
   static const int32_t kOrientKTable[];
   static const int32_t kOutlineStyleKTable[];
   static const int32_t kOutlineColorKTable[];
   static const int32_t kOverflowKTable[];
   static const int32_t kOverflowSubKTable[];
   static const int32_t kPageBreakKTable[];
   static const int32_t kPageBreakInsideKTable[];
   static const int32_t kPageMarksKTable[];
--- a/layout/style/nsComputedDOMStyle.cpp
+++ b/layout/style/nsComputedDOMStyle.cpp
@@ -4289,24 +4289,24 @@ nsComputedDOMStyle::GetSVGPaintFor(bool 
 
       nsROCSSPrimitiveValue* fallback = new nsROCSSPrimitiveValue;
       valueList->AppendCSSValue(fallback);
 
       val->SetURI(paint->mPaint.mPaintServer);
       SetToRGBAColor(fallback, paint->mFallbackColor);
       return valueList;
     }
-    case eStyleSVGPaintType_ContextFill:
+    case eStyleSVGPaintType_ObjectFill:
     {
-      val->SetIdent(eCSSKeyword_context_fill);
+      val->SetIdent(eCSSKeyword__moz_objectfill);
       break;
     }
-    case eStyleSVGPaintType_ContextStroke:
+    case eStyleSVGPaintType_ObjectStroke:
     {
-      val->SetIdent(eCSSKeyword_context_stroke);
+      val->SetIdent(eCSSKeyword__moz_objectstroke);
       break;
     }
   }
 
   return val;
 }
 
 CSSValue*
--- a/layout/style/nsRuleNode.cpp
+++ b/layout/style/nsRuleNode.cpp
@@ -7415,21 +7415,21 @@ SetSVGPaint(const nsCSSValue& aValue, co
 
     if (pair.mXValue.GetUnit() == eCSSUnit_URL) {
       aResult.SetType(eStyleSVGPaintType_Server);
       aResult.mPaint.mPaintServer = pair.mXValue.GetURLValue();
       NS_IF_ADDREF(aResult.mPaint.mPaintServer);
     } else if (pair.mXValue.GetUnit() == eCSSUnit_Enumerated) {
 
       switch (pair.mXValue.GetIntValue()) {
-      case NS_COLOR_CONTEXT_FILL:
-        aResult.SetType(eStyleSVGPaintType_ContextFill);
+      case NS_COLOR_OBJECTFILL:
+        aResult.SetType(eStyleSVGPaintType_ObjectFill);
         break;
-      case NS_COLOR_CONTEXT_STROKE:
-        aResult.SetType(eStyleSVGPaintType_ContextStroke);
+      case NS_COLOR_OBJECTSTROKE:
+        aResult.SetType(eStyleSVGPaintType_ObjectStroke);
         break;
       default:
         NS_NOTREACHED("unknown keyword as paint server value");
       }
 
     } else {
       NS_NOTREACHED("malformed paint server value");
     }
@@ -7451,21 +7451,21 @@ SetSVGPaint(const nsCSSValue& aValue, co
 static void
 SetSVGOpacity(const nsCSSValue& aValue,
               float& aOpacityField, nsStyleSVGOpacitySource& aOpacityTypeField,
               bool& aCanStoreInRuleTree,
               float aParentOpacity, nsStyleSVGOpacitySource aParentOpacityType)
 {
   if (eCSSUnit_Enumerated == aValue.GetUnit()) {
     switch (aValue.GetIntValue()) {
-    case NS_STYLE_CONTEXT_FILL_OPACITY:
-      aOpacityTypeField = eStyleSVGOpacitySource_ContextFillOpacity;
+    case NS_STYLE_OBJECT_FILL_OPACITY:
+      aOpacityTypeField = eStyleSVGOpacitySource_ObjectFillOpacity;
       break;
-    case NS_STYLE_CONTEXT_STROKE_OPACITY:
-      aOpacityTypeField = eStyleSVGOpacitySource_ContextStrokeOpacity;
+    case NS_STYLE_OBJECT_STROKE_OPACITY:
+      aOpacityTypeField = eStyleSVGOpacitySource_ObjectStrokeOpacity;
       break;
     default:
       NS_NOTREACHED("SetSVGOpacity: Unknown keyword");
     }
     // Fall back on fully opaque
     aOpacityField = 1.0f;
   } else if (eCSSUnit_Inherit == aValue.GetUnit()) {
     aCanStoreInRuleTree = false;
@@ -7475,20 +7475,20 @@ SetSVGOpacity(const nsCSSValue& aValue,
     SetFactor(aValue, aOpacityField, aCanStoreInRuleTree,
               aParentOpacity, 1.0f, SETFCT_OPACITY);
     aOpacityTypeField = eStyleSVGOpacitySource_Normal;
   }
 }
 
 template <typename FieldT, typename T>
 static bool
-SetTextContextValue(const nsCSSValue& aValue, FieldT& aField, T aFallbackValue)
+SetTextObjectValue(const nsCSSValue& aValue, FieldT& aField, T aFallbackValue)
 {
   if (aValue.GetUnit() != eCSSUnit_Enumerated ||
-      aValue.GetIntValue() != NS_STYLE_STROKE_PROP_CONTEXT_VALUE) {
+      aValue.GetIntValue() != NS_STYLE_STROKE_PROP_OBJECTVALUE) {
     return false;
   }
   aField = aFallbackValue;
   return true;
 }
 
 const void*
 nsRuleNode::ComputeSVGData(void* aStartStruct,
@@ -7518,23 +7518,22 @@ nsRuleNode::ComputeSVGData(void* aStartS
               SETDSC_ENUMERATED, parentSVG->mColorInterpolationFilters,
               NS_STYLE_COLOR_INTERPOLATION_LINEARRGB, 0, 0, 0, 0);
 
   // fill:
   SetSVGPaint(*aRuleData->ValueForFill(),
               parentSVG->mFill, mPresContext, aContext,
               svg->mFill, eStyleSVGPaintType_Color, canStoreInRuleTree);
 
-  // fill-opacity: factor, inherit, initial,
-  // context-fill-opacity, context-stroke-opacity
-  nsStyleSVGOpacitySource contextFillOpacity = svg->mFillOpacitySource;
+  // fill-opacity: factor, inherit, initial, objectFillOpacity, objectStrokeOpacity
+  nsStyleSVGOpacitySource objectFillOpacity = svg->mFillOpacitySource;
   SetSVGOpacity(*aRuleData->ValueForFillOpacity(),
-                svg->mFillOpacity, contextFillOpacity, canStoreInRuleTree,
+                svg->mFillOpacity, objectFillOpacity, canStoreInRuleTree,
                 parentSVG->mFillOpacity, parentSVG->mFillOpacitySource);
-  svg->mFillOpacitySource = contextFillOpacity;
+  svg->mFillOpacitySource = objectFillOpacity;
 
   // fill-rule: enum, inherit, initial
   SetDiscrete(*aRuleData->ValueForFillRule(),
               svg->mFillRule, canStoreInRuleTree,
               SETDSC_ENUMERATED, parentSVG->mFillRule,
               NS_STYLE_FILL_RULE_NONZERO, 0, 0, 0, 0);
 
   // image-rendering: enum, inherit
@@ -7611,17 +7610,17 @@ nsRuleNode::ComputeSVGData(void* aStartS
               SETDSC_ENUMERATED, parentSVG->mShapeRendering,
               NS_STYLE_SHAPE_RENDERING_AUTO, 0, 0, 0, 0);
 
   // stroke:
   SetSVGPaint(*aRuleData->ValueForStroke(),
               parentSVG->mStroke, mPresContext, aContext,
               svg->mStroke, eStyleSVGPaintType_None, canStoreInRuleTree);
 
-  // stroke-dasharray: <dasharray>, none, inherit, context-value
+  // stroke-dasharray: <dasharray>, none, inherit, -moz-objectValue
   const nsCSSValue* strokeDasharrayValue = aRuleData->ValueForStrokeDasharray();
   switch (strokeDasharrayValue->GetUnit()) {
   case eCSSUnit_Null:
     break;
 
   case eCSSUnit_Inherit:
     canStoreInRuleTree = false;
     svg->mStrokeDasharrayFromObject = parentSVG->mStrokeDasharrayFromObject;
@@ -7638,17 +7637,17 @@ nsRuleNode::ComputeSVGData(void* aStartS
         else
           svg->mStrokeDasharrayLength = 0;
       }
     }
     break;
 
   case eCSSUnit_Enumerated:
     NS_ABORT_IF_FALSE(strokeDasharrayValue->GetIntValue() ==
-                            NS_STYLE_STROKE_PROP_CONTEXT_VALUE,
+                            NS_STYLE_STROKE_PROP_OBJECTVALUE,
                       "Unknown keyword for stroke-dasharray");
     svg->mStrokeDasharrayFromObject = true;
     delete [] svg->mStrokeDasharray;
     svg->mStrokeDasharray = nullptr;
     svg->mStrokeDasharrayLength = 0;
     break;
 
   case eCSSUnit_Initial:
@@ -7693,19 +7692,19 @@ nsRuleNode::ComputeSVGData(void* aStartS
     NS_ABORT_IF_FALSE(false, "unrecognized dasharray unit");
   }
 
   // stroke-dashoffset: <dashoffset>, inherit
   const nsCSSValue *strokeDashoffsetValue =
     aRuleData->ValueForStrokeDashoffset();
   svg->mStrokeDashoffsetFromObject =
     strokeDashoffsetValue->GetUnit() == eCSSUnit_Enumerated &&
-    strokeDashoffsetValue->GetIntValue() == NS_STYLE_STROKE_PROP_CONTEXT_VALUE;
+    strokeDashoffsetValue->GetIntValue() == NS_STYLE_STROKE_PROP_OBJECTVALUE;
   if (svg->mStrokeDashoffsetFromObject) {
-    svg->mStrokeDashoffset.SetCoordValue(0);
+    svg->mStrokeDashoffset.SetIntValue(0, eStyleUnit_Integer);
   } else {
     SetCoord(*aRuleData->ValueForStrokeDashoffset(),
              svg->mStrokeDashoffset, parentSVG->mStrokeDashoffset,
              SETCOORD_LPH | SETCOORD_FACTOR | SETCOORD_INITIAL_ZERO,
              aContext, mPresContext, canStoreInRuleTree);
   }
 
   // stroke-linecap: enum, inherit, initial
@@ -7722,28 +7721,28 @@ nsRuleNode::ComputeSVGData(void* aStartS
 
   // stroke-miterlimit: <miterlimit>, inherit
   SetFactor(*aRuleData->ValueForStrokeMiterlimit(),
             svg->mStrokeMiterlimit,
             canStoreInRuleTree,
             parentSVG->mStrokeMiterlimit, 4.0f);
 
   // stroke-opacity:
-  nsStyleSVGOpacitySource contextStrokeOpacity = svg->mStrokeOpacitySource;
+  nsStyleSVGOpacitySource objectStrokeOpacity = svg->mStrokeOpacitySource;
   SetSVGOpacity(*aRuleData->ValueForStrokeOpacity(),
-                svg->mStrokeOpacity, contextStrokeOpacity, canStoreInRuleTree,
+                svg->mStrokeOpacity, objectStrokeOpacity, canStoreInRuleTree,
                 parentSVG->mStrokeOpacity, parentSVG->mStrokeOpacitySource);
-  svg->mStrokeOpacitySource = contextStrokeOpacity;
+  svg->mStrokeOpacitySource = objectStrokeOpacity;
 
   // stroke-width:
   const nsCSSValue* strokeWidthValue = aRuleData->ValueForStrokeWidth();
   switch (strokeWidthValue->GetUnit()) {
   case eCSSUnit_Enumerated:
     NS_ABORT_IF_FALSE(strokeWidthValue->GetIntValue() ==
-                        NS_STYLE_STROKE_PROP_CONTEXT_VALUE,
+                        NS_STYLE_STROKE_PROP_OBJECTVALUE,
                       "Unrecognized keyword for stroke-width");
     svg->mStrokeWidthFromObject = true;
     svg->mStrokeWidth.SetCoordValue(nsPresContext::CSSPixelsToAppUnits(1));
     break;
 
   case eCSSUnit_Initial:
     svg->mStrokeWidthFromObject = false;
     svg->mStrokeWidth.SetCoordValue(nsPresContext::CSSPixelsToAppUnits(1));
--- a/layout/style/nsStyleAnimation.cpp
+++ b/layout/style/nsStyleAnimation.cpp
@@ -3428,21 +3428,21 @@ nsStyleAnimation::ExtractComputedValue(n
                                      doc->GetDocumentURI(),
                                      doc->NodePrincipal());
         pair->mXValue.SetURLValue(url);
         pair->mYValue.SetColorValue(paint.mFallbackColor);
         aComputedValue.SetAndAdoptCSSValuePairValue(pair.forget(),
                                                     eUnit_CSSValuePair);
         return true;
       }
-      if (paint.mType == eStyleSVGPaintType_ContextFill ||
-          paint.mType == eStyleSVGPaintType_ContextStroke) {
+      if (paint.mType == eStyleSVGPaintType_ObjectFill ||
+          paint.mType == eStyleSVGPaintType_ObjectStroke) {
         nsAutoPtr<nsCSSValuePair> pair(new nsCSSValuePair);
-        pair->mXValue.SetIntValue(paint.mType == eStyleSVGPaintType_ContextFill ?
-                                  NS_COLOR_CONTEXT_FILL : NS_COLOR_CONTEXT_STROKE,
+        pair->mXValue.SetIntValue(paint.mType == eStyleSVGPaintType_ObjectFill ?
+                                    NS_COLOR_OBJECTFILL : NS_COLOR_OBJECTSTROKE,
                                   eCSSUnit_Enumerated);
         pair->mYValue.SetColorValue(paint.mFallbackColor);
         aComputedValue.SetAndAdoptCSSValuePairValue(pair.forget(),
                                                     eUnit_CSSValuePair);
         return true;
       }
       NS_ABORT_IF_FALSE(paint.mType == eStyleSVGPaintType_None,
           "Unexpected SVG paint type");
--- a/layout/style/nsStyleConsts.h
+++ b/layout/style/nsStyleConsts.h
@@ -203,18 +203,18 @@ static inline mozilla::css::Side operato
 // See nsStyleColor
 #define NS_COLOR_CURRENTCOLOR                   -1
 #define NS_COLOR_MOZ_DEFAULT_COLOR              -2
 #define NS_COLOR_MOZ_DEFAULT_BACKGROUND_COLOR   -3
 #define NS_COLOR_MOZ_HYPERLINKTEXT              -4
 #define NS_COLOR_MOZ_VISITEDHYPERLINKTEXT       -5
 #define NS_COLOR_MOZ_ACTIVEHYPERLINKTEXT        -6
 // Only valid as paints in SVG glyphs
-#define NS_COLOR_CONTEXT_FILL                   -7
-#define NS_COLOR_CONTEXT_STROKE                 -8
+#define NS_COLOR_OBJECTFILL                     -7
+#define NS_COLOR_OBJECTSTROKE                   -8
 
 // See nsStyleDisplay
 #define NS_STYLE_ANIMATION_DIRECTION_NORMAL       0
 #define NS_STYLE_ANIMATION_DIRECTION_REVERSE      1
 #define NS_STYLE_ANIMATION_DIRECTION_ALTERNATE    2
 #define NS_STYLE_ANIMATION_DIRECTION_ALTERNATE_REVERSE    3
 
 // See nsStyleDisplay
@@ -909,17 +909,17 @@ static inline mozilla::css::Side operato
 #define NS_STYLE_STROKE_LINECAP_SQUARE          2
 
 // stroke-linejoin
 #define NS_STYLE_STROKE_LINEJOIN_MITER          0
 #define NS_STYLE_STROKE_LINEJOIN_ROUND          1
 #define NS_STYLE_STROKE_LINEJOIN_BEVEL          2
 
 // stroke-dasharray, stroke-dashoffset, stroke-width
-#define NS_STYLE_STROKE_PROP_CONTEXT_VALUE      0
+#define NS_STYLE_STROKE_PROP_OBJECTVALUE        0
 
 // text-anchor
 #define NS_STYLE_TEXT_ANCHOR_START              0
 #define NS_STYLE_TEXT_ANCHOR_MIDDLE             1
 #define NS_STYLE_TEXT_ANCHOR_END                2
 
 // text-rendering
 #define NS_STYLE_TEXT_RENDERING_AUTO               0
@@ -938,19 +938,19 @@ static inline mozilla::css::Side operato
 
 // 3d Transforms - Backface visibility
 #define NS_STYLE_BACKFACE_VISIBILITY_VISIBLE        1
 #define NS_STYLE_BACKFACE_VISIBILITY_HIDDEN         0
 
 #define NS_STYLE_TRANSFORM_STYLE_FLAT               0
 #define NS_STYLE_TRANSFORM_STYLE_PRESERVE_3D        1
 
-// object {fill,stroke}-opacity inherited from context for SVG glyphs
-#define NS_STYLE_CONTEXT_FILL_OPACITY               0
-#define NS_STYLE_CONTEXT_STROKE_OPACITY             1
+// object {fill,stroke}-opacity for SVG glyphs
+#define NS_STYLE_OBJECT_FILL_OPACITY                0
+#define NS_STYLE_OBJECT_STROKE_OPACITY              1
 
 // blending
 #define NS_STYLE_BLEND_NORMAL                       0
 #define NS_STYLE_BLEND_MULTIPLY                     1
 #define NS_STYLE_BLEND_SCREEN                       2
 #define NS_STYLE_BLEND_OVERLAY                      3
 #define NS_STYLE_BLEND_DARKEN                       4
 #define NS_STYLE_BLEND_LIGHTEN                      5
--- a/layout/style/nsStyleStruct.h
+++ b/layout/style/nsStyleStruct.h
@@ -2275,24 +2275,24 @@ protected:
   nscoord mColumnRuleWidth;  // [reset] coord
   nscoord mTwipsPerPixel;
 };
 
 enum nsStyleSVGPaintType {
   eStyleSVGPaintType_None = 1,
   eStyleSVGPaintType_Color,
   eStyleSVGPaintType_Server,
-  eStyleSVGPaintType_ContextFill,
-  eStyleSVGPaintType_ContextStroke
+  eStyleSVGPaintType_ObjectFill,
+  eStyleSVGPaintType_ObjectStroke
 };
 
 enum nsStyleSVGOpacitySource {
   eStyleSVGOpacitySource_Normal,
-  eStyleSVGOpacitySource_ContextFillOpacity,
-  eStyleSVGOpacitySource_ContextStrokeOpacity
+  eStyleSVGOpacitySource_ObjectFillOpacity,
+  eStyleSVGOpacitySource_ObjectStrokeOpacity
 };
 
 struct nsStyleSVGPaint
 {
   union {
     nscolor mColor;
     nsIURI *mPaintServer;
   } mPaint;
--- a/layout/style/test/Makefile.in
+++ b/layout/style/test/Makefile.in
@@ -72,17 +72,16 @@ MOCHITEST_FILES =	test_acid3_test46.html
 		test_bug664955.html \
 		test_bug667520.html \
 		test_bug645998.html \
 		file_bug645998-1.css \
 		file_bug645998-2.css \
 		test_bug716226.html \
 		test_bug765590.html \
 		test_bug798567.html \
-		test_bug798843_pref.html \
 		test_bug829816.html \
 		file_bug829816.css \
 		test_bug887741_at-rules_in_declaration_lists.html \
 		test_bug892929.html \
 		test_cascade.html \
 		test_ch_ex_no_infloops.html \
 		test_compute_data_with_start_struct.html \
 		test_computed_style.html \
--- a/layout/style/test/property_database.js
+++ b/layout/style/test/property_database.js
@@ -3474,24 +3474,24 @@ var gCSSProperties = {
 		invalid_values: []
 	},
 	"fill": {
 		domProp: "fill",
 		inherited: true,
 		type: CSS_TYPE_LONGHAND,
 		prerequisites: { "color": "blue" },
 		initial_values: [ "black", "#000", "#000000", "rgb(0,0,0)", "rgba(0,0,0,1)" ],
-		other_values: [ "green", "#fc3", "url('#myserver')", "url(foo.svg#myserver)", 'url("#myserver") green', "none", "currentColor", "context-fill", "context-stroke" ],
+		other_values: [ "green", "#fc3", "url('#myserver')", "url(foo.svg#myserver)", 'url("#myserver") green', "none", "currentColor", "-moz-objectFill", "-moz-objectStroke" ],
 		invalid_values: [ "000000", "ff00ff" ]
 	},
 	"fill-opacity": {
 		domProp: "fillOpacity",
 		inherited: true,
 		type: CSS_TYPE_LONGHAND,
-		initial_values: [ "1", "2.8", "1.000", "context-fill-opacity", "context-stroke-opacity" ],
+		initial_values: [ "1", "2.8", "1.000", "-moz-objectFillOpacity", "-moz-objectStrokeOpacity" ],
 		other_values: [ "0", "0.3", "-7.3" ],
 		invalid_values: []
 	},
 	"fill-rule": {
 		domProp: "fillRule",
 		inherited: true,
 		type: CSS_TYPE_LONGHAND,
 		initial_values: [ "nonzero" ],
@@ -3606,32 +3606,32 @@ var gCSSProperties = {
 		other_values: [ "0", "0.3", "-7.3" ],
 		invalid_values: []
 	},
 	"stroke": {
 		domProp: "stroke",
 		inherited: true,
 		type: CSS_TYPE_LONGHAND,
 		initial_values: [ "none" ],
-		other_values: [ "black", "#000", "#000000", "rgb(0,0,0)", "rgba(0,0,0,1)", "green", "#fc3", "url('#myserver')", "url(foo.svg#myserver)", 'url("#myserver") green', "currentColor", "context-fill", "context-stroke" ],
+		other_values: [ "black", "#000", "#000000", "rgb(0,0,0)", "rgba(0,0,0,1)", "green", "#fc3", "url('#myserver')", "url(foo.svg#myserver)", 'url("#myserver") green', "currentColor", "-moz-objectFill", "-moz-objectStroke" ],
 		invalid_values: [ "000000", "ff00ff" ]
 	},
 	"stroke-dasharray": {
 		domProp: "strokeDasharray",
 		inherited: true,
 		type: CSS_TYPE_LONGHAND,
-		initial_values: [ "none", "context-value" ],
+		initial_values: [ "none", "-moz-objectValue" ],
 		other_values: [ "5px,3px,2px", "5px 3px 2px", "  5px ,3px	, 2px ", "1px", "5%", "3em" ],
 		invalid_values: [ "-5px,3px,2px", "5px,3px,-2px" ]
 	},
 	"stroke-dashoffset": {
 		domProp: "strokeDashoffset",
 		inherited: true,
 		type: CSS_TYPE_LONGHAND,
-		initial_values: [ "0", "-0px", "0em", "context-value" ],
+		initial_values: [ "0", "-0px", "0em", "-moz-objectValue" ],
 		other_values: [ "3px", "3%", "1em" ],
 		invalid_values: []
 	},
 	"stroke-linecap": {
 		domProp: "strokeLinecap",
 		inherited: true,
 		type: CSS_TYPE_LONGHAND,
 		initial_values: [ "butt" ],
@@ -3653,25 +3653,25 @@ var gCSSProperties = {
 		initial_values: [ "4" ],
 		other_values: [ "1", "7", "5000", "1.1" ],
 		invalid_values: [ "0.9", "0", "-1", "3px", "-0.3" ]
 	},
 	"stroke-opacity": {
 		domProp: "strokeOpacity",
 		inherited: true,
 		type: CSS_TYPE_LONGHAND,
-		initial_values: [ "1", "2.8", "1.000", "context-fill-opacity", "context-stroke-opacity" ],
+		initial_values: [ "1", "2.8", "1.000", "-moz-objectFillOpacity", "-moz-objectStrokeOpacity" ],
 		other_values: [ "0", "0.3", "-7.3" ],
 		invalid_values: []
 	},
 	"stroke-width": {
 		domProp: "strokeWidth",
 		inherited: true,
 		type: CSS_TYPE_LONGHAND,
-		initial_values: [ "1px", "context-value" ],
+		initial_values: [ "1px", "-moz-objectValue" ],
 		other_values: [ "0", "0px", "-0em", "17px", "0.2em" ],
 		invalid_values: [ "-0.1px", "-3px" ]
 	},
 	"text-anchor": {
 		domProp: "textAnchor",
 		inherited: true,
 		type: CSS_TYPE_LONGHAND,
 		initial_values: [ "start" ],
deleted file mode 100644
--- a/layout/style/test/test_bug798843_pref.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-  Make sure that the SVG glyph context-* values are not considered real values
-  when gfx.font_rendering.opentype_svg.enabled is pref'ed off.
--->
-<head>
-  <title>Test that SVG glyph context-* values can be pref'ed off</title>
-  <script src="/tests/SimpleTest/SimpleTest.js"></script>
-</head>
-<body>
-
-<script>
-
-var props = {
-  "fill" : "context-stroke none",
-  "stroke" : "context-fill none",
-  "fillOpacity" : "context-stroke-opacity",
-  "strokeOpacity" : "context-fill-opacity",
-  "strokeDasharray" : "context-value",
-  "strokeDashoffset" : "context-value",
-  "strokeWidth" : "context-value"
-};
-
-function testDisabled() {
-  for (var p in props) {
-    document.body.style[p] = props[p];
-    is(document.body.style[p], "", p + " not settable to " + props[p]);
-    document.body.style[p] = "";
-  }
-}
-
-function testEnabled() {
-  for (var p in props) {
-    document.body.style[p] = props[p];
-    is(document.body.style[p], props[p], p + " settable to " + props[p]);
-    document.body.style[p] = "";
-  }
-
-  SpecialPowers.pushPrefEnv(
-    {'set': [['gfx.font_rendering.opentype_svg.enabled', false]]},
-    testDisabled
-  );
-}
-
-SpecialPowers.pushPrefEnv(
-  {'set': [['gfx.font_rendering.opentype_svg.enabled', true]]},
-  testEnabled
-);
-
-</script>
-
-</body>
-</html>
--- a/layout/svg/nsSVGGlyphFrame.cpp
+++ b/layout/svg/nsSVGGlyphFrame.cpp
@@ -411,21 +411,21 @@ nsSVGGlyphFrame::PaintSVG(nsRenderingCon
   SetupGlobalTransform(gfx, FOR_PAINTING, aTransformRoot);
 
   CharacterIterator iter(this, true);
   if (!iter.SetInitialMatrix(gfx)) {
     gfx->Restore();
     return NS_OK;
   }
 
-  gfxTextContextPaint *outerContextPaint =
-    (gfxTextContextPaint*)aContext->GetUserData(&gfxTextContextPaint::sUserDataKey);
+  gfxTextObjectPaint *outerObjectPaint =
+    (gfxTextObjectPaint*)aContext->GetUserData(&gfxTextObjectPaint::sUserDataKey);
 
-  nsAutoPtr<gfxTextContextPaint> objectPaint;
-  DrawMode drawMode = SetupCairoState(gfx, outerContextPaint, getter_Transfers(objectPaint));
+  nsAutoPtr<gfxTextObjectPaint> objectPaint;
+  DrawMode drawMode = SetupCairoState(gfx, outerObjectPaint, getter_Transfers(objectPaint));
 
   if (drawMode) {
     DrawCharacters(&iter, gfx, drawMode, objectPaint);
   }
   
   gfx->Restore();
 
   return NS_OK;
@@ -582,33 +582,33 @@ nsSVGGlyphFrame::AddBoundingBoxesToPath(
     aContext->Rectangle(metrics.mBoundingBox);
   }
 }
 
 void
 nsSVGGlyphFrame::DrawCharacters(CharacterIterator *aIter,
                                 gfxContext *aContext,
                                 DrawMode aDrawMode,
-                                gfxTextContextPaint *aContextPaint)
+                                gfxTextObjectPaint *aObjectPaint)
 {
   if (aDrawMode & gfxFont::GLYPH_STROKE) {
     aIter->SetLineWidthAndDashesForDrawing(aContext);
   }
 
   if (aIter->SetupForDirectTextRunDrawing(aContext)) {
     mTextRun->Draw(aContext, gfxPoint(0, 0), aDrawMode, 0,
-                   mTextRun->GetLength(), nullptr, nullptr, aContextPaint);
+                   mTextRun->GetLength(), nullptr, nullptr, aObjectPaint);
     return;
   }
 
   uint32_t i;
   while ((i = aIter->NextCluster()) != aIter->InvalidCluster()) {
     aIter->SetupForDrawing(aContext);
     mTextRun->Draw(aContext, gfxPoint(0, 0), aDrawMode, i,
-                   aIter->ClusterLength(), nullptr, nullptr, aContextPaint);
+                   aIter->ClusterLength(), nullptr, nullptr, aObjectPaint);
   }
 }
 
 SVGBBox
 nsSVGGlyphFrame::GetBBoxContribution(const gfxMatrix &aToBBoxUserspace,
                                      uint32_t aFlags)
 {
   SVGBBox bbox;
@@ -924,27 +924,27 @@ nsSVGGlyphFrame::GetBaselineOffset(float
     NS_WARNING("We don't know about this type of dominant-baseline");
     return 0.0;
   }
   return baselineAppUnits * aMetricsScale;
 }
 
 DrawMode
 nsSVGGlyphFrame::SetupCairoState(gfxContext *aContext,
-                                 gfxTextContextPaint *aOuterContextPaint,
-                                 gfxTextContextPaint **aThisContextPaint)
+                                 gfxTextObjectPaint *aOuterObjectPaint,
+                                 gfxTextObjectPaint **aThisObjectPaint)
 {
   DrawMode toDraw = DrawMode(0);
-  SVGTextContextPaint *thisContextPaint = new SVGTextContextPaint();
+  SVGTextObjectPaint *thisObjectPaint = new SVGTextObjectPaint();
 
-  if (SetupCairoStroke(aContext, aOuterContextPaint, thisContextPaint)) {
+  if (SetupCairoStroke(aContext, aOuterObjectPaint, thisObjectPaint)) {
     toDraw = DrawMode(toDraw | gfxFont::GLYPH_STROKE);
   }
 
-  if (SetupCairoFill(aContext, aOuterContextPaint, thisContextPaint)) {
+  if (SetupCairoFill(aContext, aOuterObjectPaint, thisObjectPaint)) {
     toDraw = DrawMode(toDraw | gfxFont::GLYPH_FILL);
   }
 
   uint32_t paintOrder = StyleSVG()->mPaintOrder;
   while (paintOrder) {
     uint32_t component =
       paintOrder & ((1 << NS_STYLE_PAINT_ORDER_BITWIDTH) - 1);
     if (component == NS_STYLE_PAINT_ORDER_FILL) {
@@ -952,85 +952,85 @@ nsSVGGlyphFrame::SetupCairoState(gfxCont
     }
     if (component == NS_STYLE_PAINT_ORDER_STROKE) {
       toDraw = DrawMode(toDraw | gfxFont::GLYPH_STROKE_UNDERNEATH);
       break;
     }
     paintOrder >>= NS_STYLE_PAINT_ORDER_BITWIDTH;
   }
 
-  *aThisContextPaint = thisContextPaint;
+  *aThisObjectPaint = thisObjectPaint;
 
   return toDraw;
 }
 
 bool
 nsSVGGlyphFrame::SetupCairoStroke(gfxContext *aContext,
-                                  gfxTextContextPaint *aOuterContextPaint,
-                                  SVGTextContextPaint *aThisContextPaint)
+                                  gfxTextObjectPaint *aOuterObjectPaint,
+                                  SVGTextObjectPaint *aThisObjectPaint)
 {
-  if (!nsSVGUtils::HasStroke(this, aOuterContextPaint)) {
+  if (!nsSVGUtils::HasStroke(this, aOuterObjectPaint)) {
     return false;
   }
 
   const nsStyleSVG *style = StyleSVG();
-  nsSVGUtils::SetupCairoStrokeGeometry(this, aContext, aOuterContextPaint);
+  nsSVGUtils::SetupCairoStrokeGeometry(this, aContext, aOuterObjectPaint);
   float opacity = nsSVGUtils::GetOpacity(style->mStrokeOpacitySource,
                                          style->mStrokeOpacity,
-                                         aOuterContextPaint);
+                                         aOuterObjectPaint);
 
-  SetupInheritablePaint(aContext, opacity, aOuterContextPaint,
-                        aThisContextPaint->mStrokePaint, &nsStyleSVG::mStroke,
+  SetupInheritablePaint(aContext, opacity, aOuterObjectPaint,
+                        aThisObjectPaint->mStrokePaint, &nsStyleSVG::mStroke,
                         nsSVGEffects::StrokeProperty());
 
-  aThisContextPaint->SetStrokeOpacity(opacity);
+  aThisObjectPaint->SetStrokeOpacity(opacity);
 
   return opacity != 0.0f;
 }
 
 bool
 nsSVGGlyphFrame::SetupCairoFill(gfxContext *aContext,
-                                gfxTextContextPaint *aOuterContextPaint,
-                                SVGTextContextPaint *aThisContextPaint)
+                                gfxTextObjectPaint *aOuterObjectPaint,
+                                SVGTextObjectPaint *aThisObjectPaint)
 {
   const nsStyleSVG *style = StyleSVG();
   if (style->mFill.mType == eStyleSVGPaintType_None) {
-    aThisContextPaint->SetFillOpacity(0.0f);
+    aThisObjectPaint->SetFillOpacity(0.0f);
     return false;
   }
 
   float opacity = nsSVGUtils::GetOpacity(style->mFillOpacitySource,
                                          style->mFillOpacity,
-                                         aOuterContextPaint);
+                                         aOuterObjectPaint);
 
-  SetupInheritablePaint(aContext, opacity, aOuterContextPaint,
-                        aThisContextPaint->mFillPaint, &nsStyleSVG::mFill,
+  SetupInheritablePaint(aContext, opacity, aOuterObjectPaint,
+                        aThisObjectPaint->mFillPaint, &nsStyleSVG::mFill,
                         nsSVGEffects::FillProperty());
 
-  aThisContextPaint->SetFillOpacity(opacity);
+  aThisObjectPaint->SetFillOpacity(opacity);
 
   return true;
 }
 
 void
 nsSVGGlyphFrame::SetupInheritablePaint(gfxContext *aContext,
                                        float& aOpacity,
-                                       gfxTextContextPaint *aOuterContextPaint,
-                                       SVGTextContextPaint::Paint& aTargetPaint,
+                                       gfxTextObjectPaint *aOuterObjectPaint,
+                                       SVGTextObjectPaint::Paint& aTargetPaint,
                                        nsStyleSVGPaint nsStyleSVG::*aFillOrStroke,
                                        const FramePropertyDescriptor *aProperty)
 {
   const nsStyleSVG *style = StyleSVG();
   nsSVGPaintServerFrame *ps =
     nsSVGEffects::GetPaintServer(this, &(style->*aFillOrStroke), aProperty);
 
   if (ps && ps->SetupPaintServer(aContext, this, aFillOrStroke, aOpacity)) {
     aTargetPaint.SetPaintServer(this, aContext->CurrentMatrix(), ps);
-  } else if (SetupContextPaint(aContext, aFillOrStroke, aOpacity, aOuterContextPaint)) {
-    aTargetPaint.SetContextPaint(aOuterContextPaint, (style->*aFillOrStroke).mType);
+  } else if (SetupObjectPaint(aContext, aFillOrStroke, aOpacity, aOuterObjectPaint)) {
+    aTargetPaint.SetObjectPaint(aOuterObjectPaint, (style->*aFillOrStroke).mType);
   } else {
     nscolor color = nsSVGUtils::GetFallbackOrPaintColor(aContext,
                                                         StyleContext(),
                                                         aFillOrStroke);
     aTargetPaint.SetColor(color);
 
     nsRefPtr<gfxPattern> pattern =
       new gfxPattern(gfxRGBA(NS_GET_R(color) / 255.0,
@@ -1038,66 +1038,66 @@ nsSVGGlyphFrame::SetupInheritablePaint(g
                              NS_GET_B(color) / 255.0,
                              NS_GET_A(color) / 255.0 * aOpacity));
 
     aContext->SetPattern(pattern);
   }
 }
 
 bool
-nsSVGGlyphFrame::SetupContextPaint(gfxContext *aContext,
-                                   nsStyleSVGPaint nsStyleSVG::*aFillOrStroke,
-                                   float& aOpacity,
-                                   gfxTextContextPaint *aOuterContextPaint)
+nsSVGGlyphFrame::SetupObjectPaint(gfxContext *aContext,
+                                  nsStyleSVGPaint nsStyleSVG::*aFillOrStroke,
+                                  float& aOpacity,
+                                  gfxTextObjectPaint *aOuterObjectPaint)
 {
-  if (!aOuterContextPaint) {
+  if (!aOuterObjectPaint) {
     NS_WARNING("Outer object paint value used outside SVG glyph");
     return false;
   }
 
   const nsStyleSVG *style = StyleSVG();
   const nsStyleSVGPaint &paint = style->*aFillOrStroke;
 
-  if (paint.mType != eStyleSVGPaintType_ContextFill &&
-      paint.mType != eStyleSVGPaintType_ContextStroke) {
+  if (paint.mType != eStyleSVGPaintType_ObjectFill &&
+      paint.mType != eStyleSVGPaintType_ObjectStroke) {
     return false;
   }
 
   gfxMatrix current = aContext->CurrentMatrix();
   nsRefPtr<gfxPattern> pattern =
-    paint.mType == eStyleSVGPaintType_ContextFill ?
-      aOuterContextPaint->GetFillPattern(aOpacity, current) :
-      aOuterContextPaint->GetStrokePattern(aOpacity, current);
+    paint.mType == eStyleSVGPaintType_ObjectFill ?
+      aOuterObjectPaint->GetFillPattern(aOpacity, current) :
+      aOuterObjectPaint->GetStrokePattern(aOpacity, current);
   if (!pattern) {
     return false;
   }
 
   aContext->SetPattern(pattern);
   return true;
 }
 
 //----------------------------------------------------------------------
-// SVGTextContextPaint methods:
+// SVGTextObjectPaint methods:
 
 already_AddRefed<gfxPattern>
-mozilla::SVGTextContextPaint::GetFillPattern(float aOpacity,
+mozilla::SVGTextObjectPaint::GetFillPattern(float aOpacity,
                                             const gfxMatrix& aCTM)
 {
   return mFillPaint.GetPattern(aOpacity, &nsStyleSVG::mFill, aCTM);
 }
 
 already_AddRefed<gfxPattern>
-mozilla::SVGTextContextPaint::GetStrokePattern(float aOpacity,
+mozilla::SVGTextObjectPaint::GetStrokePattern(float aOpacity,
                                               const gfxMatrix& aCTM)
 {
   return mStrokePaint.GetPattern(aOpacity, &nsStyleSVG::mStroke, aCTM);
 }
 
 already_AddRefed<gfxPattern>
-mozilla::SVGTextContextPaint::Paint::GetPattern(float aOpacity,
+mozilla::SVGTextObjectPaint::Paint::GetPattern(float aOpacity,
                                                nsStyleSVGPaint nsStyleSVG::*aFillOrStroke,
                                                const gfxMatrix& aCTM)
 {
   nsRefPtr<gfxPattern> pattern;
   if (mPatternCache.Get(aOpacity, getter_AddRefs(pattern))) {
     // Set the pattern matrix just in case it was messed with by a previous
     // caller. We should get the same matrix each time a pattern is constructed
     // so this should be fine.
@@ -1127,24 +1127,24 @@ mozilla::SVGTextContextPaint::Paint::Get
       gfxMatrix m = pattern->GetMatrix();
       gfxMatrix deviceToOriginalUserSpace = mContextMatrix;
       deviceToOriginalUserSpace.Invert();
       // mPatternMatrix maps device space to pattern space via original user space
       mPatternMatrix = deviceToOriginalUserSpace * m;
     }
     pattern->SetMatrix(aCTM * mPatternMatrix);
     break;
-  case eStyleSVGPaintType_ContextFill:
-    pattern = mPaintDefinition.mContextPaint->GetFillPattern(aOpacity, aCTM);
-    // Don't cache this. mContextPaint will have cached it anyway. If we
+  case eStyleSVGPaintType_ObjectFill:
+    pattern = mPaintDefinition.mObjectPaint->GetFillPattern(aOpacity, aCTM);
+    // Don't cache this. mObjectPaint will have cached it anyway. If we
     // cache it, we'll have to compute mPatternMatrix, which is annoying.
     return pattern.forget();
-  case eStyleSVGPaintType_ContextStroke:
-    pattern = mPaintDefinition.mContextPaint->GetStrokePattern(aOpacity, aCTM);
-    // Don't cache this. mContextPaint will have cached it anyway. If we
+  case eStyleSVGPaintType_ObjectStroke:
+    pattern = mPaintDefinition.mObjectPaint->GetStrokePattern(aOpacity, aCTM);
+    // Don't cache this. mObjectPaint will have cached it anyway. If we
     // cache it, we'll have to compute mPatternMatrix, which is annoying.
     return pattern.forget();
   default:
     return nullptr;
   }
 
   mPatternCache.Put(aOpacity, pattern);
   return pattern.forget();
--- a/layout/svg/nsSVGGlyphFrame.h
+++ b/layout/svg/nsSVGGlyphFrame.h
@@ -17,28 +17,28 @@
 
 class CharacterIterator;
 class gfxContext;
 class nsDisplaySVGGlyphs;
 class nsRenderingContext;
 class nsSVGGlyphFrame;
 class nsSVGTextFrame;
 class nsSVGTextPathFrame;
-class gfxTextContextPaint;
+class gfxTextObjectPaint;
 
 struct CharacterPosition;
 
 namespace mozilla {
 
 namespace dom {
 class SVGIRect;
 }
 
 // Slightly horrible callback for deferring application of opacity
-struct SVGTextContextPaint : public gfxTextContextPaint {
+struct SVGTextObjectPaint : public gfxTextObjectPaint {
   already_AddRefed<gfxPattern> GetFillPattern(float aOpacity,
                                               const gfxMatrix& aCTM) MOZ_OVERRIDE;
   already_AddRefed<gfxPattern> GetStrokePattern(float aOpacity,
                                                 const gfxMatrix& aCTM) MOZ_OVERRIDE;
 
   void SetFillOpacity(float aOpacity) { mFillOpacity = aOpacity; }
   float GetFillOpacity() MOZ_OVERRIDE { return mFillOpacity; }
 
@@ -56,28 +56,28 @@ struct SVGTextContextPaint : public gfxT
       mContextMatrix = aContextMatrix;
     }
 
     void SetColor(const nscolor &aColor) {
       mPaintType = eStyleSVGPaintType_Color;
       mPaintDefinition.mColor = aColor;
     }
 
-    void SetContextPaint(gfxTextContextPaint *aContextPaint,
-                         nsStyleSVGPaintType aPaintType) {
-      NS_ASSERTION(aPaintType == eStyleSVGPaintType_ContextFill ||
-                   aPaintType == eStyleSVGPaintType_ContextStroke,
-                   "Invalid context paint type");
+    void SetObjectPaint(gfxTextObjectPaint *aObjectPaint,
+                        nsStyleSVGPaintType aPaintType) {
+      NS_ASSERTION(aPaintType == eStyleSVGPaintType_ObjectFill ||
+                   aPaintType == eStyleSVGPaintType_ObjectStroke,
+                   "Invalid object paint type");
       mPaintType = aPaintType;
-      mPaintDefinition.mContextPaint = aContextPaint;
+      mPaintDefinition.mObjectPaint = aObjectPaint;
     }
 
     union {
       nsSVGPaintServerFrame *mPaintServerFrame;
-      gfxTextContextPaint *mContextPaint;
+      gfxTextObjectPaint *mObjectPaint;
       nscolor mColor;
     } mPaintDefinition;
 
     nsIFrame *mFrame;
     // CTM defining the user space for the pattern we will use.
     gfxMatrix mContextMatrix;
     nsStyleSVGPaintType mPaintType;
 
@@ -307,17 +307,17 @@ private:
 
   void AddCharactersToPath(CharacterIterator *aIter,
                            gfxContext *aContext);
   void AddBoundingBoxesToPath(CharacterIterator *aIter,
                               gfxContext *aContext);
   void DrawCharacters(CharacterIterator *aIter,
                       gfxContext *aContext,
                       DrawMode aDrawMode,
-                      gfxTextContextPaint *aContextPaint = nullptr);
+                      gfxTextObjectPaint *aObjectPaint = nullptr);
 
   void NotifyGlyphMetricsChange();
   void SetupGlobalTransform(gfxContext *aContext, uint32_t aFor,
                             nsIFrame* aTransformRoot = nullptr);
   float GetSubStringAdvance(uint32_t charnum, uint32_t fragmentChars,
                             float aMetricsScale);
   gfxFloat GetBaselineOffset(float aMetricsScale);
 
@@ -335,57 +335,57 @@ private:
   uint32_t mStartIndex;
   uint32_t mGetCanvasTMForFlag;
   bool mCompressWhitespace;
   bool mTrimLeadingWhitespace;
   bool mTrimTrailingWhitespace;
 
 private:
   DrawMode SetupCairoState(gfxContext *aContext,
-                           gfxTextContextPaint *aOuterContextPaint,
-                           gfxTextContextPaint **aThisContextPaint);
+                           gfxTextObjectPaint *aOuterObjectPaint,
+                           gfxTextObjectPaint **aThisObjectPaint);
 
   /**
    * Sets up the stroke style in |aContext| and stores stroke pattern
-   * information in |aThisContextPaint|.
+   * information in |aThisObjectPaint|.
    */
   bool SetupCairoStroke(gfxContext *aContext,
-                        gfxTextContextPaint *aOuterContextPaint,
-                        SVGTextContextPaint *aThisContextPaint);
+                        gfxTextObjectPaint *aOuterObjectPaint,
+                        SVGTextObjectPaint *aThisObjectPaint);
 
   /**
    * Sets up the fill style in |aContext| and stores fill pattern information
-   * in |aThisContextPaint|.
+   * in |aThisObjectPaint|.
    */
   bool SetupCairoFill(gfxContext *aContext,
-                      gfxTextContextPaint *aOuterContextPaint,
-                      SVGTextContextPaint *aThisContextPaint);
+                      gfxTextObjectPaint *aOuterObjectPaint,
+                      SVGTextObjectPaint *aThisObjectPaint);
 
   /**
    * Sets the current pattern to the fill or stroke style of the outer text
-   * context. Will also set the paint opacity to transparent if the paint is set
+   * object. Will also set the paint opacity to transparent if the paint is set
    * to "none".
    */
-  bool SetupContextPaint(gfxContext *aContext,
+  bool SetupObjectPaint(gfxContext *aContext,
                         nsStyleSVGPaint nsStyleSVG::*aFillOrStroke,
                         float& aOpacity,
-                        gfxTextContextPaint *aContextPaint);
+                        gfxTextObjectPaint *aObjectPaint);
 
   /**
    * Stores in |aTargetPaint| information on how to reconstruct the current
    * fill or stroke pattern. Will also set the paint opacity to transparent if
    * the paint is set to "none".
-   * @param aOuterContextPaint pattern information from the outer text context
+   * @param aOuterObjectPaint pattern information from the outer text object
    * @param aTargetPaint where to store the current pattern information
    * @param aFillOrStroke member pointer to the paint we are setting up
    * @param aProperty the frame property descriptor of the fill or stroke paint
    *   server frame
    */
   void SetupInheritablePaint(gfxContext *aContext,
                              float& aOpacity,
-                             gfxTextContextPaint *aOuterContextPaint,
-                             SVGTextContextPaint::Paint& aTargetPaint,
+                             gfxTextObjectPaint *aOuterObjectPaint,
+                             SVGTextObjectPaint::Paint& aTargetPaint,
                              nsStyleSVGPaint nsStyleSVG::*aFillOrStroke,
                              const FramePropertyDescriptor *aProperty);
 
 };
 
 #endif
--- a/layout/svg/nsSVGPathGeometryFrame.cpp
+++ b/layout/svg/nsSVGPathGeometryFrame.cpp
@@ -605,26 +605,26 @@ nsSVGPathGeometryFrame::Render(nsRenderi
       gfx->SetColor(gfxRGBA(1.0f, 1.0f, 1.0f, 1.0f));
       gfx->Fill();
       gfx->NewPath();
     }
 
     return;
   }
 
-  gfxTextContextPaint *contextPaint =
-    (gfxTextContextPaint*)aContext->GetUserData(&gfxTextContextPaint::sUserDataKey);
+  gfxTextObjectPaint *objectPaint =
+    (gfxTextObjectPaint*)aContext->GetUserData(&gfxTextObjectPaint::sUserDataKey);
 
   if ((aRenderComponents & eRenderFill) &&
-      nsSVGUtils::SetupCairoFillPaint(this, gfx, contextPaint)) {
+      nsSVGUtils::SetupCairoFillPaint(this, gfx, objectPaint)) {
     gfx->Fill();
   }
 
   if ((aRenderComponents & eRenderStroke) &&
-       nsSVGUtils::SetupCairoStroke(this, gfx, contextPaint)) {
+       nsSVGUtils::SetupCairoStroke(this, gfx, objectPaint)) {
     gfx->Stroke();
   }
 
   gfx->NewPath();
 
   gfx->Restore();
 }
 
@@ -648,24 +648,24 @@ nsSVGPathGeometryFrame::GeneratePath(gfx
 
   aContext->NewPath();
   static_cast<nsSVGPathGeometryElement*>(mContent)->ConstructPath(aContext);
 }
 
 void
 nsSVGPathGeometryFrame::PaintMarkers(nsRenderingContext* aContext)
 {
-  gfxTextContextPaint *contextPaint =
-    (gfxTextContextPaint*)aContext->GetUserData(&gfxTextContextPaint::sUserDataKey);
+  gfxTextObjectPaint *objectPaint =
+    (gfxTextObjectPaint*)aContext->GetUserData(&gfxTextObjectPaint::sUserDataKey);
 
   if (static_cast<nsSVGPathGeometryElement*>(mContent)->IsMarkable()) {
     MarkerProperties properties = GetMarkerProperties(this);
 
     if (properties.MarkersExist()) {
-      float strokeWidth = nsSVGUtils::GetStrokeWidth(this, contextPaint);
+      float strokeWidth = nsSVGUtils::GetStrokeWidth(this, objectPaint);
 
       nsTArray<nsSVGMark> marks;
       static_cast<nsSVGPathGeometryElement*>
                  (mContent)->GetMarkPoints(&marks);
 
       uint32_t num = marks.Length();
       if (num) {
         // These are in the same order as the nsSVGMark::Type constants.
--- a/layout/svg/nsSVGTextFrame2.cpp
+++ b/layout/svg/nsSVGTextFrame2.cpp
@@ -3520,41 +3520,41 @@ nsSVGTextFrame2::PaintSVG(nsRenderingCon
   while (run.mFrame) {
     nsTextFrame* frame = run.mFrame;
 
     // Determine how much of the left and right edges of the text frame we
     // need to ignore.
     SVGCharClipDisplayItem item(run);
 
     // Set up the fill and stroke so that SVG glyphs can get painted correctly
-    // when they use context-fill etc.
+    // when they use -moz-objectFill values etc.
     gfx->SetMatrix(initialMatrix);
-    gfxTextContextPaint *outerContextPaint =
-      (gfxTextContextPaint*)aContext->GetUserData(&gfxTextContextPaint::sUserDataKey);
-
-    nsAutoPtr<gfxTextContextPaint> contextPaint;
-    SetupCairoState(gfx, frame, outerContextPaint, getter_Transfers(contextPaint));
+    gfxTextObjectPaint *outerObjectPaint =
+      (gfxTextObjectPaint*)aContext->GetUserData(&gfxTextObjectPaint::sUserDataKey);
+
+    nsAutoPtr<gfxTextObjectPaint> objectPaint;
+    SetupCairoState(gfx, frame, outerObjectPaint, getter_Transfers(objectPaint));
 
     // Set up the transform for painting the text frame for the substring
     // indicated by the run.
     gfxMatrix runTransform =
       run.GetTransformFromUserSpaceForPainting(presContext, item);
     runTransform.Multiply(currentMatrix);
     gfx->SetMatrix(runTransform);
 
     nsRect frameRect = frame->GetVisualOverflowRect();
     bool paintSVGGlyphs;
     if (ShouldRenderAsPath(aContext, frame, paintSVGGlyphs)) {
       SVGTextDrawPathCallbacks callbacks(aContext, frame, matrixForPaintServers,
                                          paintSVGGlyphs);
       frame->PaintText(aContext, nsPoint(), frameRect, item,
-                       contextPaint, &callbacks);
+                       objectPaint, &callbacks);
     } else {
       frame->PaintText(aContext, nsPoint(), frameRect, item,
-                       contextPaint, nullptr);
+                       objectPaint, nullptr);
     }
 
     if (frame == caretFrame && ShouldPaintCaret(run, caret)) {
       // XXX Should we be looking at the fill/stroke colours to paint the
       // caret with, rather than using the color property?
       caret->PaintCaret(nullptr, aContext, frame, nsPoint());
       gfx->NewPath();
     }
@@ -5384,141 +5384,141 @@ nsSVGTextFrame2::TransformFrameRectFromT
                          NSAppUnitsToFloatPixels(mRect.y, factor));
 
   return result - framePosition;
 }
 
 gfxFont::DrawMode
 nsSVGTextFrame2::SetupCairoState(gfxContext* aContext,
                                  nsIFrame* aFrame,
-                                 gfxTextContextPaint* aOuterContextPaint,
-                                 gfxTextContextPaint** aThisContextPaint)
+                                 gfxTextObjectPaint* aOuterObjectPaint,
+                                 gfxTextObjectPaint** aThisObjectPaint)
 {
   gfxFont::DrawMode toDraw = gfxFont::DrawMode(0);
-  SVGTextContextPaint *thisContextPaint = new SVGTextContextPaint();
-
-  if (SetupCairoStroke(aContext, aFrame, aOuterContextPaint, thisContextPaint)) {
+  SVGTextObjectPaint *thisObjectPaint = new SVGTextObjectPaint();
+
+  if (SetupCairoStroke(aContext, aFrame, aOuterObjectPaint, thisObjectPaint)) {
     toDraw = gfxFont::DrawMode(toDraw | gfxFont::GLYPH_STROKE);
   }
 
-  if (SetupCairoFill(aContext, aFrame, aOuterContextPaint, thisContextPaint)) {
+  if (SetupCairoFill(aContext, aFrame, aOuterObjectPaint, thisObjectPaint)) {
     toDraw = gfxFont::DrawMode(toDraw | gfxFont::GLYPH_FILL);
   }
 
-  *aThisContextPaint = thisContextPaint;
+  *aThisObjectPaint = thisObjectPaint;
 
   return toDraw;
 }
 
 bool
 nsSVGTextFrame2::SetupCairoStroke(gfxContext* aContext,
                                   nsIFrame* aFrame,
-                                  gfxTextContextPaint* aOuterContextPaint,
-                                  SVGTextContextPaint* aThisContextPaint)
+                                  gfxTextObjectPaint* aOuterObjectPaint,
+                                  SVGTextObjectPaint* aThisObjectPaint)
 {
   const nsStyleSVG *style = aFrame->StyleSVG();
   if (style->mStroke.mType == eStyleSVGPaintType_None) {
-    aThisContextPaint->SetStrokeOpacity(0.0f);
+    aThisObjectPaint->SetStrokeOpacity(0.0f);
     return false;
   }
 
-  nsSVGUtils::SetupCairoStrokeGeometry(aFrame, aContext, aOuterContextPaint);
+  nsSVGUtils::SetupCairoStrokeGeometry(aFrame, aContext, aOuterObjectPaint);
   float opacity = nsSVGUtils::GetOpacity(style->mStrokeOpacitySource,
                                          style->mStrokeOpacity,
-                                         aOuterContextPaint);
-
-  SetupInheritablePaint(aContext, aFrame, opacity, aOuterContextPaint,
-                        aThisContextPaint->mStrokePaint, &nsStyleSVG::mStroke,
+                                         aOuterObjectPaint);
+
+  SetupInheritablePaint(aContext, aFrame, opacity, aOuterObjectPaint,
+                        aThisObjectPaint->mStrokePaint, &nsStyleSVG::mStroke,
                         nsSVGEffects::StrokeProperty());
 
-  aThisContextPaint->SetStrokeOpacity(opacity);
+  aThisObjectPaint->SetStrokeOpacity(opacity);
 
   return opacity != 0.0f;
 }
 
 bool
 nsSVGTextFrame2::SetupCairoFill(gfxContext* aContext,
                                 nsIFrame* aFrame,
-                                gfxTextContextPaint* aOuterContextPaint,
-                                SVGTextContextPaint* aThisContextPaint)
+                                gfxTextObjectPaint* aOuterObjectPaint,
+                                SVGTextObjectPaint* aThisObjectPaint)
 {
   const nsStyleSVG *style = aFrame->StyleSVG();
   if (style->mFill.mType == eStyleSVGPaintType_None) {
-    aThisContextPaint->SetFillOpacity(0.0f);
+    aThisObjectPaint->SetFillOpacity(0.0f);
     return false;
   }
 
   float opacity = nsSVGUtils::GetOpacity(style->mFillOpacitySource,
                                          style->mFillOpacity,
-                                         aOuterContextPaint);
-
-  SetupInheritablePaint(aContext, aFrame, opacity, aOuterContextPaint,
-                        aThisContextPaint->mFillPaint, &nsStyleSVG::mFill,
+                                         aOuterObjectPaint);
+
+  SetupInheritablePaint(aContext, aFrame, opacity, aOuterObjectPaint,
+                        aThisObjectPaint->mFillPaint, &nsStyleSVG::mFill,
                         nsSVGEffects::FillProperty());
 
-  aThisContextPaint->SetFillOpacity(opacity);
+  aThisObjectPaint->SetFillOpacity(opacity);
 
   return true;
 }
 
 void
 nsSVGTextFrame2::SetupInheritablePaint(gfxContext* aContext,
                                        nsIFrame* aFrame,
                                        float& aOpacity,
-                                       gfxTextContextPaint* aOuterContextPaint,
-                                       SVGTextContextPaint::Paint& aTargetPaint,
+                                       gfxTextObjectPaint* aOuterObjectPaint,
+                                       SVGTextObjectPaint::Paint& aTargetPaint,
                                        nsStyleSVGPaint nsStyleSVG::*aFillOrStroke,
                                        const FramePropertyDescriptor* aProperty)
 {
   const nsStyleSVG *style = aFrame->StyleSVG();
   nsSVGPaintServerFrame *ps =
     nsSVGEffects::GetPaintServer(aFrame, &(style->*aFillOrStroke), aProperty);
 
   if (ps && ps->SetupPaintServer(aContext, aFrame, aFillOrStroke, aOpacity)) {
     aTargetPaint.SetPaintServer(aFrame, aContext->CurrentMatrix(), ps);
-  } else if (SetupContextPaint(aContext, aFrame, aFillOrStroke, aOpacity, aOuterContextPaint)) {
-    aTargetPaint.SetContextPaint(aOuterContextPaint, (style->*aFillOrStroke).mType);
+  } else if (SetupObjectPaint(aContext, aFrame, aFillOrStroke, aOpacity, aOuterObjectPaint)) {
+    aTargetPaint.SetObjectPaint(aOuterObjectPaint, (style->*aFillOrStroke).mType);
   } else {
     nscolor color = nsSVGUtils::GetFallbackOrPaintColor(aContext,
                                                         aFrame->StyleContext(),
                                                         aFillOrStroke);
     aTargetPaint.SetColor(color);
 
     nsRefPtr<gfxPattern> pattern =
       new gfxPattern(gfxRGBA(NS_GET_R(color) / 255.0,
                              NS_GET_G(color) / 255.0,
                              NS_GET_B(color) / 255.0,
                              NS_GET_A(color) / 255.0 * aOpacity));
     aContext->SetPattern(pattern);
   }
 }
 
 bool
-nsSVGTextFrame2::SetupContextPaint(gfxContext* aContext,
-                                   nsIFrame* aFrame,
-                                   nsStyleSVGPaint nsStyleSVG::*aFillOrStroke,
-                                   float& aOpacity,
-                                   gfxTextContextPaint* aOuterContextPaint)
+nsSVGTextFrame2::SetupObjectPaint(gfxContext* aContext,
+                                  nsIFrame* aFrame,
+                                  nsStyleSVGPaint nsStyleSVG::*aFillOrStroke,
+                                  float& aOpacity,
+                                  gfxTextObjectPaint* aOuterObjectPaint)
 {
-  if (!aOuterContextPaint) {
+  if (!aOuterObjectPaint) {
     return false;
   }
 
   const nsStyleSVG *style = aFrame->StyleSVG();
   const nsStyleSVGPaint &paint = style->*aFillOrStroke;
 
-  if (paint.mType != eStyleSVGPaintType_ContextFill &&
-      paint.mType != eStyleSVGPaintType_ContextStroke) {
+  if (paint.mType != eStyleSVGPaintType_ObjectFill &&
+      paint.mType != eStyleSVGPaintType_ObjectStroke) {
     return false;
   }
 
   gfxMatrix current = aContext->CurrentMatrix();
   nsRefPtr<gfxPattern> pattern =
-    paint.mType == eStyleSVGPaintType_ContextFill ?
-      aOuterContextPaint->GetFillPattern(aOpacity, current) :
-      aOuterContextPaint->GetStrokePattern(aOpacity, current);
+    paint.mType == eStyleSVGPaintType_ObjectFill ?
+      aOuterObjectPaint->GetFillPattern(aOpacity, current) :
+      aOuterObjectPaint->GetStrokePattern(aOpacity, current);
   if (!pattern) {
     return false;
   }
 
   aContext->SetPattern(pattern);
   return true;
 }
--- a/layout/svg/nsSVGTextFrame2.h
+++ b/layout/svg/nsSVGTextFrame2.h
@@ -7,17 +7,17 @@
 #define NS_SVGTEXTFRAME2_H
 
 #include "mozilla/Attributes.h"
 #include "gfxFont.h"
 #include "gfxMatrix.h"
 #include "gfxRect.h"
 #include "gfxSVGGlyphs.h"
 #include "nsStubMutationObserver.h"
-#include "nsSVGGlyphFrame.h" // for SVGTextContextPaint
+#include "nsSVGGlyphFrame.h" // for SVGTextObjectPaint
 #include "nsSVGTextContainerFrame.h"
 
 class nsDisplaySVGText;
 class nsRenderingContext;
 class nsSVGTextFrame2;
 class nsTextFrame;
 
 typedef nsSVGDisplayContainerFrame nsSVGTextFrame2Base;
@@ -518,63 +518,63 @@ private:
   // Methods to get information for a <textPath> frame.
   nsIFrame* GetTextPathPathFrame(nsIFrame* aTextPathFrame);
   already_AddRefed<gfxFlattenedPath> GetFlattenedTextPath(nsIFrame* aTextPathFrame);
   gfxFloat GetOffsetScale(nsIFrame* aTextPathFrame);
   gfxFloat GetStartOffset(nsIFrame* aTextPathFrame);
 
   gfxFont::DrawMode SetupCairoState(gfxContext* aContext,
                                     nsIFrame* aFrame,
-                                    gfxTextContextPaint* aOuterContextPaint,
-                                    gfxTextContextPaint** aThisContextPaint);
+                                    gfxTextObjectPaint* aOuterObjectPaint,
+                                    gfxTextObjectPaint** aThisObjectPaint);
 
   /**
    * Sets up the stroke style for |aFrame| in |aContext| and stores stroke
-   * pattern information in |aThisContextPaint|.
+   * pattern information in |aThisObjectPaint|.
    */
   bool SetupCairoStroke(gfxContext* aContext,
                         nsIFrame* aFrame,
-                        gfxTextContextPaint* aOuterContextPaint,
-                        SVGTextContextPaint* aThisContextPaint);
+                        gfxTextObjectPaint* aOuterObjectPaint,
+                        SVGTextObjectPaint* aThisObjectPaint);
 
   /**
    * Sets up the fill style for |aFrame| in |aContext| and stores fill pattern
-   * information in |aThisContextPaint|.
+   * information in |aThisObjectPaint|.
    */
   bool SetupCairoFill(gfxContext* aContext,
                       nsIFrame* aFrame,
-                      gfxTextContextPaint* aOuterContextPaint,
-                      SVGTextContextPaint* aThisContextPaint);
+                      gfxTextObjectPaint* aOuterObjectPaint,
+                      SVGTextObjectPaint* aThisObjectPaint);
 
   /**
    * Sets the current pattern for |aFrame| to the fill or stroke style of the
-   * outer text context. Will also set the paint opacity to transparent if the
+   * outer text object. Will also set the paint opacity to transparent if the
    * paint is set to "none".
    */
-  bool SetupContextPaint(gfxContext* aContext,
+  bool SetupObjectPaint(gfxContext* aContext,
                         nsIFrame* aFrame,
                         nsStyleSVGPaint nsStyleSVG::*aFillOrStroke,
                         float& aOpacity,
-                        gfxTextContextPaint* aContextPaint);
+                        gfxTextObjectPaint* aObjectPaint);
 
   /**
    * Stores in |aTargetPaint| information on how to reconstruct the current
    * fill or stroke pattern. Will also set the paint opacity to transparent if
    * the paint is set to "none".
-   * @param aOuterContextPaint pattern information from the outer text context
+   * @param aOuterObjectPaint pattern information from the outer text object
    * @param aTargetPaint where to store the current pattern information
    * @param aFillOrStroke member pointer to the paint we are setting up
    * @param aProperty the frame property descriptor of the fill or stroke paint
    *   server frame
    */
   void SetupInheritablePaint(gfxContext* aContext,
                              nsIFrame* aFrame,
                              float& aOpacity,
-                             gfxTextContextPaint* aOuterContextPaint,
-                             SVGTextContextPaint::Paint& aTargetPaint,
+                             gfxTextObjectPaint* aOuterObjectPaint,
+                             SVGTextObjectPaint::Paint& aTargetPaint,
                              nsStyleSVGPaint nsStyleSVG::*aFillOrStroke,
                              const FramePropertyDescriptor* aProperty);
 
   /**
    * The MutationObserver we have registered for the <text> element subtree.
    */
   MutationObserver mMutationObserver;
 
--- a/layout/svg/nsSVGUtils.cpp
+++ b/layout/svg/nsSVGUtils.cpp
@@ -1431,18 +1431,18 @@ nsSVGUtils::PathExtentsToMaxStrokeExtent
 
 /* static */ nscolor
 nsSVGUtils::GetFallbackOrPaintColor(gfxContext *aContext, nsStyleContext *aStyleContext,
                                     nsStyleSVGPaint nsStyleSVG::*aFillOrStroke)
 {
   const nsStyleSVGPaint &paint = aStyleContext->StyleSVG()->*aFillOrStroke;
   nsStyleContext *styleIfVisited = aStyleContext->GetStyleIfVisited();
   bool isServer = paint.mType == eStyleSVGPaintType_Server ||
-                  paint.mType == eStyleSVGPaintType_ContextFill ||
-                  paint.mType == eStyleSVGPaintType_ContextStroke;
+                  paint.mType == eStyleSVGPaintType_ObjectFill ||
+                  paint.mType == eStyleSVGPaintType_ObjectStroke;
   nscolor color = isServer ? paint.mFallbackColor : paint.mPaint.mColor;
   if (styleIfVisited) {
     const nsStyleSVGPaint &paintIfVisited =
       styleIfVisited->StyleSVG()->*aFillOrStroke;
     // To prevent Web content from detecting if a user has visited a URL
     // (via URL loading triggered by paint servers or performance
     // differences between paint servers or between a paint server and a
     // color), we do not allow whether links are visited to change which
@@ -1479,177 +1479,177 @@ MaybeOptimizeOpacity(nsIFrame *aFrame, f
   float opacity = aFrame->StyleDisplay()->mOpacity;
   if (opacity < 1 && nsSVGUtils::CanOptimizeOpacity(aFrame)) {
     return aFillOrStrokeOpacity * opacity;
   }
   return aFillOrStrokeOpacity;
 }
 
 /* static */ bool
-nsSVGUtils::SetupContextPaint(gfxContext *aContext,
-                              gfxTextContextPaint *aContextPaint,
-                              const nsStyleSVGPaint &aPaint,
-                              float aOpacity)
+nsSVGUtils::SetupObjectPaint(gfxContext *aContext,
+                             gfxTextObjectPaint *aObjectPaint,
+                             const nsStyleSVGPaint &aPaint,
+                             float aOpacity)
 {
   nsRefPtr<gfxPattern> pattern;
 
-  if (!aContextPaint) {
+  if (!aObjectPaint) {
     return false;
   }
 
   switch (aPaint.mType) {
-    case eStyleSVGPaintType_ContextFill:
-      pattern = aContextPaint->GetFillPattern(aOpacity, aContext->CurrentMatrix());
+    case eStyleSVGPaintType_ObjectFill:
+      pattern = aObjectPaint->GetFillPattern(aOpacity, aContext->CurrentMatrix());
       break;
-    case eStyleSVGPaintType_ContextStroke:
-      pattern = aContextPaint->GetStrokePattern(aOpacity, aContext->CurrentMatrix());
+    case eStyleSVGPaintType_ObjectStroke:
+      pattern = aObjectPaint->GetStrokePattern(aOpacity, aContext->CurrentMatrix());
       break;
     default:
       return false;
   }
 
   if (!pattern) {
     return false;
   }
 
   aContext->SetPattern(pattern);
 
   return true;
 }
 
 bool
 nsSVGUtils::SetupCairoFillPaint(nsIFrame *aFrame, gfxContext* aContext,
-                                gfxTextContextPaint *aContextPaint)
+                                gfxTextObjectPaint *aObjectPaint)
 {
   const nsStyleSVG* style = aFrame->StyleSVG();
   if (style->mFill.mType == eStyleSVGPaintType_None)
     return false;
 
   if (style->mFillRule == NS_STYLE_FILL_RULE_EVENODD)
     aContext->SetFillRule(gfxContext::FILL_RULE_EVEN_ODD);
   else
     aContext->SetFillRule(gfxContext::FILL_RULE_WINDING);
 
   float opacity = MaybeOptimizeOpacity(aFrame,
                                        GetOpacity(style->mFillOpacitySource,
                                                   style->mFillOpacity,
-                                                  aContextPaint));
+                                                  aObjectPaint));
   nsSVGPaintServerFrame *ps =
     nsSVGEffects::GetPaintServer(aFrame, &style->mFill, nsSVGEffects::FillProperty());
   if (ps && ps->SetupPaintServer(aContext, aFrame, &nsStyleSVG::mFill, opacity))
     return true;
 
-  if (SetupContextPaint(aContext, aContextPaint, style->mFill, opacity)) {
+  if (SetupObjectPaint(aContext, aObjectPaint, style->mFill, opacity)) {
     return true;
   }
 
   // On failure, use the fallback colour in case we have an
   // objectBoundingBox where the width or height of the object is zero.
   // See http://www.w3.org/TR/SVG11/coords.html#ObjectBoundingBox
   SetupFallbackOrPaintColor(aContext, aFrame->StyleContext(),
                             &nsStyleSVG::mFill, opacity);
 
   return true;
 }
 
 bool
 nsSVGUtils::SetupCairoStrokePaint(nsIFrame *aFrame, gfxContext* aContext,
-                                  gfxTextContextPaint *aContextPaint)
+                                  gfxTextObjectPaint *aObjectPaint)
 {
   const nsStyleSVG* style = aFrame->StyleSVG();
   if (style->mStroke.mType == eStyleSVGPaintType_None)
     return false;
 
   float opacity = MaybeOptimizeOpacity(aFrame,
                                        GetOpacity(style->mStrokeOpacitySource,
                                                   style->mStrokeOpacity,
-                                                  aContextPaint));
+                                                  aObjectPaint));
 
   nsSVGPaintServerFrame *ps =
     nsSVGEffects::GetPaintServer(aFrame, &style->mStroke, nsSVGEffects::StrokeProperty());
   if (ps && ps->SetupPaintServer(aContext, aFrame, &nsStyleSVG::mStroke, opacity))
     return true;
 
-  if (SetupContextPaint(aContext, aContextPaint, style->mStroke, opacity)) {
+  if (SetupObjectPaint(aContext, aObjectPaint, style->mStroke, opacity)) {
     return true;
   }
 
   // On failure, use the fallback colour in case we have an
   // objectBoundingBox where the width or height of the object is zero.
   // See http://www.w3.org/TR/SVG11/coords.html#ObjectBoundingBox
   SetupFallbackOrPaintColor(aContext, aFrame->StyleContext(),
                             &nsStyleSVG::mStroke, opacity);
 
   return true;
 }
 
 /* static */ float
 nsSVGUtils::GetOpacity(nsStyleSVGOpacitySource aOpacityType,
                        const float& aOpacity,
-                       gfxTextContextPaint *aOuterContextPaint)
+                       gfxTextObjectPaint *aOuterObjectPaint)
 {
   float opacity = 1.0f;
   switch (aOpacityType) {
   case eStyleSVGOpacitySource_Normal:
     opacity = aOpacity;
     break;
-  case eStyleSVGOpacitySource_ContextFillOpacity:
-    if (aOuterContextPaint) {
-      opacity = aOuterContextPaint->GetFillOpacity();
+  case eStyleSVGOpacitySource_ObjectFillOpacity:
+    if (aOuterObjectPaint) {
+      opacity = aOuterObjectPaint->GetFillOpacity();
     } else {
-      NS_WARNING("context-fill-opacity used outside of an SVG glyph");
+      NS_WARNING("objectFillOpacity used outside of an SVG glyph");
     }
     break;
-  case eStyleSVGOpacitySource_ContextStrokeOpacity:
-    if (aOuterContextPaint) {
-      opacity = aOuterContextPaint->GetStrokeOpacity();
+  case eStyleSVGOpacitySource_ObjectStrokeOpacity:
+    if (aOuterObjectPaint) {
+      opacity = aOuterObjectPaint->GetStrokeOpacity();
     } else {
-      NS_WARNING("context-stroke-opacity used outside of an SVG glyph");
+      NS_WARNING("objectStrokeOpacity used outside of an SVG glyph");
     }
     break;
   default:
     NS_NOTREACHED("Unknown object opacity inheritance type for SVG glyph");
   }
   return opacity;
 }
 
 bool
-nsSVGUtils::HasStroke(nsIFrame* aFrame, gfxTextContextPaint *aContextPaint)
+nsSVGUtils::HasStroke(nsIFrame* aFrame, gfxTextObjectPaint *aObjectPaint)
 {
   const nsStyleSVG *style = aFrame->StyleSVG();
   return style->mStroke.mType != eStyleSVGPaintType_None &&
          style->mStrokeOpacity > 0 &&
-         GetStrokeWidth(aFrame, aContextPaint) > 0;
+         GetStrokeWidth(aFrame, aObjectPaint) > 0;
 }
 
 float
-nsSVGUtils::GetStrokeWidth(nsIFrame* aFrame, gfxTextContextPaint *aContextPaint)
+nsSVGUtils::GetStrokeWidth(nsIFrame* aFrame, gfxTextObjectPaint *aObjectPaint)
 {
   const nsStyleSVG *style = aFrame->StyleSVG();
-  if (aContextPaint && style->mStrokeWidthFromObject) {
-    return aContextPaint->GetStrokeWidth();
+  if (aObjectPaint && style->mStrokeWidthFromObject) {
+    return aObjectPaint->GetStrokeWidth();
   }
 
   nsIContent* content = aFrame->GetContent();
   if (content->IsNodeOfType(nsINode::eTEXT)) {
     content = content->GetParent();
   }
 
   nsSVGElement *ctx = static_cast<nsSVGElement*>(content);
 
   return CoordToFloat(aFrame->PresContext(), ctx,
                       style->mStrokeWidth);
 }
 
 void
 nsSVGUtils::SetupCairoStrokeBBoxGeometry(nsIFrame* aFrame,
                                          gfxContext *aContext,
-                                         gfxTextContextPaint *aContextPaint)
+                                         gfxTextObjectPaint *aObjectPaint)
 {
-  float width = GetStrokeWidth(aFrame, aContextPaint);
+  float width = GetStrokeWidth(aFrame, aObjectPaint);
   if (width <= 0)
     return;
   aContext->SetLineWidth(width);
 
   // Apply any stroke-specific transform
   aContext->Multiply(GetStrokeTransform(aFrame));
 
   const nsStyleSVG* style = aFrame->StyleSVG();
@@ -1680,28 +1680,28 @@ nsSVGUtils::SetupCairoStrokeBBoxGeometry
     break;
   }
 }
 
 static bool
 GetStrokeDashData(nsIFrame* aFrame,
                   FallibleTArray<gfxFloat>& aDashes,
                   gfxFloat* aDashOffset,
-                  gfxTextContextPaint *aContextPaint)
+                  gfxTextObjectPaint *aObjectPaint)
 {
   const nsStyleSVG* style = aFrame->StyleSVG();
   nsPresContext *presContext = aFrame->PresContext();
   nsIContent *content = aFrame->GetContent();
   nsSVGElement *ctx = static_cast<nsSVGElement*>
     (content->IsNodeOfType(nsINode::eTEXT) ?
      content->GetParent() : content);
 
   gfxFloat totalLength = 0.0;
-  if (aContextPaint && style->mStrokeDasharrayFromObject) {
-    aDashes = aContextPaint->GetStrokeDashArray();
+  if (aObjectPaint && style->mStrokeDasharrayFromObject) {
+    aDashes = aObjectPaint->GetStrokeDashArray();
 
     for (uint32_t i = 0; i < aDashes.Length(); i++) {
       if (aDashes[i] < 0.0) {
         return false;
       }
       totalLength += aDashes[i];
     }
 
@@ -1729,36 +1729,36 @@ GetStrokeDashData(nsIFrame* aFrame,
                                             dasharray[i]) * pathScale;
       if (aDashes[i] < 0.0) {
         return false;
       }
       totalLength += aDashes[i];
     }
   }
 
-  if (aContextPaint && style->mStrokeDashoffsetFromObject) {
-    *aDashOffset = aContextPaint->GetStrokeDashOffset();
+  if (aObjectPaint && style->mStrokeDashoffsetFromObject) {
+    *aDashOffset = aObjectPaint->GetStrokeDashOffset();
   } else {
     *aDashOffset = nsSVGUtils::CoordToFloat(presContext,
                                             ctx,
                                             style->mStrokeDashoffset);
   }
   
   return (totalLength > 0.0);
 }
 
 void
 nsSVGUtils::SetupCairoStrokeGeometry(nsIFrame* aFrame, gfxContext* aContext,
-                                     gfxTextContextPaint *aContextPaint)
+                                     gfxTextObjectPaint *aObjectPaint)
 {
-  SetupCairoStrokeBBoxGeometry(aFrame, aContext, aContextPaint);
+  SetupCairoStrokeBBoxGeometry(aFrame, aContext, aObjectPaint);
 
   AutoFallibleTArray<gfxFloat, 10> dashes;
   gfxFloat dashOffset;
-  if (GetStrokeDashData(aFrame, dashes, &dashOffset, aContextPaint)) {
+  if (GetStrokeDashData(aFrame, dashes, &dashOffset, aObjectPaint)) {
     aContext->SetDash(dashes.Elements(), dashes.Length(), dashOffset);
   }
 }
 
 uint16_t
 nsSVGUtils::GetGeometryHitTestFlags(nsIFrame* aFrame)
 {
   uint16_t flags = 0;
@@ -1814,39 +1814,39 @@ nsSVGUtils::GetGeometryHitTestFlags(nsIF
     break;
   }
 
   return flags;
 }
 
 bool
 nsSVGUtils::SetupCairoStroke(nsIFrame* aFrame, gfxContext* aContext,
-                             gfxTextContextPaint *aContextPaint)
+                             gfxTextObjectPaint *aObjectPaint)
 {
-  if (!HasStroke(aFrame, aContextPaint)) {
+  if (!HasStroke(aFrame, aObjectPaint)) {
     return false;
   }
-  SetupCairoStrokeGeometry(aFrame, aContext, aContextPaint);
+  SetupCairoStrokeGeometry(aFrame, aContext, aObjectPaint);
 
-  return SetupCairoStrokePaint(aFrame, aContext, aContextPaint);
+  return SetupCairoStrokePaint(aFrame, aContext, aObjectPaint);
 }
 
 bool
 nsSVGUtils::PaintSVGGlyph(Element* aElement, gfxContext* aContext,
                           gfxFont::DrawMode aDrawMode,
-                          gfxTextContextPaint* aContextPaint)
+                          gfxTextObjectPaint* aObjectPaint)
 {
   nsIFrame* frame = aElement->GetPrimaryFrame();
   nsISVGChildFrame* svgFrame = do_QueryFrame(frame);
   if (!svgFrame) {
     return false;
   }
   nsRenderingContext context;
   context.Init(frame->PresContext()->DeviceContext(), aContext);
-  context.AddUserData(&gfxTextContextPaint::sUserDataKey, aContextPaint, nullptr);
+  context.AddUserData(&gfxTextObjectPaint::sUserDataKey, aObjectPaint, nullptr);
   svgFrame->NotifySVGChanged(nsISVGChildFrame::TRANSFORM_CHANGED);
   nsresult rv = svgFrame->PaintSVG(&context, nullptr, frame);
   return NS_SUCCEEDED(rv);
 }
 
 bool
 nsSVGUtils::GetSVGGlyphExtents(Element* aElement,
                                const gfxMatrix& aSVGToAppSpace,
--- a/layout/svg/nsSVGUtils.h
+++ b/layout/svg/nsSVGUtils.h
@@ -40,17 +40,17 @@ class nsStyleCoord;
 class nsSVGDisplayContainerFrame;
 class nsSVGElement;
 class nsSVGEnum;
 class nsSVGGeometryFrame;
 class nsSVGLength2;
 class nsSVGOuterSVGFrame;
 class nsSVGPathGeometryFrame;
 class nsTextFrame;
-class gfxTextContextPaint;
+class gfxTextObjectPaint;
 
 struct nsStyleSVG;
 struct nsStyleSVGPaint;
 struct nsRect;
 struct nsIntRect;
 struct nsPoint;
 
 namespace mozilla {
@@ -603,68 +603,68 @@ public:
 
   static nscolor GetFallbackOrPaintColor(gfxContext *aContext,
                                          nsStyleContext *aStyleContext,
                                          nsStyleSVGPaint nsStyleSVG::*aFillOrStroke);
 
   /**
    * Set up cairo context with an object pattern
    */
-  static bool SetupContextPaint(gfxContext *aContext,
-                                gfxTextContextPaint *aContextPaint,
-                                const nsStyleSVGPaint& aPaint,
-                                float aOpacity);
+  static bool SetupObjectPaint(gfxContext *aContext,
+                               gfxTextObjectPaint *aObjectPaint,
+                               const nsStyleSVGPaint& aPaint,
+                               float aOpacity);
 
   /**
    * Sets the current paint on the specified gfxContent to be the SVG 'fill'
    * for the given frame.
    */
   static bool SetupCairoFillPaint(nsIFrame* aFrame, gfxContext* aContext,
-                                  gfxTextContextPaint *aContextPaint = nullptr);
+                                  gfxTextObjectPaint *aObjectPaint = nullptr);
 
   /**
    * Sets the current paint on the specified gfxContent to be the SVG 'stroke'
    * for the given frame.
    */
   static bool SetupCairoStrokePaint(nsIFrame* aFrame, gfxContext* aContext,
-                                    gfxTextContextPaint *aContextPaint = nullptr);
+                                    gfxTextObjectPaint *aObjectPaint = nullptr);
 
   static float GetOpacity(nsStyleSVGOpacitySource aOpacityType,
                           const float& aOpacity,
-                          gfxTextContextPaint *aOuterContextPaint);
+                          gfxTextObjectPaint *aOuterObjectPaint);
 
   /*
    * @return false if there is no stroke
    */
   static bool HasStroke(nsIFrame* aFrame,
-                        gfxTextContextPaint *aContextPaint = nullptr);
+                        gfxTextObjectPaint *aObjectPaint = nullptr);
 
   static float GetStrokeWidth(nsIFrame* aFrame,
-                              gfxTextContextPaint *aContextPaint = nullptr);
+                              gfxTextObjectPaint *aObjectPaint = nullptr);
 
   /*
    * Set up a cairo context for measuring the bounding box of a stroked path.
    */
   static void SetupCairoStrokeBBoxGeometry(nsIFrame* aFrame,
                                            gfxContext *aContext,
-                                           gfxTextContextPaint *aContextPaint = nullptr);
+                                           gfxTextObjectPaint *aObjectPaint = nullptr);
 
   /*
    * Set up a cairo context for a stroked path (including any dashing that
    * applies).
    */
   static void SetupCairoStrokeGeometry(nsIFrame* aFrame, gfxContext *aContext,
-                                       gfxTextContextPaint *aContextPaint = nullptr);
+                                       gfxTextObjectPaint *aObjectPaint = nullptr);
 
   /*
    * Set up a cairo context for stroking, including setting up any stroke-related
    * properties such as dashing and setting the current paint on the gfxContext.
    */
   static bool SetupCairoStroke(nsIFrame* aFrame, gfxContext *aContext,
-                               gfxTextContextPaint *aContextPaint = nullptr);
+                               gfxTextObjectPaint *aObjectPaint = nullptr);
 
   /**
    * This function returns a set of bit flags indicating which parts of the
    * element (fill, stroke, bounds) should intercept pointer events. It takes
    * into account the type of element and the value of the 'pointer-events'
    * property on the element.
    */
   static uint16_t GetGeometryHitTestFlags(nsIFrame* aFrame);
@@ -673,17 +673,17 @@ public:
    * Render a SVG glyph.
    * @param aElement the SVG glyph element to render
    * @param aContext the thebes aContext to draw to
    * @param aDrawMode fill or stroke or both (see gfxFont::DrawMode)
    * @return true if rendering succeeded
    */
   static bool PaintSVGGlyph(Element* aElement, gfxContext* aContext,
                             gfxFont::DrawMode aDrawMode,
-                            gfxTextContextPaint* aContextPaint);
+                            gfxTextObjectPaint* aObjectPaint);
   /**
    * Get the extents of a SVG glyph.
    * @param aElement the SVG glyph element
    * @param aSVGToAppSpace the matrix mapping the SVG glyph space to the
    *   target context space
    * @param aResult the result (valid when true is returned)
    * @return true if calculating the extents succeeded
    */