Merge mozilla-central to autoland a=merge
authorCoroiu Cristina <ccoroiu@mozilla.com>
Thu, 22 Nov 2018 06:33:06 +0200
changeset 506871 9f240dd3f954faf06753b6b6d24ce1a4f684d6ca
parent 506870 e117fa83228d64be9b7ba16ef80196f332a90828 (current diff)
parent 506823 ad8114bf526cfa7c4e878bc6cb48dc582dc3363d (diff)
child 506872 78b17ef09393ab0be8bd3bc65e06bde7aa29a6e7
push id1905
push userffxbld-merge
push dateMon, 21 Jan 2019 12:33:13 +0000
treeherdermozilla-release@c2fca1944d8c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone65.0a1
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
Merge mozilla-central to autoland a=merge
layout/generic/nsGfxScrollFrame.cpp
--- a/devtools/client/responsive.html/components/Toolbar.js
+++ b/devtools/client/responsive.html/components/Toolbar.js
@@ -100,34 +100,31 @@ class Toolbar extends PureComponent {
       selectedDevice,
       selectedPixelRatio,
       touchSimulationEnabled,
       viewport,
     } = this.props;
 
     return (
       dom.header(
-        { id: "toolbar" },
-        DeviceSelector({
-          devices,
-          onChangeDevice,
-          onResizeViewport,
-          onUpdateDeviceModal,
-          selectedDevice,
-          viewportId: viewport.id,
-        }),
-        leftAlignmentEnabled ?
-          dom.div({ className: "devtools-separator" })
-          :
-          null,
+        {
+          id: "toolbar",
+          className: leftAlignmentEnabled ? "left-aligned" : "",
+        },
         dom.div(
-          {
-            id: "toolbar-center-controls",
-            className: leftAlignmentEnabled ? "left-aligned" : "",
-          },
+          { id: "toolbar-center-controls" },
+          DeviceSelector({
+            devices,
+            onChangeDevice,
+            onResizeViewport,
+            onUpdateDeviceModal,
+            selectedDevice,
+            viewportId: viewport.id,
+          }),
+          dom.div({ className: "devtools-separator" }),
           ViewportDimension({
             onRemoveDeviceAssociation,
             onResizeViewport,
             viewport,
           }),
           dom.button({
             id: "rotate-button",
             className: "devtools-button",
--- a/devtools/client/responsive.html/index.css
+++ b/devtools/client/responsive.html/index.css
@@ -77,17 +77,18 @@ body,
 
 /**
  * Toolbar
  */
 
 #toolbar {
   background-color: var(--theme-tab-toolbar-background);
   border-bottom: 1px solid var(--theme-splitter-color);
-  display: flex;
+  display: grid;
+  grid-template-columns: auto min-content;
   width: 100%;
   min-height: 29px;
   -moz-user-select: none;
 }
 
 #toolbar-center-controls,
 #toolbar-end-controls {
   display: flex;
@@ -95,17 +96,17 @@ body,
 }
 
 #toolbar-center-controls {
   flex: 1;
   justify-content: center;
   margin: 1px;
 }
 
-#toolbar-center-controls.left-aligned {
+#toolbar.left-aligned #toolbar-center-controls {
   justify-content: start;
 }
 
 #toolbar.left-aligned #toolbar-end-controls {
   justify-self: end;
 }
 
 #rotate-button::before {
--- a/devtools/client/themes/layout.css
+++ b/devtools/client/themes/layout.css
@@ -102,16 +102,20 @@
 
 .flex-header {
   display: flex;
   align-items: center;
   padding: 3px;
   border-block-end: 1px solid var(--theme-splitter-color);
 }
 
+.flex-header-button-prev {
+  cursor: pointer;
+}
+
 .flex-header-button-prev::before {
   background-image: url("chrome://devtools/skin/images/arrowhead-left.svg");
   background-size: 16px;
 }
 
 html[dir="rtl"] .flex-header-button-prev::before {
   background-image: url("chrome://devtools/skin/images/arrowhead-right.svg");
 }
@@ -172,16 +176,17 @@ html[dir="rtl"] .flex-header-button-prev
   color: var(--theme-comment);
   padding-inline-start: 23px;
   margin-bottom: 4px;
   -moz-user-select: none;
 }
 
 .flex-item-list .devtools-button {
   background-color: transparent;
+  cursor: pointer;
   text-overflow: ellipsis;
   overflow: hidden;
   inline-size: 100%;
   text-align: start;
   height: 24px;
   margin: 0;
   padding-inline-start: 28px;
   padding-inline-end: 16px;
@@ -220,16 +225,17 @@ html[dir="rtl"] .flex-item-list .devtool
 }
 
 /**
  * Flex Item Selector
  */
 
 #flex-item-selector {
   background-position: right 4px center;
+  cursor: pointer;
   padding-left: 0;
   vertical-align: middle;
   width: 140px;
 }
 
 #flex-item-selector .objectBox-node {
   display: inline-block;
   font-size: 12px;
--- a/devtools/shared/css/generated/properties-db.js
+++ b/devtools/shared/css/generated/properties-db.js
@@ -291,16 +291,17 @@ exports.CSS_PROPERTIES = {
       "splitter",
       "statusbar",
       "statusbarpanel",
       "tab",
       "tab-scroll-arrow-back",
       "tab-scroll-arrow-forward",
       "tabpanel",
       "tabpanels",
+      "textarea",
       "textfield",
       "textfield-multiline",
       "toolbar",
       "toolbarbutton",
       "toolbarbutton-dropdown",
       "toolbargripper",
       "toolbox",
       "tooltip",
@@ -1738,16 +1739,17 @@ exports.CSS_PROPERTIES = {
       "splitter",
       "statusbar",
       "statusbarpanel",
       "tab",
       "tab-scroll-arrow-back",
       "tab-scroll-arrow-forward",
       "tabpanel",
       "tabpanels",
+      "textarea",
       "textfield",
       "textfield-multiline",
       "toolbar",
       "toolbarbutton",
       "toolbarbutton-dropdown",
       "toolbargripper",
       "toolbox",
       "tooltip",
--- a/dom/base/UseCounters.conf
+++ b/dom/base/UseCounters.conf
@@ -52,16 +52,19 @@ custom DOMErrorConstructor constructed a
 
 // Push API
 method PushManager.subscribe
 method PushSubscription.unsubscribe
 
 // window.sidebar
 attribute Window.sidebar
 
+// External interface
+method External.AddSearchProvider
+
 // AppCache API
 method OfflineResourceList.swapCache
 method OfflineResourceList.update
 attribute OfflineResourceList.status
 attribute OfflineResourceList.onchecking
 attribute OfflineResourceList.onerror
 attribute OfflineResourceList.onnoupdate
 attribute OfflineResourceList.ondownloading
--- a/dom/html/test/forms/test_input_number_data.js
+++ b/dom/html/test/forms/test_input_number_data.js
@@ -11,28 +11,30 @@ var tests = [
   { desc: "French",
     langTag: "fr-FR", inputWithGrouping: "123 456,78",
     inputWithoutGrouping: "123456,78", value: 123456.78
   },
   { desc: "German",
     langTag: "de", inputWithGrouping: "123.456,78",
     inputWithoutGrouping: "123456,78", value: 123456.78
   },
+  // Bug 1509057 disables grouping separators for now, so this test isn't
+  // currently relevant.
   // Extra german test to check that a locale that uses '.' as its grouping
   // separator doesn't result in it being invalid (due to step mismatch) due
   // to the de-localization code mishandling numbers that look like other
   // numbers formatted for English speakers (i.e. treating this as 123.456
   // instead of 123456):
-  { desc: "German (test 2)",
-    langTag: "de", inputWithGrouping: "123.456",
-    inputWithoutGrouping: "123456", value: 123456
-  },
+  //{ desc: "German (test 2)",
+  //  langTag: "de", inputWithGrouping: "123.456",
+  //  inputWithoutGrouping: "123456", value: 123456
+  //},
   { desc: "Hebrew",
     langTag: "he", inputWithGrouping: "123,456.78",
     inputWithoutGrouping: "123456.78", value: 123456.78
   },
 ];
 
 var invalidTests = [
   // Right now this will pass in a 'de' build, but not in the 'en' build that
-  // are used for testing. See bug .
+  // are used for testing. See bug 1216831.
   // { desc: "Invalid German", langTag: "de", input: "12.34" }
 ];
--- a/dom/html/test/forms/test_input_number_l10n.html
+++ b/dom/html/test/forms/test_input_number_l10n.html
@@ -35,18 +35,18 @@ SimpleTest.waitForFocus(function() {
 var elem;
 
 function runTest(test) {
   elem.lang = test.langTag;
   elem.value = 0;
   elem.focus();
   elem.select();
   sendString(test.inputWithGrouping);
-  is(elem.value, String(test.value), "Test " + test.desc + " ('" + test.langTag +
-                                     "') localization with grouping separator");
+  is(elem.value, "", "Test " + test.desc + " ('" + test.langTag +
+                     "') localization with grouping separator");
   elem.value = 0;
   elem.select();
   sendString(test.inputWithoutGrouping);
   is(elem.value, String(test.value), "Test " + test.desc + " ('" + test.langTag +
                                      "') localization without grouping separator");
 }
 
 function runInvalidInputTest(test) {
--- a/dom/html/test/forms/test_input_number_validation.html
+++ b/dom/html/test/forms/test_input_number_validation.html
@@ -39,17 +39,17 @@ function runTest(test) {
   elem.lang = test.langTag;
 
   gInvalid = false; // reset
   var desc = `${test.desc}  (lang='${test.langTag}', id='${elem.id}')`;
   elem.value = 0;
   elem.focus();
   elem.select();
   sendString(test.inputWithGrouping);
-  checkIsValid(elem, `${desc} with grouping separator`);
+  checkIsInvalid(elem, `${desc} with grouping separator`);
   sendChar("a");
   checkIsInvalid(elem, `${desc} with grouping separator`);
 
   gInvalid = false; // reset
   elem.value = 0;
   elem.select();
   sendString(test.inputWithoutGrouping);
   checkIsValid(elem, `${desc} without grouping separator`);
--- a/dom/webidl/External.webidl
+++ b/dom/webidl/External.webidl
@@ -2,11 +2,12 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [NoInterfaceObject, JSImplementation="@mozilla.org/sidebar;1"]
 interface External
 {
+  [UseCounter]
   void AddSearchProvider(DOMString aDescriptionURL);
   void IsSearchProviderInstalled();
 };
--- a/intl/unicharutil/util/ICUUtils.cpp
+++ b/intl/unicharutil/util/ICUUtils.cpp
@@ -140,16 +140,19 @@ ICUUtils::ParseNumber(nsAString& aValue,
   uint32_t length = aValue.Length();
 
   nsAutoCString langTag;
   aLangTags.GetNext(langTag);
   while (!langTag.IsEmpty()) {
     UErrorCode status = U_ZERO_ERROR;
     AutoCloseUNumberFormat format(unum_open(UNUM_DECIMAL, nullptr, 0,
                                             langTag.get(), nullptr, &status));
+    if (!LocaleNumberGroupingIsEnabled()) {
+      unum_setAttribute(format.rwget(), UNUM_GROUPING_USED, UBool(0));
+    }
     int32_t parsePos = 0;
     static_assert(sizeof(UChar) == 2 && sizeof(nsAString::char_type) == 2,
                   "Unexpected character size - the following cast is unsafe");
     double val = unum_parseDouble(format,
                                   (const UChar*)PromiseFlatString(aValue).get(),
                                   length, &parsePos, &status);
     if (U_SUCCESS(status) && parsePos == (int32_t)length) {
       return val;
--- a/layout/generic/nsGfxScrollFrame.cpp
+++ b/layout/generic/nsGfxScrollFrame.cpp
@@ -64,18 +64,18 @@
 #include "ScrollAnimationPhysics.h"
 #include "ScrollAnimationBezierPhysics.h"
 #include "ScrollAnimationMSDPhysics.h"
 #include "ScrollSnap.h"
 #include "UnitTransforms.h"
 #include "nsPluginFrame.h"
 #include "nsSliderFrame.h"
 #include "mozilla/layers/APZCCallbackHelper.h"
-#include <mozilla/layers/AxisPhysicsModel.h>
-#include <mozilla/layers/AxisPhysicsMSDModel.h>
+#include "mozilla/layers/AxisPhysicsModel.h"
+#include "mozilla/layers/AxisPhysicsMSDModel.h"
 #include "mozilla/layers/LayerTransactionChild.h"
 #include "mozilla/layers/ScrollLinkedEffectDetector.h"
 #include "mozilla/Unused.h"
 #include "LayersLogging.h"  // for Stringify
 #include <algorithm>
 #include <cstdlib> // for std::abs(int/long)
 #include <cmath> // for std::abs(float/double)
 
--- a/layout/generic/nsGridContainerFrame.cpp
+++ b/layout/generic/nsGridContainerFrame.cpp
@@ -149,16 +149,17 @@ enum class GridLineSide
 {
   eBeforeGridGap,
   eAfterGridGap,
 };
 
 struct nsGridContainerFrame::TrackSize
 {
   enum StateBits : uint16_t {
+    // clang-format off
     eAutoMinSizing =              0x1,
     eMinContentMinSizing =        0x2,
     eMaxContentMinSizing =        0x4,
     eMinOrMaxContentMinSizing = eMinContentMinSizing | eMaxContentMinSizing,
     eIntrinsicMinSizing = eMinOrMaxContentMinSizing | eAutoMinSizing,
     eModified =                   0x8,
     eAutoMaxSizing =             0x10,
     eMinContentMaxSizing =       0x20,
@@ -168,16 +169,17 @@ struct nsGridContainerFrame::TrackSize
     eFlexMaxSizing =             0x80,
     eFrozen =                   0x100,
     eSkipGrowUnlimited1 =       0x200,
     eSkipGrowUnlimited2 =       0x400,
     eSkipGrowUnlimited = eSkipGrowUnlimited1 | eSkipGrowUnlimited2,
     eBreakBefore =              0x800,
     eFitContent =              0x1000,
     eInfinitelyGrowable =      0x2000,
+    // clang-format on
   };
 
   StateBits Initialize(nscoord aPercentageBasis,
                        const nsStyleCoord& aMinCoord,
                        const nsStyleCoord& aMaxCoord);
   bool IsFrozen() const { return mState & eFrozen; }
 #ifdef DEBUG
   void Dump() const;
@@ -529,32 +531,34 @@ struct nsGridContainerFrame::GridArea
 };
 
 struct nsGridContainerFrame::GridItemInfo
 {
   /**
    * Item state per axis.
    */
   enum StateBits : uint8_t {
+    // clang-format off
     eIsFlexing =              0x1, // does the item span a flex track?
     eFirstBaseline =          0x2, // participate in 'first baseline' alignment?
     // ditto 'last baseline', mutually exclusive w. eFirstBaseline
     eLastBaseline =           0x4,
     eIsBaselineAligned = eFirstBaseline | eLastBaseline,
     // One of e[Self|Content]Baseline is set when eIsBaselineAligned is true
     eSelfBaseline =           0x8, // is it *-self:[last ]baseline alignment?
     // Ditto *-content:[last ]baseline. Mutually exclusive w. eSelfBaseline.
     eContentBaseline =       0x10,
     eAllBaselineBits = eIsBaselineAligned | eSelfBaseline | eContentBaseline,
     // Should apply Automatic Minimum Size per:
     // https://drafts.csswg.org/css-grid/#min-size-auto
     eApplyAutoMinSize =      0x20,
     // Clamp per https://drafts.csswg.org/css-grid/#min-size-auto
     eClampMarginBoxMinSize = 0x40,
     eIsSubgrid =             0x80,
+    // clang-format on
   };
 
   explicit GridItemInfo(nsIFrame* aFrame,
                         const GridArea& aArea)
     : mFrame(aFrame)
     , mArea(aArea)
   {
     mState[eLogicalAxisBlock] = StateBits(0);
--- a/layout/style/res/forms.css
+++ b/layout/style/res/forms.css
@@ -111,40 +111,41 @@ input {
 input > .anonymous-div,
 input::placeholder {
   word-wrap: normal !important;
   /* Make the line-height equal to the available height */
   line-height: -moz-block-height;
 }
 
 textarea {
+  -moz-appearance: textarea;
   margin-block-start: 1px;
   margin-block-end: 1px;
   border: 2px inset ThreeDLightShadow;
   /* The 1px inline padding is for parity with Win/IE */
   padding-inline-start: 1px;
   padding-inline-end: 1px;
   background-color: -moz-Field;
   color: -moz-FieldText;
   font: medium -moz-fixed;
   text-rendering: optimizeLegibility;
-  text-align: start;
-  text-transform: none;
-  word-spacing: normal;
-  letter-spacing: normal;
   vertical-align: text-bottom;
   cursor: text;
   resize: both;
-  -moz-appearance: textfield-multiline;
-  text-indent: 0;
   -moz-user-select: text;
-  text-shadow: none;
   white-space: pre-wrap;
   word-wrap: break-word;
   overflow-clip-box: content-box;
+  /* A few properties that we don't want to inherit by default: */
+  text-align: initial;
+  text-indent: initial;
+  text-shadow: initial;
+  text-transform: initial;
+  word-spacing: initial;
+  letter-spacing: initial;
 }
 
 textarea > scrollbar {
   cursor: default;
 }
 
 textarea > .anonymous-div,
 input > .anonymous-div,
--- a/memory/replace/dmd/dmd.py
+++ b/memory/replace/dmd/dmd.py
@@ -214,25 +214,29 @@ def fixStackTraces(inputFilename, isZipp
     # script is installed as a symlink.
     sys.path.append(os.path.dirname(__file__))
 
     bpsyms = os.environ.get('BREAKPAD_SYMBOLS_PATH', None)
     sysname = platform.system()
     if bpsyms and os.path.exists(bpsyms):
         import fix_stack_using_bpsyms as fixModule
 
-        def fix(line): return fixModule.fixSymbols(line, bpsyms)
+        def fix(line):
+            return fixModule.fixSymbols(line, bpsyms, jsonEscape=True)
+
     elif sysname == 'Linux':
         import fix_linux_stack as fixModule
 
-        def fix(line): return fixModule.fixSymbols(line)
+        def fix(line): return fixModule.fixSymbols(line, jsonEscape=True)
+
     elif sysname == 'Darwin':
         import fix_macosx_stack as fixModule
 
-        def fix(line): return fixModule.fixSymbols(line)
+        def fix(line): return fixModule.fixSymbols(line, jsonEscape=True)
+
     else:
         fix = None  # there is no fix script for Windows
 
     if fix:
         # Fix stacks, writing output to a temporary file, and then
         # overwrite the original file.
         tmpFile = tempfile.NamedTemporaryFile(delete=False)
 
--- a/python/mozbuild/mozbuild/backend/cpp_eclipse.py
+++ b/python/mozbuild/mozbuild/backend/cpp_eclipse.py
@@ -74,17 +74,22 @@ class CppEclipseBackend(CommonBackend):
         return os.path.join(srcdir_parent, workspace_dirname)
 
     def consume_object(self, obj):
         reldir = getattr(obj, 'relsrcdir', None)
 
         # Note that unlike VS, Eclipse' indexer seem to crawl the headers and
         # isn't picky about the local includes.
         if isinstance(obj, ComputedFlags):
-            args = self._args_for_dirs.setdefault(reldir, {'includes': [], 'defines': []})
+            args = self._args_for_dirs.setdefault('tree/' + reldir, {'includes': [], 'defines': []})
+            # use the same args for any objdirs we include:
+            if reldir == 'dom/bindings':
+                self._args_for_dirs.setdefault('generated-webidl', args)
+            if reldir == 'ipc/ipdl':
+                self._args_for_dirs.setdefault('generated-ipdl', args)
 
             includes = args["includes"]
             if "BASE_INCLUDES" in obj.flags and obj.flags["BASE_INCLUDES"]:
                 includes += obj.flags["BASE_INCLUDES"]
             if "LOCAL_INCLUDES" in obj.flags and obj.flags["LOCAL_INCLUDES"]:
                 includes += obj.flags["LOCAL_INCLUDES"]
 
             defs = args["defines"]
@@ -514,17 +519,17 @@ WORKSPACE_LANGUAGE_SETTINGS_TEMPLATE = "
 LANGUAGE_SETTINGS_TEMPLATE_HEADER = """<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <project>
 	<configuration id="0.1674256904" name="Default">
 		<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
 			<provider class="org.eclipse.cdt.core.language.settings.providers.LanguageSettingsGenericProvider" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider" name="CDT User Setting Entries" prefer-non-shared="true" store-entries-with-project="true">
 				<language id="org.eclipse.cdt.core.g++">
 """
 
-LANGUAGE_SETTINGS_TEMPLATE_DIR_HEADER = """					<resource project-relative-path="tree/@RELATIVE_PATH@">
+LANGUAGE_SETTINGS_TEMPLATE_DIR_HEADER = """					<resource project-relative-path="@RELATIVE_PATH@">
 						<entry kind="includeFile" name="@PREINCLUDE_FILE_PATH@">
 							<flag value="LOCAL"/>
 						</entry>
 """
 
 LANGUAGE_SETTINGS_TEMPLATE_DIR_INCLUDE = """						<entry kind="includePath" name="@INCLUDE_PATH@">
 							<flag value="LOCAL"/>
 						</entry>
--- a/servo/components/style/values/specified/box.rs
+++ b/servo/components/style/values/specified/box.rs
@@ -1150,20 +1150,21 @@ pub enum Appearance {
     /// The tab panels container.
     #[parse(condition = "in_ua_or_chrome_sheet")]
     Tabpanels,
     /// The tabs scroll arrows (left/right).
     #[parse(condition = "in_ua_or_chrome_sheet")]
     TabScrollArrowBack,
     #[parse(condition = "in_ua_or_chrome_sheet")]
     TabScrollArrowForward,
-    /// A textfield or text area.
+    /// A multi-line text field, e.g. HTML <textarea>.
+    #[parse(aliases = "textfield-multiline")]
+    Textarea,
+    /// A single-line text field, e.g. HTML <input type=text>.
     Textfield,
-    /// A multiline text field.
-    TextfieldMultiline,
     /// A toolbar in an application window.
     #[parse(condition = "in_ua_or_chrome_sheet")]
     Toolbar,
     /// A single toolbar button (with no associated dropdown).
     #[parse(condition = "in_ua_or_chrome_sheet")]
     Toolbarbutton,
     /// The dropdown portion of a toolbar button
     #[parse(condition = "in_ua_or_chrome_sheet")]
--- a/tools/rb/fix_linux_stack.py
+++ b/tools/rb/fix_linux_stack.py
@@ -3,20 +3,21 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 # This script uses addr2line (part of binutils) to post-process the entries
 # produced by NS_FormatCodeAddress(), which on Linux often lack a function
 # name, a file name and a line number.
 
+import json
+import os
+import re
 import subprocess
 import sys
-import re
-import os
 from StringIO import StringIO
 
 objdump_section_re = re.compile(
     "^ [0-9a-f]* ([0-9a-f ]{8}) ([0-9a-f ]{8}) ([0-9a-f ]{8}) ([0-9a-f ]{8}).*")
 
 
 def elf_section(file, section):
     """
@@ -279,30 +280,34 @@ def addressToSymbol(file, address):
     cache[address] = result
     return result
 
 
 # Matches lines produced by NS_FormatCodeAddress().
 line_re = re.compile("^(.*#\d+: )(.+)\[(.+) \+(0x[0-9A-Fa-f]+)\](.*)$")
 
 
-def fixSymbols(line):
+def fixSymbols(line, jsonEscape=False):
     result = line_re.match(line)
     if result is not None:
         (before, fn, file, address, after) = result.groups()
 
         if os.path.exists(file) and os.path.isfile(file):
             (name, fileline) = addressToSymbol(file, address)
 
             # If addr2line gave us something useless, keep what we had before.
             if name == "??":
                 name = fn
             if fileline == "??:0" or fileline == "??:?":
                 fileline = file
 
+            if jsonEscape:
+                name = json.dumps(name)[1:-1]         # [1:-1] strips the quotes
+                fileline = json.dumps(fileline)[1:-1]
+
             nl = '\n' if line[-1] == '\n' else ''
             return "%s%s (%s)%s%s" % (before, name, fileline, after, nl)
         else:
             sys.stderr.write("Warning: File \"" + file + "\" does not exist.\n")
             return line
     else:
         return line
 
--- a/tools/rb/fix_macosx_stack.py
+++ b/tools/rb/fix_macosx_stack.py
@@ -3,21 +3,22 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 # This script uses |atos| to post-process the entries produced by
 # NS_FormatCodeAddress(), which on Mac often lack a file name and a line
 # number.
 
+import json
+import os
+import pty
+import re
 import subprocess
 import sys
-import re
-import os
-import pty
 import termios
 
 
 class unbufferedLineConverter:
     """
     Wrap a child process that responds to each line of input with one line of
     output.  Uses pty to trick the child into providing unbuffered output.
     """
@@ -108,17 +109,17 @@ def cxxfilt(sym):
     return cxxfilt_proc.stdout.readline().rstrip("\n")
 
 
 # Matches lines produced by NS_FormatCodeAddress().
 line_re = re.compile("^(.*#\d+: )(.+)\[(.+) \+(0x[0-9A-Fa-f]+)\](.*)$")
 atos_name_re = re.compile("^(.+) \(in ([^)]+)\) \((.+)\)$")
 
 
-def fixSymbols(line):
+def fixSymbols(line, jsonEscape=False):
     result = line_re.match(line)
     if result is not None:
         (before, fn, file, address, after) = result.groups()
         address = int(address, 16)
 
         if os.path.exists(file) and os.path.isfile(file):
             address += address_adjustment(file)
             info = addressToSymbol(file, address)
@@ -132,16 +133,19 @@ def fixSymbols(line):
                 # Print the first two forms as-is, and transform the third
                 (name, library, fileline) = name_result.groups()
                 # atos demangles, but occasionally it fails.  cxxfilt can mop
                 # up the remaining cases(!), which will begin with '_Z'.
                 if (name.startswith("_Z")):
                     name = cxxfilt(name)
                 info = "%s (%s, in %s)" % (name, fileline, library)
 
+            if jsonEscape:
+                info = json.dumps(info)[1:-1]   # [1:-1] strips the quotes
+
             nl = '\n' if line[-1] == '\n' else ''
             return before + info + after + nl
         else:
             sys.stderr.write("Warning: File \"" + file + "\" does not exist.\n")
             return line
     else:
         return line
 
--- a/tools/rb/fix_stack_using_bpsyms.py
+++ b/tools/rb/fix_stack_using_bpsyms.py
@@ -7,16 +7,17 @@
 # This script uses breakpad symbols to post-process the entries produced by
 # NS_FormatCodeAddress(), which on TBPL builds often lack a file name and a
 # line number (and on Linux even the symbol is often bad).
 
 from __future__ import with_statement
 
 import bisect
 import collections
+import json
 import os
 import re
 import subprocess
 import sys
 
 here = os.path.dirname(__file__)
 FunctionSymbol = collections.namedtuple('FunctionSymbol', ['name', 'size'])
 
@@ -182,24 +183,26 @@ def addressToSymbol(file, address, symbo
     else:
         return ""
 
 
 # Matches lines produced by NS_FormatCodeAddress().
 line_re = re.compile("^(.*#\d+: )(.+)\[(.+) \+(0x[0-9A-Fa-f]+)\](.*)$")
 
 
-def fixSymbols(line, symbolsDir):
+def fixSymbols(line, symbolsDir, jsonEscape=False):
     result = line_re.match(line)
     if result is not None:
         (before, fn, file, address, after) = result.groups()
         address = int(address, 16)
         symbol = addressToSymbol(file, address, symbolsDir)
         if not symbol:
             symbol = "%s + 0x%x" % (os.path.basename(file), address)
+        if jsonEscape:
+            symbol = json.dumps(symbol)[1:-1]   # [1:-1] strips the quotes
         return before + symbol + after + "\n"
     else:
         return line
 
 
 if __name__ == "__main__":
     symbolsDir = sys.argv[1]
     for line in iter(sys.stdin.readline, ''):
--- a/widget/cocoa/nsNativeThemeCocoa.mm
+++ b/widget/cocoa/nsNativeThemeCocoa.mm
@@ -3456,17 +3456,17 @@ nsNativeThemeCocoa::ComputeWidgetInfo(ns
       return Some(WidgetInfo::ScrollbarTrack(
         ComputeScrollbarParams(
           aFrame, aAppearance == StyleAppearance::ScrollbartrackHorizontal)));
 
     case StyleAppearance::Scrollcorner:
       return Some(WidgetInfo::ScrollCorner(
         ComputeScrollbarParams(aFrame, false)));
 
-    case StyleAppearance::TextfieldMultiline:
+    case StyleAppearance::Textarea:
       return Some(WidgetInfo::MultilineTextField(
         eventState.HasState(NS_EVENT_STATE_FOCUS)));
 
     case StyleAppearance::Listbox:
       return Some(WidgetInfo::ListBox());
 
     case StyleAppearance::MozMacSourceList: {
       if (VibrancyManager::SystemSupportsVibrancy()) {
@@ -3908,17 +3908,17 @@ nsNativeThemeCocoa::CreateWebRenderComma
       if (isOverlay && !IsParentScrollbarRolledOver(aFrame)) {
         // There is no scrollbar track, draw nothing and return true.
         return true;
       }
       // There is a scrollbar track and it needs to be drawn using fallback.
       return false;
     }
 
-    case StyleAppearance::TextfieldMultiline: {
+    case StyleAppearance::Textarea: {
       if (eventState.HasState(NS_EVENT_STATE_FOCUS)) {
         // We can't draw the focus ring using webrender, so fall back to regular
         // drawing if we're focused.
         return false;
       }
 
       // White background
       aBuilder.PushRect(bounds, bounds, true,
@@ -4064,17 +4064,17 @@ nsNativeThemeCocoa::GetWidgetBorder(nsDe
       ::GetThemeMetric(kThemeMetricEditTextWhitespace, &textPadding);
 
       frameOutset += textPadding;
 
       result.SizeTo(frameOutset, frameOutset, frameOutset, frameOutset);
       break;
     }
 
-    case StyleAppearance::TextfieldMultiline:
+    case StyleAppearance::Textarea:
       result.SizeTo(1, 1, 1, 1);
       break;
 
     case StyleAppearance::Searchfield:
       result = DirectionAwareMargin(kAquaSearchfieldBorder, aFrame);
       break;
 
     case StyleAppearance::Listbox:
@@ -4166,17 +4166,17 @@ nsNativeThemeCocoa::GetWidgetOverflow(ns
   switch (aAppearance) {
     case StyleAppearance::Button:
     case StyleAppearance::MozMacDisclosureButtonOpen:
     case StyleAppearance::MozMacDisclosureButtonClosed:
     case StyleAppearance::MozMacHelpButton:
     case StyleAppearance::Toolbarbutton:
     case StyleAppearance::NumberInput:
     case StyleAppearance::Textfield:
-    case StyleAppearance::TextfieldMultiline:
+    case StyleAppearance::Textarea:
     case StyleAppearance::Searchfield:
     case StyleAppearance::Listbox:
     // NOTE: if you change Menulist and MenulistButton to behave differently,
     // be sure to handle StaticPrefs::layout_css_webkit_appearance_enabled.
     case StyleAppearance::Menulist:
     case StyleAppearance::MenulistButton:
     case StyleAppearance::MozMenulistButton:
     case StyleAppearance::MenulistTextfield:
@@ -4317,17 +4317,17 @@ nsNativeThemeCocoa::GetMinimumWidgetSize
       ::GetThemeMetric(kThemeMetricPopupButtonHeight, &popupHeight);
       aResult->SizeTo(0, popupHeight);
       break;
     }
 
     case StyleAppearance::MenulistTextfield:
     case StyleAppearance::NumberInput:
     case StyleAppearance::Textfield:
-    case StyleAppearance::TextfieldMultiline:
+    case StyleAppearance::Textarea:
     case StyleAppearance::Searchfield:
     {
       // at minimum, we should be tall enough for 9pt text.
       // I'm using hardcoded values here because the appearance manager
       // values for the frame size are incorrect.
       aResult->SizeTo(0, (2 + 2) /* top */ + 9 + (1 + 1) /* bottom */);
       break;
     }
@@ -4654,17 +4654,17 @@ nsNativeThemeCocoa::ThemeSupportsWidget(
     case StyleAppearance::InnerSpinButton:
     case StyleAppearance::Spinner:
     case StyleAppearance::SpinnerUpbutton:
     case StyleAppearance::SpinnerDownbutton:
     case StyleAppearance::Toolbar:
     case StyleAppearance::Statusbar:
     case StyleAppearance::NumberInput:
     case StyleAppearance::Textfield:
-    case StyleAppearance::TextfieldMultiline:
+    case StyleAppearance::Textarea:
     case StyleAppearance::Searchfield:
     case StyleAppearance::Toolbox:
     //case StyleAppearance::Toolbarbutton:
     case StyleAppearance::ProgressBar:
     case StyleAppearance::ProgressbarVertical:
     case StyleAppearance::Progresschunk:
     case StyleAppearance::Meter:
     case StyleAppearance::Meterchunk:
@@ -4815,17 +4815,17 @@ nsNativeThemeCocoa::WidgetAppearanceDepe
     case StyleAppearance::SpinnerDownbutton:
     case StyleAppearance::Separator:
     case StyleAppearance::Toolbox:
     case StyleAppearance::MenulistTextfield:
     case StyleAppearance::NumberInput:
     case StyleAppearance::Textfield:
     case StyleAppearance::Treeview:
     case StyleAppearance::Treeline:
-    case StyleAppearance::TextfieldMultiline:
+    case StyleAppearance::Textarea:
     case StyleAppearance::Listbox:
     case StyleAppearance::Resizer:
       return false;
     default:
       return true;
   }
 }
 
--- a/widget/gtk/nsNativeThemeGTK.cpp
+++ b/widget/gtk/nsNativeThemeGTK.cpp
@@ -335,17 +335,17 @@ nsNativeThemeGTK::GetGtkWidgetAndState(S
     }
 
     if (IsFrameContentNodeInNamespace(aFrame, kNameSpaceID_XUL)) {
       // For these widget types, some element (either a child or parent)
       // actually has element focus, so we check the focused attribute
       // to see whether to draw in the focused state.
       if (aAppearance == StyleAppearance::NumberInput ||
           aAppearance == StyleAppearance::Textfield ||
-          aAppearance == StyleAppearance::TextfieldMultiline ||
+          aAppearance == StyleAppearance::Textarea ||
           aAppearance == StyleAppearance::MenulistTextfield ||
           aAppearance == StyleAppearance::SpinnerTextfield ||
           aAppearance == StyleAppearance::RadioContainer ||
           aAppearance == StyleAppearance::RadioLabel) {
         aState->focused = IsFocused(aFrame);
       } else if (aAppearance == StyleAppearance::Radio ||
                  aAppearance == StyleAppearance::Checkbox) {
         // In XUL, checkboxes and radios shouldn't have focus rings, their labels do
@@ -597,17 +597,17 @@ nsNativeThemeGTK::GetGtkWidgetAndState(S
     break;
   case StyleAppearance::Resizer:
     aGtkWidgetType = MOZ_GTK_RESIZER;
     break;
   case StyleAppearance::NumberInput:
   case StyleAppearance::Textfield:
     aGtkWidgetType = MOZ_GTK_ENTRY;
     break;
-  case StyleAppearance::TextfieldMultiline:
+  case StyleAppearance::Textarea:
 #ifdef MOZ_WIDGET_GTK
     aGtkWidgetType = MOZ_GTK_TEXT_VIEW;
 #else
     aGtkWidgetType = MOZ_GTK_ENTRY;
 #endif
     break;
   case StyleAppearance::Listbox:
   case StyleAppearance::Treeview:
@@ -1973,17 +1973,17 @@ nsNativeThemeGTK::ThemeSupportsWidget(ns
   case StyleAppearance::ScrollbarVertical:
   case StyleAppearance::ScrollbartrackHorizontal:
   case StyleAppearance::ScrollbartrackVertical:
   case StyleAppearance::ScrollbarthumbHorizontal:
   case StyleAppearance::ScrollbarthumbVertical:
   case StyleAppearance::MenulistTextfield:
   case StyleAppearance::NumberInput:
   case StyleAppearance::Textfield:
-  case StyleAppearance::TextfieldMultiline:
+  case StyleAppearance::Textarea:
   case StyleAppearance::Range:
   case StyleAppearance::RangeThumb:
   case StyleAppearance::ScaleHorizontal:
   case StyleAppearance::ScalethumbHorizontal:
   case StyleAppearance::ScaleVertical:
   case StyleAppearance::ScalethumbVertical:
     // case StyleAppearance::Scalethumbstart:
     // case StyleAppearance::Scalethumbend:
--- a/widget/headless/HeadlessThemeGTK.cpp
+++ b/widget/headless/HeadlessThemeGTK.cpp
@@ -58,17 +58,17 @@ HeadlessThemeGTK::GetWidgetBorder(nsDevi
     case StyleAppearance::Listbox:
     case StyleAppearance::Treeview:
     case StyleAppearance::Treeheadersortarrow:
     case StyleAppearance::ProgressBar:
     case StyleAppearance::ProgressbarVertical:
     case StyleAppearance::SpinnerUpbutton:
     case StyleAppearance::SpinnerDownbutton:
     case StyleAppearance::SpinnerTextfield:
-    case StyleAppearance::TextfieldMultiline:
+    case StyleAppearance::Textarea:
     case StyleAppearance::Menupopup:
     case StyleAppearance::MozGtkInfoBar:
       result.top = 1;
       result.right = 1;
       result.bottom = 1;
       result.left = 1;
       break;
     case StyleAppearance::Treeheadercell:
@@ -397,17 +397,17 @@ HeadlessThemeGTK::ThemeSupportsWidget(ns
     case StyleAppearance::ScrollbarbuttonDown:
     case StyleAppearance::ScrollbarbuttonLeft:
     case StyleAppearance::ScrollbarbuttonRight:
     case StyleAppearance::ScrollbartrackHorizontal:
     case StyleAppearance::ScrollbartrackVertical:
     case StyleAppearance::ScrollbarthumbHorizontal:
     case StyleAppearance::ScrollbarthumbVertical:
     case StyleAppearance::Textfield:
-    case StyleAppearance::TextfieldMultiline:
+    case StyleAppearance::Textarea:
     case StyleAppearance::Menulist:
     case StyleAppearance::MenulistText:
     case StyleAppearance::MenulistTextfield:
     case StyleAppearance::ScaleHorizontal:
     case StyleAppearance::ScaleVertical:
     case StyleAppearance::ScalethumbHorizontal:
     case StyleAppearance::ScalethumbVertical:
     case StyleAppearance::Range:
--- a/widget/nsNativeTheme.cpp
+++ b/widget/nsNativeTheme.cpp
@@ -103,17 +103,17 @@ nsNativeTheme::GetContentState(nsIFrame*
   // On Windows and Mac, only draw focus rings if they should be shown. This
   // means that focus rings are only shown once the keyboard has been used to
   // focus something in the window.
 #if defined(XP_MACOSX)
   // Mac always draws focus rings for textboxes and lists.
   if (aAppearance == StyleAppearance::MenulistTextfield ||
       aAppearance == StyleAppearance::NumberInput ||
       aAppearance == StyleAppearance::Textfield ||
-      aAppearance == StyleAppearance::TextfieldMultiline ||
+      aAppearance == StyleAppearance::Textarea ||
       aAppearance == StyleAppearance::Searchfield ||
       aAppearance == StyleAppearance::Listbox) {
     return flags;
   }
 #endif
 #if defined(XP_WIN)
   // On Windows, focused buttons are always drawn as such by the native theme.
   if (aAppearance == StyleAppearance::Button)
@@ -343,17 +343,17 @@ nsNativeTheme::IsWidgetStyled(nsPresCont
       return !numberControlFrame->ShouldUseNativeStyleForSpinner();
     }
   }
 
   return (aAppearance == StyleAppearance::NumberInput ||
           aAppearance == StyleAppearance::Button ||
           aAppearance == StyleAppearance::MenulistTextfield ||
           aAppearance == StyleAppearance::Textfield ||
-          aAppearance == StyleAppearance::TextfieldMultiline ||
+          aAppearance == StyleAppearance::Textarea ||
           aAppearance == StyleAppearance::Listbox ||
           aAppearance == StyleAppearance::Menulist ||
           (aAppearance == StyleAppearance::MenulistButton &&
            StaticPrefs::layout_css_webkit_appearance_enabled())) &&
          aFrame->GetContent()->IsHTMLElement() &&
          aPresContext->HasAuthorSpecifiedRules(aFrame,
                                                NS_AUTHOR_SPECIFIED_BORDER |
                                                NS_AUTHOR_SPECIFIED_BACKGROUND);
--- a/widget/windows/nsNativeThemeWin.cpp
+++ b/widget/windows/nsNativeThemeWin.cpp
@@ -738,17 +738,17 @@ mozilla::Maybe<nsUXThemeClass> nsNativeT
     case StyleAppearance::Button:
     case StyleAppearance::Radio:
     case StyleAppearance::Checkbox:
     case StyleAppearance::Groupbox:
       return Some(eUXButton);
     case StyleAppearance::MenulistTextfield:
     case StyleAppearance::NumberInput:
     case StyleAppearance::Textfield:
-    case StyleAppearance::TextfieldMultiline:
+    case StyleAppearance::Textarea:
     case StyleAppearance::FocusOutline:
       return Some(eUXEdit);
     case StyleAppearance::Tooltip:
       return Some(eUXTooltip);
     case StyleAppearance::Toolbox:
       return Some(eUXRebar);
     case StyleAppearance::MozWinMediaToolbox:
       return Some(eUXMediaRebar);
@@ -962,17 +962,17 @@ nsNativeThemeWin::GetThemePartAndState(n
       aState = TS_NORMAL;
       // Since we don't support groupbox disabled and GBS_DISABLED looks the
       // same as GBS_NORMAL don't bother supporting GBS_DISABLED.
       return NS_OK;
     }
     case StyleAppearance::MenulistTextfield:
     case StyleAppearance::NumberInput:
     case StyleAppearance::Textfield:
-    case StyleAppearance::TextfieldMultiline: {
+    case StyleAppearance::Textarea: {
       EventStates eventState = GetContentState(aFrame, aAppearance);
 
       /* Note: the NOSCROLL type has a rounded corner in each corner.  The more
        * specific HSCROLL, VSCROLL, HVSCROLL types have side and/or top/bottom
        * edges rendered as straight horizontal lines with sharp corners to
        * accommodate a scrollbar.  However, the scrollbar gets rendered on top
        * of this for us, so we don't care, and can just use NOSCROLL here.
        */
@@ -1881,17 +1881,17 @@ RENDER_AGAIN:
            aAppearance == StyleAppearance::MozMenulistButton)
   {
     DrawThemeBGRTLAware(theme, hdc, part, state,
                         &widgetRect, &clipRect, IsFrameRTL(aFrame));
   }
   else if (aAppearance == StyleAppearance::MenulistTextfield ||
            aAppearance == StyleAppearance::NumberInput ||
            aAppearance == StyleAppearance::Textfield ||
-           aAppearance == StyleAppearance::TextfieldMultiline) {
+           aAppearance == StyleAppearance::Textarea) {
     if (aAppearance == StyleAppearance::MenulistTextfield &&
         state != TFS_EDITBORDER_FOCUSED) {
       // We want 'menulist-textfield' to behave like 'textfield', except we
       // don't want a border unless it's focused.  We have to handle the
       // non-focused case manually here.
       COLORREF color = GetTextfieldFillColor(theme, part, state);
       HBRUSH brush = CreateSolidBrush(color);
       ::FillRect(hdc, &widgetRect, brush);
@@ -2094,17 +2094,17 @@ nsNativeThemeWin::GetWidgetBorder(nsDevi
     else if (IsRightToSelectedTab(aFrame))
       // Remove the left edge, since we won't be drawing it.
       result.left = 0;
   }
 
   if (aFrame && (aAppearance == StyleAppearance::MenulistTextfield ||
                  aAppearance == StyleAppearance::NumberInput ||
                  aAppearance == StyleAppearance::Textfield ||
-                 aAppearance == StyleAppearance::TextfieldMultiline)) {
+                 aAppearance == StyleAppearance::Textarea)) {
     nsIContent* content = aFrame->GetContent();
     if (content && content->IsHTMLElement()) {
       // We need to pad textfields by 1 pixel, since the caret will draw
       // flush against the edge by default if we don't.
       result.top++;
       result.left++;
       result.bottom++;
       result.right++;
@@ -2195,17 +2195,17 @@ nsNativeThemeWin::GetWidgetPadding(nsDev
     aResult->left = aResult->right = popupSize.cx;
     ScaleForFrameDPI(aResult, aFrame);
     return ok;
   }
 
   if (aAppearance == StyleAppearance::MenulistTextfield ||
       aAppearance == StyleAppearance::NumberInput ||
       aAppearance == StyleAppearance::Textfield ||
-      aAppearance == StyleAppearance::TextfieldMultiline ||
+      aAppearance == StyleAppearance::Textarea ||
       aAppearance == StyleAppearance::Menulist)
   {
     // If we have author-specified padding for these elements, don't do the
     // fixups below.
     if (aFrame->PresContext()->HasAuthorSpecifiedRules(aFrame, NS_AUTHOR_SPECIFIED_PADDING))
       return false;
   }
 
@@ -2213,17 +2213,17 @@ nsNativeThemeWin::GetWidgetPadding(nsDev
    * content too tightly.  The actual border is drawn 1px inside the specified
    * rectangle, so Gecko will end up making the contents look too small.
    * Instead, we add 2px padding for the contents and fix this. (Used to be 1px
    * added, see bug 430212)
    */
   if (aAppearance == StyleAppearance::MenulistTextfield ||
       aAppearance == StyleAppearance::NumberInput ||
       aAppearance == StyleAppearance::Textfield ||
-      aAppearance == StyleAppearance::TextfieldMultiline) {
+      aAppearance == StyleAppearance::Textarea) {
     aResult->top = aResult->bottom = 2;
     aResult->left = aResult->right = 2;
     ScaleForFrameDPI(aResult, aFrame);
     return ok;
   } else if (IsHTMLContent(aFrame) &&
              aAppearance == StyleAppearance::Menulist) {
     /* For content menulist controls, we need an extra pixel so that we have
      * room to draw our focus rectangle stuff. Otherwise, the focus rect might
@@ -2861,17 +2861,17 @@ nsNativeThemeWin::ClassicThemeSupportsWi
     case StyleAppearance::Menubar:
     case StyleAppearance::Menupopup:
       // Classic non-flat menus are handled almost entirely through CSS.
       if (!nsUXThemeData::sFlatMenus)
         return false;
     case StyleAppearance::Button:
     case StyleAppearance::NumberInput:
     case StyleAppearance::Textfield:
-    case StyleAppearance::TextfieldMultiline:
+    case StyleAppearance::Textarea:
     case StyleAppearance::Checkbox:
     case StyleAppearance::Radio:
     case StyleAppearance::Range:
     case StyleAppearance::RangeThumb:
     case StyleAppearance::Groupbox:
     case StyleAppearance::ScrollbarbuttonUp:
     case StyleAppearance::ScrollbarbuttonDown:
     case StyleAppearance::ScrollbarbuttonLeft:
@@ -2954,17 +2954,17 @@ nsNativeThemeWin::ClassicGetWidgetBorder
       break;
     case StyleAppearance::Listbox:
     case StyleAppearance::Treeview:
     case StyleAppearance::Menulist:
     case StyleAppearance::MenulistTextfield:
     case StyleAppearance::Tab:
     case StyleAppearance::NumberInput:
     case StyleAppearance::Textfield:
-    case StyleAppearance::TextfieldMultiline:
+    case StyleAppearance::Textarea:
     case StyleAppearance::FocusOutline:
       result.top = result.left = result.bottom = result.right = 2;
       break;
     case StyleAppearance::Statusbarpanel:
     case StyleAppearance::Resizerpanel: {
       result.top = 1;
       result.left = 1;
       result.bottom = 1;
@@ -3122,17 +3122,17 @@ nsNativeThemeWin::ClassicGetMinimumWidge
       break;
     case StyleAppearance::Menulist:
     case StyleAppearance::Button:
     case StyleAppearance::Groupbox:
     case StyleAppearance::Listbox:
     case StyleAppearance::Treeview:
     case StyleAppearance::NumberInput:
     case StyleAppearance::Textfield:
-    case StyleAppearance::TextfieldMultiline:
+    case StyleAppearance::Textarea:
     case StyleAppearance::MenulistTextfield:      
     case StyleAppearance::Statusbar:
     case StyleAppearance::Statusbarpanel:      
     case StyleAppearance::Resizerpanel:
     case StyleAppearance::Progresschunk:
     case StyleAppearance::Tooltip:
     case StyleAppearance::ProgressBar:
     case StyleAppearance::ProgressbarVertical:
@@ -3382,17 +3382,17 @@ nsresult nsNativeThemeWin::ClassicGetThe
       }
       return NS_OK;
     }
     case StyleAppearance::Listbox:
     case StyleAppearance::Treeview:
     case StyleAppearance::NumberInput:
     case StyleAppearance::FocusOutline:
     case StyleAppearance::Textfield:
-    case StyleAppearance::TextfieldMultiline:
+    case StyleAppearance::Textarea:
     case StyleAppearance::Menulist:
     case StyleAppearance::MenulistTextfield:
     case StyleAppearance::Range:
     case StyleAppearance::RangeThumb:
     case StyleAppearance::ScrollbarthumbVertical:
     case StyleAppearance::ScrollbarthumbHorizontal:     
     case StyleAppearance::ScrollbarVertical:
     case StyleAppearance::ScrollbarHorizontal:      
@@ -3814,17 +3814,17 @@ RENDER_AGAIN:
       oldTA = ::SetTextAlign(hdc, TA_TOP | TA_LEFT | TA_NOUPDATECP);
       ::DrawFrameControl(hdc, &widgetRect, part, state);
       ::SetTextAlign(hdc, oldTA);
       break;
     }
     // Draw controls with 2px 3D inset border
     case StyleAppearance::NumberInput:
     case StyleAppearance::Textfield:
-    case StyleAppearance::TextfieldMultiline:
+    case StyleAppearance::Textarea:
     case StyleAppearance::Listbox:
     case StyleAppearance::Menulist:
     case StyleAppearance::MenulistTextfield: {
       // Paint the border, except for 'menulist-textfield' that isn't focused:
       if (aAppearance != StyleAppearance::MenulistTextfield || focused) {
         // Draw inset edge
         ::DrawEdge(hdc, &widgetRect, EDGE_SUNKEN, BF_RECT | BF_ADJUST);
       }
@@ -4182,17 +4182,17 @@ RENDER_AGAIN:
 uint32_t
 nsNativeThemeWin::GetWidgetNativeDrawingFlags(StyleAppearance aAppearance)
 {
   switch (aAppearance) {
     case StyleAppearance::Button:
     case StyleAppearance::NumberInput:
     case StyleAppearance::FocusOutline:
     case StyleAppearance::Textfield:
-    case StyleAppearance::TextfieldMultiline:
+    case StyleAppearance::Textarea:
 
     case StyleAppearance::Menulist:
     case StyleAppearance::MenulistTextfield:
       return
         gfxWindowsNativeDrawing::CANNOT_DRAW_TO_COLOR_ALPHA |
         gfxWindowsNativeDrawing::CAN_AXIS_ALIGNED_SCALE |
         gfxWindowsNativeDrawing::CANNOT_COMPLEX_TRANSFORM;