diff options
author | Iain Merrick <husky@google.com> | 2010-08-19 17:55:56 +0100 |
---|---|---|
committer | Iain Merrick <husky@google.com> | 2010-08-23 11:05:40 +0100 |
commit | f486d19d62f1bc33246748b14b14a9dfa617b57f (patch) | |
tree | 195485454c93125455a30e553a73981c3816144d /WebCore/page/SecurityOrigin.cpp | |
parent | 6ba0b43722d16bc295606bec39f396f596e4fef1 (diff) | |
download | external_webkit-f486d19d62f1bc33246748b14b14a9dfa617b57f.zip external_webkit-f486d19d62f1bc33246748b14b14a9dfa617b57f.tar.gz external_webkit-f486d19d62f1bc33246748b14b14a9dfa617b57f.tar.bz2 |
Merge WebKit at r65615 : Initial merge by git.
Change-Id: Ifbf384f4531e3b58475a662e38195c2d9152ae79
Diffstat (limited to 'WebCore/page/SecurityOrigin.cpp')
-rw-r--r-- | WebCore/page/SecurityOrigin.cpp | 86 |
1 files changed, 7 insertions, 79 deletions
diff --git a/WebCore/page/SecurityOrigin.cpp b/WebCore/page/SecurityOrigin.cpp index 87b3ed2..f759402 100644 --- a/WebCore/page/SecurityOrigin.cpp +++ b/WebCore/page/SecurityOrigin.cpp @@ -30,6 +30,7 @@ #include "SecurityOrigin.h" #include "Document.h" +#include "FileSystem.h" #include "KURL.h" #include "OriginAccessEntry.h" #include "SchemeRegistry.h" @@ -367,13 +368,13 @@ 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) + size_t separator1 = databaseIdentifier.find(SeparatorCharacter); + if (separator1 == notFound) return create(KURL()); // Make sure there's a second separator - int separator2 = databaseIdentifier.reverseFind(SeparatorCharacter); - if (separator2 == -1) + size_t separator2 = databaseIdentifier.reverseFind(SeparatorCharacter); + if (separator2 == notFound) return create(KURL()); // Ensure there were at least 2 separator characters. Some hostnames on intranets have @@ -384,7 +385,7 @@ PassRefPtr<SecurityOrigin> SecurityOrigin::createFromDatabaseIdentifier(const St // 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); - bool portAbsent = (separator2 == static_cast<int>(databaseIdentifier.length()) - 1); + bool portAbsent = (separator2 == databaseIdentifier.length() - 1); if (!(portOkay || portAbsent)) return create(KURL()); @@ -399,85 +400,12 @@ PassRefPtr<SecurityOrigin> SecurityOrigin::createFromDatabaseIdentifier(const St return create(KURL(KURL(), protocol + "://" + host + ":" + String::number(port))); } -// The following lower-ASCII characters need escaping to be used in a filename -// across all systems, including Windows: -// - Unprintable ASCII (00-1F) -// - Space (20) -// - Double quote (22) -// - Percent (25) (escaped because it is our escape character) -// - Asterisk (2A) -// - Slash (2F) -// - Colon (3A) -// - Less-than (3C) -// - Greater-than (3E) -// - Question Mark (3F) -// - Backslash (5C) -// - Pipe (7C) -// - Delete (7F) - -static const bool needsEscaping[128] = { - /* 00-07 */ true, true, true, true, true, true, true, true, - /* 08-0F */ true, true, true, true, true, true, true, true, - - /* 10-17 */ true, true, true, true, true, true, true, true, - /* 18-1F */ true, true, true, true, true, true, true, true, - - /* 20-27 */ true, false, true, false, false, true, false, false, - /* 28-2F */ false, false, true, false, false, false, false, true, - - /* 30-37 */ false, false, false, false, false, false, false, false, - /* 38-3F */ false, false, true, false, true, false, true, true, - - /* 40-47 */ false, false, false, false, false, false, false, false, - /* 48-4F */ false, false, false, false, false, false, false, false, - - /* 50-57 */ false, false, false, false, false, false, false, false, - /* 58-5F */ false, false, false, false, true, false, false, false, - - /* 60-67 */ false, false, false, false, false, false, false, false, - /* 68-6F */ false, false, false, false, false, false, false, false, - - /* 70-77 */ false, false, false, false, false, false, false, false, - /* 78-7F */ false, false, false, false, true, false, false, true, -}; - -static inline bool shouldEscapeUChar(UChar c) -{ - return c > 127 ? false : needsEscaping[c]; -} - -static const char hexDigits[17] = "0123456789ABCDEF"; - -static String encodedHost(const String& host) -{ - unsigned length = host.length(); - Vector<UChar, 512> buffer(length * 3 + 1); - UChar* p = buffer.data(); - - const UChar* str = host.characters(); - const UChar* strEnd = str + length; - - while (str < strEnd) { - UChar c = *str++; - if (shouldEscapeUChar(c)) { - *p++ = '%'; - *p++ = hexDigits[(c >> 4) & 0xF]; - *p++ = hexDigits[c & 0xF]; - } else - *p++ = c; - } - - ASSERT(p - buffer.data() <= static_cast<int>(buffer.size())); - - return String(buffer.data(), p - buffer.data()); -} - String SecurityOrigin::databaseIdentifier() const { String separatorString(&SeparatorCharacter, 1); if (m_encodedHost.isEmpty()) - m_encodedHost = encodedHost(m_host); + m_encodedHost = encodeForFileName(m_host); return m_protocol + separatorString + m_encodedHost + separatorString + String::number(m_port); } |