diff options
| author | Konstantin Tokarev <annulen@yandex.ru> | 2016-08-25 19:20:41 +0300 |
|---|---|---|
| committer | Konstantin Tokarev <annulen@yandex.ru> | 2017-02-02 12:30:55 +0000 |
| commit | 6882a04fb36642862b11efe514251d32070c3d65 (patch) | |
| tree | b7959826000b061fd5ccc7512035c7478742f7b0 /Source/WebKit2/UIProcess/WebPreferences.cpp | |
| parent | ab6df191029eeeb0b0f16f127d553265659f739e (diff) | |
Imported QtWebKit TP3 (git b57bc6801f1876c3220d5a4bfea33d620d477443)
Change-Id: I3b1d8a2808782c9f34d50240000e20cb38d3680f
Reviewed-by: Konstantin Tokarev <annulen@yandex.ru>
Diffstat (limited to 'Source/WebKit2/UIProcess/WebPreferences.cpp')
| -rw-r--r-- | Source/WebKit2/UIProcess/WebPreferences.cpp | 109 |
1 files changed, 74 insertions, 35 deletions
diff --git a/Source/WebKit2/UIProcess/WebPreferences.cpp b/Source/WebKit2/UIProcess/WebPreferences.cpp index 4768f28bf..e1c390ec8 100644 --- a/Source/WebKit2/UIProcess/WebPreferences.cpp +++ b/Source/WebKit2/UIProcess/WebPreferences.cpp @@ -26,67 +26,89 @@ #include "config.h" #include "WebPreferences.h" -#include "WebContext.h" #include "WebPageGroup.h" +#include "WebPreferencesKeys.h" +#include "WebProcessPool.h" #include <wtf/ThreadingPrimitives.h> namespace WebKit { // FIXME: Manipulating this variable is not thread safe. // Instead of tracking private browsing state as a boolean preference, we should let the client provide storage sessions explicitly. -static unsigned privateBrowsingPageGroupCount; +static unsigned privateBrowsingPageCount; -WebPreferences::WebPreferences() +Ref<WebPreferences> WebPreferences::create(const String& identifier, const String& keyPrefix, const String& globalDebugKeyPrefix) { - platformInitializeStore(); + return adoptRef(*new WebPreferences(identifier, keyPrefix, globalDebugKeyPrefix)); } -WebPreferences::WebPreferences(const String& identifier) +PassRefPtr<WebPreferences> WebPreferences::createWithLegacyDefaults(const String& identifier, const String& keyPrefix, const String& globalDebugKeyPrefix) +{ + RefPtr<WebPreferences> preferences = adoptRef(new WebPreferences(identifier, keyPrefix, globalDebugKeyPrefix)); + // FIXME: The registerDefault...ValueForKey machinery is unnecessarily heavyweight and complicated. + // We can just compute different defaults for modern and legacy APIs in WebPreferencesDefinitions.h macros. + preferences->registerDefaultBoolValueForKey(WebPreferencesKey::javaEnabledKey(), true); + preferences->registerDefaultBoolValueForKey(WebPreferencesKey::javaEnabledForLocalFilesKey(), true); + preferences->registerDefaultBoolValueForKey(WebPreferencesKey::pluginsEnabledKey(), true); + preferences->registerDefaultUInt32ValueForKey(WebPreferencesKey::storageBlockingPolicyKey(), WebCore::SecurityOrigin::AllowAllStorage); + return preferences.release(); +} + +WebPreferences::WebPreferences(const String& identifier, const String& keyPrefix, const String& globalDebugKeyPrefix) : m_identifier(identifier) + , m_keyPrefix(keyPrefix) + , m_globalDebugKeyPrefix(globalDebugKeyPrefix) { platformInitializeStore(); } WebPreferences::WebPreferences(const WebPreferences& other) - : m_store(other.m_store) + : m_keyPrefix(other.m_keyPrefix) + , m_globalDebugKeyPrefix(other.m_globalDebugKeyPrefix) + , m_store(other.m_store) { platformInitializeStore(); } WebPreferences::~WebPreferences() { - ASSERT(m_pageGroups.isEmpty()); + ASSERT(m_pages.isEmpty()); } -void WebPreferences::addPageGroup(WebPageGroup* pageGroup) +PassRefPtr<WebPreferences> WebPreferences::copy() const { - bool didAddPageGroup = m_pageGroups.add(pageGroup).isNewEntry; - if (didAddPageGroup && privateBrowsingEnabled()) { - if (!privateBrowsingPageGroupCount) - WebContext::willStartUsingPrivateBrowsing(); - ++privateBrowsingPageGroupCount; - } + return adoptRef(new WebPreferences(*this)); } -void WebPreferences::removePageGroup(WebPageGroup* pageGroup) +void WebPreferences::addPage(WebPageProxy& webPageProxy) { - HashSet<WebPageGroup*>::iterator iter = m_pageGroups.find(pageGroup); - if (iter == m_pageGroups.end()) - return; + ASSERT(!m_pages.contains(&webPageProxy)); + m_pages.add(&webPageProxy); + + if (privateBrowsingEnabled()) { + if (!privateBrowsingPageCount) + WebProcessPool::willStartUsingPrivateBrowsing(); + + ++privateBrowsingPageCount; + } +} - m_pageGroups.remove(iter); +void WebPreferences::removePage(WebPageProxy& webPageProxy) +{ + ASSERT(m_pages.contains(&webPageProxy)); + m_pages.remove(&webPageProxy); if (privateBrowsingEnabled()) { - --privateBrowsingPageGroupCount; - if (!privateBrowsingPageGroupCount) - WebContext::willStopUsingPrivateBrowsing(); + --privateBrowsingPageCount; + if (!privateBrowsingPageCount) + WebProcessPool::willStopUsingPrivateBrowsing(); } } void WebPreferences::update() { - for (HashSet<WebPageGroup*>::iterator it = m_pageGroups.begin(), end = m_pageGroups.end(); it != end; ++it) - (*it)->preferencesDidChange(); + for (auto& webPageProxy : m_pages) + webPageProxy->preferencesDidChange(); } void WebPreferences::updateStringValueForKey(const String& key, const String& value) @@ -128,23 +150,23 @@ void WebPreferences::updatePrivateBrowsingValue(bool value) { platformUpdateBoolValueForKey(WebPreferencesKey::privateBrowsingEnabledKey(), value); - unsigned pageGroupsChanged = m_pageGroups.size(); - if (!pageGroupsChanged) + unsigned pagesChanged = m_pages.size(); + if (!pagesChanged) return; if (value) { - if (!privateBrowsingPageGroupCount) - WebContext::willStartUsingPrivateBrowsing(); - privateBrowsingPageGroupCount += pageGroupsChanged; + if (!privateBrowsingPageCount) + WebProcessPool::willStartUsingPrivateBrowsing(); + privateBrowsingPageCount += pagesChanged; } update(); // FIXME: Only send over the changed key and value. if (!value) { - ASSERT(privateBrowsingPageGroupCount >= pageGroupsChanged); - privateBrowsingPageGroupCount -= pageGroupsChanged; - if (!privateBrowsingPageGroupCount) - WebContext::willStopUsingPrivateBrowsing(); + ASSERT(privateBrowsingPageCount >= pagesChanged); + privateBrowsingPageCount -= pagesChanged; + if (!privateBrowsingPageCount) + WebProcessPool::willStopUsingPrivateBrowsing(); } } @@ -163,12 +185,29 @@ void WebPreferences::updatePrivateBrowsingValue(bool value) } \ FOR_EACH_WEBKIT_PREFERENCE(DEFINE_PREFERENCE_GETTER_AND_SETTERS) +FOR_EACH_WEBKIT_DEBUG_PREFERENCE(DEFINE_PREFERENCE_GETTER_AND_SETTERS) #undef DEFINE_PREFERENCE_GETTER_AND_SETTERS -bool WebPreferences::anyPageGroupsAreUsingPrivateBrowsing() +bool WebPreferences::anyPagesAreUsingPrivateBrowsing() +{ + return privateBrowsingPageCount; +} + +void WebPreferences::registerDefaultBoolValueForKey(const String& key, bool value) +{ + m_store.setOverrideDefaultsBoolValueForKey(key, value); + bool userValue; + if (platformGetBoolUserValueForKey(key, userValue)) + m_store.setBoolValueForKey(key, userValue); +} + +void WebPreferences::registerDefaultUInt32ValueForKey(const String& key, uint32_t value) { - return privateBrowsingPageGroupCount; + m_store.setOverrideDefaultsUInt32ValueForKey(key, value); + uint32_t userValue; + if (platformGetUInt32UserValueForKey(key, userValue)) + m_store.setUInt32ValueForKey(key, userValue); } } // namespace WebKit |
