6284fa8ffc9fb61baf87754d5703eed0d98dc789
[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 #if ENABLE(VIDEO_TRACK)
40     class CaptionPreferencesChangedListener;
41     class CaptionUserPreferences;
42 #endif
43     class KURL;
44     class GroupSettings;
45     class IDBFactoryBackendInterface;
46     class Page;
47     class SecurityOrigin;
48     class StorageNamespace;
49
50     class PageGroup : public Supplementable<PageGroup> {
51         WTF_MAKE_NONCOPYABLE(PageGroup); WTF_MAKE_FAST_ALLOCATED;
52     public:
53         explicit PageGroup(const String& name);
54         ~PageGroup();
55
56         static PassOwnPtr<PageGroup> create(Page*);
57         static PageGroup* pageGroup(const String& groupName);
58
59         static void closeLocalStorage();
60
61         static void clearLocalStorageForAllOrigins();
62         static void clearLocalStorageForOrigin(SecurityOrigin*);
63         // DumpRenderTree helper that triggers a StorageArea sync.
64         static void syncLocalStorage();
65
66         static unsigned numberOfPageGroups();
67
68         const HashSet<Page*>& pages() const { return m_pages; }
69
70         void addPage(Page*);
71         void removePage(Page*);
72
73         bool isLinkVisited(LinkHash);
74
75         void addVisitedLink(const KURL&);
76         void addVisitedLink(const UChar*, size_t);
77         void addVisitedLinkHash(LinkHash);
78         void removeVisitedLinks();
79
80         static void setShouldTrackVisitedLinks(bool);
81         static void removeAllVisitedLinks();
82
83         const String& name() { return m_name; }
84         unsigned identifier() { return m_identifier; }
85
86         StorageNamespace* localStorage();
87         bool hasLocalStorage() { return m_localStorage; }
88
89         void addUserScriptToWorld(DOMWrapperWorld*, const String& source, const KURL&,
90                                   const Vector<String>& whitelist, const Vector<String>& blacklist,
91                                   UserScriptInjectionTime, UserContentInjectedFrames);
92         void addUserStyleSheetToWorld(DOMWrapperWorld*, const String& source, const KURL&,
93                                       const Vector<String>& whitelist, const Vector<String>& blacklist,
94                                       UserContentInjectedFrames,
95                                       UserStyleLevel level = UserStyleUserLevel,
96                                       UserStyleInjectionTime injectionTime = InjectInExistingDocuments);
97         void removeUserScriptFromWorld(DOMWrapperWorld*, const KURL&);
98         void removeUserStyleSheetFromWorld(DOMWrapperWorld*, const KURL&);
99
100         void removeUserScriptsFromWorld(DOMWrapperWorld*);
101         void removeUserStyleSheetsFromWorld(DOMWrapperWorld*);
102
103         void removeAllUserContent();
104
105         const UserScriptMap* userScripts() const { return m_userScripts.get(); }
106         const UserStyleSheetMap* userStyleSheets() const { return m_userStyleSheets.get(); }
107
108         GroupSettings* groupSettings() const { return m_groupSettings.get(); }
109
110 #if ENABLE(VIDEO_TRACK)
111         bool userPrefersCaptions();
112         bool userHasCaptionPreferences();
113         float captionFontSizeScale();
114         void registerForCaptionPreferencesChangedCallbacks(CaptionPreferencesChangedListener*);
115         void unregisterForCaptionPreferencesChangedCallbacks(CaptionPreferencesChangedListener*);
116 #endif
117
118     private:
119         PageGroup(Page*);
120
121         void addVisitedLink(LinkHash stringHash);
122         void invalidatedInjectedStyleSheetCacheInAllFrames();
123   
124 #if ENABLE(VIDEO_TRACK)
125         CaptionUserPreferences* captionPreferences();
126 #endif
127         String m_name;
128
129         HashSet<Page*> m_pages;
130
131         HashSet<LinkHash, LinkHashHash> m_visitedLinkHashes;
132         bool m_visitedLinksPopulated;
133
134         unsigned m_identifier;
135         RefPtr<StorageNamespace> m_localStorage;
136
137         OwnPtr<UserScriptMap> m_userScripts;
138         OwnPtr<UserStyleSheetMap> m_userStyleSheets;
139
140         OwnPtr<GroupSettings> m_groupSettings;
141
142 #if ENABLE(VIDEO_TRACK)
143         OwnPtr<CaptionUserPreferences> m_captionPreferences;
144 #endif
145     };
146
147 } // namespace WebCore
148     
149 #endif // PageGroup_h