Backed out 2 changesets (bug 1642261) for mochitest failures on test_property_database.html . CLOSED TREE
authorNarcis Beleuzu <nbeleuzu@mozilla.com>
Wed, 03 Jun 2020 07:30:23 +0300
changeset 533629 4e4f67b67b7fa937e07ea4baf56cc27839f555ac
parent 533628 2931388675f0eb1c426408881f12946f810e19da
child 533630 fd9f980e368173439465e38f6257557500f45c02
push id37474
push userabutkovits@mozilla.com
push dateWed, 03 Jun 2020 09:29:05 +0000
treeherdermozilla-central@bf162b065e1f [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1642261
milestone79.0a1
backs out32b26c1984f6472c1ad1be355027824f177ca4fe
68456151c0462f0edf401adfd886a66b6bae9661
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 2 changesets (bug 1642261) for mochitest failures on test_property_database.html . CLOSED TREE Backed out changeset 32b26c1984f6 (bug 1642261) Backed out changeset 68456151c046 (bug 1642261)
dom/base/UseCounters.conf
dom/base/test/browser.ini
dom/base/test/browser_use_counters.js
dom/base/test/file_use_counter_appearance.html
layout/generic/nsFrame.cpp
layout/generic/nsIFrame.h
layout/style/ComputedStyle.cpp
layout/style/ComputedStyle.h
layout/style/nsStyleStruct.cpp
layout/style/nsStyleStruct.h
layout/style/res/forms.css
layout/style/res/geckoview.css
layout/style/test/test_non_content_accessible_properties.html
layout/svg/svg.css
servo/components/style/properties/declaration_block.rs
servo/components/style/properties/longhands/box.mako.rs
servo/components/style/properties/properties.mako.rs
servo/ports/geckolib/glue.rs
testing/web-platform/tests/css/css-ui/appearance-cssom-001.html
--- a/dom/base/UseCounters.conf
+++ b/dom/base/UseCounters.conf
@@ -7,31 +7,30 @@
 // through Telemetry.
 //
 // The format of this file is very strict.  Each line can be:
 //
 //   (a) a blank line
 //
 //   (b) a comment, which is a line that begins with "//"
 //
-//   (c) one of three possible use counter declarations:
+//   (c) one of four possible use counter declarations:
 //
 //         method <IDL interface name>.<IDL operation name>
 //         attribute <IDL interface name>.<IDL attribute name>
 //         custom <any valid identifier> <description>
 //
 // The <description> for custom counters will be appended to "Whether a document "
 // or "Whether a page ", so phrase it appropriately.  For instance, "constructs a
 // Foo object" or "calls Document.bar('some value')".  It may contain any
 // character (including whitespace).
 //
 // To actually cause use counters to be incremented, DOM methods
 // and attributes must have a [UseCounter] extended attribute in
 // the Web IDL file.
-//
 // Custom counters are incremented when
 // SetUseCounter(eUseCounter_custom_MyName) is called on a Document object.
 //
 // You might reasonably ask why we have this file and we require
 // annotating things with [UseCounter] in the relevant WebIDL file as
 // well.  Generating things from bindings codegen and ensuring all the
 // dependencies were correct would have been rather difficult.
 
@@ -338,66 +337,8 @@ method Window.webkitRTCPeerConnection
 method Window.webkitSpeechGrammar
 method Window.webkitSpeechGrammarList
 method Window.webkitSpeechRecognition
 method Window.webkitSpeechRecognitionError
 method Window.webkitSpeechRecognitionEvent
 method Window.webkitStorageInfo
 method Window.Worklet
 method Window.WritableStream
-
-// -moz-appearance property usage
-custom Appearance_Widget_Button sets -moz-appearance to button on an element that normally has some other non-none appearance
-custom Appearance_Widget_Textfield sets -moz-appearance to textfield on an element that normally has some other non-none appearance
-custom Appearance_Widget_MenulistButton sets -moz-appearance to menulist-button on an element that normally has some other non-none appearance
-custom Appearance_Widget_Searchfield sets -moz-appearance to searchfield on an element that normally has some other non-none appearance
-custom Appearance_Widget_Textarea sets -moz-appearance to textarea on an element that normally has some other non-none appearance
-custom Appearance_Widget_Checkbox sets -moz-appearance to checkbox on an element that normally has some other non-none appearance
-custom Appearance_Widget_Radio sets -moz-appearance to radio on an element that normally has some other non-none appearance
-custom Appearance_Widget_Menulist sets -moz-appearance to menulist on an element that normally has some other non-none appearance
-custom Appearance_Widget_Listbox sets -moz-appearance to listbox on an element that normally has some other non-none appearance
-custom Appearance_Widget_Meter sets -moz-appearance to meter on an element that normally has some other non-none appearance
-custom Appearance_Widget_ProgressBar sets -moz-appearance to progress-bar on an element that normally has some other non-none appearance
-custom Appearance_Widget_NumberInput sets -moz-appearance to number-input on an element that normally has some other non-none appearance
-custom Appearance_Widget_Range sets -moz-appearance to range on an element that normally has some other non-none appearance
-custom Appearance_Widget_InnerSpinButton sets -moz-appearance to inner-spin-button on an element that normally has some other non-none appearance
-custom Appearance_Widget_ProgressbarVertical sets -moz-appearance to progressbar-vertical on an element that normally has some other non-none appearance
-custom Appearance_Widget_ScaleHorizontal sets -moz-appearance to scale-horizontal on an element that normally has some other non-none appearance
-custom Appearance_Widget_ScaleVertical sets -moz-appearance to scale-vertical on an element that normally has some other non-none appearance
-custom Appearance_Widget_ScalethumbHorizontal sets -moz-appearance to scalethumb-horizontal on an element that normally has some other non-none appearance
-custom Appearance_Widget_ScalethumbVertical sets -moz-appearance to scalethumb-vertical on an element that normally has some other non-none appearance
-custom Appearance_Widget_Scalethumbstart sets -moz-appearance to scalethumbstart on an element that normally has some other non-none appearance
-custom Appearance_Widget_Scalethumbend sets -moz-appearance to scalethumbend on an element that normally has some other non-none appearance
-custom Appearance_Widget_Scalethumbtick sets -moz-appearance to scalethumbtick on an element that normally has some other non-none appearance
-custom Appearance_Widget_RangeThumb sets -moz-appearance to range-thumb on an element that normally has some other non-none appearance
-custom Appearance_Widget_ScrollbarthumbHorizontal sets -moz-appearance to scrollbarthumb-horizontal on an element that normally has some other non-none appearance
-custom Appearance_Widget_ScrollbarthumbVertical sets -moz-appearance to scrollbarthumb-vertical on an element that normally has some other non-none appearance
-custom Appearance_Widget_ScrollbartrackHorizontal sets -moz-appearance to scrollbartrack-horizontal on an element that normally has some other non-none appearance
-custom Appearance_Widget_ScrollbartrackVertical sets -moz-appearance to scrollbartrack-vertical on an element that normally has some other non-none appearance
-custom Appearance_NonWidget_Button sets -moz-appearance to button on an element that normally has appearance none
-custom Appearance_NonWidget_Textfield sets -moz-appearance to textfield on an element that normally has appearance none
-custom Appearance_NonWidget_MenulistButton sets -moz-appearance to menulist-button on an element that normally has appearance none
-custom Appearance_NonWidget_Searchfield sets -moz-appearance to searchfield on an element that normally has appearance none
-custom Appearance_NonWidget_Textarea sets -moz-appearance to textarea on an element that normally has appearance none
-custom Appearance_NonWidget_Checkbox sets -moz-appearance to checkbox on an element that normally has appearance none
-custom Appearance_NonWidget_Radio sets -moz-appearance to radio on an element that normally has appearance none
-custom Appearance_NonWidget_Menulist sets -moz-appearance to menulist on an element that normally has appearance none
-custom Appearance_NonWidget_Listbox sets -moz-appearance to listbox on an element that normally has appearance none
-custom Appearance_NonWidget_Meter sets -moz-appearance to meter on an element that normally has appearance none
-custom Appearance_NonWidget_ProgressBar sets -moz-appearance to progress-bar on an element that normally has appearance none
-custom Appearance_NonWidget_NumberInput sets -moz-appearance to number-input on an element that normally has appearance none
-custom Appearance_NonWidget_Range sets -moz-appearance to range on an element that normally has appearance none
-custom Appearance_NonWidget_InnerSpinButton sets -moz-appearance to inner-spin-button on an element that normally has appearance none
-custom Appearance_NonWidget_ProgressbarVertical sets -moz-appearance to progressbar-vertical on an element that normally has appearance none
-custom Appearance_NonWidget_ScaleHorizontal sets -moz-appearance to scale-horizontal on an element that normally has appearance none
-custom Appearance_NonWidget_ScaleVertical sets -moz-appearance to scale-vertical on an element that normally has appearance none
-custom Appearance_NonWidget_ScalethumbHorizontal sets -moz-appearance to scalethumb-horizontal on an element that normally has appearance none
-custom Appearance_NonWidget_ScalethumbVertical sets -moz-appearance to scalethumb-vertical on an element that normally has appearance none
-custom Appearance_NonWidget_Scalethumbstart sets -moz-appearance to scalethumbstart on an element that normally has appearance none
-custom Appearance_NonWidget_Scalethumbend sets -moz-appearance to scalethumbend on an element that normally has appearance none
-custom Appearance_NonWidget_Scalethumbtick sets -moz-appearance to scalethumbtick on an element that normally has appearance none
-custom Appearance_NonWidget_RangeThumb sets -moz-appearance to range-thumb on an element that normally has appearance none
-custom Appearance_NonWidget_ScrollbarthumbHorizontal sets -moz-appearance to scrollbarthumb-horizontal on an element that normally has appearance none
-custom Appearance_NonWidget_ScrollbarthumbVertical sets -moz-appearance to scrollbarthumb-vertical on an element that normally has appearance none
-custom Appearance_NonWidget_ScrollbartrackHorizontal sets -moz-appearance to scrollbartrack-horizontal on an element that normally has appearance none
-custom Appearance_NonWidget_ScrollbartrackVertical sets -moz-appearance to scrollbartrack-vertical on an element that normally has appearance none
-custom Appearance_Overridden_NumberInput used `-moz-appearance: number-input` to override some other value on an <input type=number>
-custom Appearance_Overridden_Range used `-moz-appearance: range` to override some other value on an <input type=range>
--- a/dom/base/test/browser.ini
+++ b/dom/base/test/browser.ini
@@ -18,17 +18,16 @@ support-files =
   file_bug1303838_target_bar.html
   file_bug1303838_target_baz.html
   file_bug1303838_target_ifoo.html
   file_bug1303838_target_ibar.html
   file_bug1303838_target_ibaz.html
   file_bug1303838_with_iframe.html
   file_messagemanager_unload.html
   file_pluginAudio.html
-  file_use_counter_appearance.html
   file_use_counter_outer.html
   file_use_counter_style.html
   file_use_counter_svg_getElementById.svg
   file_use_counter_svg_currentScale.svg
   file_use_counter_svg_fill_pattern_definition.svg
   file_use_counter_svg_fill_pattern.svg
   file_use_counter_svg_fill_pattern_internal.svg
   file_use_counter_svg_fill_pattern_data.svg
--- a/dom/base/test/browser_use_counters.js
+++ b/dom/base/test/browser_use_counters.js
@@ -76,48 +76,16 @@ add_task(async function() {
   );
 
   // Check for counted unknown properties.
   await check_use_counter_iframe(
     "file_use_counter_style.html",
     "CSS_PROPERTY_WebkitPaddingStart"
   );
 
-  // Check for -moz-appearance related use counters.
-  const appearanceCounters = [
-    ["APPEARANCE_WIDGET_BUTTON", 0],
-    ["APPEARANCE_NONWIDGET_BUTTON", 0],
-    ["APPEARANCE_WIDGET_TEXTFIELD", 0],
-    ["APPEARANCE_NONWIDGET_TEXTFIELD", 0],
-    ["APPEARANCE_WIDGET_RADIO", 0],
-    ["APPEARANCE_NONWIDGET_RADIO", 0],
-    ["APPEARANCE_WIDGET_CHECKBOX", 1],
-    ["APPEARANCE_NONWIDGET_CHECKBOX", 0],
-    ["APPEARANCE_WIDGET_MENULISTBUTTON", 0],
-    ["APPEARANCE_NONWIDGET_MENULISTBUTTON", 1],
-    ["APPEARANCE_WIDGET_METER", 0],
-    ["APPEARANCE_NONWIDGET_METER", 0],
-    ["APPEARANCE_WIDGET_TEXTAREA", 0],
-    ["APPEARANCE_NONWIDGET_TEXTAREA", 0],
-    ["APPEARANCE_WIDGET_RANGE", 0],
-    ["APPEARANCE_NONWIDGET_RANGE", 0],
-    ["APPEARANCE_OVERRIDDEN_RANGE", 1],
-    ["APPEARANCE_WIDGET_NUMBERINPUT", 0],
-    ["APPEARANCE_NONWIDGET_NUMBERINPUT", 0],
-    ["APPEARANCE_OVERRIDDEN_NUMBERINPUT", 0],
-  ];
-  for (let [name, value] of appearanceCounters) {
-    await check_use_counter_iframe(
-      "file_use_counter_appearance.html",
-      name,
-      /* check_documents = */ true,
-      value
-    );
-  }
-
   // Check that even loads from the imglib cache update use counters.  The
   // images should still be there, because we just loaded them in the last
   // set of tests.  But we won't get updated counts for the document
   // counters, because we won't be re-parsing the SVG documents.
   await check_use_counter_iframe(
     "file_use_counter_svg_getElementById.svg",
     "SVGSVGELEMENT_GETELEMENTBYID",
     false
@@ -210,22 +178,19 @@ function grabHistogramsFromContent(use_c
   return BrowserTestUtils.waitForCondition(() => {
     return page_before != gather()[0];
   }).then(gather, gather);
 }
 
 var check_use_counter_iframe = async function(
   file,
   use_counter_middlefix,
-  check_documents = true,
-  value = 1
+  check_documents = true
 ) {
-  info(
-    `checking ${file} with histogram ${use_counter_middlefix} and expected value ${value}`
-  );
+  info("checking " + file + " with histogram " + use_counter_middlefix);
 
   let newTab = BrowserTestUtils.addTab(gBrowser, "about:blank");
   gBrowser.selectedTab = newTab;
   newTab.linkedBrowser.stop();
 
   // Hold on to the current values of the telemetry histograms we're
   // interested in.
   let [
@@ -270,27 +235,27 @@ var check_use_counter_iframe = async fun
     histogram_toplevel_docs_after,
   ] = await grabHistogramsFromContent(
     use_counter_middlefix,
     histogram_page_before
   );
 
   is(
     histogram_page_after,
-    histogram_page_before + value,
+    histogram_page_before + 1,
     "page counts for " + use_counter_middlefix + " after are correct"
   );
   ok(
-    histogram_toplevel_docs_after >= histogram_toplevel_docs_before + value,
+    histogram_toplevel_docs_after >= histogram_toplevel_docs_before + 1,
     "top level document counts are correct"
   );
   if (check_documents) {
     is(
       histogram_document_after,
-      histogram_document_before + value,
+      histogram_document_before + 1,
       "document counts for " + use_counter_middlefix + " after are correct"
     );
   }
 };
 
 var check_use_counter_img = async function(file, use_counter_middlefix) {
   info(
     "checking " + file + " as image with histogram " + use_counter_middlefix
deleted file mode 100644
--- a/dom/base/test/file_use_counter_appearance.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-
-<!-- a value set by the UA sheet -->
-<button>a button</button>
-
-<!-- a value set on a widget that normally has that appearance -->
-<input style="-moz-appearance: textfield;">
-
-<!-- a value set on a widget that doesn't normally have that appearance -->
-<input type="radio" style="-moz-appearance: checkbox;">
-
-<!-- a value set on a non-widget -->
-<div style="-moz-appearance: menulist-button;"></div>
-
-<!-- a standard value set on a widget that normally has that appearance, cascading over some other value -->
-<style>
-textarea { -moz-appearance: meter; }
-textarea { -moz-appearance: textarea; }
-</style>
-<textarea></textarea>
-
-<!-- a non-standard value set on a widget that normally has that appearance, cascading over some other value -->
-<style>
-input[type=range] { -moz-appearance: none; }
-input[type=range] { -moz-appearance: range; }
-</style>
-<input type="range">
-
-<!-- a non-standard value set by UA sheets, which we want to track for cascading over some other value -->
-<input type="number">
--- a/layout/generic/nsFrame.cpp
+++ b/layout/generic/nsFrame.cpp
@@ -1405,133 +1405,21 @@ void nsIFrame::DidSetComputedStyle(Compu
         // May have an old cached path, so we have to delete it.
         RemoveProperty(nsIFrame::OffsetPathCache());
       }
     } else if (oldPath) {
       RemoveProperty(nsIFrame::OffsetPathCache());
     }
   }
 
-  RecordAppearanceTelemetry();
-
   RemoveStateBits(NS_FRAME_SIMPLE_EVENT_REGIONS | NS_FRAME_SIMPLE_DISPLAYLIST);
 
   mMayHaveRoundedCorners = true;
 }
 
-void nsIFrame::RecordAppearanceTelemetry() {
-  // Record uses of -moz-appearance values in the wild that would affect our
-  // ability to implement the css-ui-4 unprefixed appearance property.
-
-  StyleAppearance appearance = StyleDisplay()->mAppearance;
-  StyleAppearance defaultAppearance = StyleDisplay()->mDefaultAppearance;
-
-  if ((appearance == StyleAppearance::None &&
-       defaultAppearance == StyleAppearance::None) ||
-      !mContent || mContent->IsInNativeAnonymousSubtree()) {
-    return;
-  }
-
-  // The css-ui-4 specification defines unprefixed appearance as taking values:
-  //
-  //   none | auto | button | textfield | menulist-button | <compat-auto>
-  //
-  // where:
-  //
-  //   <compat-auto> = searchfield | textarea | push-button |
-  //                   slider-horizontal | checkbox | radio | square-button |
-  //                   menulist | listbox | meter | progress-bar
-  //
-  // Of these, we don't currently support auto, push-button, slider-horizontal,
-  // or square-button.  The auto value we will support soon, but the other three
-  // may not be required for compatibility.  So we don't record any telemetry
-  // for the use of those values.
-  //
-  // We support a number of values exposed to content, which are not in the
-  // spec:
-  //
-  //   number-input | range | inner-spin-button | progressbar-vertical |
-  //   scale-horizontal | scale-vertical | scalethumb-horizontal |
-  //   scalethumb-vertical | scalethumbstart | scalethumbend | scalethumbtick |
-  //   range-thumb | scrollbarthumb-horizontal | scrollbarthumb-vertical |
-  //   scrollbartrack-horizontal | scrollbartrack-vertical
-  //
-  // Of these, number-input and range are used by UA sheets (set on <input
-  // type=number> and <input type=range> elements) and exposed to content.  We
-  // want to measure whether these values are being used to override some other
-  // values (e.g. none) in author sheets on these elements, since that means we
-  // should add them to the <compat-auto> set.
-  if (appearance == defaultAppearance) {
-    UseCounter counter = eUseCounter_UNKNOWN;
-    switch (appearance) {
-      case StyleAppearance::NumberInput:
-        counter = eUseCounter_custom_Appearance_Overridden_NumberInput;
-        break;
-      case StyleAppearance::Range:
-        counter = eUseCounter_custom_Appearance_Overridden_Range;
-        break;
-      default:
-        return;
-    }
-    if (mComputedStyle->HasOverriddenAppearance(appearance)) {
-      PresContext()->Document()->SetUseCounter(counter);
-    }
-    return;
-  }
-
-  // For all values, we want to check whether they have been set on an element
-  // that would not normally have that value from the UA sheets.  We record
-  // separate use counters for whether the -moz-appearance value was used with
-  // an underlying value of none ("on a non-widget") or with some non-none value
-  // ("on a widget").
-  UseCounter onWidget;
-  UseCounter onNonWidget;
-#define CASE(name_)                                                \
-  case StyleAppearance::name_:                                     \
-    onWidget = eUseCounter_custom_Appearance_Widget_##name_;       \
-    onNonWidget = eUseCounter_custom_Appearance_NonWidget_##name_; \
-    break;
-  switch (appearance) {
-    CASE(Button)
-    CASE(Textfield)
-    CASE(MenulistButton)
-    CASE(Searchfield)
-    CASE(Textarea)
-    CASE(Checkbox)
-    CASE(Radio)
-    CASE(Menulist)
-    CASE(Listbox)
-    CASE(Meter)
-    CASE(ProgressBar)
-    CASE(NumberInput)
-    CASE(Range)
-    CASE(InnerSpinButton)
-    CASE(ProgressbarVertical)
-    CASE(ScaleHorizontal)
-    CASE(ScaleVertical)
-    CASE(ScalethumbHorizontal)
-    CASE(ScalethumbVertical)
-    CASE(Scalethumbstart)
-    CASE(Scalethumbend)
-    CASE(Scalethumbtick)
-    CASE(RangeThumb)
-    CASE(ScrollbarthumbHorizontal)
-    CASE(ScrollbarthumbVertical)
-    CASE(ScrollbartrackHorizontal)
-    CASE(ScrollbartrackVertical)
-    default:
-      return;
-  }
-#undef CASE
-
-  auto counter =
-      defaultAppearance == StyleAppearance::None ? onNonWidget : onWidget;
-  PresContext()->Document()->SetUseCounter(counter);
-}
-
 #ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED
 void nsIFrame::AssertNewStyleIsSane(ComputedStyle& aNewStyle) {
   MOZ_DIAGNOSTIC_ASSERT(
       aNewStyle.GetPseudoType() == mComputedStyle->GetPseudoType() ||
       // ::first-line continuations are weird, this should probably be fixed via
       // bug 1465474.
       (mComputedStyle->GetPseudoType() == PseudoStyleType::firstLine &&
        aNewStyle.GetPseudoType() == PseudoStyleType::mozLineFrame) ||
--- a/layout/generic/nsIFrame.h
+++ b/layout/generic/nsIFrame.h
@@ -794,19 +794,16 @@ class nsIFrame : public nsQueryFrame {
 
  protected:
   // Style post processing hook
   // Attention: the old style is the one we're forgetting,
   // and hence possibly completely bogus for GetStyle* purposes.
   // Use PeekStyleData instead.
   virtual void DidSetComputedStyle(ComputedStyle* aOldComputedStyle);
 
- private:
-  void RecordAppearanceTelemetry();
-
  public:
 /**
  * Define typesafe getter functions for each style struct by
  * preprocessing the list of style structs.  These functions are the
  * preferred way to get style data.  The macro creates functions like:
  *   const nsStyleBorder* StyleBorder();
  *   const nsStyleColor* StyleColor();
  *
--- a/layout/style/ComputedStyle.cpp
+++ b/layout/style/ComputedStyle.cpp
@@ -406,13 +406,9 @@ bool ComputedStyle::EqualForCachedAnonym
   // than rely on CalcStyleDifference, which can't tell us which specific
   // properties have changed.
   return Servo_ComputedValues_EqualForCachedAnonymousContentStyle(this,
                                                                   &aOther);
 }
 
 #endif
 
-bool ComputedStyle::HasOverriddenAppearance(StyleAppearance aAppearance) const {
-  return Servo_ComputedValues_HasOverriddenAppearance(this, aAppearance);
-}
-
 }  // namespace mozilla
--- a/layout/style/ComputedStyle.h
+++ b/layout/style/ComputedStyle.h
@@ -292,18 +292,16 @@ class ComputedStyle {
 
   // The |aCVsSize| outparam on this function is where the actual CVs size
   // value is added. It's done that way because the callers know which value
   // the size should be added to.
   void AddSizeOfIncludingThis(nsWindowSizes& aSizes, size_t* aCVsSize) const;
 
   StyleWritingMode WritingMode() const { return {mSource.WritingMode().mBits}; }
 
-  bool HasOverriddenAppearance(StyleAppearance) const;
-
  protected:
   // Needs to be friend so that it can call the destructor without making it
   // public.
   friend void ::Gecko_ComputedStyle_Destroy(ComputedStyle*);
 
   ~ComputedStyle() = default;
 
   ServoComputedData mSource;
--- a/layout/style/nsStyleStruct.cpp
+++ b/layout/style/nsStyleStruct.cpp
@@ -2224,17 +2224,16 @@ nsStyleDisplay::nsStyleDisplay(const Doc
       mAnimationFillModeCount(1),
       mAnimationPlayStateCount(1),
       mAnimationIterationCountCount(1),
       mWillChange{{}, {0}},
       mDisplay(StyleDisplay::Inline),
       mOriginalDisplay(StyleDisplay::Inline),
       mContain(StyleContain::NONE),
       mAppearance(StyleAppearance::None),
-      mDefaultAppearance(StyleAppearance::None),
       mPosition(StylePositionProperty::Static),
       mFloat(StyleFloat::None),
       mBreakType(StyleClear::None),
       mBreakInside(StyleBreakWithin::Auto),
       mBreakBefore(StyleBreakBetween::Auto),
       mBreakAfter(StyleBreakBetween::Auto),
       mOverflowX(StyleOverflow::Visible),
       mOverflowY(StyleOverflow::Visible),
@@ -2294,17 +2293,16 @@ nsStyleDisplay::nsStyleDisplay(const nsS
       mAnimationFillModeCount(aSource.mAnimationFillModeCount),
       mAnimationPlayStateCount(aSource.mAnimationPlayStateCount),
       mAnimationIterationCountCount(aSource.mAnimationIterationCountCount),
       mWillChange(aSource.mWillChange),
       mDisplay(aSource.mDisplay),
       mOriginalDisplay(aSource.mOriginalDisplay),
       mContain(aSource.mContain),
       mAppearance(aSource.mAppearance),
-      mDefaultAppearance(aSource.mDefaultAppearance),
       mPosition(aSource.mPosition),
       mFloat(aSource.mFloat),
       mBreakType(aSource.mBreakType),
       mBreakInside(aSource.mBreakInside),
       mBreakBefore(aSource.mBreakBefore),
       mBreakAfter(aSource.mBreakAfter),
       mOverflowX(aSource.mOverflowX),
       mOverflowY(aSource.mOverflowY),
@@ -2468,20 +2466,16 @@ nsChangeHint nsStyleDisplay::CalcDiffere
     hint |= nsChangeHint_NeedReflow | nsChangeHint_ReflowChangesSizeOrPosition;
   }
 
   if (mScrollSnapAlign != aNewData.mScrollSnapAlign) {
     // FIXME: Bug 1530253 Support re-snapping when scroll-snap-align changes.
     hint |= nsChangeHint_NeutralChange;
   }
 
-  if (mDefaultAppearance != aNewData.mDefaultAppearance) {
-    hint |= nsChangeHint_NeutralChange;
-  }
-
   if (mOverflowX != aNewData.mOverflowX || mOverflowY != aNewData.mOverflowY) {
     const bool isScrollable = IsScrollableOverflow();
     if (isScrollable != aNewData.IsScrollableOverflow()) {
       // We may need to construct or destroy a scroll frame as a result of this
       // change.
       hint |= nsChangeHint_ScrollbarChange;
     } else if (isScrollable) {
       if (ScrollbarGenerationChanged(*this, aNewData)) {
--- a/layout/style/nsStyleStruct.h
+++ b/layout/style/nsStyleStruct.h
@@ -1211,17 +1211,16 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsSt
   mozilla::StyleDisplay mDisplay;
   mozilla::StyleDisplay mOriginalDisplay;  // saved mDisplay for
                                            //         position:absolute/fixed
                                            //         and float:left/right;
                                            //         otherwise equal to
                                            //         mDisplay
   mozilla::StyleContain mContain;
   mozilla::StyleAppearance mAppearance;
-  mozilla::StyleAppearance mDefaultAppearance;
   mozilla::StylePositionProperty mPosition;
 
   mozilla::StyleFloat mFloat;
   mozilla::StyleClear mBreakType;
   mozilla::StyleBreakWithin mBreakInside;
   mozilla::StyleBreakBetween mBreakBefore;
   mozilla::StyleBreakBetween mBreakAfter;
   mozilla::StyleOverflow mOverflowX;
--- a/layout/style/res/forms.css
+++ b/layout/style/res/forms.css
@@ -80,17 +80,16 @@ label {
 /* Default inputs, text inputs, and selects */
 
 /* Note: Values in nsNativeTheme IsWidgetStyled function
    need to match textfield background/border values here */
 
 input {
   display: inline-block;
   -moz-appearance: textfield;
-  -moz-default-appearance: textfield;
   /* The sum of border and padding on block-start and block-end
      must be the same here, for buttons, and for <select> (including its
      internal padding magic) */
   padding: 1px;
   border: 2px inset ThreeDLightShadow;
   background-color: -moz-Field;
   color: -moz-FieldText;
   font: -moz-field;
@@ -103,17 +102,16 @@ input::-moz-text-control-editing-root,
 input::placeholder {
   word-wrap: normal;
   /* Make the line-height equal to the available height */
   line-height: -moz-block-height;
 }
 
 textarea {
   -moz-appearance: textarea;
-  -moz-default-appearance: textarea;
   margin-block: 1px;
   border: 2px inset ThreeDLightShadow;
   /* The 1px inline padding is for parity with Win/IE */
   padding-inline: 1px;
   background-color: -moz-Field;
   color: -moz-FieldText;
   font: medium -moz-fixed;
   text-rendering: optimizeLegibility;
@@ -222,17 +220,16 @@ select {
   color: -moz-ComboboxText;
   font: -moz-list;
   white-space: nowrap !important;
   word-wrap: normal !important;
   cursor: default;
   box-sizing: border-box;
   user-select: none;
   -moz-appearance: menulist;
-  -moz-default-appearance: menulist;
   border-width: 2px;
   border-style: inset;
   overflow: -moz-hidden-unscrollable;
   /* No text-decoration reaching inside, by default */
   display: inline-block;
   page-break-inside: avoid;
   overflow-clip-box: padding-box !important; /* bug 992447 */
 }
@@ -251,27 +248,25 @@ select:active:hover {
 select:is([size], [multiple], [size][multiple]) {
   /* Different alignment and padding for listbox vs combobox */
   background-color: -moz-Field;
   color: -moz-FieldText;
   padding-block: 1px;
   padding-inline: 0;
   vertical-align: text-bottom;
   -moz-appearance: listbox;
-  -moz-default-appearance: listbox;
 }
 
 select:is([size="0"], [size="1"]) {
   /* Except this is not a listbox */
   background-color: -moz-Combobox;
   color: -moz-ComboboxText;
   vertical-align: baseline;
   padding: unset;
   -moz-appearance: menulist;
-  -moz-default-appearance: menulist;
 }
 
 select > button {
   inline-size: 12px;
   white-space: nowrap;
   position: static !important;
   background-image: url("arrow.gif") !important;
   background-repeat: no-repeat !important;
@@ -439,28 +434,26 @@ textarea:disabled {
 option:disabled,
 optgroup:disabled {
   background-color: transparent;
 }
 
 /* hidden inputs */
 input[type="hidden"] {
   -moz-appearance: none;
-  -moz-default-appearance: none;
   display: none !important;
   padding: unset;
   border: 0;
   cursor: auto;
   -moz-user-focus: ignore;
 }
 
 /* image buttons */
 input[type="image"] {
   -moz-appearance: none;
-  -moz-default-appearance: none;
   padding: unset;
   border: none;
   background-color: transparent;
   font-family: sans-serif;
   font-size: small;
   cursor: pointer;
 }
 
@@ -478,25 +471,23 @@ input[type="image"]:disabled {
   box-sizing: border-box;
   border: 1px solid grey;
   display: block;
 }
 
 /* radio buttons */
 input[type="radio"] {
   -moz-appearance: radio;
-  -moz-default-appearance: radio;
   margin-block: 3px 0;
   margin-inline: 5px 3px;
 }
 
 /* check boxes */
 input[type="checkbox"] {
   -moz-appearance: checkbox;
-  -moz-default-appearance: checkbox;
   margin-block: 3px;
   margin-inline: 4px 3px;
 }
 
 /* Common features of radio buttons and check boxes */
 
 input[type="radio"],
 input[type="checkbox"] {
@@ -533,17 +524,16 @@ input[type="search"] {
    need to match button background/border values here */
 
 /* Non text-related properties for buttons: these ones are shared with
    input[type="color"] */
 button,
 ::file-chooser-button,
 input:is([type="color"], [type="reset"], [type="button"], [type="submit"]) {
   -moz-appearance: button;
-  -moz-default-appearance: button;
   /* The sum of border and padding on block-start and block-end
      must be the same here, for text inputs, and for <select>.
      Note -moz-focus-inner padding does not affect button size. */
   padding-block: 0;
   padding-inline: 8px;
   border: 2px outset ThreeDLightShadow;
   background-color: ButtonFace;
   cursor: default;
@@ -678,17 +668,16 @@ select:is(:disabled, :disabled:active) >
 input[type="file"] {
   white-space: nowrap !important;
   overflow: hidden !important;
   overflow-clip-box: padding-box;
   color: unset;
 
   /* Revert rules which apply on all inputs. */
   -moz-appearance: none;
-  -moz-default-appearance: none;
   cursor: default;
 
   border: none;
   background-color: transparent;
   padding: unset;
 }
 
 input[type="file"] > label {
@@ -762,17 +751,16 @@ output:-moz-ui-invalid {
 
   input[type="file"] {
     height: 2em;
   }
 }
 
 progress {
   -moz-appearance: progress-bar;
-  -moz-default-appearance: progress-bar;
   display: inline-block;
   vertical-align: -0.2em;
 
   /* Default style in case of there is -moz-appearance: none; */
   border: 1px solid ThreeDShadow;
   border-right-color: ThreeDHighlight;
   border-bottom-color: ThreeDHighlight;
   /* #e6e6e6 is a light gray. */
@@ -792,17 +780,16 @@ progress {
   width: 100%;
 
   /* Default style in case of there is -moz-appearance: none; */
   background-color: #0064b4; /* blue */
 }
 
 meter {
   -moz-appearance: meter;
-  -moz-default-appearance: meter;
   display: inline-block;
   vertical-align: -0.2em;
   background: linear-gradient(#e6e6e6, #e6e6e6, #eeeeee 20%, #cccccc 45%, #cccccc 55%);
 }
 
 ::-moz-meter-bar {
   /* Block styles that would change the type of frame we construct. */
   display: inline-block !important;
@@ -825,17 +812,16 @@ meter {
 }
 :-moz-meter-sub-sub-optimum::-moz-meter-bar {
   /* red. */
   background: linear-gradient(#f77, #f77, #fcc 20%, #d44 45%, #d44 55%);
 }
 
 input[type=range] {
   -moz-appearance: range;
-  -moz-default-appearance: range;
   margin: 2px;
   /* Override some rules that apply on all input types: */
   cursor: default;
   padding: unset;
   border: unset;
   /* Prevent nsFrame::HandlePress setting mouse capture to this element. */
   user-select: none !important;
 }
@@ -896,17 +882,16 @@ input[type=range]::-moz-range-progress {
  * logic to position it). Specifically the 'margin', 'top' and 'left'
  * properties are ignored.
  */
 input[type=range]::-moz-range-thumb {
   /* Native theming is atomic for range. Set -moz-appearance on the range
    * to get rid of it. The thumb's -moz-appearance is fixed.
    */
   -moz-appearance: range-thumb !important;
-  -moz-default-appearance: range-thumb: !important;
   /* Prevent styling that would change the type of frame we construct. */
   display: block !important;
   float: none !important;
   position: static !important;
   writing-mode: unset !important;
   direction: unset !important;
 
   width: 1em;
@@ -915,17 +900,16 @@ input[type=range]::-moz-range-thumb {
   border-radius: 0.5em;
   background-color: #F0F0F0;
   /* Prevent nsFrame::HandlePress setting mouse capture to this element. */
   user-select: none !important;
 }
 
 input[type="number"] {
   -moz-appearance: number-input;
-  -moz-default-appearance: number-input;
 }
 
 input[type=number]::-moz-number-wrapper {
   /* Prevent styling that would change the type of frame we construct. */
   display: flex;
   float: none !important;
   position: static !important;
   block-size: 100%;
--- a/layout/style/res/geckoview.css
+++ b/layout/style/res/geckoview.css
@@ -7,17 +7,16 @@
 @namespace svg url("http://www.w3.org/2000/svg");
 
 /* Override inverse OS themes */
 textarea,
 button,
 xul|button,
 * > input:not(:-moz-any([type="image"], [type="checkbox"], [type="radio"])) {
   -moz-appearance: none !important;  /* See bug 598421 for fixing the platform */
-  -moz-default-appearance: none !important;
 }
 
 textarea,
 button,
 xul|button,
 * > input:not(:-moz-any([type="image"], [type="checkbox"], [type="radio"], [type="range"])) {
   border-radius: 2px;
 }
--- a/layout/style/test/test_non_content_accessible_properties.html
+++ b/layout/style/test/test_non_content_accessible_properties.html
@@ -17,17 +17,16 @@ const NON_CONTENT_ACCESSIBLE_PROPERTIES 
   "-moz-script-size-multiplier",
   "-moz-script-level",
   "-moz-math-display",
   "-moz-math-variant",
   "-moz-script-min-size",
   "-moz-font-smoothing-background-color",
   "-moz-min-font-size-ratio",
   "-moz-script-size-multiplier",
-  "-moz-default-appearance",
   // TODO(emilio): Whenever we stop using `-moz-binding` in a gazillion tests
   // we should add it here.
 ];
 
 const sheet = document.getElementById("sheet");
 const div = document.querySelector("div");
 
 test(function() {
--- a/layout/svg/svg.css
+++ b/layout/svg/svg.css
@@ -49,27 +49,25 @@ svg:not(:root), symbol, image, marker, p
    stroke-width: context-value;
    stroke-dasharray: context-value;
    stroke-dashoffset: context-value;
  }
 }
 
 foreignObject {
   -moz-appearance: none ! important;
-  -moz-default-appearance: none ! important;
   margin: 0 ! important;
   padding: 0 ! important;
   border-width: 0 ! important;
   white-space: normal;
 }
 
 @media all and (-moz-is-resource-document) {
  foreignObject *|* {
    -moz-appearance: none !important;
-   -moz-default-appearance: none !important;
  }
 }
 
 *|*::-moz-svg-foreign-content {
   display: block !important;
   /* We need to be an absolute and fixed container */
   transform: translate(0) !important;
   text-indent: 0;
--- a/servo/components/style/properties/declaration_block.rs
+++ b/servo/components/style/properties/declaration_block.rs
@@ -335,31 +335,16 @@ impl PropertyDeclarationBlock {
                 return None;
             }
         }
 
         self.declaration_importance_iter()
             .find(|(declaration, _)| declaration.id() == property)
     }
 
-    /// Get a declaration for a given property with the specified importance.
-    #[inline]
-    pub fn get_at_importance(
-        &self,
-        property: PropertyDeclarationId,
-        importance: Importance,
-    ) -> Option<&PropertyDeclaration> {
-        let (declaration, i) = self.get(property)?;
-        if i == importance {
-            Some(declaration)
-        } else {
-            None
-        }
-    }
-
     /// Tries to serialize a given shorthand from the declarations in this
     /// block.
     pub fn shorthand_to_css(
         &self,
         shorthand: ShorthandId,
         dest: &mut CssStringWriter,
     ) -> fmt::Result {
         // Step 1.2.1 of
--- a/servo/components/style/properties/longhands/box.mako.rs
+++ b/servo/components/style/properties/longhands/box.mako.rs
@@ -633,31 +633,16 @@ impl computed_value::T {
     "computed::Appearance::None",
     engines="gecko",
     alias="-webkit-appearance",
     spec="Nonstandard (https://developer.mozilla.org/en-US/docs/Web/CSS/-moz-appearance)",
     animation_value_type="discrete",
     gecko_ffi_name="mAppearance",
 )}
 
-// A UA-sheet only property that is always set to the same value as
-// -moz-appearance.  Used to record telemetry for when author sheets
-// override the value of -moz-appearance; see
-// nsIFrame::RecordAppearanceTelemetry.
-${helpers.predefined_type(
-    "-moz-default-appearance",
-    "Appearance",
-    "computed::Appearance::None",
-    engines="gecko",
-    animation_value_type="none",
-    spec="Internal (not web-exposed)",
-    enabled_in="ua",
-    gecko_ffi_name="mDefaultAppearance",
-)}
-
 ${helpers.single_keyword(
     "-moz-orient",
     "inline block horizontal vertical",
     engines="gecko",
     gecko_ffi_name="mOrient",
     gecko_enum_prefix="StyleOrient",
     spec="Nonstandard (https://developer.mozilla.org/en-US/docs/Web/CSS/-moz-orient)",
     animation_value_type="discrete",
--- a/servo/components/style/properties/properties.mako.rs
+++ b/servo/components/style/properties/properties.mako.rs
@@ -2106,18 +2106,17 @@ impl PropertyId {
 }
 
 /// A declaration using a CSS-wide keyword.
 #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
 #[derive(Clone, PartialEq, ToCss, ToShmem)]
 pub struct WideKeywordDeclaration {
     #[css(skip)]
     id: LonghandId,
-    /// The CSS-wide keyword.
-    pub keyword: CSSWideKeyword,
+    keyword: CSSWideKeyword,
 }
 
 /// An unparsed declaration that contains `var()` functions.
 #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
 #[derive(Clone, PartialEq, ToCss, ToShmem)]
 pub struct VariableDeclaration {
     #[css(skip)]
     id: LonghandId,
--- a/servo/ports/geckolib/glue.rs
+++ b/servo/ports/geckolib/glue.rs
@@ -3979,51 +3979,16 @@ pub extern "C" fn Servo_ComputedValues_E
         println_stderr!("Expected style:");
         dump_properties_and_rules(b, &differing_properties);
     }
 
     differing_properties.is_empty()
 }
 
 #[no_mangle]
-pub extern "C" fn Servo_ComputedValues_HasOverriddenAppearance(
-    cv: &ComputedValues,
-    appearance: specified::Appearance,
-) -> bool {
-    use style::properties::{CSSWideKeyword, PropertyDeclaration};
-
-    let rules = match cv.rules {
-        Some(ref rules) => rules,
-        None => return false,
-    };
-
-    let global_style_data = &*GLOBAL_STYLE_DATA;
-    let guard = global_style_data.shared_lock.read();
-
-    let id = PropertyDeclarationId::Longhand(LonghandId::MozAppearance);
-
-    // Look for any -moz-appearance declarations on rules at the Author level
-    // which set some non-default value.  revert would cause us to revert to
-    // the default value, so don't count that.  Declarations with variables
-    // could resolve to a default or non-default value depending on computed
-    // style, but should be rare enough on -moz-appearance to be OK to count
-    // as a non-default value.
-    rules
-        .self_and_ancestors()
-        .filter(|n| n.cascade_level().origin() == Origin::Author)
-        .flat_map(|n| n.style_source().unwrap().read(&guard).get_at_importance(id, n.importance()))
-        .any(|declaration| {
-            match declaration {
-                PropertyDeclaration::MozAppearance(a) => *a != appearance,
-                _ => declaration.get_css_wide_keyword() != Some(CSSWideKeyword::Revert),
-            }
-        })
-}
-
-#[no_mangle]
 pub extern "C" fn Servo_StyleSet_Init(doc: &structs::Document) -> *mut RawServoStyleSet {
     let data = Box::new(PerDocumentStyleData::new(doc));
 
     // Do this here rather than in Servo_Initialize since we need a document to
     // get the default computed values from.
     style::gecko_properties::assert_initial_values_match(&data);
 
     Box::into_raw(data) as *mut RawServoStyleSet
--- a/testing/web-platform/tests/css/css-ui/appearance-cssom-001.html
+++ b/testing/web-platform/tests/css/css-ui/appearance-cssom-001.html
@@ -149,17 +149,17 @@
                            "spinner-downbutton",
                            "spinner-textfield",
                            "spinner-upbutton",
                            "splitter",
                            "statusbar",
                            "statusbarpanel",
                            "tab",
                            "tab-scroll-arrow-back",
-                           "tab-scroll-arrow-forward",
+                           "tab-scroll-arrow-forward ",
                            "tabpanel",
                            "tabpanels",
                            "textfield-multiline",
                            "toolbar",
                            "toolbarbutton",
                            "toolbarbutton-dropdown",
                            "toolbargripper",
                            "toolbox",