Reviewed by Sam.
authormjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 10 Jan 2008 03:48:41 +0000 (03:48 +0000)
committermjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 10 Jan 2008 03:48:41 +0000 (03:48 +0000)
        - refactor SecurityOrigin in preparation for merging with SecurityOriginData

        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::create):
        (WebCore::SecurityOrigin::createForFrame):
        * platform/SecurityOrigin.h:

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

WebCore/ChangeLog
WebCore/platform/SecurityOrigin.cpp
WebCore/platform/SecurityOrigin.h

index b3c0b223035346555ec61a1830d773c33be6c200..7b085bf60b7338fe213c7cc8fc6eaa2db1cd15d6 100644 (file)
@@ -1,3 +1,15 @@
+2008-01-09  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Sam.
+
+        - refactor SecurityOrigin in preparation for merging with SecurityOriginData
+
+        * platform/SecurityOrigin.cpp:
+        (WebCore::SecurityOrigin::SecurityOrigin):
+        (WebCore::SecurityOrigin::create):
+        (WebCore::SecurityOrigin::createForFrame):
+        * platform/SecurityOrigin.h:
+
 2008-01-09  Ada Chan  <adachan@apple.com>
 
         Tabs with ctrl, meta, or altgraph modifier key down should not advance focus.
index 153792ccdb8ec9ecb7cdfeb808d485010ac6b88e..dd60c9315487f7371fcb01ea4e89dd497b86d85e 100644 (file)
 
 namespace WebCore {
 
-SecurityOrigin::SecurityOrigin(const KURL& url)
-    : m_port(0)
-    , m_portSet(false)
+SecurityOrigin::SecurityOrigin(const String& protocol, const String& host, unsigned short port)
+    : m_protocol(protocol.lower())
+    , m_host(host.lower())
+    , m_port(port)
+    , m_portSet(port)
     , m_noAccess(false)
     , m_domainWasSetInDOM(false)
 {
-    if (url.isEmpty())
-      return;
-
-    m_protocol = url.protocol().lower();
-
-    // These protocols do not represent principals.
+    // These protocols do not create security origins; the owner frame provides the origin
     if (m_protocol == "about" || m_protocol == "javascript")
         m_protocol = String();
 
-    if (m_protocol.isEmpty())
-        return;
-
     // data: URLs are not allowed access to anything other than themselves.
     if (m_protocol == "data")
         m_noAccess = true;
-
-    m_host = url.host().lower();
-    m_port = url.port();
-
-    if (m_port)
-        m_portSet = true;
 }
 
 bool SecurityOrigin::isEmpty() const
@@ -73,34 +61,37 @@ bool SecurityOrigin::isEmpty() const
     return m_protocol.isEmpty();
 }
 
+PassRefPtr<SecurityOrigin> SecurityOrigin::create(const String& protocol, const String& host, unsigned short port, SecurityOrigin* ownerFrameOrigin)
+{
+    RefPtr<SecurityOrigin> origin = new SecurityOrigin(protocol, host, port);
+
+    // If we do not obtain a meaningful origin from the URL, then we try to find one
+    // via the frame hierarchy.
+    // We alias the SecurityOrigins to match Firefox, see Bug 15313
+    // http://bugs.webkit.org/show_bug.cgi?id=15313
+    if (origin->isEmpty() && ownerFrameOrigin)
+        return ownerFrameOrigin;
+
+    return origin.release();
+}
+
 PassRefPtr<SecurityOrigin> SecurityOrigin::createForFrame(Frame* frame)
 {
     if (!frame)
-        return new SecurityOrigin(KURL());
+        return create("", "", 0, 0);
 
     FrameLoader* loader = frame->loader();
+    KURL url = loader->url();
 
-    RefPtr<SecurityOrigin> origin = new SecurityOrigin(loader->url());
-    if (!origin->isEmpty())
-        return origin;
-
-    // If we do not obtain a principal from the URL, then we try to find a
-    // principal via the frame hierarchy.
+    Frame* ownerFrame = frame->tree()->parent();
+    if (!ownerFrame)
+        ownerFrame = loader->opener();
 
-    Frame* openerFrame = frame->tree()->parent();
-    if (!openerFrame) {
-        openerFrame = loader->opener();
-        if (!openerFrame)
-            return origin;
-    }
-
-    Document* openerDocument = openerFrame->document();
-    if (!openerDocument)
-        return origin;
+    SecurityOrigin* ownerFrameOrigin = 0;
+    if (ownerFrame && ownerFrame->document())
+        ownerFrameOrigin = ownerFrame->document()->securityOrigin();
 
-    // We alias the SecurityOrigins to match Firefox, see Bug 15313
-    // http://bugs.webkit.org/show_bug.cgi?id=15313
-    return openerDocument->securityOrigin();
+    return create(url.protocol(), url.host(), url.port(), ownerFrameOrigin);
 }
 
 void SecurityOrigin::setDomainFromDOM(const String& newDomain)
index af498ef61318b675f604735671aab1c4b2fce8ca..eb0c5e66d87b747b3e3f4e7c3bf5cd7efff197b9 100644 (file)
@@ -43,6 +43,7 @@ namespace WebCore {
     class SecurityOrigin : public RefCounted<SecurityOrigin> {
     public:
         static PassRefPtr<SecurityOrigin> createForFrame(Frame*);
+        static PassRefPtr<SecurityOrigin> create(const String& protocol, const String& host, unsigned short port, SecurityOrigin* ownerFrameOrigin);
 
         void setDomainFromDOM(const String& newDomain);
         String domain() const { return m_host; }
@@ -56,7 +57,7 @@ namespace WebCore {
         SecurityOriginData securityOriginData() const;
         
     private:
-        SecurityOrigin(const KURL& url);
+        SecurityOrigin(const String& protocol, const String& host, unsigned short port);
 
         String m_protocol;
         String m_host;