2009-11-24 Adam Barth <abarth@webkit.org>
authoreric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 24 Nov 2009 16:15:54 +0000 (16:15 +0000)
committereric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 24 Nov 2009 16:15:54 +0000 (16:15 +0000)
        Reviewed by Dimitri Glazkov.

        [Chromium] Fix DOM storage layout tests
        https://bugs.webkit.org/show_bug.cgi?id=31833

        The issue is, essentially, that this code assumes that
        SecurityOrigin::createString can re-create a SecurityOrigin given
        the string produced from SecurityOrigin::toString.  This is a bogus
        assumption in a number of corner cases (e.g., document.domain,
        @sandbox).  A recent patch (http://trac.webkit.org/changeset/51294)
        make this assumption further invalid in the case of of file:// URLs.

        The correct fix is for this code to use WebSecurityOrigin objects
        (and not strings) to represent SecurityOrigin objects.  However, the
        expert on this code is on vacation, and I don't want to do major
        surgery here without his involvement.  This patch is a temporary fix
        to get these tests passing again.  We'll do the right fix once
        jorlow gets back from vacation.

        Tests: Covered by a number of existing DOM storage tests.

        * src/WebStorageNamespaceImpl.cpp:
        (WebKit::WebStorageNamespaceImpl::createStorageArea):

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

WebKit/chromium/ChangeLog
WebKit/chromium/src/WebStorageNamespaceImpl.cpp

index c0176377a44e55cf6c9a5130825b75a49849a2c4..21bb74efae02070ade2f4be9a9b89a8aa83e46e8 100644 (file)
@@ -1,3 +1,29 @@
+2009-11-24  Adam Barth  <abarth@webkit.org>
+
+        Reviewed by Dimitri Glazkov.
+
+        [Chromium] Fix DOM storage layout tests
+        https://bugs.webkit.org/show_bug.cgi?id=31833
+
+        The issue is, essentially, that this code assumes that
+        SecurityOrigin::createString can re-create a SecurityOrigin given
+        the string produced from SecurityOrigin::toString.  This is a bogus
+        assumption in a number of corner cases (e.g., document.domain,
+        @sandbox).  A recent patch (http://trac.webkit.org/changeset/51294)
+        make this assumption further invalid in the case of of file:// URLs.
+
+        The correct fix is for this code to use WebSecurityOrigin objects
+        (and not strings) to represent SecurityOrigin objects.  However, the
+        expert on this code is on vacation, and I don't want to do major
+        surgery here without his involvement.  This patch is a temporary fix
+        to get these tests passing again.  We'll do the right fix once
+        jorlow gets back from vacation.
+
+        Tests: Covered by a number of existing DOM storage tests.
+
+        * src/WebStorageNamespaceImpl.cpp:
+        (WebKit::WebStorageNamespaceImpl::createStorageArea):
+
 2009-11-23  Jian Li  <jianli@chromium.org>
 
         Reviewed by NOBODY (Chromium build fix).
index 94cb9b5c9d39daeb5fd08e141bf18f6a8d261ca6..e6f65489ebed01a57bbce0685367b99dbb04227d 100644 (file)
@@ -61,7 +61,20 @@ WebStorageNamespaceImpl::~WebStorageNamespaceImpl()
 
 WebStorageArea* WebStorageNamespaceImpl::createStorageArea(const WebString& originString)
 {
-    RefPtr<WebCore::SecurityOrigin> origin = WebCore::SecurityOrigin::createFromString(originString);
+    WebCore::String originWebCoreString = originString;
+    if (originWebCoreString == "file://") {
+        // FIXME: We should really be passing around WebSecurityOrigin objects
+        //        to represent security origins instead of strings.  One issue
+        //        with using strings is that createFromString(toString) does
+        //        not round-trip for file URLs because file:// looks like a
+        //        directory (which is sandboxed).
+        //
+        // For the time being, we work around this issue by using "file:///a",
+        // which does not look like a directory.  We should fix this when
+        // jorlow gets back from vactation.
+        originWebCoreString = "file:///a";
+    }
+    RefPtr<WebCore::SecurityOrigin> origin = WebCore::SecurityOrigin::createFromString(originWebCoreString);
     return new WebStorageAreaImpl(m_storageNamespace->storageArea(origin.release()));
 }