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