summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorevanm@google.com <evanm@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-04 00:36:14 +0000
committerevanm@google.com <evanm@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-04 00:36:14 +0000
commit82a74f71d944bdc705e9140d7cd13e871689afbc (patch)
treecd74244b8e709872f1e62fd8c394e2708590ee8d /webkit
parent6a51384f1b940fa0155ba69b374c7c51c9f93c65 (diff)
downloadchromium_src-82a74f71d944bdc705e9140d7cd13e871689afbc.zip
chromium_src-82a74f71d944bdc705e9140d7cd13e871689afbc.tar.gz
chromium_src-82a74f71d944bdc705e9140d7cd13e871689afbc.tar.bz2
Unfork SecurityOrigin.cpp, 2/2: update DEPS and build files, delete old files.
Review URL: http://codereview.chromium.org/6255 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@2865 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r--webkit/build/WebCore/SConscript2
-rw-r--r--webkit/build/WebCore/WebCore.vcproj4
-rw-r--r--webkit/pending/SecurityOrigin.cpp310
-rw-r--r--webkit/pending/SecurityOrigin.h159
4 files changed, 3 insertions, 472 deletions
diff --git a/webkit/build/WebCore/SConscript b/webkit/build/WebCore/SConscript
index 0d90292..0813005 100644
--- a/webkit/build/WebCore/SConscript
+++ b/webkit/build/WebCore/SConscript
@@ -349,7 +349,7 @@ input_files = [
'$WEBCORE_DIR/platform/Logging.cpp',
'$PORT_DIR/platform/MIMETypeRegistry.cpp',
'$WEBCORE_DIR/platform/ScrollBar.cpp',
- '$PENDING_DIR/SecurityOrigin.cpp',
+ '$WEBCORE_DIR/platform/SecurityOrigin.cpp',
'$WEBCORE_DIR/platform/SharedBuffer.cpp',
'$WEBCORE_DIR/platform/Timer.cpp',
'$WEBCORE_DIR/platform/Widget.cpp',
diff --git a/webkit/build/WebCore/WebCore.vcproj b/webkit/build/WebCore/WebCore.vcproj
index 99c9f2d..26d7011 100644
--- a/webkit/build/WebCore/WebCore.vcproj
+++ b/webkit/build/WebCore/WebCore.vcproj
@@ -1002,11 +1002,11 @@
>
</File>
<File
- RelativePath="..\..\pending\SecurityOrigin.cpp"
+ RelativePath="..\..\..\third_party\WebKit\WebCore\platform\SecurityOrigin.cpp"
>
</File>
<File
- RelativePath="..\..\pending\SecurityOrigin.h"
+ RelativePath="..\..\..\third_party\WebKit\WebCore\platform\SecurityOrigin.h"
>
</File>
<File
diff --git a/webkit/pending/SecurityOrigin.cpp b/webkit/pending/SecurityOrigin.cpp
deleted file mode 100644
index 2322cfd..0000000
--- a/webkit/pending/SecurityOrigin.cpp
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "SecurityOrigin.h"
-
-#include "CString.h"
-#include "FrameLoader.h"
-#include "KURL.h"
-#include "PlatformString.h"
-
-namespace WebCore {
-
-static bool isDefaultPortForProtocol(unsigned short port, const String& protocol)
-{
- if (protocol.isEmpty())
- return false;
-
- static HashMap<String, unsigned> defaultPorts;
- if (defaultPorts.isEmpty()) {
- defaultPorts.set("http", 80);
- defaultPorts.set("https", 443);
- defaultPorts.set("ftp", 21);
- defaultPorts.set("ftps", 990);
- }
- return defaultPorts.get(protocol) == port;
-}
-
-SecurityOrigin::SecurityOrigin(const KURL& url)
- : m_protocol(url.protocol().isNull() ? "" : url.protocol().lower())
- , m_host(url.host().isNull() ? "" : url.host().lower())
- , m_port(url.port())
- , m_noAccess(false)
- , m_domainWasSetInDOM(false)
-{
- // These protocols do not create security origins; the owner frame provides the origin
- if (m_protocol == "about" || m_protocol == "javascript")
- m_protocol = "";
-
- // data: URLs are not allowed access to anything other than themselves.
- if (m_protocol == "data")
- m_noAccess = true;
-
- // document.domain starts as m_host, but can be set by the DOM.
- m_domain = m_host;
-
- // By default, only local SecurityOrigins can load local resources.
- m_canLoadLocalResources = isLocal();
-
- if (isDefaultPortForProtocol(m_port, m_protocol))
- m_port = 0;
-}
-
-SecurityOrigin::SecurityOrigin(const SecurityOrigin* other)
- : m_protocol(other->m_protocol.copy())
- , m_host(other->m_host.copy())
- , m_domain(other->m_domain.copy())
- , m_port(other->m_port)
- , m_noAccess(other->m_noAccess)
- , m_domainWasSetInDOM(other->m_domainWasSetInDOM)
- , m_canLoadLocalResources(other->m_canLoadLocalResources)
-{
-}
-
-bool SecurityOrigin::isEmpty() const
-{
- return m_protocol.isEmpty();
-}
-
-PassRefPtr<SecurityOrigin> SecurityOrigin::create(const KURL& url)
-{
- return adoptRef(new SecurityOrigin(url));
-}
-
-PassRefPtr<SecurityOrigin> SecurityOrigin::createEmpty()
-{
- return create(KURL());
-}
-
-PassRefPtr<SecurityOrigin> SecurityOrigin::copy()
-{
- return adoptRef(new SecurityOrigin(this));
-}
-
-void SecurityOrigin::setDomainFromDOM(const String& newDomain)
-{
- m_domainWasSetInDOM = true;
- m_domain = newDomain.lower();
-}
-
-bool SecurityOrigin::canAccess(const SecurityOrigin* other) const
-{
- if (m_noAccess || other->m_noAccess)
- return false;
-
- // Here are two cases where we should permit access:
- //
- // 1) Neither document has set document.domain. In this case, we insist
- // that the scheme, host, and port of the URLs match.
- //
- // 2) Both documents have set document.domain. In this case, we insist
- // that the documents have set document.domain to the same value and
- // that the scheme of the URLs match.
- //
- // This matches the behavior of Firefox 2 and Internet Explorer 6.
- //
- // Internet Explorer 7 and Opera 9 are more strict in that they require
- // the port numbers to match when both pages have document.domain set.
- //
- // FIXME: Evaluate whether we can tighten this policy to require matched
- // port numbers.
- //
- // Opera 9 allows access when only one page has set document.domain, but
- // this is a security vulnerability.
-
- if (m_protocol == other->m_protocol) {
- if (!m_domainWasSetInDOM && !other->m_domainWasSetInDOM) {
- if (m_host == other->m_host && m_port == other->m_port)
- return true;
- } else if (m_domainWasSetInDOM && other->m_domainWasSetInDOM) {
- if (m_domain == other->m_domain)
- return true;
- }
- }
-
- return false;
-}
-
-bool SecurityOrigin::canRequest(const KURL& url) const
-{
- if (isLocal())
- return true;
-
- if (m_noAccess)
- return false;
-
- RefPtr<SecurityOrigin> targetOrigin = SecurityOrigin::create(url);
-
- // We call isSameSchemeHostPort here instead of canAccess because we want
- // to ignore document.domain effects.
- return isSameSchemeHostPort(targetOrigin.get());
-}
-
-void SecurityOrigin::grantLoadLocalResources()
-{
- // This method exists only to support backwards compatibility with older
- // versions of WebKit. Granting privileges to some, but not all, documents
- // in a SecurityOrigin is a security hazard because the documents without
- // the privilege can obtain the privilege by injecting script into the
- // documents that have been granted the privilege.
- ASSERT(FrameLoader::allowSubstituteDataAccessToLocal());
- m_canLoadLocalResources = true;
-}
-
-bool SecurityOrigin::isLocal() const
-{
- return FrameLoader::shouldTreatSchemeAsLocal(m_protocol);
-}
-
-bool SecurityOrigin::isSecureTransitionTo(const KURL& url) const
-{
- // New window created by the application
- if (isEmpty())
- return true;
-
- RefPtr<SecurityOrigin> other = SecurityOrigin::create(url);
- return canAccess(other.get());
-}
-
-String SecurityOrigin::toString() const
-{
- if (isEmpty())
- return String();
-
- if (m_noAccess)
- return String();
-
- if (m_protocol == "file")
- return String("file://");
-
- Vector<UChar> result;
- result.reserveCapacity(m_protocol.length() + m_host.length() + 10);
- append(result, m_protocol);
- append(result, "://");
- append(result, m_host);
-
- if (m_port) {
- append(result, ":");
- append(result, String::number(m_port));
- }
-
- return String::adopt(result);
-}
-
-PassRefPtr<SecurityOrigin> SecurityOrigin::createFromString(const String& originString)
-{
- return SecurityOrigin::create(KURL(originString));
-}
-
-static const char SeparatorCharacter = '_';
-
-PassRefPtr<SecurityOrigin> SecurityOrigin::createFromDatabaseIdentifier(const String& databaseIdentifier)
-{
- // Make sure there's a first separator
- int separator1 = databaseIdentifier.find(SeparatorCharacter);
- if (separator1 == -1)
- return create(KURL());
-
- // Make sure there's a second separator
- int separator2 = databaseIdentifier.find(SeparatorCharacter, separator1 + 1);
- if (separator2 == -1)
- return create(KURL());
-
- // Make sure there's not a third separator
- if (databaseIdentifier.reverseFind(SeparatorCharacter) != separator2)
- return create(KURL());
-
- // Make sure the port section is a valid port number or doesn't exist
- bool portOkay;
- int port = databaseIdentifier.right(databaseIdentifier.length() - separator2 - 1).toInt(&portOkay);
- if (!portOkay && separator2 + 1 == static_cast<int>(databaseIdentifier.length()))
- return create(KURL());
-
- if (port < 0 || port > 65535)
- return create(KURL());
-
- // Split out the 3 sections of data
- String protocol = databaseIdentifier.substring(0, separator1);
- String host = databaseIdentifier.substring(separator1 + 1, separator2 - separator1 - 1);
- return create(KURL(protocol + "://" + host + ":" + String::number(port)));
-}
-
-String SecurityOrigin::databaseIdentifier() const
-{
- static String separatorString = String(&SeparatorCharacter, 1);
- return m_protocol + separatorString + m_host + separatorString + String::number(m_port);
-}
-
-bool SecurityOrigin::equal(const SecurityOrigin* other) const
-{
- if (!isSameSchemeHostPort(other))
- return false;
-
- if (m_domainWasSetInDOM != other->m_domainWasSetInDOM)
- return false;
-
- if (m_domainWasSetInDOM && m_domain != other->m_domain)
- return false;
-
- return true;
-}
-
-bool SecurityOrigin::isSameSchemeHostPort(const SecurityOrigin* other) const
-{
- if (m_host != other->m_host)
- return false;
-
- if (m_protocol != other->m_protocol)
- return false;
-
- if (m_port != other->m_port)
- return false;
-
- return true;
-}
-
-String SecurityOrigin::securityToken() const
-{
- if (isEmpty())
- return String();
-
- if (m_noAccess)
- return String();
-
- if (m_domainWasSetInDOM) {
- // We could encode the document.domain state into the security token,
- // but this is an uncommon case and leads to complexity. We're better
- // off sending these accesses down the slow path.
- return String();
- }
-
- return toString();
-}
-
-} // namespace WebCore
diff --git a/webkit/pending/SecurityOrigin.h b/webkit/pending/SecurityOrigin.h
deleted file mode 100644
index 031b61b..0000000
--- a/webkit/pending/SecurityOrigin.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef SecurityOrigin_h
-#define SecurityOrigin_h
-
-#include <wtf/RefCounted.h>
-#include <wtf/PassRefPtr.h>
-#include <wtf/Threading.h>
-
-#include "PlatformString.h"
-
-namespace WebCore {
-
- class KURL;
-
- class SecurityOrigin : public ThreadSafeShared<SecurityOrigin> {
- public:
- static PassRefPtr<SecurityOrigin> createFromDatabaseIdentifier(const String&);
- static PassRefPtr<SecurityOrigin> createFromString(const String&);
- static PassRefPtr<SecurityOrigin> create(const KURL&);
- static PassRefPtr<SecurityOrigin> createEmpty();
-
- // Create a deep copy of this SecurityOrigin. This method is useful
- // when marshalling a SecurityOrigin to another thread.
- PassRefPtr<SecurityOrigin> copy();
-
- // Set the domain property of this security origin to newDomain. This
- // function does not check whether newDomain is a suffix of the current
- // domain. The caller is responsible for validating newDomain.
- void setDomainFromDOM(const String& newDomain);
-
- String protocol() const { return m_protocol; }
- String host() const { return m_host; }
- String domain() const { return m_domain; }
- unsigned short port() const { return m_port; }
-
- // Returns true if this SecurityOrigin can script objects in the given
- // SecurityOrigin. For example, call this function before allowing
- // script from one security origin to read or write objects from
- // another SecurityOrigin.
- bool canAccess(const SecurityOrigin*) const;
-
- // Returns true if this SecurityOrigin can read content retrieved from
- // the given URL. For example, call this function before issuing
- // XMLHttpRequests.
- bool canRequest(const KURL&) const;
-
- // Returns true if this SecurityOrigin can load local resources, such
- // as images, iframes, and style sheets, and can link to local URLs.
- // For example, call this function before creating an iframe to a
- // file:// URL.
- //
- // Note: A SecurityOrigin might be allowed to load local resources
- // without being able to issue an XMLHttpRequest for a local URL.
- // To determine whether the SecurityOrigin can issue an
- // XMLHttpRequest for a URL, call canRequest(url).
- bool canLoadLocalResources() const { return m_canLoadLocalResources; }
-
- // Explicitly grant the ability to load local resources to this
- // SecurityOrigin.
- //
- // Note: This method exists only to support backwards compatibility
- // with older versions of WebKit.
- void grantLoadLocalResources();
-
- bool isSecureTransitionTo(const KURL&) const;
-
- // The local SecurityOrigin is the most privileged SecurityOrigin.
- // The local SecurityOrigin can script any document, navigate to local
- // resources, and can set arbitrary headers on XMLHttpRequests.
- bool isLocal() const;
-
- // The empty SecurityOrigin is the least privileged SecurityOrigin.
- bool isEmpty() const;
-
- // Convert this SecurityOrigin into a string. The string
- // representation of a SecurityOrigin is similar to a URL, except it
- // lacks a path component. The string representation does not encode
- // the value of the SecurityOrigin's domain property. The empty
- // SecurityOrigin is represented with the null string.
- String toString() const;
-
- // Non-empty security tokens can be used for fast access checks. If the
- // return value is a non-empty string, it can be used to compare with
- // another security origin's securityToken. An empty security token is
- // invalid and should not be used to check security. Instead, you must
- // call canAccess.
- //
- // CAVEATS:
- //
- // 1) If either of the tokens is empty or if the tokens are not equal,
- // you must call canAccess to see if they match. The tokens can be
- // used for fast allow judgments, but cannot be used for deny
- // judgments.
- //
- // 2) If one of the SecurityOrigins modifies their document.domain
- // property after you read its securityToken, you might get false
- // allows.
- //
- String securityToken() const;
-
- // Serialize the security origin for storage in the database. This format is
- // deprecated and should be used only for compatibility with old databases;
- // use toString() and createFromString() instead.
- String databaseIdentifier() const;
-
- // This method checks for equality between SecurityOrigins, not whether
- // one origin can access another. It is used for hash table keys.
- // For access checks, use canAccess().
- // FIXME: If this method is really only useful for hash table keys, it
- // should be refactored into SecurityOriginHash.
- bool equal(const SecurityOrigin*) const;
-
- // This method checks for equality, ignoring the value of document.domain
- // (and whether it was set) but considering the host. It is used for postMessage.
- bool isSameSchemeHostPort(const SecurityOrigin*) const;
-
- private:
- explicit SecurityOrigin(const KURL&);
- explicit SecurityOrigin(const SecurityOrigin*);
-
- String m_protocol;
- String m_host;
- String m_domain;
- unsigned short m_port;
- bool m_noAccess;
- bool m_domainWasSetInDOM;
- bool m_canLoadLocalResources;
- };
-
-} // namespace WebCore
-
-#endif // SecurityOrigin_h