Title: [228036] trunk
Revision
228036
Author
david_ques...@apple.com
Date
2018-02-02 16:49:56 -0800 (Fri, 02 Feb 2018)

Log Message

WebAppManifest scope should default to the containing directory of start_url if 'scope' is not specified
https://bugs.webkit.org/show_bug.cgi?id=182363
rdar://problem/37093498

Reviewed by Ryosuke Niwa.

Source/WebCore:

If an app manifest doesn't specify a scope, we should default to the "parent directory" of
the start URL, rather than leaving the app unbounded. This is more reasonable than using the
entire internet as the app scope.

No new tests, updates to the existing tests verify the new behavior.

* Modules/applicationmanifest/ApplicationManifestParser.cpp:
(WebCore::ApplicationManifestParser::parseScope):

Tools:

Updated ApplicationManifestParserTests to account for the new default scope behavior.

* TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:
(assertManifestHasDefaultValues):
(TEST_F):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (228035 => 228036)


--- trunk/Source/WebCore/ChangeLog	2018-02-03 00:43:14 UTC (rev 228035)
+++ trunk/Source/WebCore/ChangeLog	2018-02-03 00:49:56 UTC (rev 228036)
@@ -1,3 +1,20 @@
+2018-02-02  David Quesada  <david_ques...@apple.com>
+
+        WebAppManifest scope should default to the containing directory of start_url if 'scope' is not specified
+        https://bugs.webkit.org/show_bug.cgi?id=182363
+        rdar://problem/37093498
+
+        Reviewed by Ryosuke Niwa.
+
+        If an app manifest doesn't specify a scope, we should default to the "parent directory" of
+        the start URL, rather than leaving the app unbounded. This is more reasonable than using the
+        entire internet as the app scope.
+
+        No new tests, updates to the existing tests verify the new behavior.
+
+        * Modules/applicationmanifest/ApplicationManifestParser.cpp:
+        (WebCore::ApplicationManifestParser::parseScope):
+
 2018-02-02  Youenn Fablet  <you...@apple.com>
 
         Clearing all service worker registrations should wait for importing service worker registration to finish

Modified: trunk/Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp (228035 => 228036)


--- trunk/Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp	2018-02-03 00:43:14 UTC (rev 228035)
+++ trunk/Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp	2018-02-03 00:49:56 UTC (rev 228036)
@@ -193,23 +193,25 @@
 
 URL ApplicationManifestParser::parseScope(const JSON::Object& manifest, const URL& documentURL, const URL& startURL)
 {
+    URL defaultScope { startURL, "./" };
+
     RefPtr<JSON::Value> value;
     if (!manifest.getValue("scope", value))
-        return { };
+        return defaultScope;
 
     String stringValue;
     if (!value->asString(stringValue)) {
         logManifestPropertyNotAString(ASCIILiteral("scope"));
-        return { };
+        return defaultScope;
     }
 
     if (stringValue.isEmpty())
-        return { };
+        return defaultScope;
 
     URL scopeURL(m_manifestURL, stringValue);
     if (!scopeURL.isValid()) {
         logManifestPropertyInvalidURL(ASCIILiteral("scope"));
-        return { };
+        return defaultScope;
     }
 
     if (!protocolHostAndPortAreEqual(scopeURL, documentURL)) {
@@ -216,12 +218,12 @@
         auto scopeURLOrigin = SecurityOrigin::create(scopeURL);
         auto documentOrigin = SecurityOrigin::create(documentURL);
         logDeveloperWarning(ASCIILiteral("The scope's origin of \"") + scopeURLOrigin->toString() + ASCIILiteral("\" is different from the document's origin of \"") + documentOrigin->toString() + ASCIILiteral("\"."));
-        return { };
+        return defaultScope;
     }
 
     if (!isInScope(scopeURL, startURL)) {
         logDeveloperWarning(ASCIILiteral("The start URL is not within scope of the provided scope URL."));
-        return { };
+        return defaultScope;
     }
 
     return scopeURL;

Modified: trunk/Tools/ChangeLog (228035 => 228036)


--- trunk/Tools/ChangeLog	2018-02-03 00:43:14 UTC (rev 228035)
+++ trunk/Tools/ChangeLog	2018-02-03 00:49:56 UTC (rev 228036)
@@ -1,3 +1,17 @@
+2018-02-02  David Quesada  <david_ques...@apple.com>
+
+        WebAppManifest scope should default to the containing directory of start_url if 'scope' is not specified
+        https://bugs.webkit.org/show_bug.cgi?id=182363
+        rdar://problem/37093498
+
+        Reviewed by Ryosuke Niwa.
+
+        Updated ApplicationManifestParserTests to account for the new default scope behavior.
+
+        * TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:
+        (assertManifestHasDefaultValues):
+        (TEST_F):
+
 2018-02-02  Youenn Fablet  <you...@apple.com>
 
         Clearing all service worker registrations should wait for importing service worker registration to finish

Modified: trunk/Tools/TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp (228035 => 228036)


--- trunk/Tools/TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp	2018-02-03 00:43:14 UTC (rev 228035)
+++ trunk/Tools/TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp	2018-02-03 00:49:56 UTC (rev 228036)
@@ -135,8 +135,8 @@
     EXPECT_TRUE(manifest.name.isNull());
     EXPECT_TRUE(manifest.shortName.isNull());
     EXPECT_TRUE(manifest.description.isNull());
-    EXPECT_TRUE(manifest.scope.isEmpty());
-    EXPECT_STREQ(manifest.startURL.string().utf8().data(), documentURL.string().utf8().data());
+    EXPECT_STREQ("https://example.com/", manifest.scope.string().utf8().data());
+    EXPECT_STREQ(documentURL.string().utf8().data(), manifest.startURL.string().utf8().data());
 }
 
 TEST_F(ApplicationManifestParserTest, DefaultManifest)
@@ -247,27 +247,32 @@
 
 TEST_F(ApplicationManifestParserTest, Scope)
 {
-    testScope("123", String());
-    testScope("null", String());
-    testScope("true", String());
-    testScope("{ }", String());
-    testScope("[ ]", String());
-    testScope("\"\"", String());
+    // If the scope is not a string or not a valid URL, return the default scope (the parent path of the start URL).
+    m_documentURL = { { }, "https://example.com/a/page?queryParam=value#fragment" };
+    m_manifestURL = { { }, "https://example.com/manifest.json" };
+    testScope("123", "https://example.com/a/");
+    testScope("null", "https://example.com/a/");
+    testScope("true", "https://example.com/a/");
+    testScope("{ }", "https://example.com/a/");
+    testScope("[ ]", "https://example.com/a/");
+    testScope("\"\"", "https://example.com/a/");
+    testScope("\"http:?\"", "https://example.com/a/");
 
-    testScope("\"http:?\"", String());
+    m_documentURL = { { }, "https://example.com/a/pageEndingWithSlash/" };
+    testScope("null", "https://example.com/a/pageEndingWithSlash/");
 
-    // If scope URL is not same origin as document URL, return undefined.
+    // If scope URL is not same origin as document URL, return the default scope.
     m_documentURL = { { }, "https://example.com/home" };
     m_manifestURL = { { }, "https://other-site.com/manifest.json" };
-    testScope("\"https://other-site.com/some-scope\"", String());
+    testScope("\"https://other-site.com/some-scope\"", "https://example.com/");
 
     m_documentURL = { { }, "https://example.com/app/home" };
     m_manifestURL = { { }, "https://example.com/app/manifest.json" };
 
-    // If start URL is not within scope of scope URL, return undefined
-    testScope("\"https://example.com/subdirectory\"", String());
+    // If start URL is not within scope of scope URL, return the default scope.
+    testScope("\"https://example.com/subdirectory\"", "https://example.com/app/");
     testScope("\"https://example.com/app\"", "https://example.com/app");
-    testScope("\"https://example.com/APP\"", String());
+    testScope("\"https://example.com/APP\"", "https://example.com/app/");
     testScope("\"https://example.com/a\"", "https://example.com/a");
 
     m_documentURL = { { }, "https://example.com/a/b/c/index" };
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to