18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Apple Inc. All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef PageGroup_h
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define PageGroup_h
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/HashSet.h>
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/Noncopyable.h>
31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "LinkHash.h"
32231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "UserScript.h"
33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "UserStyleSheet.h"
34f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/StringHash.h>
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class KURL;
39f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    class GroupSettings;
40db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    class IDBFactoryBackendInterface;
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class Page;
422bde8e466a4451c7319e3a072d118917957d6554Steve Block    class SecurityOrigin;
430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    class StorageNamespace;
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
45ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    class PageGroup {
46ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        WTF_MAKE_NONCOPYABLE(PageGroup); WTF_MAKE_FAST_ALLOCATED;
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    public:
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PageGroup(const String& name);
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PageGroup(Page*);
50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        ~PageGroup();
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        static PageGroup* pageGroup(const String& groupName);
532bde8e466a4451c7319e3a072d118917957d6554Steve Block
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        static void closeLocalStorage();
552bde8e466a4451c7319e3a072d118917957d6554Steve Block
562bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(DOM_STORAGE)
572bde8e466a4451c7319e3a072d118917957d6554Steve Block        static void clearLocalStorageForAllOrigins();
582bde8e466a4451c7319e3a072d118917957d6554Steve Block        static void clearLocalStorageForOrigin(SecurityOrigin*);
592bde8e466a4451c7319e3a072d118917957d6554Steve Block        // DumpRenderTree helper that triggers a StorageArea sync.
602bde8e466a4451c7319e3a072d118917957d6554Steve Block        static void syncLocalStorage();
612bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
622bde8e466a4451c7319e3a072d118917957d6554Steve Block        static unsigned numberOfPageGroups();
63d19c83b203e72c34b78a731c61d73c77ad99794eSteve Block
641d7cc17ccbeabb654e416c598e2631ff691166caBen Murdoch#if ENABLE(DOM_STORAGE) && defined(ANDROID)
651d7cc17ccbeabb654e416c598e2631ff691166caBen Murdoch        static void clearDomStorage();
661d7cc17ccbeabb654e416c598e2631ff691166caBen Murdoch#endif
671d7cc17ccbeabb654e416c598e2631ff691166caBen Murdoch
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        const HashSet<Page*>& pages() const { return m_pages; }
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void addPage(Page*);
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void removePage(Page*);
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
73635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        bool isLinkVisited(LinkHash);
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void addVisitedLink(const KURL&);
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void addVisitedLink(const UChar*, size_t);
77db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        void addVisitedLinkHash(LinkHash);
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void removeVisitedLinks();
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        static void setShouldTrackVisitedLinks(bool);
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        static void removeAllVisitedLinks();
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        const String& name() { return m_name; }
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        unsigned identifier() { return m_identifier; }
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DOM_STORAGE)
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        StorageNamespace* localStorage();
88231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        bool hasLocalStorage() { return m_localStorage; }
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#if ENABLE(INDEXED_DATABASE)
91db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        IDBFactoryBackendInterface* idbFactory();
92e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        bool hasIDBFactory() { return m_factoryBackend; }
93dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
95e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        void addUserScriptToWorld(DOMWrapperWorld*, const String& source, const KURL&,
96cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                                  PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist,
97e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke                                  UserScriptInjectionTime, UserContentInjectedFrames);
98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        void addUserStyleSheetToWorld(DOMWrapperWorld*, const String& source, const KURL&,
99e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke                                      PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist,
100f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick                                      UserContentInjectedFrames,
101bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen                                      UserStyleLevel level = UserStyleUserLevel,
102bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen                                      UserStyleInjectionTime injectionTime = InjectInExistingDocuments);
103643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        void removeUserScriptFromWorld(DOMWrapperWorld*, const KURL&);
104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        void removeUserStyleSheetFromWorld(DOMWrapperWorld*, const KURL&);
105e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        void removeUserScriptsFromWorld(DOMWrapperWorld*);
107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        void removeUserStyleSheetsFromWorld(DOMWrapperWorld*);
108e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
109231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void removeAllUserContent();
110e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
111cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        const UserScriptMap* userScripts() const { return m_userScripts.get(); }
112cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        const UserStyleSheetMap* userStyleSheets() const { return m_userStyleSheets.get(); }
113cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
114f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick        GroupSettings* groupSettings() const { return m_groupSettings.get(); }
115f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    private:
117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        void addVisitedLink(LinkHash stringHash);
118967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        void resetUserStyleCacheInAllFrames();
1191d7cc17ccbeabb654e416c598e2631ff691166caBen Murdoch
1201d7cc17ccbeabb654e416c598e2631ff691166caBen Murdoch#if ENABLE(DOM_STORAGE) && defined(ANDROID)
1211d7cc17ccbeabb654e416c598e2631ff691166caBen Murdoch        void removeLocalStorage();
1221d7cc17ccbeabb654e416c598e2631ff691166caBen Murdoch#endif
123967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        String m_name;
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        HashSet<Page*> m_pages;
127635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
128635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        HashSet<LinkHash, LinkHashHash> m_visitedLinkHashes;
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_visitedLinksPopulated;
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        unsigned m_identifier;
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DOM_STORAGE)
1330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        RefPtr<StorageNamespace> m_localStorage;
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
135dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(INDEXED_DATABASE)
136db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        RefPtr<IDBFactoryBackendInterface> m_factoryBackend;
137dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
138231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
139231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        OwnPtr<UserScriptMap> m_userScripts;
140231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        OwnPtr<UserStyleSheetMap> m_userStyleSheets;
141f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
142f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick        OwnPtr<GroupSettings> m_groupSettings;
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // PageGroup_h
148