return Update(nsISVGGeometrySource::UPDATEMASK_CANVAS_TM);
nsCOMPtr<nsISVGPattern>pval = do_QueryInterface(observable); if (pval) {  nsCOMPtr<nsISVGPattern>fill = do_QueryInterface(mFillPattern); if (fill == pval) { if (aModType == nsISVGValue::mod_die) { mFillPattern = nsnull; } return Update(nsISVGGeometrySource::UPDATEMASK_FILL_PAINT); } else {  if (aModType == nsISVGValue::mod_die) { mStrokePattern = nsnull; } return Update(nsISVGGeometrySource::UPDATEMASK_STROKE_PAINT); } } else {  return Update(nsISVGGeometrySource::UPDATEMASK_CANVAS_TM); }
nsSVGGlyphFrame::DidModifySVGObservable (nsISVGValue* observable,                                         nsISVGValue::modificationType aModType){  // Is this a gradient?  nsCOMPtr<nsISVGGradient>val = do_QueryInterface(observable);  if (val) {    // Yes, we need to handle this differently    nsCOMPtr<nsISVGGradient>fill = do_QueryInterface(mFillGradient);    if (fill == val) {      if (aModType == nsISVGValue::mod_die) {        mFillGradient = nsnull;      }      return Update(nsISVGGeometrySource::UPDATEMASK_FILL_PAINT);    } else {      // No real harm in assuming a stroke gradient at this point      if (aModType == nsISVGValue::mod_die) {        mStrokeGradient = nsnull;      }      return Update(nsISVGGeometrySource::UPDATEMASK_STROKE_PAINT);    }  } else {    // No, all of our other observables update the canvastm by default    return Update(nsISVGGeometrySource::UPDATEMASK_CANVAS_TM);  }  return NS_OK;}