Web Inspector: replace all unicode characters with the escaped character code
authordrousso@apple.com <drousso@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 30 Nov 2018 18:55:38 +0000 (18:55 +0000)
committerdrousso@apple.com <drousso@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 30 Nov 2018 18:55:38 +0000 (18:55 +0000)
https://bugs.webkit.org/show_bug.cgi?id=192216
<rdar://problem/46275637>

Reviewed by Brian Burg.

Source/WebInspectorUI:

* Localizations/en.lproj/localizedStrings.js:
* UserInterface/Controllers/BreakpointPopoverController.js:
* UserInterface/Debug/UncaughtExceptionReporter.js:
* UserInterface/Models/AuditTestCase.js:
* UserInterface/Models/Canvas.js:
* UserInterface/Models/RecordingAction.js:
* UserInterface/Models/ScriptTimelineRecord.js:
* UserInterface/Views/AuditTestCaseContentView.js:
* UserInterface/Views/AuditTestContentView.js:
* UserInterface/Views/AuditTestGroupContentView.js:
* UserInterface/Views/CallFrameView.js:
* UserInterface/Views/CanvasContentView.js:
* UserInterface/Views/CanvasOverviewContentView.css:
* UserInterface/Views/ConsoleMessageView.css:
* UserInterface/Views/ContextMenuUtilities.js:
* UserInterface/Views/DOMEventsBreakdownView.js:
* UserInterface/Views/DataGrid.css:
* UserInterface/Views/DataGrid.js:
* UserInterface/Views/DatabaseTableContentView.js:
* UserInterface/Views/DebuggerDashboardView.css:
* UserInterface/Views/DebuggerSidebarPanel.js:
* UserInterface/Views/ErrorObjectView.js:
* UserInterface/Views/EventBreakpointPopover.js:
* UserInterface/Views/InlineSwatch.js:
* UserInterface/Views/LayerTreeDataGridNode.js:
* UserInterface/Views/LayerTreeDetailsSidebarPanel.js:
* UserInterface/Views/Layers3DContentView.js:
* UserInterface/Views/LayoutTimelineDataGridNode.js:
* UserInterface/Views/NetworkTableContentView.css:
* UserInterface/Views/NetworkTableContentView.js:
* UserInterface/Views/ObjectPreviewView.js:
* UserInterface/Views/ProfileDataGridNode.js:
* UserInterface/Views/ResourceTimelineDataGridNode.js:
* UserInterface/Views/ScriptDetailsTimelineView.css:
* UserInterface/Views/TextEditor.css:
* UserInterface/Views/TreeOutline.css:

LayoutTests:

* inspector/audit/data-domAttributes-expected.txt:
* inspector/audit/data-domNodes-expected.txt:
* inspector/audit/data-errors-expected.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@238743 268f45cc-cd09-0410-ab3c-d52691b4dbfc

42 files changed:
LayoutTests/ChangeLog
LayoutTests/inspector/audit/data-domAttributes-expected.txt
LayoutTests/inspector/audit/data-domNodes-expected.txt
LayoutTests/inspector/audit/data-errors-expected.txt
Source/WebInspectorUI/ChangeLog
Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js
Source/WebInspectorUI/UserInterface/Controllers/AuditManager.js
Source/WebInspectorUI/UserInterface/Controllers/BreakpointPopoverController.js
Source/WebInspectorUI/UserInterface/Debug/UncaughtExceptionReporter.js
Source/WebInspectorUI/UserInterface/Models/AuditTestCase.js
Source/WebInspectorUI/UserInterface/Models/Canvas.js
Source/WebInspectorUI/UserInterface/Models/RecordingAction.js
Source/WebInspectorUI/UserInterface/Models/ScriptTimelineRecord.js
Source/WebInspectorUI/UserInterface/Views/AuditTestCaseContentView.js
Source/WebInspectorUI/UserInterface/Views/AuditTestContentView.js
Source/WebInspectorUI/UserInterface/Views/AuditTestGroupContentView.js
Source/WebInspectorUI/UserInterface/Views/CallFrameView.js
Source/WebInspectorUI/UserInterface/Views/CanvasContentView.js
Source/WebInspectorUI/UserInterface/Views/CanvasOverviewContentView.css
Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.css
Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js
Source/WebInspectorUI/UserInterface/Views/DOMEventsBreakdownView.js
Source/WebInspectorUI/UserInterface/Views/DataGrid.css
Source/WebInspectorUI/UserInterface/Views/DataGrid.js
Source/WebInspectorUI/UserInterface/Views/DatabaseTableContentView.js
Source/WebInspectorUI/UserInterface/Views/DebuggerDashboardView.css
Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js
Source/WebInspectorUI/UserInterface/Views/ErrorObjectView.js
Source/WebInspectorUI/UserInterface/Views/EventBreakpointPopover.js
Source/WebInspectorUI/UserInterface/Views/InlineSwatch.js
Source/WebInspectorUI/UserInterface/Views/LayerTreeDataGridNode.js
Source/WebInspectorUI/UserInterface/Views/LayerTreeDetailsSidebarPanel.js
Source/WebInspectorUI/UserInterface/Views/Layers3DContentView.js
Source/WebInspectorUI/UserInterface/Views/LayoutTimelineDataGridNode.js
Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.css
Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js
Source/WebInspectorUI/UserInterface/Views/ObjectPreviewView.js
Source/WebInspectorUI/UserInterface/Views/ProfileDataGridNode.js
Source/WebInspectorUI/UserInterface/Views/ResourceTimelineDataGridNode.js
Source/WebInspectorUI/UserInterface/Views/ScriptDetailsTimelineView.css
Source/WebInspectorUI/UserInterface/Views/TextEditor.css
Source/WebInspectorUI/UserInterface/Views/TreeOutline.css

index a14e3b9..5bd3cfc 100644 (file)
@@ -1,3 +1,15 @@
+2018-11-30  Devin Rousso  <drousso@apple.com>
+
+        Web Inspector: replace all unicode characters with the escaped character code
+        https://bugs.webkit.org/show_bug.cgi?id=192216
+        <rdar://problem/46275637>
+
+        Reviewed by Brian Burg.
+
+        * inspector/audit/data-domAttributes-expected.txt:
+        * inspector/audit/data-domNodes-expected.txt:
+        * inspector/audit/data-errors-expected.txt:
+
 2018-11-30  Justin Fan  <justin_fan@apple.com>
 
         [WebGPU] Flesh out WebGPURenderPassDescriptor to match the WebGPU IDL
index 552789b..503ea7e 100644 (file)
@@ -17,23 +17,23 @@ PASS: Result should be "pass".
 Testing value `{"level":"pass","domAttributes":null}`...
 PASS: Result should be "error".
   errors:
-   - “domAttributes“ must be an array
+   - "domAttributes" must be an array
 
 -- Running test case: Audit.DOMAttributes.Error.Number
 Testing value `{"level":"pass","domAttributes":42}`...
 PASS: Result should be "error".
   errors:
-   - “domAttributes“ must be an array
+   - "domAttributes" must be an array
 
 -- Running test case: Audit.DOMAttributes.Error.String
 Testing value `{"level":"pass","domAttributes":"foo"}`...
 PASS: Result should be "error".
   errors:
-   - “domAttributes“ must be an array
+   - "domAttributes" must be an array
 
 -- Running test case: Audit.DOMAttributes.Error.Object
 Testing value `{"level":"pass","domAttributes":{}}`...
 PASS: Result should be "error".
   errors:
-   - “domAttributes“ must be an array
+   - "domAttributes" must be an array
 
index 05bb789..b7d4add 100644 (file)
@@ -35,23 +35,23 @@ PASS: Result should be "pass".
 Testing value `{"level":"pass","domNodes":null}`...
 PASS: Result should be "error".
   errors:
-   - “domNodes“ must be an array
+   - "domNodes" must be an array
 
 -- Running test case: Audit.DOMNodes.Error.Number
 Testing value `{"level":"pass","domNodes":42}`...
 PASS: Result should be "error".
   errors:
-   - “domNodes“ must be an array
+   - "domNodes" must be an array
 
 -- Running test case: Audit.DOMNodes.Error.String
 Testing value `{"level":"pass","domNodes":"foo"}`...
 PASS: Result should be "error".
   errors:
-   - “domNodes“ must be an array
+   - "domNodes" must be an array
 
 -- Running test case: Audit.DOMNodes.Error.Object
 Testing value `{"level":"pass","domNodes":{}}`...
 PASS: Result should be "error".
   errors:
-   - “domNodes“ must be an array
+   - "domNodes" must be an array
 
index a8409ec..3d0039e 100644 (file)
@@ -30,7 +30,7 @@ PASS: Result should be "error".
 Testing value `{"level":"pass","errors":["user generated error"]}`...
 PASS: Result should be "error".
   errors:
-   - All items in “errors“ must be error objects
+   - All items in "errors" must be error objects
 
 -- Running test case: Audit.Errors.Undefined
 Testing value `{"level":"pass"}`...
@@ -40,23 +40,23 @@ PASS: Result should be "pass".
 Testing value `{"level":"pass","errors":null}`...
 PASS: Result should be "error".
   errors:
-   - “errors“ must be an array
+   - "errors" must be an array
 
 -- Running test case: Audit.Errors.Error.Number
 Testing value `{"level":"pass","errors":42}`...
 PASS: Result should be "error".
   errors:
-   - “errors“ must be an array
+   - "errors" must be an array
 
 -- Running test case: Audit.Errors.Error.String
 Testing value `{"level":"pass","errors":"foo"}`...
 PASS: Result should be "error".
   errors:
-   - “errors“ must be an array
+   - "errors" must be an array
 
 -- Running test case: Audit.Errors.Error.Object
 Testing value `{"level":"pass","errors":{}}`...
 PASS: Result should be "error".
   errors:
-   - “errors“ must be an array
+   - "errors" must be an array
 
index a8e1de9..6282205 100644 (file)
@@ -1,3 +1,48 @@
+2018-11-30  Devin Rousso  <drousso@apple.com>
+
+        Web Inspector: replace all unicode characters with the escaped character code
+        https://bugs.webkit.org/show_bug.cgi?id=192216
+        <rdar://problem/46275637>
+
+        Reviewed by Brian Burg.
+
+        * Localizations/en.lproj/localizedStrings.js:
+        * UserInterface/Controllers/BreakpointPopoverController.js:
+        * UserInterface/Debug/UncaughtExceptionReporter.js:
+        * UserInterface/Models/AuditTestCase.js:
+        * UserInterface/Models/Canvas.js:
+        * UserInterface/Models/RecordingAction.js:
+        * UserInterface/Models/ScriptTimelineRecord.js:
+        * UserInterface/Views/AuditTestCaseContentView.js:
+        * UserInterface/Views/AuditTestContentView.js:
+        * UserInterface/Views/AuditTestGroupContentView.js:
+        * UserInterface/Views/CallFrameView.js:
+        * UserInterface/Views/CanvasContentView.js:
+        * UserInterface/Views/CanvasOverviewContentView.css:
+        * UserInterface/Views/ConsoleMessageView.css:
+        * UserInterface/Views/ContextMenuUtilities.js:
+        * UserInterface/Views/DOMEventsBreakdownView.js:
+        * UserInterface/Views/DataGrid.css:
+        * UserInterface/Views/DataGrid.js:
+        * UserInterface/Views/DatabaseTableContentView.js:
+        * UserInterface/Views/DebuggerDashboardView.css:
+        * UserInterface/Views/DebuggerSidebarPanel.js:
+        * UserInterface/Views/ErrorObjectView.js:
+        * UserInterface/Views/EventBreakpointPopover.js:
+        * UserInterface/Views/InlineSwatch.js:
+        * UserInterface/Views/LayerTreeDataGridNode.js:
+        * UserInterface/Views/LayerTreeDetailsSidebarPanel.js:
+        * UserInterface/Views/Layers3DContentView.js:
+        * UserInterface/Views/LayoutTimelineDataGridNode.js:
+        * UserInterface/Views/NetworkTableContentView.css:
+        * UserInterface/Views/NetworkTableContentView.js:
+        * UserInterface/Views/ObjectPreviewView.js:
+        * UserInterface/Views/ProfileDataGridNode.js:
+        * UserInterface/Views/ResourceTimelineDataGridNode.js:
+        * UserInterface/Views/ScriptDetailsTimelineView.css:
+        * UserInterface/Views/TextEditor.css:
+        * UserInterface/Views/TreeOutline.css:
+
 2018-11-29  Matt Baker  <mattbaker@apple.com>
 
         Web Inspector: RTL: disclosure triangles should be flipped and aligned right
index 178fb36..4c7f786 100644 (file)
@@ -40,7 +40,7 @@ localizedStrings["%d fps"] = "%d fps";
 localizedStrings["%d matches"] = "%d matches";
 localizedStrings["%d of %d"] = "%d of %d";
 localizedStrings["%dpx"] = "%dpx";
-localizedStrings["%dpx²"] = "%dpx²";
+localizedStrings["%dpx\u00B2"] = "%dpx\u00B2";
 localizedStrings["%s (%s)"] = "%s (%s)";
 localizedStrings["%s (%s, %s)"] = "%s (%s, %s)";
 localizedStrings["%s (default)"] = "%s (default)";
@@ -96,11 +96,11 @@ localizedStrings["All Layers"] = "All Layers";
 localizedStrings["All Requests"] = "All Requests";
 localizedStrings["All Resources"] = "All Resources";
 localizedStrings["All Storage"] = "All Storage";
-localizedStrings["All items in “%s“ must be error objects"] = "All items in “%s“ must be error objects";
-localizedStrings["All items in “%s“ must be non-empty strings"] = "All items in “%s“ must be non-empty strings";
-localizedStrings["All items in “%s“ must be valid DOM nodes"] = "All items in “%s“ must be valid DOM nodes";
+localizedStrings["All items in \u0022%s\u0022 must be error objects"] = "All items in \u0022%s\u0022 must be error objects";
+localizedStrings["All items in \u0022%s\u0022 must be non-empty strings"] = "All items in \u0022%s\u0022 must be non-empty strings";
+localizedStrings["All items in \u0022%s\u0022 must be valid DOM nodes"] = "All items in \u0022%s\u0022 must be valid DOM nodes";
 localizedStrings["An error occurred trying to load the resource."] = "An error occurred trying to load the resource.";
-localizedStrings["An error occurred trying to read the “%s” table."] = "An error occurred trying to read the “%s” table.";
+localizedStrings["An error occurred trying to read the \u201C%s\u201D table."] = "An error occurred trying to read the \u201C%s\u201D table.";
 localizedStrings["An unexpected error %s occurred."] = "An unexpected error %s occurred.";
 localizedStrings["An unexpected error occurred."] = "An unexpected error occurred.";
 localizedStrings["Angle"] = "Angle";
@@ -125,7 +125,7 @@ localizedStrings["Attribute"] = "Attribute";
 localizedStrings["Attribute Modified"] = "Attribute Modified";
 localizedStrings["Attributes"] = "Attributes";
 localizedStrings["Audit"] = "Audit";
-localizedStrings["Audit test error: %s"] = "Audit test error: %s";
+localizedStrings["Audit error: %s"] = "Audit error: %s";
 localizedStrings["Audit:"] = "Audit:";
 localizedStrings["Audits"] = "Audits";
 localizedStrings["Author Stylesheet"] = "Author Stylesheet";
@@ -145,7 +145,7 @@ localizedStrings["Boundary"] = "Boundary";
 localizedStrings["Box Model"] = "Box Model";
 localizedStrings["Break on events with name:"] = "Break on events with name:";
 localizedStrings["Break on request with URL:"] = "Break on request with URL:";
-localizedStrings["Break on…"] = "Break on…";
+localizedStrings["Break on\u2026"] = "Break on\u2026";
 localizedStrings["Breakdown"] = "Breakdown";
 localizedStrings["Breakdown of each memory category at the end of the selected time range"] = "Breakdown of each memory category at the end of the selected time range";
 localizedStrings["Breakpoint"] = "Breakpoint";
@@ -159,7 +159,7 @@ localizedStrings["Bytes Sent"] = "Bytes Sent";
 localizedStrings["CSP Hash"] = "CSP Hash";
 localizedStrings["CSS"] = "CSS";
 localizedStrings["CSS Canvas"] = "CSS Canvas";
-localizedStrings["CSS canvas “%s”"] = "CSS canvas “%s”";
+localizedStrings["CSS canvas \u201C%s\u201D"] = "CSS canvas \u201C%s\u201D";
 localizedStrings["Cached"] = "Cached";
 localizedStrings["Call Frames Truncated"] = "Call Frames Truncated";
 localizedStrings["Call Stack"] = "Call Stack";
@@ -179,7 +179,7 @@ localizedStrings["Catch Variables"] = "Catch Variables";
 localizedStrings["Categories"] = "Categories";
 localizedStrings["Certificate"] = "Certificate";
 localizedStrings["Character Data"] = "Character Data";
-localizedStrings["Charge ‘%s’ to Callers"] = "Charge ‘%s’ to Callers";
+localizedStrings["Charge \u201C%s\u201D to Callers"] = "Charge \u201C%s\u201D to Callers";
 localizedStrings["Checked"] = "Checked";
 localizedStrings["Child"] = "Child";
 localizedStrings["Child Layers"] = "Child Layers";
@@ -313,30 +313,30 @@ localizedStrings["Dynamically calculated for the parent element"] = "Dynamically
 localizedStrings["Dynamically calculated for the selected element"] = "Dynamically calculated for the selected element";
 localizedStrings["Dynamically calculated for the selected element and did not match"] = "Dynamically calculated for the selected element and did not match";
 localizedStrings["Edit"] = "Edit";
-localizedStrings["Edit Breakpoint…"] = "Edit Breakpoint…";
+localizedStrings["Edit Breakpoint\u2026"] = "Edit Breakpoint\u2026";
+localizedStrings["Edit \u201C%s\u201D"] = "Edit \u201C%s\u201D";
+localizedStrings["Edit \u201Ccubic-bezier\u201D function"] = "Edit \u201Ccubic-bezier\u201D function";
+localizedStrings["Edit \u201Cspring\u201D function"] = "Edit \u201Cspring\u201D function";
 localizedStrings["Edit configuration"] = "Edit configuration";
 localizedStrings["Edit custom gradient"] = "Edit custom gradient";
-localizedStrings["Edit “%s”"] = "Edit “%s”";
-localizedStrings["Edit “cubic-bezier“ function"] = "Edit “cubic-bezier“ function";
-localizedStrings["Edit “spring“ function"] = "Edit “spring“ function";
 localizedStrings["Element"] = "Element";
 localizedStrings["Element clips compositing descendants"] = "Element clips compositing descendants";
 localizedStrings["Element has CSS blending applied and composited descendants"] = "Element has CSS blending applied and composited descendants";
 localizedStrings["Element has CSS filters applied"] = "Element has CSS filters applied";
 localizedStrings["Element has CSS filters applied and composited descendants"] = "Element has CSS filters applied and composited descendants";
+localizedStrings["Element has \u201C-webkit-overflow-scrolling: touch\u201D style"] = "Element has \u201C-webkit-overflow-scrolling: touch\u201D style";
+localizedStrings["Element has \u201Cbackface-visibility: hidden\u201D style"] = "Element has \u201Cbackface-visibility: hidden\u201D style";
+localizedStrings["Element has \u201Cblend-mode\u201D style"] = "Element has \u201Cblend-mode\u201D style";
+localizedStrings["Element has \u201Cposition: fixed\u201D style"] = "Element has \u201Cposition: fixed\u201D style";
+localizedStrings["Element has \u201Cposition: sticky\u201D style"] = "Element has \u201Cposition: sticky\u201D style";
+localizedStrings["Element has \u201Ctransform-style: preserve-3d\u201D style"] = "Element has \u201Ctransform-style: preserve-3d\u201D style";
+localizedStrings["Element has \u201Cwill-change\u201D style which includes opacity, transform, transform-style, perspective, filter or backdrop-filter"] = "Element has \u201Cwill-change\u201D style which includes opacity, transform, transform-style, perspective, filter or backdrop-filter";
 localizedStrings["Element has a 2D transform and composited descendants"] = "Element has a 2D transform and composited descendants";
 localizedStrings["Element has a 3D transform"] = "Element has a 3D transform";
 localizedStrings["Element has a reflection and composited descendants"] = "Element has a reflection and composited descendants";
 localizedStrings["Element has children with a negative z-index"] = "Element has children with a negative z-index";
 localizedStrings["Element has opacity applied and composited descendants"] = "Element has opacity applied and composited descendants";
 localizedStrings["Element has perspective applied"] = "Element has perspective applied";
-localizedStrings["Element has “-webkit-overflow-scrolling: touch” style"] = "Element has “-webkit-overflow-scrolling: touch” style";
-localizedStrings["Element has “backface-visibility: hidden” style"] = "Element has “backface-visibility: hidden” style";
-localizedStrings["Element has “blend-mode” style"] = "Element has “blend-mode” style";
-localizedStrings["Element has “position: fixed” style"] = "Element has “position: fixed” style";
-localizedStrings["Element has “position: sticky” style"] = "Element has “position: sticky” style";
-localizedStrings["Element has “transform-style: preserve-3d” style"] = "Element has “transform-style: preserve-3d” style";
-localizedStrings["Element has “will-change” style which includes opacity, transform, transform-style, perspective, filter or backdrop-filter"] = "Element has “will-change” style which includes opacity, transform, transform-style, perspective, filter or backdrop-filter";
 localizedStrings["Element is <canvas>"] = "Element is <canvas>";
 localizedStrings["Element is <iframe>"] = "Element is <iframe>";
 localizedStrings["Element is <video>"] = "Element is <video>";
@@ -356,7 +356,6 @@ localizedStrings["Enable Event Listener"] = "Enable Event Listener";
 localizedStrings["Enable Layers Tab"] = "Enable Layers Tab";
 localizedStrings["Enable New Tab Bar"] = "Enable New Tab Bar";
 localizedStrings["Enable Program"] = "Enable Program";
-localizedStrings["Enable Selection of Multiple Properties"] = "Enable Selection of Multiple Properties";
 localizedStrings["Enable all breakpoints (%s)"] = "Enable all breakpoints (%s)";
 localizedStrings["Enable breakpoints"] = "Enable breakpoints";
 localizedStrings["Enable paint flashing"] = "Enable paint flashing";
@@ -386,7 +385,7 @@ localizedStrings["Event Breakpoint\u2026"] = "Event Breakpoint\u2026";
 localizedStrings["Event Dispatched"] = "Event Dispatched";
 localizedStrings["Event Listeners"] = "Event Listeners";
 localizedStrings["Events"] = "Events";
-localizedStrings["Example: “%s”"] = "Example: “%s”";
+localizedStrings["Example: \u201C%s\u201D"] = "Example: \u201C%s\u201D";
 localizedStrings["Exception with thrown value: %s"] = "Exception with thrown value: %s";
 localizedStrings["Exited Full-Screen Mode"] = "Exited Full-Screen Mode";
 localizedStrings["Exited Low-Power Mode"] = "Exited Low-Power Mode";
@@ -444,7 +443,7 @@ localizedStrings["Frames %d \u2013 %d"] = "Frames %d \u2013 %d";
 localizedStrings["Full Garbage Collection"] = "Full Garbage Collection";
 localizedStrings["Full URL"] = "Full URL";
 localizedStrings["Full-Screen"] = "Full-Screen";
-localizedStrings["Full-Screen from “%s“"] = "Full-Screen from “%s“";
+localizedStrings["Full-Screen from \u201C%s\u201D"] = "Full-Screen from \u201C%s\u201D";
 localizedStrings["Function"] = "Function";
 localizedStrings["Function Name Variable"] = "Function Name Variable";
 localizedStrings["Garbage Collection"] = "Garbage Collection";
@@ -741,7 +740,7 @@ localizedStrings["Resource does not have timing data"] = "Resource does not have
 localizedStrings["Resource failed to load."] = "Resource failed to load.";
 localizedStrings["Resource has no content"] = "Resource has no content";
 localizedStrings["Resource has no timing data"] = "Resource has no timing data";
-localizedStrings["Resource was loaded with the “data” scheme."] = "Resource was loaded with the “data” scheme.";
+localizedStrings["Resource was loaded with the \u201Cdata\u201D scheme."] = "Resource was loaded with the \u201Cdata\u201D scheme.";
 localizedStrings["Resource was served from the cache."] = "Resource was served from the cache.";
 localizedStrings["Resources"] = "Resources";
 localizedStrings["Response"] = "Response";
@@ -770,7 +769,7 @@ localizedStrings["Reveal in Original Resource"] = "Reveal in Original Resource";
 localizedStrings["Reveal in Resources Tab"] = "Reveal in Resources Tab";
 localizedStrings["Role"] = "Role";
 localizedStrings["Run %d"] = "Run %d";
-localizedStrings["Running the “%s“ audit"] = "Running the “%s“ audit";
+localizedStrings["Running the \u201C%s\u201D audit"] = "Running the \u201C%s\u201D audit";
 localizedStrings["Samples"] = "Samples";
 localizedStrings["Save %d"] = "Save %d";
 localizedStrings["Save File"] = "Save File";
@@ -890,7 +889,7 @@ localizedStrings["Stop element selection (%s)"] = "Stop element selection (%s)";
 localizedStrings["Stop recording"] = "Stop recording";
 localizedStrings["Stop recording (%s)"] = "Stop recording (%s)";
 localizedStrings["Stop recording canvas actions"] = "Stop recording canvas actions";
-localizedStrings["Stopping the “%s“ audit"] = "Stopping the “%s“ audit";
+localizedStrings["Stopping the \u201C%s\u201D audit"] = "Stopping the \u201C%s\u201D audit";
 localizedStrings["Storage"] = "Storage";
 localizedStrings["Style Attribute"] = "Style Attribute";
 localizedStrings["Style rule"] = "Style rule";
@@ -918,14 +917,14 @@ localizedStrings["Tests the accessibility of form elements."] = "Tests the acces
 localizedStrings["Text"] = "Text";
 localizedStrings["Text Frame"] = "Text Frame";
 localizedStrings["Text Node"] = "Text Node";
+localizedStrings["The \u201C%s\u201D audit failed"] = "The \u201C%s\u201D audit failed";
+localizedStrings["The \u201C%s\u201D audit is unsupported"] = "The \u201C%s\u201D audit is unsupported";
+localizedStrings["The \u201C%s\u201D audit passed"] = "The \u201C%s\u201D audit passed";
+localizedStrings["The \u201C%s\u201D audit threw an error"] = "The \u201C%s\u201D audit threw an error";
+localizedStrings["The \u201C%s\u201D audit warned"] = "The \u201C%s\u201D audit warned";
+localizedStrings["The \u201C%s\u201D\ntable is empty."] = "The \u201C%s\u201D\ntable is empty.";
 localizedStrings["The page's content has changed"] = "The page's content has changed";
 localizedStrings["The resource was requested insecurely."] = "The resource was requested insecurely.";
-localizedStrings["The “%s“ audit failed"] = "The “%s“ audit failed";
-localizedStrings["The “%s“ audit is unsupported"] = "The “%s“ audit is unsupported";
-localizedStrings["The “%s“ audit passed"] = "The “%s“ audit passed";
-localizedStrings["The “%s“ audit threw an error"] = "The “%s“ audit threw an error";
-localizedStrings["The “%s“ audit warned"] = "The “%s“ audit warned";
-localizedStrings["The “%s”\ntable is empty."] = "The “%s”\ntable is empty.";
 localizedStrings["These are all of the different test result levels."] = "These are all of the different test result levels.";
 localizedStrings["These are all of the different types of data that can be returned with the test result."] = "These are all of the different types of data that can be returned with the test result.";
 localizedStrings["These tests serve as a demonstration of the functionality and structure of audits."] = "These tests serve as a demonstration of the functionality and structure of audits.";
@@ -1006,7 +1005,7 @@ localizedStrings["View variable value"] = "View variable value";
 localizedStrings["Visible"] = "Visible";
 localizedStrings["Waiting"] = "Waiting";
 localizedStrings["Waiting for canvas contexts created by script or CSS."] = "Waiting for canvas contexts created by script or CSS.";
-localizedStrings["Waiting for frames…"] = "Waiting for frames…";
+localizedStrings["Waiting for frames\u2026"] = "Waiting for frames\u2026";
 localizedStrings["Warning: "] = "Warning: ";
 localizedStrings["Warnings"] = "Warnings";
 localizedStrings["Watch Expressions"] = "Watch Expressions";
@@ -1028,6 +1027,12 @@ localizedStrings["XHRs"] = "XHRs";
 localizedStrings["XPath"] = "XPath";
 localizedStrings["Yes"] = "Yes";
 localizedStrings["Zoom:"] = "Zoom:";
+localizedStrings["\u0022%s\u0022 is invalid."] = "\u0022%s\u0022 is invalid.";
+localizedStrings["\u0022%s\u0022 must be a %s"] = "\u0022%s\u0022 must be a %s";
+localizedStrings["\u0022%s\u0022 must be an %s"] = "\u0022%s\u0022 must be an %s";
+localizedStrings["\u0022%s\u0022 threw an error."] = "\u0022%s\u0022 threw an error.";
+localizedStrings["\u201C%s\u201D Event Fired"] = "\u201C%s\u201D Event Fired";
+localizedStrings["\u201C%s\u201D Profile Recorded"] = "\u201C%s\u201D Profile Recorded";
 localizedStrings["computed"] = "computed";
 localizedStrings["default"] = "default";
 localizedStrings["for changes to take effect"] = "for changes to take effect";
@@ -1043,9 +1048,3 @@ localizedStrings["times before stopping"] = "times before stopping";
 localizedStrings["toggle"] = "toggle";
 localizedStrings["unsupported version."] = "unsupported version.";
 localizedStrings["value"] = "value";
-localizedStrings["“%s“ Event Fired"] = "“%s“ Event Fired";
-localizedStrings["“%s“ must be a %s"] = "“%s“ must be a %s";
-localizedStrings["“%s“ must be an %s"] = "“%s“ must be an %s";
-localizedStrings["“%s” Profile Recorded"] = "“%s” Profile Recorded";
-localizedStrings["“%s” is invalid."] = "“%s” is invalid.";
-localizedStrings["“%s” threw an error."] = "“%s” threw an error.";
index dcde025..0ab9201 100644 (file)
@@ -40,7 +40,7 @@ WI.AuditManager = class AuditManager extends WI.Object
 
     static synthesizeError(message)
     {
-        let consoleMessage = new WI.ConsoleMessage(WI.mainTarget, WI.ConsoleMessage.MessageSource.Other, WI.ConsoleMessage.MessageLevel.Error, WI.UIString("Audit test error: %s").format(message));
+        let consoleMessage = new WI.ConsoleMessage(WI.mainTarget, WI.ConsoleMessage.MessageSource.Other, WI.ConsoleMessage.MessageLevel.Error, WI.UIString("Audit error: %s").format(message));
         consoleMessage.shouldRevealConsole = true;
 
         WI.consoleLogViewController.appendConsoleMessage(consoleMessage);
index eae67aa..5a42b26 100644 (file)
@@ -75,7 +75,7 @@ WI.BreakpointPopoverController = class BreakpointPopoverController extends WI.Ob
         };
 
         if (WI.debuggerManager.isBreakpointEditable(breakpoint))
-            contextMenu.appendItem(WI.UIString("Edit Breakpoint"), editBreakpoint);
+            contextMenu.appendItem(WI.UIString("Edit Breakpoint\u2026"), editBreakpoint);
 
         if (breakpoint.autoContinue && !breakpoint.disabled) {
             contextMenu.appendItem(WI.UIString("Disable Breakpoint"), toggleBreakpoint);
index 5e99a6b..3f8c868 100644 (file)
@@ -207,7 +207,7 @@ function createErrorSheet() {
 
     function stringifyAndTruncateObject(object) {
         let string = JSON.stringify(object);
-        return string.length > 500 ? string.substr(0, 500) + "…" : string;
+        return string.length > 500 ? string.substr(0, 500) + ellipsis : string;
     }
 
     if (window.InspectorBackend && InspectorBackend.currentDispatchState) {
index 7b36585..e42d538 100644 (file)
@@ -142,9 +142,9 @@ WI.AuditTestCase = class AuditTestCase extends WI.AuditTestBase
                     function addErrorForValueType(valueType) {
                         let value = null;
                         if (valueType === "object" || valueType === "array")
-                            value = WI.UIString("“%s“ must be an %s");
+                            value = WI.UIString("\u0022%s\u0022 must be an %s");
                         else
-                            value = WI.UIString("“%s“ must be a %s");
+                            value = WI.UIString("\u0022%s\u0022 must be a %s");
                         addError(value.format(key, valueType));
                     }
 
@@ -195,7 +195,7 @@ WI.AuditTestCase = class AuditTestCase extends WI.AuditTestBase
 
                 await resultArrayForEach("domNodes", async (item) => {
                     if (!item || !item.value || item.value.type !== "object" || item.value.subtype !== "node") {
-                        addError(WI.UIString("All items in “%s“ must be valid DOM nodes").format(WI.unlocalizedString("domNodes")));
+                        addError(WI.UIString("All items in \u0022%s\u0022 must be valid DOM nodes").format(WI.unlocalizedString("domNodes")));
                         return;
                     }
 
@@ -215,7 +215,7 @@ WI.AuditTestCase = class AuditTestCase extends WI.AuditTestBase
 
                 await resultArrayForEach("domAttributes", (item) => {
                     if (!item || !item.value || item.value.type !== "string" || !item.value.value.length) {
-                        addError(WI.UIString("All items in “%s“ must be non-empty strings").format(WI.unlocalizedString("domAttributes")));
+                        addError(WI.UIString("All items in \u0022%s\u0022 must be non-empty strings").format(WI.unlocalizedString("domAttributes")));
                         return;
                     }
 
@@ -226,7 +226,7 @@ WI.AuditTestCase = class AuditTestCase extends WI.AuditTestBase
 
                 await resultArrayForEach("errors", (item) => {
                     if (!item || !item.value || item.value.type !== "object" || item.value.subtype !== "error") {
-                        addError(WI.UIString("All items in “%s“ must be error objects").format(WI.unlocalizedString("errors")));
+                        addError(WI.UIString("All items in \u0022%s\u0022 must be error objects").format(WI.unlocalizedString("errors")));
                         return;
                     }
 
index fefc112..20218ae 100644 (file)
@@ -152,7 +152,7 @@ WI.Canvas = class Canvas extends WI.Object
     get displayName()
     {
         if (this._cssCanvasName)
-            return WI.UIString("CSS canvas “%s”").format(this._cssCanvasName);
+            return WI.UIString("CSS canvas \u201C%s\u201D").format(this._cssCanvasName);
 
         if (this._domNode) {
             let idSelector = this._domNode.escapedIdSelector;
index e83a710..534255b 100644 (file)
@@ -310,7 +310,7 @@ WI.RecordingAction = class RecordingAction extends WI.Object
                 if (prototype && !(name in prototype)) {
                     this.markInvalid();
 
-                    WI.Recording.synthesizeError(WI.UIString("“%s” is invalid.").format(name));
+                    WI.Recording.synthesizeError(WI.UIString("\u0022%s\u0022 is invalid.").format(name));
                 }
             }
         }
@@ -360,7 +360,7 @@ WI.RecordingAction = class RecordingAction extends WI.Object
         } catch {
             this.markInvalid();
 
-            WI.Recording.synthesizeError(WI.UIString("“%s” threw an error.").format(this._name));
+            WI.Recording.synthesizeError(WI.UIString("\u0022%s\u0022 threw an error.").format(this._name));
         }
     }
 
index 6b40ac8..331bdd5 100644 (file)
@@ -371,7 +371,7 @@ WI.ScriptTimelineRecord.EventType.displayName = function(eventType, details, inc
         return WI.UIString("Probe Sample Recorded");
     case WI.ScriptTimelineRecord.EventType.ConsoleProfileRecorded:
         if (details && (details instanceof String || typeof details === "string"))
-            return WI.UIString("“%s” Profile Recorded").format(details);
+            return WI.UIString("\u201C%s\u201D Profile Recorded").format(details);
         return WI.UIString("Console Profile Recorded");
     case WI.ScriptTimelineRecord.EventType.GarbageCollected:
         console.assert(details);
index 1fcb53b..10882eb 100644 (file)
@@ -223,7 +223,7 @@ WI.AuditTestCaseContentView = class AuditTestCaseContentView extends WI.AuditTes
     showRunningPlaceholder()
     {
         if (!this.placeholderElement || !this.placeholderElement.__placeholderRunning) {
-            this.placeholderElement = WI.createMessageTextView(WI.UIString("Running the “%s“ audit").format(this.representedObject.name));
+            this.placeholderElement = WI.createMessageTextView(WI.UIString("Running the \u201C%s\u201D audit").format(this.representedObject.name));
             this.placeholderElement.__placeholderRunning = true;
 
             let spinner = new WI.IndeterminateProgressSpinner;
index 96d5eb3..8a401f4 100644 (file)
@@ -136,7 +136,7 @@ WI.AuditTestContentView = class AuditTestContentView extends WI.ContentView
     showStoppingPlaceholder()
     {
         if (!this.placeholderElement || !this.placeholderElement.__placeholderStopping) {
-            this.placeholderElement = WI.createMessageTextView(WI.UIString("Stopping the “%s“ audit").format(this.representedObject.name));
+            this.placeholderElement = WI.createMessageTextView(WI.UIString("Stopping the \u201C%s\u201D audit").format(this.representedObject.name));
             this.placeholderElement.__placeholderStopping = true;
 
             let spinner = new WI.IndeterminateProgressSpinner;
@@ -176,15 +176,15 @@ WI.AuditTestContentView = class AuditTestContentView extends WI.ContentView
 
             let message = null;
             if (result.didError)
-                message = WI.UIString("The “%s“ audit threw an error");
+                message = WI.UIString("The \u201C%s\u201D audit threw an error");
             else if (result.didFail)
-                message = WI.UIString("The “%s“ audit failed");
+                message = WI.UIString("The \u201C%s\u201D audit failed");
             else if (result.didWarn)
-                message = WI.UIString("The “%s“ audit warned");
+                message = WI.UIString("The \u201C%s\u201D audit warned");
             else if (result.didPass)
-                message = WI.UIString("The “%s“ audit passed");
+                message = WI.UIString("The \u201C%s\u201D audit passed");
             else if (result.unsupported)
-                message = WI.UIString("The “%s“ audit is unsupported");
+                message = WI.UIString("The \u201C%s\u201D audit is unsupported");
             else {
                 console.error("Unknown result", result);
                 return;
index 04bf533..a0377e4 100644 (file)
@@ -174,7 +174,7 @@ WI.AuditTestGroupContentView = class AuditTestGroupContentView extends WI.AuditT
     showRunningPlaceholder()
     {
         if (!this.placeholderElement || !this.placeholderElement.__placeholderRunning) {
-            this.placeholderElement = WI.createMessageTextView(WI.UIString("Running the “%s“ audit").format(this.representedObject.name));
+            this.placeholderElement = WI.createMessageTextView(WI.UIString("Running the \u201C%s\u201D audit").format(this.representedObject.name));
             this.placeholderElement.__placeholderRunning = true;
 
             this.placeholderElement.__progress = document.createElement("progress");
index 1a74b0d..eda5cfc 100644 (file)
@@ -49,7 +49,7 @@ WI.CallFrameView = class CallFrameView extends WI.Object
             if (showFunctionName) {
                 var separatorElement = document.createElement("span");
                 separatorElement.classList.add("separator");
-                separatorElement.textContent = " — ";
+                separatorElement.textContent = ` ${emDash} `;
                 subtitleElement.append(separatorElement);
             }
 
index c69b99d..e839da7 100644 (file)
@@ -399,7 +399,7 @@ WI.CanvasContentView = class CanvasContentView extends WI.ContentView
             let formatString = this.representedObject.recordingFrameCount === 1 ? WI.UIString("%d Frame") : WI.UIString("%d Frames");
             title = formatString.format(this.representedObject.recordingFrameCount);
         } else
-            title = WI.UIString("Waiting for frames");
+            title = WI.UIString("Waiting for frames\u2026");
 
         this._progressView.title = title;
         this._progressView.subtitle = this.representedObject.recordingBufferUsed ? Number.bytesToString(this.representedObject.recordingBufferUsed) : "";
index e08885d..2288deb 100644 (file)
@@ -81,7 +81,7 @@
 }
 
 .content-view.canvas-overview .content-view.canvas > header .subtitle::before {
-    content: " — ";
+    content: "\00A0\2014\00A0"; /* &nbsp;&mdash;&nbsp; */;
 }
 
 .content-view.canvas-overview .content-view.canvas.recording-active > header > .titles > .title {
index 27282ea..fd5a72a 100644 (file)
@@ -146,7 +146,7 @@ body[dir=rtl] .console-message.expandable .console-top-level-message::before {
     text-align: center;
 
     height: 13px;
-    content: "•";
+    content: "\2022"; /* &middot; */
 
     font-family: -webkit-system-font, sans-serif;
     font-size: 11px;
index dec3cd9..b543529 100644 (file)
@@ -263,7 +263,7 @@ WI.appendContextMenuItemsForDOMNodeBreakpoints = function(contextMenu, domNode,
 
     contextMenu.__domBreakpointItemsAdded = true;
 
-    let subMenu = contextMenu.appendSubMenuItem(WI.UIString("Break on"));
+    let subMenu = contextMenu.appendSubMenuItem(WI.UIString("Break on\u2026"));
 
     let breakpoints = WI.domDebuggerManager.domBreakpointsForNode(domNode);
     let keyValuePairs = breakpoints.map((breakpoint) => [breakpoint.type, breakpoint]);
index e3f78de..29104d0 100644 (file)
@@ -133,7 +133,7 @@ WI.DOMEventsBreakdownView = class DOMEventsBreakdownView extends WI.View
                     fullscreenArea.style.setProperty("width", percentOfTotalTime(fullscreenRange.endTimestamp - fullscreenRange.startTimestamp) + "%");
 
                     if (fullscreenRange.originator)
-                        fullscreenArea.title = WI.UIString("Full-Screen from “%s“").format(fullscreenRange.originator.displayName);
+                        fullscreenArea.title = WI.UIString("Full-Screen from \u201C%s\u201D").format(fullscreenRange.originator.displayName);
                     else
                         fullscreenArea.title = WI.UIString("Full-Screen");
                 }
index b58a182..a9e7e30 100644 (file)
@@ -314,7 +314,7 @@ body[dir=rtl] .data-grid tr.parent td.disclosure::before {
 }
 
 .data-grid td .subtitle::before {
-    content: " — ";
+    content: "\00A0\2014\00A0"; /* &nbsp;&mdash;&nbsp; */;
 }
 
 .data-grid:focus tr.selected td .subtitle {
index 9e56b04..1355ed1 100644 (file)
@@ -1641,7 +1641,7 @@ WI.DataGrid = class DataGrid extends WI.View
                         let element = event.target.enclosingNodeOrSelfWithNodeName("td");
                         let columnIdentifier = element.__columnIdentifier;
                         let columnTitle = this.dataGrid.columns.get(columnIdentifier)["title"];
-                        contextMenu.appendItem(WI.UIString("Edit “%s”").format(columnTitle), this._startEditing.bind(this, event.target));
+                        contextMenu.appendItem(WI.UIString("Edit \u201C%s\u201D").format(columnTitle), this._startEditing.bind(this, event.target));
                     }
                 }
 
index cb2b4c9..e3bc171 100644 (file)
@@ -95,7 +95,7 @@ WI.DatabaseTableContentView = class DatabaseTableContentView extends WI.ContentV
 
         // We were returned a table with no columns. This can happen when a table has
         // no data, the SELECT query only returns column names when there is data.
-        this._messageTextViewElement = WI.createMessageTextView(WI.UIString("The “%s”\ntable is empty.").format(this.representedObject.name), false);
+        this._messageTextViewElement = WI.createMessageTextView(WI.UIString("The \u201C%s\u201D\ntable is empty.").format(this.representedObject.name), false);
         this.element.appendChild(this._messageTextViewElement);
     }
 
@@ -109,7 +109,7 @@ WI.DatabaseTableContentView = class DatabaseTableContentView extends WI.ContentV
         if (this._messageTextViewElement)
             this._messageTextViewElement.remove();
 
-        this._messageTextViewElement = WI.createMessageTextView(WI.UIString("An error occurred trying to read the “%s” table.").format(this.representedObject.name), true);
+        this._messageTextViewElement = WI.createMessageTextView(WI.UIString("An error occurred trying to read the \u201C%s\u201D table.").format(this.representedObject.name), true);
         this.element.appendChild(this._messageTextViewElement);
     }
 
index 328058f..37a3310 100644 (file)
@@ -175,7 +175,7 @@ body[dir=rtl] .dashboard.debugger > .location .function-icon {
 }
 
 .dashboard.debugger > .location .function-name::after {
-    content: '\00A0\2014\00A0'; /* &nbsp;&mdash;&nbsp; */
+    content: "\00A0\2014\00A0"; /* &nbsp;&mdash;&nbsp; */;
 }
 
 .dashboard.debugger > .location .go-to-link {
index 1b77feb..d39ba44 100644 (file)
@@ -1186,7 +1186,7 @@ WI.DebuggerSidebarPanel = class DebuggerSidebarPanel extends WI.NavigationSideba
 
             var eventBreakpointTreeElement = new WI.EventBreakpointTreeElement(eventBreakpoint, {
                 className: WI.DebuggerSidebarPanel.PausedBreakpointIconStyleClassName,
-                title: WI.UIString("“%s“ Event Fired").format(pauseData.eventName),
+                title: WI.UIString("\u201C%s\u201D Event Fired").format(pauseData.eventName),
             });
             this._pauseReasonTreeOutline.appendChild(eventBreakpointTreeElement);
 
index acdb032..8f88632 100644 (file)
@@ -55,7 +55,7 @@ WI.ErrorObjectView = class ErrorObjectView extends WI.Object
 
         var span = document.createElement("span");
         span.classList.add("error-object-link-container");
-        span.textContent = " — ";
+        span.textContent = ` ${emDash} `;
 
         const options = {
             ignoreNetworkTab: true,
index 35ce9ac..c38ba0a 100644 (file)
@@ -82,7 +82,7 @@ WI.EventBreakpointPopover = class EventBreakpointPopover extends WI.Popover
             this._typeSelectElement.hidden = true;
 
         this._domEventNameInputElement = typeContainer.appendChild(document.createElement("input"));
-        this._domEventNameInputElement.placeholder = WI.UIString("Example: “%s”").format("click");
+        this._domEventNameInputElement.placeholder = WI.UIString("Example: \u201C%s\u201D").format("click");
         this._domEventNameInputElement.spellcheck = false;
         this._domEventNameInputElement.addEventListener("keydown", (event) => {
             if (isEnterKey(event) || event.key === "Tab") {
index 4b2f06a..84b5bc6 100644 (file)
@@ -48,10 +48,10 @@ WI.InlineSwatch = class InlineSwatch extends WI.Object
                 this._swatchElement.title = WI.UIString("Edit custom gradient");
                 break;
             case WI.InlineSwatch.Type.Bezier:
-                this._swatchElement.title = WI.UIString("Edit “cubic-bezier“ function");
+                this._swatchElement.title = WI.UIString("Edit \u201Ccubic-bezier\u201D function");
                 break;
             case WI.InlineSwatch.Type.Spring:
-                this._swatchElement.title = WI.UIString("Edit “spring“ function");
+                this._swatchElement.title = WI.UIString("Edit \u201Cspring\u201D function");
                 break;
             case WI.InlineSwatch.Type.Variable:
                 this._swatchElement.title = WI.UIString("View variable value");
index 314a5c6..fc62739 100644 (file)
@@ -44,7 +44,7 @@ WI.LayerTreeDataGridNode = class LayerTreeDataGridNode extends WI.DataGridNode
 
     createCellContent(columnIdentifier, cell)
     {
-        cell = columnIdentifier === "name" ? this._makeNameCell() : this._makeOutlet(columnIdentifier, document.createTextNode("–"));
+        cell = columnIdentifier === "name" ? this._makeNameCell() : this._makeOutlet(columnIdentifier, document.createTextNode(enDash));
         this._updateCell(columnIdentifier);
         return cell;
     }
index 4652e4f..75ce4b6 100644 (file)
@@ -401,7 +401,7 @@ WI.LayerTreeDetailsSidebarPanel = class LayerTreeDetailsSidebarPanel extends WI.
         if (compositingReasons.iFrame)
             addReason(WI.UIString("Element is <iframe>"));
         if (compositingReasons.backfaceVisibilityHidden)
-            addReason(WI.UIString("Element has “backface-visibility: hidden” style"));
+            addReason(WI.UIString("Element has \u201Cbackface-visibility: hidden\u201D style"));
         if (compositingReasons.clipsCompositingDescendants)
             addReason(WI.UIString("Element clips compositing descendants"));
         if (compositingReasons.animation)
@@ -409,11 +409,11 @@ WI.LayerTreeDetailsSidebarPanel = class LayerTreeDetailsSidebarPanel extends WI.
         if (compositingReasons.filters)
             addReason(WI.UIString("Element has CSS filters applied"));
         if (compositingReasons.positionFixed)
-            addReason(WI.UIString("Element has “position: fixed” style"));
+            addReason(WI.UIString("Element has \u201Cposition: fixed\u201D style"));
         if (compositingReasons.positionSticky)
-            addReason(WI.UIString("Element has “position: sticky” style"));
+            addReason(WI.UIString("Element has \u201Cposition: sticky\u201D style"));
         if (compositingReasons.overflowScrollingTouch)
-            addReason(WI.UIString("Element has “-webkit-overflow-scrolling: touch” style"));
+            addReason(WI.UIString("Element has \u201C-webkit-overflow-scrolling: touch\u201D style"));
         if (compositingReasons.stacking)
             addReason(WI.UIString("Element may overlap another compositing element"));
         if (compositingReasons.overlap)
@@ -437,12 +437,12 @@ WI.LayerTreeDetailsSidebarPanel = class LayerTreeDetailsSidebarPanel extends WI.
         if (compositingReasons.perspective)
             addReason(WI.UIString("Element has perspective applied"));
         if (compositingReasons.preserve3D)
-            addReason(WI.UIString("Element has “transform-style: preserve-3d” style"));
+            addReason(WI.UIString("Element has \u201Ctransform-style: preserve-3d\u201D style"));
         if (compositingReasons.willChange)
-            addReason(WI.UIString("Element has “will-change” style which includes opacity, transform, transform-style, perspective, filter or backdrop-filter"));
+            addReason(WI.UIString("Element has \u201Cwill-change\u201D style which includes opacity, transform, transform-style, perspective, filter or backdrop-filter"));
         if (compositingReasons.root)
             addReason(WI.UIString("Element is the root element"));
         if (compositingReasons.blending)
-            addReason(WI.UIString("Element has “blend-mode” style"));
+            addReason(WI.UIString("Element has \u201Cblend-mode\u201D style"));
     }
 };
index 94af03d..a53667a 100644 (file)
@@ -486,7 +486,7 @@ WI.Layers3DContentView = class Layers3DContentView extends WI.ContentView
         if (compositingReasons.iFrame)
             addReason(WI.UIString("Element is <iframe>"));
         if (compositingReasons.backfaceVisibilityHidden)
-            addReason(WI.UIString("Element has “backface-visibility: hidden” style"));
+            addReason(WI.UIString("Element has \u201Cbackface-visibility: hidden\u201D style"));
         if (compositingReasons.clipsCompositingDescendants)
             addReason(WI.UIString("Element clips compositing descendants"));
         if (compositingReasons.animation)
@@ -494,11 +494,11 @@ WI.Layers3DContentView = class Layers3DContentView extends WI.ContentView
         if (compositingReasons.filters)
             addReason(WI.UIString("Element has CSS filters applied"));
         if (compositingReasons.positionFixed)
-            addReason(WI.UIString("Element has “position: fixed” style"));
+            addReason(WI.UIString("Element has \u201Cposition: fixed\u201D style"));
         if (compositingReasons.positionSticky)
-            addReason(WI.UIString("Element has “position: sticky” style"));
+            addReason(WI.UIString("Element has \u201Cposition: sticky\u201D style"));
         if (compositingReasons.overflowScrollingTouch)
-            addReason(WI.UIString("Element has “-webkit-overflow-scrolling: touch” style"));
+            addReason(WI.UIString("Element has \u201C-webkit-overflow-scrolling: touch\u201D style"));
         if (compositingReasons.stacking)
             addReason(WI.UIString("Element may overlap another compositing element"));
         if (compositingReasons.overlap)
@@ -522,13 +522,13 @@ WI.Layers3DContentView = class Layers3DContentView extends WI.ContentView
         if (compositingReasons.perspective)
             addReason(WI.UIString("Element has perspective applied"));
         if (compositingReasons.preserve3D)
-            addReason(WI.UIString("Element has “transform-style: preserve-3d” style"));
+            addReason(WI.UIString("Element has \u201Ctransform-style: preserve-3d\u201D style"));
         if (compositingReasons.willChange)
-            addReason(WI.UIString("Element has “will-change” style which includes opacity, transform, transform-style, perspective, filter or backdrop-filter"));
+            addReason(WI.UIString("Element has \u201Cwill-change\u201D style which includes opacity, transform, transform-style, perspective, filter or backdrop-filter"));
         if (compositingReasons.root)
             addReason(WI.UIString("Element is the root element"));
         if (compositingReasons.blending)
-            addReason(WI.UIString("Element has “blend-mode” style"));
+            addReason(WI.UIString("Element has \u201Cblend-mode\u201D style"));
     }
 };
 
index 0be35f9..725da09 100644 (file)
@@ -72,7 +72,7 @@ WI.LayoutTimelineDataGridNode = class LayoutTimelineDataGridNode extends WI.Time
             return isNaN(value) ? emDash : WI.UIString("%dpx").format(value);
 
         case "area":
-            return isNaN(value) ? emDash : WI.UIString("%dpx²").format(value);
+            return isNaN(value) ? emDash : WI.UIString("%dpx\u00B2").format(value);
 
         case "startTime":
             return isNaN(value) ? emDash : Number.secondsToString(value - this._baseStartTime, true);
index 38f7603..74ba8bb 100644 (file)
@@ -91,7 +91,7 @@ body[dir=rtl] .network-table .cell.dom-node.name .disclosure {
 }
 
 .network-table .data-container .cell.name .range::before {
-    content: " — ";
+    content: "\00A0\2014\00A0"; /* &nbsp;&mdash;&nbsp; */;
 }
 
 .network-table:focus .data-container li.selected .cell.name .range {
index 2c0e1e1..6af19bf 100644 (file)
@@ -701,7 +701,7 @@ WI.NetworkTableContentView = class NetworkTableContentView extends WI.ContentVie
 
                     let originator = fullscreenDOMEvents[i].originator || fullscreenDOMEvents[i + 1].originator;
                     if (originator)
-                        fullscreenElement.title = WI.UIString("Full-Screen from “%s“").format(originator.displayName);
+                        fullscreenElement.title = WI.UIString("Full-Screen from \u201C%s\u201D").format(originator.displayName);
                     else
                         fullscreenElement.title = WI.UIString("Full-Screen");
                 }
index 9c24bb0..b589e74 100644 (file)
@@ -203,7 +203,7 @@ WI.ObjectPreviewView = class ObjectPreviewView extends WI.Object
         var lossless = preview.lossless;
         var overflow = preview.overflow;
 
-        // FIXME: Array previews should have better sparse support: (undefined × 10).
+        // FIXME: Array previews should have better sparse support.
         var isArray = preview.subtype === "array";
 
         element.append(isArray ? "[" : "{");
index 76f5beb..e29449e 100644 (file)
@@ -117,7 +117,7 @@ WI.ProfileDataGridNode = class ProfileDataGridNode extends WI.DataGridNode
 
         // FIXME: <https://webkit.org/b/155072> Web Inspector: Charge to Caller should work with Bottom Up Profile View
         let disableChargeToCaller = this._tree.callingContextTree.type === WI.CallingContextTree.Type.BottomUp;
-        contextMenu.appendItem(WI.UIString("Charge ‘%s’ to Callers").format(this.displayName()), () => {
+        contextMenu.appendItem(WI.UIString("Charge \u201C%s\u201D to Callers").format(this.displayName()), () => {
             this._tree.addModifier({type: WI.ProfileDataGridTree.ModifierType.ChargeToCaller, source: this._node});
         }, disableChargeToCaller);
 
index 5564a42..7559642 100644 (file)
@@ -360,7 +360,7 @@ WI.ResourceTimelineDataGridNode = class ResourceTimelineDataGridNode extends WI.
             if (resource.failed)
                 descriptionElement.textContent = WI.UIString("Resource failed to load.");
             else if (resource.urlComponents.scheme === "data")
-                descriptionElement.textContent = WI.UIString("Resource was loaded with the “data” scheme.");
+                descriptionElement.textContent = WI.UIString("Resource was loaded with the \u201Cdata\u201D scheme.");
             else
                 descriptionElement.textContent = WI.UIString("Resource was served from the cache.");
             popoverContentElement.appendChild(descriptionElement);
index db9d43e..2b70584 100644 (file)
@@ -48,5 +48,5 @@
 }
 
 .tree-outline .item.small:not(.two-line) .alternate-subtitle::before {
-    content: " — ";
+    content: "\00A0\2014\00A0"; /* &nbsp;&mdash;&nbsp; */;
 }
index f615034..8e4a13c 100644 (file)
@@ -75,7 +75,7 @@
 }
 
 .text-editor > .CodeMirror .has-breakpoint.multiple-breakpoints .CodeMirror-linenumber::before {
-    content: "•••";
+    content: "\2022\2022\2022"; /* &middot;&middot;&middot; */
     color: white;
     line-height: 6px;
     text-align: center;
index 697e1d9..d7c75b2 100644 (file)
@@ -252,7 +252,7 @@ body[dir=rtl] .tree-outline .item .status {
 
 .tree-outline .item .subtitle::before,
 .tree-outline .item .alternate-subtitle::before {
-    content: " — ";
+    content: "\00A0\2014\00A0"; /* &nbsp;&mdash;&nbsp; */;
 }
 
 @media (prefers-dark-interface) {