2007-12-02 Holger Hans Peter Freyther <holger.freyther@trolltech.com>
authorzecke@webkit.org <zecke@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 3 Dec 2007 10:36:03 +0000 (10:36 +0000)
committerzecke@webkit.org <zecke@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 3 Dec 2007 10:36:03 +0000 (10:36 +0000)
        Reviewed by Sam Weinig.

        * Add FrameLoader::shouldTreatSchemeAsLocal which is similar to
        shouldTreatURLAsLocal.
        * Make use of FrameLoader::shouldTreatSchemeAsLocal in SecurityOrigin
        and do not hardcode "file". This is needed for the WebKit/qt port to make
        the Web Inspector work as it using the qrc protocol instead of file.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldTreatSchemeAsLocal):
        * loader/FrameLoader.h:
        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::isSecureTransitionTo):

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

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

index 2f5fa4538d8a16113b45962f431e1c15c9b87572..7347433eef182daa20925242a957d9cec3f050f6 100644 (file)
@@ -1,3 +1,20 @@
+2007-12-02  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>
+
+        Reviewed by Sam Weinig.
+
+        * Add FrameLoader::shouldTreatSchemeAsLocal which is similar to
+        shouldTreatURLAsLocal.
+        * Make use of FrameLoader::shouldTreatSchemeAsLocal in SecurityOrigin
+        and do not hardcode "file". This is needed for the WebKit/qt port to make
+        the Web Inspector work as it using the qrc protocol instead of file.
+
+
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::shouldTreatSchemeAsLocal):
+        * loader/FrameLoader.h:
+        * platform/SecurityOrigin.cpp:
+        (WebCore::SecurityOrigin::isSecureTransitionTo):
+
 2007-12-02  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>
 
         Rubber stamped by Sam Weinig.
index cae0049007edef670e195a97f198556381f9906c..0aa002de43228065d9d726b554eb44bcdbc3bbe5 100644 (file)
@@ -4633,6 +4633,24 @@ bool FrameLoader::shouldTreatURLAsLocal(const String& url)
     return localSchemes().contains(scheme);
 }
 
+bool FrameLoader::shouldTreatSchemeAsLocal(const String& scheme)
+{
+    // This avoids an allocation of another String and the HashSet contains()
+    // call for the file: and http: schemes.
+    if (scheme.length() == 4) {
+        const UChar* s = scheme.characters();
+        if (s[0] == 'h' && s[1] == 't' && s[2] == 't' && s[3] == 'p')
+            return false;
+        if (s[0] == 'f' && s[1] == 'i' && s[2] == 'l' && s[3] == 'e')
+            return true;
+    }
+
+    if (scheme.isEmpty())
+        return false;
+
+    return localSchemes().contains(scheme);
+}
+
 void FrameLoader::dispatchDidCommitLoad()
 {
     m_client->dispatchDidCommitLoad();
index 2211610032a3de9310563b5ffa745026c4f8d936..0b5f1c8251cc7cce5e9869ceb6e740dde1ec27de 100644 (file)
@@ -421,7 +421,8 @@ namespace WebCore {
         static void registerURLSchemeAsLocal(const String& scheme);
         static bool restrictAccessToLocal();
         static void setRestrictAccessToLocal(bool);
-        static bool shouldTreatURLAsLocal(const String& url);
+        static bool shouldTreatURLAsLocal(const String&);
+        static bool shouldTreatSchemeAsLocal(const String&);
 
 #if USE(LOW_BANDWIDTH_DISPLAY)    
         bool addLowBandwidthDisplayRequest(CachedResource*);
index 6416e2003afbee091f59ded494ea01ef7285ad60..0a57936a3242e1c1983c03199e0ec81fa2e1b191 100644 (file)
@@ -110,7 +110,7 @@ void SecurityOrigin::setDomainFromDOM(const String& newDomain)
 
 bool SecurityOrigin::canAccess(const SecurityOrigin& other) const
 {
-    if (m_protocol == "file")
+    if (FrameLoader::shouldTreatSchemeAsLocal(m_protocol))
         return true;
 
     if (m_noAccess || other.m_noAccess)
@@ -128,7 +128,7 @@ bool SecurityOrigin::isSecureTransitionTo(const KURL& url) const
     if (isEmpty())
         return true;
 
-    if (m_protocol == "file")
+    if (FrameLoader::shouldTreatSchemeAsLocal(m_protocol))
         return true;
 
     return equalIgnoringCase(m_host, String(url.host())) && equalIgnoringCase(m_protocol, String(url.protocol())) && m_port == url.port();