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