Source/WebKit2: Add verification scripts to WebKit2 project and fix the issues they...
[WebKit-https.git] / Source / WebKit2 / UIProcess / WebPageGroup.cpp
1 /*
2  * Copyright (C) 2010 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. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27 #include "WebPageGroup.h"
28
29 #include "WebPageProxy.h"
30 #include "WebPreferences.h"
31 #include <wtf/HashMap.h>
32 #include <wtf/text/StringConcatenate.h>
33
34 namespace WebKit {
35
36 static uint64_t generatePageGroupID()
37 {
38     static uint64_t uniquePageGroupID = 1;
39     return uniquePageGroupID++;
40 }
41
42 typedef HashMap<uint64_t, WebPageGroup*> WebPageGroupMap;
43
44 static WebPageGroupMap& webPageGroupMap()
45 {
46     DEFINE_STATIC_LOCAL(WebPageGroupMap, map, ());
47     return map;
48 }
49
50 PassRefPtr<WebPageGroup> WebPageGroup::create(const String& identifier, bool visibleToInjectedBundle)
51 {
52     RefPtr<WebPageGroup> pageGroup = adoptRef(new WebPageGroup(identifier, visibleToInjectedBundle));
53
54     webPageGroupMap().set(pageGroup->pageGroupID(), pageGroup.get());
55
56     return pageGroup.release();
57 }
58
59 WebPageGroup* WebPageGroup::get(uint64_t pageGroupID)
60 {
61     return webPageGroupMap().get(pageGroupID);
62 }
63
64 WebPageGroup::WebPageGroup(const String& identifier, bool visibleToInjectedBundle)
65 {
66     m_data.pageGroupID = generatePageGroupID();
67
68     if (!identifier.isNull()) {
69         m_data.identifer = identifier;
70         m_preferences = WebPreferences::create(identifier);
71     } else {
72         m_data.identifer = m_data.identifer = makeString("__uniquePageGroupID-", String::number(m_data.pageGroupID));
73         m_preferences = WebPreferences::create();
74     }
75     m_preferences->addPageGroup(this);
76
77     m_data.visibleToInjectedBundle = visibleToInjectedBundle;    
78 }
79
80 WebPageGroup::~WebPageGroup()
81 {
82     m_preferences->removePageGroup(this);
83     webPageGroupMap().remove(pageGroupID());
84 }
85
86 void WebPageGroup::addPage(WebPageProxy* page)
87 {
88     m_pages.add(page);
89 }
90
91 void WebPageGroup::removePage(WebPageProxy* page)
92 {
93     m_pages.remove(page);
94 }
95
96 void WebPageGroup::setPreferences(WebPreferences* preferences)
97 {
98     if (preferences == m_preferences)
99         return;
100
101     m_preferences->removePageGroup(this);
102     m_preferences = preferences;
103     m_preferences->addPageGroup(this);
104
105     preferencesDidChange();
106 }
107
108 WebPreferences* WebPageGroup::preferences() const
109 {
110     return m_preferences.get();
111 }
112
113 void WebPageGroup::preferencesDidChange()
114 {
115     for (HashSet<WebPageProxy*>::iterator it = m_pages.begin(), end = m_pages.end(); it != end; ++it) {
116         WebPageProxy* page = *it;
117         page->preferencesDidChange();
118     }
119 }
120
121 } // namespace WebKit