Title: [100213] trunk
Revision
100213
Author
[email protected]
Date
2011-11-14 16:24:33 -0800 (Mon, 14 Nov 2011)

Log Message

Unique origins shouldn't remember their scheme, host, or port
https://bugs.webkit.org/show_bug.cgi?id=72308

Reviewed by Eric Seidel.

Source/WebCore: 

This patch contains the bulk (all?) of the behavior differences in this
patch series.  Unique origins shouldn't remember their schemes.  Doing
so causes some privileges (e.g., local access) to leak into unique
origins.

* page/SecurityOrigin.cpp:
(WebCore::SecurityOrigin::SecurityOrigin):
    - Explicitly clear out the protocol, host, and port for unique
      origins.  A future patch will refactor all this code to be more
      elegant.
* platform/SchemeRegistry.cpp:
(WebCore::schemesWithUniqueOrigins):
    - Merge "about" and "_javascript_" in with the general case now that
      we don't have a separate notion of an empty origin.

LayoutTests: 

* fast/filesystem/async-operations-expected.txt:
* fast/filesystem/not-enough-arguments-expected.txt:
* fast/filesystem/read-directory-expected.txt:
* fast/filesystem/simple-persistent-expected.txt:
* fast/filesystem/simple-readonly-expected.txt:
* fast/filesystem/simple-temporary-expected.txt:
    - Update test results to show that we no longer leak the scheme in
      storage identifiers.
* fast/frames/resources/sandboxed-iframe-storage-disallowed.html:
    - Inline script because the sandbox iframe isn't allowed to load
      local resources.
* fast/frames/sandboxed-iframe-attribute-parsing.html:
* fast/frames/sandboxed-iframe-forms-dynamic.html:
* fast/frames/sandboxed-iframe-forms.html:
* fast/frames/sandboxed-iframe-navigation-top-by-constant-name.html:
* fast/frames/sandboxed-iframe-navigation-top-by-constant-name2.html:
* fast/frames/sandboxed-iframe-navigation-top-by-name.html:
* fast/frames/sandboxed-iframe-navigation-top.html:
* media/video-controls-no-scripting.html:
    - Previously sandboxed local iframes still got universal access
      when we're running with universal access for file URLs!  Now that
      they correctly get unique origins, we need to update these tests
      to allow-same-origin access in order for them to function
      properly.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (100212 => 100213)


--- trunk/LayoutTests/ChangeLog	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/LayoutTests/ChangeLog	2011-11-15 00:24:33 UTC (rev 100213)
@@ -1,3 +1,35 @@
+2011-11-14  Adam Barth  <[email protected]>
+
+        Unique origins shouldn't remember their scheme, host, or port
+        https://bugs.webkit.org/show_bug.cgi?id=72308
+
+        Reviewed by Eric Seidel.
+
+        * fast/filesystem/async-operations-expected.txt:
+        * fast/filesystem/not-enough-arguments-expected.txt:
+        * fast/filesystem/read-directory-expected.txt:
+        * fast/filesystem/simple-persistent-expected.txt:
+        * fast/filesystem/simple-readonly-expected.txt:
+        * fast/filesystem/simple-temporary-expected.txt:
+            - Update test results to show that we no longer leak the scheme in
+              storage identifiers.
+        * fast/frames/resources/sandboxed-iframe-storage-disallowed.html:
+            - Inline script because the sandbox iframe isn't allowed to load
+              local resources.
+        * fast/frames/sandboxed-iframe-attribute-parsing.html:
+        * fast/frames/sandboxed-iframe-forms-dynamic.html:
+        * fast/frames/sandboxed-iframe-forms.html:
+        * fast/frames/sandboxed-iframe-navigation-top-by-constant-name.html:
+        * fast/frames/sandboxed-iframe-navigation-top-by-constant-name2.html:
+        * fast/frames/sandboxed-iframe-navigation-top-by-name.html:
+        * fast/frames/sandboxed-iframe-navigation-top.html:
+        * media/video-controls-no-scripting.html:
+            - Previously sandboxed local iframes still got universal access
+              when we're running with universal access for file URLs!  Now that
+              they correctly get unique origins, we need to update these tests
+              to allow-same-origin access in order for them to function
+              properly.
+
 2011-11-14  Julien Chaffraix  <[email protected]>
 
         Test getting / setting display: -webkit-flexbox and -webkit-flexbox-inline

Modified: trunk/LayoutTests/fast/filesystem/async-operations-expected.txt (100212 => 100213)


--- trunk/LayoutTests/fast/filesystem/async-operations-expected.txt	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/LayoutTests/fast/filesystem/async-operations-expected.txt	2011-11-15 00:24:33 UTC (rev 100213)
@@ -4,7 +4,7 @@
 
 
 requested FileSystem.
-Got FileSystem:file__0:Temporary
+Got FileSystem:__0:Temporary
 Starting async test stage 1.
 Starting async test stage 2.
 Verifying the FileSystem status.

Modified: trunk/LayoutTests/fast/filesystem/not-enough-arguments-expected.txt (100212 => 100213)


--- trunk/LayoutTests/fast/filesystem/not-enough-arguments-expected.txt	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/LayoutTests/fast/filesystem/not-enough-arguments-expected.txt	2011-11-15 00:24:33 UTC (rev 100213)
@@ -3,7 +3,7 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-Successfully obtained Persistent FileSystem:file__0:Temporary
+Successfully obtained Persistent FileSystem:__0:Temporary
 PASS fileSystem.root.moveTo() threw exception TypeError: Not enough arguments.
 PASS fileSystem.root.copyTo() threw exception TypeError: Not enough arguments.
 PASS reader.readEntries() threw exception TypeError: Not enough arguments.

Modified: trunk/LayoutTests/fast/filesystem/read-directory-expected.txt (100212 => 100213)


--- trunk/LayoutTests/fast/filesystem/read-directory-expected.txt	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/LayoutTests/fast/filesystem/read-directory-expected.txt	2011-11-15 00:24:33 UTC (rev 100213)
@@ -3,7 +3,7 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-Successfully obtained Persistent FileSystem:file__0:Temporary
+Successfully obtained Persistent FileSystem:__0:Temporary
 PASS readEntriesCount is entriesCallbackCount
 PASS resultEntries.length is testEntriesCount
 Entry:/a isDirectory:true

Modified: trunk/LayoutTests/fast/filesystem/simple-persistent-expected.txt (100212 => 100213)


--- trunk/LayoutTests/fast/filesystem/simple-persistent-expected.txt	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/LayoutTests/fast/filesystem/simple-persistent-expected.txt	2011-11-15 00:24:33 UTC (rev 100213)
@@ -3,7 +3,7 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-Successfully obtained PERSISTENT FileSystem:file__0:Persistent
+Successfully obtained PERSISTENT FileSystem:__0:Persistent
 PASS fileSystem.name.length > 0 is true
 PASS fileSystem.root.fullPath is "/"
 PASS successfullyParsed is true

Modified: trunk/LayoutTests/fast/filesystem/simple-readonly-expected.txt (100212 => 100213)


--- trunk/LayoutTests/fast/filesystem/simple-readonly-expected.txt	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/LayoutTests/fast/filesystem/simple-readonly-expected.txt	2011-11-15 00:24:33 UTC (rev 100213)
@@ -6,7 +6,7 @@
 webkitRequestFileSystem(TEMPORARY, 100, successCallback, errorCallback)
 trying to set readonly property fileSystem.name
 fileSystem.name = 'bar'
-PASS fileSystem.name is still file__0:Temporary
+PASS fileSystem.name is still __0:Temporary
 root = fileSystem.root
 root.getFile('foo', {create:true}, getFileCallback, errorCallback)
 trying to set readonly property fileEntry.isFile

Modified: trunk/LayoutTests/fast/filesystem/simple-temporary-expected.txt (100212 => 100213)


--- trunk/LayoutTests/fast/filesystem/simple-temporary-expected.txt	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/LayoutTests/fast/filesystem/simple-temporary-expected.txt	2011-11-15 00:24:33 UTC (rev 100213)
@@ -3,7 +3,7 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-Successfully obtained TEMPORARY FileSystem:file__0:Temporary
+Successfully obtained TEMPORARY FileSystem:__0:Temporary
 PASS fileSystem.name.length > 0 is true
 PASS fileSystem.root.fullPath is "/"
 PASS successfullyParsed is true

Modified: trunk/LayoutTests/fast/frames/resources/sandboxed-iframe-storage-disallowed.html (100212 => 100213)


--- trunk/LayoutTests/fast/frames/resources/sandboxed-iframe-storage-disallowed.html	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/LayoutTests/fast/frames/resources/sandboxed-iframe-storage-disallowed.html	2011-11-15 00:24:33 UTC (rev 100213)
@@ -1,8 +1,61 @@
 <html>
 <head>
-<script src=""
 <script>
+// This code is inlined from js-test-pre.js because this document is displayed
+// in a sandboxed iframe and cannot load local resources.
 
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function debug(msg)
+{
+    var span = document.createElement("span");
+    document.getElementById("console").appendChild(span);
+    span.innerHTML = msg + '<br />';
+}
+
+function escapeHTML(text)
+{
+    return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/\0/g, "\\0");
+}
+
+function testPassed(msg)
+{
+    debug('<span><span class="pass">PASS</span> ' + escapeHTML(msg) + '</span>');
+}
+
+function testFailed(msg)
+{
+    debug('<span><span class="fail">FAIL</span> ' + escapeHTML(msg) + '</span>');
+}
+
+function shouldThrow(_a, _e)
+{
+  var exception;
+  var _av;
+  try {
+     _av = eval(_a);
+  } catch (e) {
+     exception = e;
+  }
+
+  var _ev;
+  if (_e)
+      _ev =  eval(_e);
+
+  if (exception) {
+    if (typeof _e == "undefined" || exception == _ev)
+      testPassed(_a + " threw exception " + exception + ".");
+    else
+      testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Threw exception " + exception + ".");
+  } else if (typeof _av == "undefined")
+    testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was undefined.");
+  else
+    testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was " + _av + ".");
+}
+</script>
+<script>
+
 window._onload_ = function() {
     shouldThrow("window.openDatabase('SandboxedIframeStorageDisallowed', '1.0', '', 1)", "'Error: SECURITY_ERR: DOM Exception 18'");
     shouldThrow("window.localStorage", "'Error: SECURITY_ERR: DOM Exception 18'");

Modified: trunk/LayoutTests/fast/frames/sandboxed-iframe-attribute-parsing.html (100212 => 100213)


--- trunk/LayoutTests/fast/frames/sandboxed-iframe-attribute-parsing.html	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/LayoutTests/fast/frames/sandboxed-iframe-attribute-parsing.html	2011-11-15 00:24:33 UTC (rev 100213)
@@ -56,7 +56,7 @@
     <!-- iframes where script execution is allowed, but origin is not shared -->
 
     <!-- plain, proper attribute value -->
-    <iframe sandbox="allow-scripts"
+    <iframe sandbox="allow-scripts allow-same-origin"
             name="f1"
             src=""
     </iframe>
@@ -66,7 +66,7 @@
 
 allow-scripts
 
-"
+allow-same-origin"
             name="f2"
             src=""
     </iframe>
@@ -103,7 +103,7 @@
         
         'Kyssarna' ('The kisses'), Esaias Tegnér, 1782-1846
 
-    allow-scripts
+    allow-scripts allow-same-origin
     
         int main(void)
         {
@@ -114,44 +114,44 @@
     </iframe>
 
     <!-- tab characters before and after attribute value -->
-    <iframe sandbox="		allow-scripts		"
+    <iframe sandbox="		allow-scripts		allow-same-origin"
             name="f4"
             src=""
     </iframe>
 
     <!-- mixed case -->
-    <iframe sandbox="AlLoW-sCrIpTs"
+    <iframe sandbox="AlLoW-sCrIpTs allow-same-origin"
             name="f5"
             src=""
     </iframe>
 
     <!-- iframes where script execution is disallowed -->
 
-    <iframe sandbox="allowscripts"
+    <iframe sandbox="allowscripts allow-same-origin"
             src=""
     </iframe>
 
-    <iframe sandbox="allows-cripts"
+    <iframe sandbox="allows-cripts allow-same-origin"
             src=""
     </iframe>
 
-    <iframe sandbox="-allow-scripts"
+    <iframe sandbox="-allow-scripts allow-same-origin"
             src=""
     </iframe>
 
-    <iframe sandbox="allow_scripts"
+    <iframe sandbox="allow_scripts allow-same-origin"
             src=""
     </iframe>
 
-    <iframe sandbox="allowScripts"
+    <iframe sandbox="allowScripts allow-same-origin"
             src=""
     </iframe>
 
-    <iframe sandbox="aallow-scripts"
+    <iframe sandbox="aallow-scripts allow-same-origin"
             src=""
     </iframe>
 
-    <iframe sandbox="allow-scriptss"
+    <iframe sandbox="allow-scriptss allow-same-origin"
             src=""
     </iframe>
 

Modified: trunk/LayoutTests/fast/frames/sandboxed-iframe-forms-dynamic.html (100212 => 100213)


--- trunk/LayoutTests/fast/frames/sandboxed-iframe-forms-dynamic.html	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/LayoutTests/fast/frames/sandboxed-iframe-forms-dynamic.html	2011-11-15 00:24:33 UTC (rev 100213)
@@ -30,9 +30,9 @@
 window._onload_ = function() {
     frameElements = document.getElementsByTagName("iframe");
 
-    frameElements[0].sandbox = "allow-scripts";
-    frameElements[1].sandbox = "allow-scripts allow-forms";
-    frameElements[2].sandbox = "allow-scripts";
+    frameElements[0].sandbox = "allow-scripts allow-same-origin";
+    frameElements[1].sandbox = "allow-scripts allow-forms allow-same-origin";
+    frameElements[2].sandbox = "allow-scripts allow-same-origin";
 
     frames[0].postMessage("go", "*");
     frames[1].postMessage("go", "*");
@@ -45,15 +45,15 @@
 <body>
 
     <iframe style="width: 60px; height: 60px;"
-        sandbox="allow-scripts allow-forms"
+        sandbox="allow-scripts allow-forms allow-same-origin"
         src=""
     </iframe>
     <iframe style="width: 60px; height: 60px;"
-        sandbox="allow-scripts"
+        sandbox="allow-scripts allow-same-origin"
         src=""
     </iframe>
     <iframe style="width: 60px; height: 60px;"
-        sandbox="allow-scripts allow-forms"
+        sandbox="allow-scripts allow-forms allow-same-origin"
         src=""
     </iframe>
 

Modified: trunk/LayoutTests/fast/frames/sandboxed-iframe-forms.html (100212 => 100213)


--- trunk/LayoutTests/fast/frames/sandboxed-iframe-forms.html	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/LayoutTests/fast/frames/sandboxed-iframe-forms.html	2011-11-15 00:24:33 UTC (rev 100213)
@@ -41,53 +41,53 @@
     <!-- five IFrames with forms allowed -->
 
     <iframe style="width: 60px; height: 60px;"
-        sandbox="allow-scripts allow-forms"
+        sandbox="allow-scripts allow-forms allow-same-origin"
         src=""
     </iframe>
     <iframe style="width: 60px; height: 60px;"
-        sandbox="allow-scripts allow-forms"
+        sandbox="allow-scripts allow-forms allow-same-origin"
         src=""
     </iframe>
     <iframe style="width: 60px; height: 60px;"
-        sandbox="allow-scripts allow-forms"
+        sandbox="allow-scripts allow-forms allow-same-origin"
         src=""
     </iframe>
     <iframe style="width: 60px; height: 60px;"
-        sandbox="allow-scripts allow-forms"
+        sandbox="allow-scripts allow-forms allow-same-origin"
         src=""
     </iframe>
     <iframe style="width: 60px; height: 60px;"
-        sandbox="allow-scripts allow-forms"
+        sandbox="allow-scripts allow-forms allow-same-origin"
         src=""
     </iframe>
 
     <!-- one IFrame with forms disallowed -->
 
     <iframe style="width: 60px; height: 60px;"
-        sandbox="allow-scripts"
+        sandbox="allow-scripts allow-same-origin"
         src=""
     </iframe>
 
     <!-- five more IFrames with forms allowed -->
 
     <iframe style="width: 60px; height: 60px;"
-        sandbox="allow-scripts allow-forms"
+        sandbox="allow-scripts allow-forms allow-same-origin"
         src=""
     </iframe>
     <iframe style="width: 60px; height: 60px;"
-        sandbox="allow-scripts allow-forms"
+        sandbox="allow-scripts allow-forms allow-same-origin"
         src=""
     </iframe>
     <iframe style="width: 60px; height: 60px;"
-        sandbox="allow-scripts allow-forms"
+        sandbox="allow-scripts allow-forms allow-same-origin"
         src=""
     </iframe>
     <iframe style="width: 60px; height: 60px;"
-        sandbox="allow-scripts allow-forms"
+        sandbox="allow-scripts allow-forms allow-same-origin"
         src=""
     </iframe>
     <iframe style="width: 60px; height: 60px;"
-        sandbox="allow-scripts allow-forms"
+        sandbox="allow-scripts allow-forms allow-same-origin"
         src=""
     </iframe>
     

Modified: trunk/LayoutTests/fast/frames/sandboxed-iframe-navigation-top-by-constant-name.html (100212 => 100213)


--- trunk/LayoutTests/fast/frames/sandboxed-iframe-navigation-top-by-constant-name.html	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/LayoutTests/fast/frames/sandboxed-iframe-navigation-top-by-constant-name.html	2011-11-15 00:24:33 UTC (rev 100213)
@@ -9,7 +9,7 @@
 </head>
 <body>
 <p>This test verifies that a sandboxed IFrame can navigate the top-level frame with allow-top-navigation.</p>
-<iframe sandbox="allow-scripts allow-top-navigation"
+<iframe sandbox="allow-scripts allow-top-navigation allow-same-origin"
         src=""
 </body>
 </html>

Modified: trunk/LayoutTests/fast/frames/sandboxed-iframe-navigation-top-by-constant-name2.html (100212 => 100213)


--- trunk/LayoutTests/fast/frames/sandboxed-iframe-navigation-top-by-constant-name2.html	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/LayoutTests/fast/frames/sandboxed-iframe-navigation-top-by-constant-name2.html	2011-11-15 00:24:33 UTC (rev 100213)
@@ -9,7 +9,7 @@
 </head>
 <body>
 <p>This test verifies that a sandboxed IFrame can navigate the top-level frame with allow-top-navigation.</p>
-<iframe sandbox="allow-scripts allow-top-navigation"
+<iframe sandbox="allow-scripts allow-top-navigation allow-same-origin"
         src=""
 </body>
 </html>

Modified: trunk/LayoutTests/fast/frames/sandboxed-iframe-navigation-top-by-name.html (100212 => 100213)


--- trunk/LayoutTests/fast/frames/sandboxed-iframe-navigation-top-by-name.html	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/LayoutTests/fast/frames/sandboxed-iframe-navigation-top-by-name.html	2011-11-15 00:24:33 UTC (rev 100213)
@@ -10,7 +10,7 @@
 </head>
 <body>
 <p>This test verifies that a sandboxed IFrame can navigate the top-level frame with allow-top-navigation.</p>
-<iframe sandbox="allow-scripts allow-top-navigation"
+<iframe sandbox="allow-scripts allow-top-navigation allow-same-origin"
         src=""
 </body>
 </html>

Modified: trunk/LayoutTests/fast/frames/sandboxed-iframe-navigation-top.html (100212 => 100213)


--- trunk/LayoutTests/fast/frames/sandboxed-iframe-navigation-top.html	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/LayoutTests/fast/frames/sandboxed-iframe-navigation-top.html	2011-11-15 00:24:33 UTC (rev 100213)
@@ -9,7 +9,7 @@
 </head>
 <body>
 <p>This test verifies that a sandboxed IFrame can navigate the top-level frame with allow-top-navigation.</p>
-<iframe sandbox="allow-scripts allow-top-navigation"
+<iframe sandbox="allow-scripts allow-top-navigation allow-same-origin"
         src=""
 </body>
 </html>

Modified: trunk/LayoutTests/media/video-controls-no-scripting.html (100212 => 100213)


--- trunk/LayoutTests/media/video-controls-no-scripting.html	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/LayoutTests/media/video-controls-no-scripting.html	2011-11-15 00:24:33 UTC (rev 100213)
@@ -27,7 +27,7 @@
 
     <body>
 
-        <iframe sandbox src="" id="fr" style="width: 400px; height: 320px; border: 1px solid black;"></iframe>
+        <iframe sandbox="allow-same-origin" src="" id="fr" style="width: 400px; height: 320px; border: 1px solid black;"></iframe>
 
         <p>Tests that the built-in controls are always enabled when _javascript_ is disabled.</p>
         <pre id="console"></pre>

Modified: trunk/Source/WebCore/ChangeLog (100212 => 100213)


--- trunk/Source/WebCore/ChangeLog	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/Source/WebCore/ChangeLog	2011-11-15 00:24:33 UTC (rev 100213)
@@ -1,5 +1,27 @@
 2011-11-14  Adam Barth  <[email protected]>
 
+        Unique origins shouldn't remember their scheme, host, or port
+        https://bugs.webkit.org/show_bug.cgi?id=72308
+
+        Reviewed by Eric Seidel.
+
+        This patch contains the bulk (all?) of the behavior differences in this
+        patch series.  Unique origins shouldn't remember their schemes.  Doing
+        so causes some privileges (e.g., local access) to leak into unique
+        origins.
+
+        * page/SecurityOrigin.cpp:
+        (WebCore::SecurityOrigin::SecurityOrigin):
+            - Explicitly clear out the protocol, host, and port for unique
+              origins.  A future patch will refactor all this code to be more
+              elegant.
+        * platform/SchemeRegistry.cpp:
+        (WebCore::schemesWithUniqueOrigins):
+            - Merge "about" and "_javascript_" in with the general case now that
+              we don't have a separate notion of an empty origin.
+
+2011-11-14  Adam Barth  <[email protected]>
+
         Don't special-case "data" URLs in drag-and-drop logic
         https://bugs.webkit.org/show_bug.cgi?id=72322
 

Modified: trunk/Source/WebCore/page/SecurityOrigin.cpp (100212 => 100213)


--- trunk/Source/WebCore/page/SecurityOrigin.cpp	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/Source/WebCore/page/SecurityOrigin.cpp	2011-11-15 00:24:33 UTC (rev 100213)
@@ -41,6 +41,7 @@
 
 namespace WebCore {
 
+const int InvalidPort = 0;
 const int MaxAllowedPort = 65535;
 
 static bool schemeRequiresAuthority(const String& scheme)
@@ -65,10 +66,6 @@
     , m_domainWasSetInDOM(false)
     , m_enforceFilePathSeparation(false)
 {
-    // These protocols do not create security origins; the owner frame provides the origin
-    if (m_protocol == "about" || m_protocol == "_javascript_")
-        m_protocol = "";
-
 #if ENABLE(BLOB) || ENABLE(FILE_SYSTEM)
     bool isBlobOrFileSystemProtocol = false;
 #if ENABLE(BLOB)
@@ -93,6 +90,7 @@
     // For edge case URLs that were probably misparsed, make sure that the origin is unique.
     if (schemeRequiresAuthority(m_protocol) && m_host.isEmpty())
         m_isUnique = true;
+
     if (m_protocol.isEmpty())
         m_isUnique = true;
 
@@ -116,7 +114,14 @@
     }
 
     if (isDefaultPortForProtocol(m_port, m_protocol))
-        m_port = 0;
+        m_port = InvalidPort;
+
+    // Don't leak details from URLs into unique origins.
+    if (m_isUnique) {
+        m_protocol = "";
+        m_host = "";
+        m_port = InvalidPort;
+    }
 }
 
 SecurityOrigin::SecurityOrigin(const SecurityOrigin* other)

Modified: trunk/Source/WebCore/platform/SchemeRegistry.cpp (100212 => 100213)


--- trunk/Source/WebCore/platform/SchemeRegistry.cpp	2011-11-15 00:21:53 UTC (rev 100212)
+++ trunk/Source/WebCore/platform/SchemeRegistry.cpp	2011-11-15 00:24:33 UTC (rev 100213)
@@ -68,10 +68,13 @@
 {
     DEFINE_STATIC_LOCAL(URLSchemesMap, schemesWithUniqueOrigins, ());
 
-    // This is a willful violation of HTML5.
-    // See https://bugs.webkit.org/show_bug.cgi?id=11885
-    if (schemesWithUniqueOrigins.isEmpty())
+    if (schemesWithUniqueOrigins.isEmpty()) {
+        schemesWithUniqueOrigins.add("about");
+        schemesWithUniqueOrigins.add("_javascript_");
+        // This is a willful violation of HTML5.
+        // See https://bugs.webkit.org/show_bug.cgi?id=11885
         schemesWithUniqueOrigins.add("data");
+    }
 
     return schemesWithUniqueOrigins;
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to