• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "StringHash.h"
33 
34 namespace WebCore {
35 
36     class KURL;
37     class Page;
38     class StorageNamespace;
39 
40     class PageGroup : public Noncopyable {
41     public:
42         PageGroup(const String& name);
43         PageGroup(Page*);
44 
45         static PageGroup* pageGroup(const String& groupName);
46         static void closeLocalStorage();
47 
pages()48         const HashSet<Page*>& pages() const { return m_pages; }
49 
50         void addPage(Page*);
51         void removePage(Page*);
52 
53         bool isLinkVisited(LinkHash);
54 
55         void addVisitedLink(const KURL&);
56         void addVisitedLink(const UChar*, size_t);
57         void removeVisitedLinks();
58 
59         static void setShouldTrackVisitedLinks(bool);
60         static void removeAllVisitedLinks();
61 
name()62         const String& name() { return m_name; }
identifier()63         unsigned identifier() { return m_identifier; }
64 
65 #if ENABLE(DOM_STORAGE)
66         StorageNamespace* localStorage();
67 #endif
68 
69     private:
70         void addVisitedLink(LinkHash stringHash);
71 #if ENABLE(DOM_STORAGE)
hasLocalStorage()72         bool hasLocalStorage() { return m_localStorage; }
73 #endif
74         String m_name;
75 
76         HashSet<Page*> m_pages;
77 
78         HashSet<LinkHash, LinkHashHash> m_visitedLinkHashes;
79         bool m_visitedLinksPopulated;
80 
81         unsigned m_identifier;
82 #if ENABLE(DOM_STORAGE)
83         RefPtr<StorageNamespace> m_localStorage;
84 #endif
85     };
86 
87 } // namespace WebCore
88 
89 #endif // PageGroup_h
90