7d2ddfaf162add2ddfd877b593bb5871f055c0b3
[WebKit-https.git] / Source / WebCore / page / PageGroup.h
1 /*
2  * Copyright (C) 2008 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef PageGroup_h
27 #define PageGroup_h
28
29 #include <wtf/HashSet.h>
30 #include <wtf/Noncopyable.h>
31 #include "LinkHash.h"
32 #include "Supplementable.h"
33 #include "UserScript.h"
34 #include "UserStyleSheet.h"
35 #include <wtf/text/StringHash.h>
36
37 namespace WebCore {
38
39     class KURL;
40     class GroupSettings;
41     class IDBFactoryBackendInterface;
42     class Page;
43     class SecurityOrigin;
44     class StorageNamespace;
45
46     class PageGroup : public Supplementable<PageGroup> {
47         WTF_MAKE_NONCOPYABLE(PageGroup); WTF_MAKE_FAST_ALLOCATED;
48     public:
49         explicit PageGroup(const String& name);
50         ~PageGroup();
51
52         static PassOwnPtr<PageGroup> create(Page*);
53         static PageGroup* pageGroup(const String& groupName);
54
55         static void closeLocalStorage();
56
57         static void clearLocalStorageForAllOrigins();
58         static void clearLocalStorageForOrigin(SecurityOrigin*);
59         // DumpRenderTree helper that triggers a StorageArea sync.
60         static void syncLocalStorage();
61
62         static unsigned numberOfPageGroups();
63
64         const HashSet<Page*>& pages() const { return m_pages; }
65
66         void addPage(Page*);
67         void removePage(Page*);
68
69         bool isLinkVisited(LinkHash);
70
71         void addVisitedLink(const KURL&);
72         void addVisitedLink(const UChar*, size_t);
73         void addVisitedLinkHash(LinkHash);
74         void removeVisitedLinks();
75
76         static void setShouldTrackVisitedLinks(bool);
77         static void removeAllVisitedLinks();
78
79         const String& name() { return m_name; }
80         unsigned identifier() { return m_identifier; }
81
82         StorageNamespace* localStorage();
83         bool hasLocalStorage() { return m_localStorage; }
84
85         void addUserScriptToWorld(DOMWrapperWorld*, const String& source, const KURL&,
86                                   const Vector<String>& whitelist, const Vector<String>& blacklist,
87                                   UserScriptInjectionTime, UserContentInjectedFrames);
88         void addUserStyleSheetToWorld(DOMWrapperWorld*, const String& source, const KURL&,
89                                       const Vector<String>& whitelist, const Vector<String>& blacklist,
90                                       UserContentInjectedFrames,
91                                       UserStyleLevel level = UserStyleUserLevel,
92                                       UserStyleInjectionTime injectionTime = InjectInExistingDocuments);
93         void removeUserScriptFromWorld(DOMWrapperWorld*, const KURL&);
94         void removeUserStyleSheetFromWorld(DOMWrapperWorld*, const KURL&);
95
96         void removeUserScriptsFromWorld(DOMWrapperWorld*);
97         void removeUserStyleSheetsFromWorld(DOMWrapperWorld*);
98
99         void removeAllUserContent();
100
101         const UserScriptMap* userScripts() const { return m_userScripts.get(); }
102         const UserStyleSheetMap* userStyleSheets() const { return m_userStyleSheets.get(); }
103
104         GroupSettings* groupSettings() const { return m_groupSettings.get(); }
105
106     private:
107         PageGroup(Page*);
108
109         void addVisitedLink(LinkHash stringHash);
110         void resetUserStyleCacheInAllFrames();
111   
112         String m_name;
113
114         HashSet<Page*> m_pages;
115
116         HashSet<LinkHash, LinkHashHash> m_visitedLinkHashes;
117         bool m_visitedLinksPopulated;
118
119         unsigned m_identifier;
120         RefPtr<StorageNamespace> m_localStorage;
121
122         OwnPtr<UserScriptMap> m_userScripts;
123         OwnPtr<UserStyleSheetMap> m_userStyleSheets;
124
125         OwnPtr<GroupSettings> m_groupSettings;
126     };
127
128 } // namespace WebCore
129     
130 #endif // PageGroup_h