Title: [221891] trunk
Revision
221891
Author
[email protected]
Date
2017-09-11 16:16:06 -0700 (Mon, 11 Sep 2017)

Log Message

Web Inspector: Cleanup and test MIMETypeUtilities
https://bugs.webkit.org/show_bug.cgi?id=176731

Patch by Joseph Pecoraro <[email protected]> on 2017-09-11
Reviewed by Matt Baker.

Source/WebInspectorUI:

* UserInterface/Base/FileUtilities.js:
(WI.saveDataToFile):
* UserInterface/Models/SourceMapResource.js:
(WI.SourceMapResource):
Update callers to handle new return values.

* UserInterface/Base/MIMETypeUtilities.js:
(WI.fileExtensionForURL):
Return null in error cases.
Only provide the content after the last period.

(WI.fileExtensionForMIMEType):
Handle generic "+json" and "+xml" cases.

* UserInterface/Test.html:
Include MIMETypeUtilities for testing.

LayoutTests:

* inspector/unit-tests/mimetype-utilities-expected.txt: Added.
* inspector/unit-tests/mimetype-utilities.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (221890 => 221891)


--- trunk/LayoutTests/ChangeLog	2017-09-11 23:09:09 UTC (rev 221890)
+++ trunk/LayoutTests/ChangeLog	2017-09-11 23:16:06 UTC (rev 221891)
@@ -1,3 +1,13 @@
+2017-09-11  Joseph Pecoraro  <[email protected]>
+
+        Web Inspector: Cleanup and test MIMETypeUtilities
+        https://bugs.webkit.org/show_bug.cgi?id=176731
+
+        Reviewed by Matt Baker.
+
+        * inspector/unit-tests/mimetype-utilities-expected.txt: Added.
+        * inspector/unit-tests/mimetype-utilities.html: Added.
+
 2017-09-11  Joanmarie Diggs  <[email protected]>
 
         AX: [ATK] aria-autocomplete not exposed on comboboxes

Added: trunk/LayoutTests/inspector/unit-tests/mimetype-utilities-expected.txt (0 => 221891)


--- trunk/LayoutTests/inspector/unit-tests/mimetype-utilities-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/inspector/unit-tests/mimetype-utilities-expected.txt	2017-09-11 23:16:06 UTC (rev 221891)
@@ -0,0 +1,28 @@
+
+== Running test suite: MIMETypeUtilities
+-- Running test case: fileExtensionForURL
+PASS: File extension for invalid URL should be null.
+PASS: File extension for URL without last path component should be null.
+PASS: File extension for URL without last path component should be null.
+PASS: File extension for URL with last path component without a period should be null.
+PASS: File extension for URL with last path component without a period should be null.
+PASS: File extension for URL with last path component ending in a period should be null.
+PASS: File extension for "foo.xyz" should be "xyz".
+PASS: File extension for "image.png" should be "png".
+PASS: File extension for "image.png" should be "gif".
+PASS: File extension for "script.js" should be "js".
+PASS: File extension for "script.min.js" should be "js".
+
+-- Running test case: fileExtensionForMIMEType
+PASS: File extension for invalid mime type should be null.
+PASS: File extension for unknown mime type should be null.
+PASS: File extension for "image/jpeg" should be "jpg".
+PASS: File extension for "image/png" should be "png".
+PASS: File extension for "image/gif" should be "gif".
+PASS: File extension for "text/_javascript_" should be "js".
+PASS: File extension for "application/json" should be "json".
+PASS: File extension for "application/vnd.api+json" should be "json".
+PASS: File extension for "application/xhtml+xml" should be "xhtml".
+PASS: File extension for "image/svg+xml" should be "svg".
+PASS: File extension for "text/foo+xml" should be "xml".
+

Added: trunk/LayoutTests/inspector/unit-tests/mimetype-utilities.html (0 => 221891)


--- trunk/LayoutTests/inspector/unit-tests/mimetype-utilities.html	                        (rev 0)
+++ trunk/LayoutTests/inspector/unit-tests/mimetype-utilities.html	2017-09-11 23:16:06 UTC (rev 221891)
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script>
+function test()
+{
+    let suite = InspectorTest.createSyncSuite("MIMETypeUtilities");
+
+    suite.addTestCase({
+        name: "fileExtensionForURL",
+        test() {
+            InspectorTest.expectEqual(WI.fileExtensionForURL("invalid-url"), null, `File extension for invalid URL should be null.`);
+            InspectorTest.expectEqual(WI.fileExtensionForURL("https://example.com"), null, `File extension for URL without last path component should be null.`);
+            InspectorTest.expectEqual(WI.fileExtensionForURL("https://example.com/"), null, `File extension for URL without last path component should be null.`);
+
+            InspectorTest.expectEqual(WI.fileExtensionForURL("https://example.com/test"), null, `File extension for URL with last path component without a period should be null.`);
+            InspectorTest.expectEqual(WI.fileExtensionForURL("https://example.com/foo.bar/test"), null, `File extension for URL with last path component without a period should be null.`);
+            InspectorTest.expectEqual(WI.fileExtensionForURL("https://example.com/test."), null, `File extension for URL with last path component ending in a period should be null.`);
+
+            InspectorTest.expectEqual(WI.fileExtensionForURL("https://example.com/foo.xyz"), "xyz", `File extension for "foo.xyz" should be "xyz".`);
+            InspectorTest.expectEqual(WI.fileExtensionForURL("https://example.com/image.png"), "png", `File extension for "image.png" should be "png".`);
+            InspectorTest.expectEqual(WI.fileExtensionForURL("https://example.com/image.gif"), "gif", `File extension for "image.png" should be "gif".`);
+            InspectorTest.expectEqual(WI.fileExtensionForURL("https://example.com/script.js"), "js", `File extension for "script.js" should be "js".`);
+            InspectorTest.expectEqual(WI.fileExtensionForURL("https://example.com/script.min.js"), "js", `File extension for "script.min.js" should be "js".`);
+
+            return true;
+        }
+    });
+
+    suite.addTestCase({
+        name: "fileExtensionForMIMEType",
+        test() {
+            InspectorTest.expectEqual(WI.fileExtensionForMIMEType("invalid-mimetype"), null, `File extension for invalid mime type should be null.`);
+            InspectorTest.expectEqual(WI.fileExtensionForMIMEType("application/unknown"), null, `File extension for unknown mime type should be null.`);
+
+            InspectorTest.expectEqual(WI.fileExtensionForMIMEType("image/jpeg"), "jpg", `File extension for "image/jpeg" should be "jpg".`);
+            InspectorTest.expectEqual(WI.fileExtensionForMIMEType("image/png"), "png", `File extension for "image/png" should be "png".`);
+            InspectorTest.expectEqual(WI.fileExtensionForMIMEType("image/gif"), "gif", `File extension for "image/gif" should be "gif".`);
+            InspectorTest.expectEqual(WI.fileExtensionForMIMEType("text/_javascript_"), "js", `File extension for "text/_javascript_" should be "js".`);
+            InspectorTest.expectEqual(WI.fileExtensionForMIMEType("application/json"), "json", `File extension for "application/json" should be "json".`);
+            InspectorTest.expectEqual(WI.fileExtensionForMIMEType("application/vnd.api+json"), "json", `File extension for "application/vnd.api+json" should be "json".`);
+
+            InspectorTest.expectEqual(WI.fileExtensionForMIMEType("application/xhtml+xml"), "xhtml", `File extension for "application/xhtml+xml" should be "xhtml".`);
+            InspectorTest.expectEqual(WI.fileExtensionForMIMEType("image/svg+xml"), "svg", `File extension for "image/svg+xml" should be "svg".`);
+            InspectorTest.expectEqual(WI.fileExtensionForMIMEType("text/foo+xml"), "xml", `File extension for "text/foo+xml" should be "xml".`);
+
+            return true;
+        }
+    });
+
+    suite.runTestCasesAndFinish();
+}
+</script>
+</head>
+<body _onLoad_="runTest()">
+</body>
+</html>

Modified: trunk/Source/WebInspectorUI/ChangeLog (221890 => 221891)


--- trunk/Source/WebInspectorUI/ChangeLog	2017-09-11 23:09:09 UTC (rev 221890)
+++ trunk/Source/WebInspectorUI/ChangeLog	2017-09-11 23:16:06 UTC (rev 221891)
@@ -1,5 +1,29 @@
 2017-09-11  Joseph Pecoraro  <[email protected]>
 
+        Web Inspector: Cleanup and test MIMETypeUtilities
+        https://bugs.webkit.org/show_bug.cgi?id=176731
+
+        Reviewed by Matt Baker.
+
+        * UserInterface/Base/FileUtilities.js:
+        (WI.saveDataToFile):
+        * UserInterface/Models/SourceMapResource.js:
+        (WI.SourceMapResource):
+        Update callers to handle new return values.
+
+        * UserInterface/Base/MIMETypeUtilities.js:
+        (WI.fileExtensionForURL):
+        Return null in error cases.
+        Only provide the content after the last period.
+
+        (WI.fileExtensionForMIMEType):
+        Handle generic "+json" and "+xml" cases.
+
+        * UserInterface/Test.html:
+        Include MIMETypeUtilities for testing.
+
+2017-09-11  Joseph Pecoraro  <[email protected]>
+
         Web Inspector: Rename NetworkTab / NetworkSidebar to LegacyNetwork*
         https://bugs.webkit.org/show_bug.cgi?id=176739
 

Modified: trunk/Source/WebInspectorUI/UserInterface/Base/FileUtilities.js (221890 => 221891)


--- trunk/Source/WebInspectorUI/UserInterface/Base/FileUtilities.js	2017-09-11 23:09:09 UTC (rev 221890)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/FileUtilities.js	2017-09-11 23:16:06 UTC (rev 221891)
@@ -43,8 +43,11 @@
     if (!suggestedName) {
         suggestedName = WI.UIString("Untitled");
         let dataURLTypeMatch = /^data:([^;]+)/.exec(url);
-        if (dataURLTypeMatch)
-            suggestedName += WI.fileExtensionForMIMEType(dataURLTypeMatch[1]) || "";
+        if (dataURLTypeMatch) {
+            let fileExtension = WI.fileExtensionForMIMEType(dataURLTypeMatch[1]);
+            if (fileExtension)
+                suggestedName += "." + fileExtension;
+        }
     }
 
     if (typeof saveData.content === "string") {

Modified: trunk/Source/WebInspectorUI/UserInterface/Base/MIMETypeUtilities.js (221890 => 221891)


--- trunk/Source/WebInspectorUI/UserInterface/Base/MIMETypeUtilities.js	2017-09-11 23:09:09 UTC (rev 221890)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/MIMETypeUtilities.js	2017-09-11 23:16:06 UTC (rev 221891)
@@ -25,14 +25,17 @@
 
 WI.fileExtensionForURL = function(url)
 {
-    var lastPathComponent = parseURL(url).lastPathComponent;
+    let lastPathComponent = parseURL(url).lastPathComponent;
     if (!lastPathComponent)
-        return "";
+        return null;
 
-    var index = lastPathComponent.indexOf(".");
+    let index = lastPathComponent.lastIndexOf(".");
     if (index === -1)
-        return "";
+        return null;
 
+    if (index === lastPathComponent.length - 1)
+        return null;
+
     return lastPathComponent.substr(index + 1);
 };
 
@@ -118,5 +121,13 @@
     };
 
     let extension = mimeTypeToExtension[mimeType];
-    return extension ? `.${extension}` : null;
+    if (extension)
+        return extension;
+
+    if (mimeType.endsWith("+json"))
+        return "json";
+    if (mimeType.endsWith("+xml"))
+        return "xml";
+
+    return null;
 };

Modified: trunk/Source/WebInspectorUI/UserInterface/Models/SourceMapResource.js (221890 => 221891)


--- trunk/Source/WebInspectorUI/UserInterface/Models/SourceMapResource.js	2017-09-11 23:09:09 UTC (rev 221890)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/SourceMapResource.js	2017-09-11 23:16:06 UTC (rev 221891)
@@ -36,7 +36,7 @@
 
         var inheritedMIMEType = this._sourceMap.originalSourceCode instanceof WI.Resource ? this._sourceMap.originalSourceCode.syntheticMIMEType : null;
 
-        var fileExtension = WI.fileExtensionForURL(url);
+        var fileExtension = WI.fileExtensionForURL(url) || "";
         var fileExtensionMIMEType = WI.mimeTypeForFileExtension(fileExtension, true);
 
         // FIXME: This is a layering violation. It should use a helper function on the

Modified: trunk/Source/WebInspectorUI/UserInterface/Test.html (221890 => 221891)


--- trunk/Source/WebInspectorUI/UserInterface/Test.html	2017-09-11 23:09:09 UTC (rev 221890)
+++ trunk/Source/WebInspectorUI/UserInterface/Test.html	2017-09-11 23:16:06 UTC (rev 221891)
@@ -50,6 +50,7 @@
     <script src=""
     <script src=""
     <script src=""
+    <script src=""
     <script src=""
     <script src=""
     <script src=""
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to