1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/* 2dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) 2010 Google Inc. All rights reserved. 3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without 5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions are 6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * met: 7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions of source code must retain the above copyright 9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer. 10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions in binary form must reproduce the above 11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * copyright notice, this list of conditions and the following disclaimer 12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * in the documentation and/or other materials provided with the 13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * distribution. 14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Neither the name of Google Inc. nor the names of its 15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * contributors may be used to endorse or promote products derived from 16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * this software without specific prior written permission. 17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */ 30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef WebSecurityOrigin_h 32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#define WebSecurityOrigin_h 33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebCommon.h" 35643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 36643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if WEBKIT_IMPLEMENTATION 37643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebCore { class SecurityOrigin; } 38643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WTF { template <typename T> class PassRefPtr; } 39643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 40643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 41643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit { 42643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 43643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebSecurityOriginPrivate; 44643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebString; 45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass WebURL; 46643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 47643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebSecurityOrigin { 48643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockpublic: 49643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ~WebSecurityOrigin() { reset(); } 50643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 51643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebSecurityOrigin() : m_private(0) { } 52643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebSecurityOrigin(const WebSecurityOrigin& s) : m_private(0) { assign(s); } 53643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebSecurityOrigin& operator=(const WebSecurityOrigin& s) 54643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 55643ca7872b450ea4efacab6188849e5aac2ba161Steve Block assign(s); 56643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return *this; 57643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 58643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WEBKIT_API static WebSecurityOrigin createFromDatabaseIdentifier(const WebString& databaseIdentifier); 605e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block WEBKIT_API static WebSecurityOrigin createFromString(const WebString&); 61dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WEBKIT_API static WebSecurityOrigin create(const WebURL&); 62d0825bca7fe65beaee391d30da42e937db621564Steve Block 63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void reset(); 64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void assign(const WebSecurityOrigin&); 65643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bool isNull() const { return !m_private; } 67643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API WebString protocol() const; 69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API WebString host() const; 70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API unsigned short port() const; 71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // The empty WebSecurityOrigin is the least privileged WebSecurityOrigin. 73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API bool isEmpty() const; 74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Returns true if this WebSecurityOrigin can script objects in the given 76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // SecurityOrigin. For example, call this function before allowing 77dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // script from one security origin to read or write objects from 78dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // another SecurityOrigin. 79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WEBKIT_API bool canAccess(const WebSecurityOrigin&) const; 80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 81dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Returns true if this WebSecurityOrigin can read content retrieved from 82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // the given URL. For example, call this function before allowing script 83dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // from a given security origin to receive contents from a given URL. 84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WEBKIT_API bool canRequest(const WebURL&) const; 85dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 86643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Returns a string representation of the WebSecurityOrigin. The empty 87643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // WebSecurityOrigin is represented by "null". The representation of a 88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // non-empty WebSecurityOrigin resembles a standard URL. 89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API WebString toString() const; 90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 91643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Returns a string representation of this WebSecurityOrigin that can 92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // be used as a file. Should be used in storage APIs only. 93e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block WEBKIT_API WebString databaseIdentifier() const; 94e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 95e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block // Returns true if this WebSecurityOrigin can access usernames and 96e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block // passwords stored in password manager. 97e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block WEBKIT_API bool canAccessPasswordManager() const; 98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if WEBKIT_IMPLEMENTATION 100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebSecurityOrigin(const WTF::PassRefPtr<WebCore::SecurityOrigin>&); 101643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebSecurityOrigin& operator=(const WTF::PassRefPtr<WebCore::SecurityOrigin>&); 102643ca7872b450ea4efacab6188849e5aac2ba161Steve Block operator WTF::PassRefPtr<WebCore::SecurityOrigin>() const; 103e14391e94c850b8bd03680c23b38978db68687a8John Reck WebCore::SecurityOrigin* get() const; 104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 105643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 106643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockprivate: 107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void assign(WebSecurityOriginPrivate*); 108643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebSecurityOriginPrivate* m_private; 109643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}; 110643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 111643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit 112643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 113643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 114