diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index 9b8f372ee353532f1fb7a7f3a65c31f3338bddec..b6f6e2a2593d5301d60891df3f0bbcc5e3988a44 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -1,3 +1,32 @@ +2013-04-17 Anders Carlsson + + Change storage factory functions to take a PageGroup and Page respectively + https://bugs.webkit.org/show_bug.cgi?id=114776 + + Reviewed by Beth Dakin. + + Change StorageNamespace::localStorageNamespace to take a PageGroup since WebKit2 needs + to know which local storage namespace belongs to which page group. Also remove the quota parameter from + the sessionStorageNamespace function since that's trivial to get from the Page. + + * WebCore.exp.in: + * page/Page.cpp: + (WebCore::Page::sessionStorage): + * page/PageGroup.cpp: + (WebCore::PageGroup::localStorage): + * storage/StorageNamespace.cpp: + (WebCore::StorageNamespace::localStorageNamespace): + (WebCore::StorageNamespace::sessionStorageNamespace): + * storage/StorageNamespace.h: + * storage/StorageNamespaceImpl.cpp: + (WebCore::StorageNamespaceImpl::localStorageNamespace): + (WebCore::StorageNamespaceImpl::sessionStorageNamespace): + * storage/StorageNamespaceImpl.h: + * storage/StorageStrategy.cpp: + (WebCore::StorageStrategy::localStorageNamespace): + (WebCore::StorageStrategy::sessionStorageNamespace): + * storage/StorageStrategy.h: + 2013-04-18 Martin Robinson [GTK] fast/canvas/DrawImageSinglePixelStretch.html fails diff --git a/Source/WebCore/WebCore.exp.in b/Source/WebCore/WebCore.exp.in index f4c7500b8ee1513a6e234cab3b4eec0cfa7cf498..b07416b17d843da233f7f6cd745db6ad4612d6e7 100644 --- a/Source/WebCore/WebCore.exp.in +++ b/Source/WebCore/WebCore.exp.in @@ -472,8 +472,8 @@ __ZN7WebCore15ResourceRequest21httpPipeliningEnabledEv __ZN7WebCore15ResourceRequest24setHTTPPipeliningEnabledEb __ZN7WebCore15ScrollAlignment17alignCenterAlwaysE __ZN7WebCore15ScrollAlignment19alignToEdgeIfNeededE -__ZN7WebCore15StorageStrategy21localStorageNamespaceERKN3WTF6StringEj -__ZN7WebCore15StorageStrategy23sessionStorageNamespaceEPNS_4PageEj +__ZN7WebCore15StorageStrategy21localStorageNamespaceEPNS_9PageGroupE +__ZN7WebCore15StorageStrategy23sessionStorageNamespaceEPNS_4PageE __ZN7WebCore15StringTruncator13rightTruncateERKN3WTF6StringEfRKNS_4FontENS0_24EnableRoundingHacksOrNotE __ZN7WebCore15StringTruncator14centerTruncateERKN3WTF6StringEfRKNS_4FontENS0_24EnableRoundingHacksOrNotE __ZN7WebCore15StringTruncator5widthERKN3WTF6StringERKNS_4FontENS0_24EnableRoundingHacksOrNotE diff --git a/Source/WebCore/page/Page.cpp b/Source/WebCore/page/Page.cpp index 07e729b9ca3fbbd255dd63de5f710fb61ef67a45..97a8124f5d8e371aff4de182fd1826001eceaa0e 100644 --- a/Source/WebCore/page/Page.cpp +++ b/Source/WebCore/page/Page.cpp @@ -1087,7 +1087,7 @@ void Page::setDebugger(JSC::Debugger* debugger) StorageNamespace* Page::sessionStorage(bool optionalCreate) { if (!m_sessionStorage && optionalCreate) - m_sessionStorage = StorageNamespace::sessionStorageNamespace(this, m_settings->sessionStorageQuota()); + m_sessionStorage = StorageNamespace::sessionStorageNamespace(this); return m_sessionStorage.get(); } diff --git a/Source/WebCore/page/PageGroup.cpp b/Source/WebCore/page/PageGroup.cpp index e6ebeca86c0eeebdb6b507e81843ef6d31cb22b4..11d4f36eb3c5520c0b6056e4f8f6b0448273213c 100644 --- a/Source/WebCore/page/PageGroup.cpp +++ b/Source/WebCore/page/PageGroup.cpp @@ -257,16 +257,8 @@ void PageGroup::setShouldTrackVisitedLinks(bool shouldTrack) StorageNamespace* PageGroup::localStorage() { - if (!m_localStorage) { - // Need a page in this page group to query the settings for the local storage database path. - // Having these parameters attached to the page settings is unfortunate since these settings are - // not per-page (and, in fact, we simply grab the settings from some page at random), but - // at this point we're stuck with it. - Page* page = *m_pages.begin(); - const String& path = page->settings()->localStorageDatabasePath(); - unsigned quota = m_groupSettings->localStorageQuotaBytes(); - m_localStorage = StorageNamespace::localStorageNamespace(path, quota); - } + if (!m_localStorage) + m_localStorage = StorageNamespace::localStorageNamespace(this); return m_localStorage.get(); } diff --git a/Source/WebCore/storage/StorageNamespace.cpp b/Source/WebCore/storage/StorageNamespace.cpp index cb2fc2c4c77da8ba890adc29c864a9e3d60d6f9b..c1cf3fca7acfc37b25142bfa1903eef4f302af3c 100644 --- a/Source/WebCore/storage/StorageNamespace.cpp +++ b/Source/WebCore/storage/StorageNamespace.cpp @@ -35,22 +35,22 @@ namespace WebCore { -PassRefPtr StorageNamespace::localStorageNamespace(const String& path, unsigned quota) +PassRefPtr StorageNamespace::localStorageNamespace(PageGroup* pageGroup) { #if USE(PLATFORM_STRATEGIES) - return platformStrategies()->storageStrategy()->localStorageNamespace(path, quota); + return platformStrategies()->storageStrategy()->localStorageNamespace(pageGroup); #else - return StorageNamespaceImpl::localStorageNamespace(path, quota); + return StorageNamespaceImpl::localStorageNamespace(pageGroup); #endif } -PassRefPtr StorageNamespace::sessionStorageNamespace(Page* page, unsigned quota) +PassRefPtr StorageNamespace::sessionStorageNamespace(Page* page) { #if USE(PLATFORM_STRATEGIES) - return platformStrategies()->storageStrategy()->sessionStorageNamespace(page, quota); + return platformStrategies()->storageStrategy()->sessionStorageNamespace(page); #else UNUSED_PARAM(page); - return StorageNamespaceImpl::sessionStorageNamespace(quota); + return StorageNamespaceImpl::sessionStorageNamespace(page); #endif } diff --git a/Source/WebCore/storage/StorageNamespace.h b/Source/WebCore/storage/StorageNamespace.h index 39dbde041096dbd0ea48caef3e6e9bad32d045f4..789a5fa163420bd7cc807c91587912fe209b94d3 100644 --- a/Source/WebCore/storage/StorageNamespace.h +++ b/Source/WebCore/storage/StorageNamespace.h @@ -33,13 +33,14 @@ namespace WebCore { class Page; +class PageGroup; class SecurityOrigin; class StorageArea; class StorageNamespace : public RefCounted { public: - static PassRefPtr localStorageNamespace(const String& path, unsigned quota); - static PassRefPtr sessionStorageNamespace(Page*, unsigned quota); + static PassRefPtr localStorageNamespace(PageGroup*); + static PassRefPtr sessionStorageNamespace(Page*); virtual ~StorageNamespace() { } virtual PassRefPtr storageArea(PassRefPtr) = 0; diff --git a/Source/WebCore/storage/StorageNamespaceImpl.cpp b/Source/WebCore/storage/StorageNamespaceImpl.cpp index c66016f816c6c314e0ba83658d9656e97013dec4..2775b5ff7ae8195a26dfed32097270df4f6ac00d 100644 --- a/Source/WebCore/storage/StorageNamespaceImpl.cpp +++ b/Source/WebCore/storage/StorageNamespaceImpl.cpp @@ -26,7 +26,11 @@ #include "config.h" #include "StorageNamespaceImpl.h" +#include "GroupSettings.h" +#include "Page.h" +#include "PageGroup.h" #include "SecurityOriginHash.h" +#include "Settings.h" #include "StorageAreaImpl.h" #include "StorageMap.h" #include "StorageSyncManager.h" @@ -45,22 +49,30 @@ static LocalStorageNamespaceMap& localStorageNamespaceMap() return localStorageNamespaceMap; } -PassRefPtr StorageNamespaceImpl::localStorageNamespace(const String& path, unsigned quota) +PassRefPtr StorageNamespaceImpl::localStorageNamespace(PageGroup* pageGroup) { + // Need a page in this page group to query the settings for the local storage database path. + // Having these parameters attached to the page settings is unfortunate since these settings are + // not per-page (and, in fact, we simply grab the settings from some page at random), but + // at this point we're stuck with it. + Page* page = *pageGroup->pages().begin(); + const String& path = page->settings()->localStorageDatabasePath(); + unsigned quota = pageGroup->groupSettings()->localStorageQuotaBytes(); const String lookupPath = path.isNull() ? emptyString() : path; - LocalStorageNamespaceMap::iterator it = localStorageNamespaceMap().find(lookupPath); - if (it == localStorageNamespaceMap().end()) { - RefPtr storageNamespace = adoptRef(new StorageNamespaceImpl(LocalStorage, lookupPath, quota)); - localStorageNamespaceMap().set(lookupPath, storageNamespace.get()); - return storageNamespace.release(); - } - return it->value; + LocalStorageNamespaceMap::AddResult result = localStorageNamespaceMap().add(lookupPath, 0); + if (!result.isNewEntry) + return result.iterator->value; + + RefPtr storageNamespace = adoptRef(new StorageNamespaceImpl(LocalStorage, lookupPath, quota)); + + result.iterator->value = storageNamespace.get(); + return storageNamespace.release(); } -PassRefPtr StorageNamespaceImpl::sessionStorageNamespace(unsigned quota) +PassRefPtr StorageNamespaceImpl::sessionStorageNamespace(Page* page) { - return adoptRef(new StorageNamespaceImpl(SessionStorage, String(), quota)); + return adoptRef(new StorageNamespaceImpl(SessionStorage, String(), page->settings()->sessionStorageQuota())); } StorageNamespaceImpl::StorageNamespaceImpl(StorageType storageType, const String& path, unsigned quota) diff --git a/Source/WebCore/storage/StorageNamespaceImpl.h b/Source/WebCore/storage/StorageNamespaceImpl.h index 5c044ce50f0aeea9ead468e0e547bf6bab36dca4..5ea45118aaa0579bdb0a94414dcca9a6b7525873 100644 --- a/Source/WebCore/storage/StorageNamespaceImpl.h +++ b/Source/WebCore/storage/StorageNamespaceImpl.h @@ -39,8 +39,8 @@ class StorageAreaImpl; class StorageNamespaceImpl : public StorageNamespace { public: - static PassRefPtr localStorageNamespace(const String& path, unsigned quota); - static PassRefPtr sessionStorageNamespace(unsigned quota); + static PassRefPtr localStorageNamespace(PageGroup*); + static PassRefPtr sessionStorageNamespace(Page*); virtual ~StorageNamespaceImpl(); virtual PassRefPtr storageArea(PassRefPtr) OVERRIDE; diff --git a/Source/WebCore/storage/StorageStrategy.cpp b/Source/WebCore/storage/StorageStrategy.cpp index 82e6492ce6781be66ba42368b5066d9b6b46f4d3..18ceff20ec50bb8531c501a9d1561bcd84979344 100644 --- a/Source/WebCore/storage/StorageStrategy.cpp +++ b/Source/WebCore/storage/StorageStrategy.cpp @@ -32,14 +32,14 @@ namespace WebCore { -PassRefPtr StorageStrategy::localStorageNamespace(const String& path, unsigned quota) +PassRefPtr StorageStrategy::localStorageNamespace(PageGroup* pageGroup) { - return StorageNamespaceImpl::localStorageNamespace(path, quota); + return StorageNamespaceImpl::localStorageNamespace(pageGroup); } -PassRefPtr StorageStrategy::sessionStorageNamespace(Page*, unsigned quota) +PassRefPtr StorageStrategy::sessionStorageNamespace(Page* page) { - return StorageNamespaceImpl::sessionStorageNamespace(quota); + return StorageNamespaceImpl::sessionStorageNamespace(page); } } // namespace WebCore diff --git a/Source/WebCore/storage/StorageStrategy.h b/Source/WebCore/storage/StorageStrategy.h index 41de4294c488b2832d0cb4b0f39196d5cc078ee2..49946b616782838366675b558c9b3eca696806f1 100644 --- a/Source/WebCore/storage/StorageStrategy.h +++ b/Source/WebCore/storage/StorageStrategy.h @@ -33,12 +33,13 @@ namespace WebCore { class Page; +class PageGroup; class StorageNamespace; class StorageStrategy { public: - virtual PassRefPtr localStorageNamespace(const String& path, unsigned quota); - virtual PassRefPtr sessionStorageNamespace(Page*, unsigned quota); + virtual PassRefPtr localStorageNamespace(PageGroup*); + virtual PassRefPtr sessionStorageNamespace(Page*); protected: virtual ~StorageStrategy() diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog index 47fd01c0b98b396d09cbb6e0ab41834b4355705d..f3fc9cd8029ef18cd48cc5f9ea097c663a73d50b 100644 --- a/Source/WebKit2/ChangeLog +++ b/Source/WebKit2/ChangeLog @@ -1,3 +1,18 @@ +2013-04-17 Anders Carlsson + + Change storage factory functions to take a PageGroup and Page respectively + https://bugs.webkit.org/show_bug.cgi?id=114776 + + Reviewed by Beth Dakin. + + Update for WebCore changes. + + * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: + (WebKit::WebPlatformStrategies::localStorageNamespace): + (WebKit::WebPlatformStrategies::sessionStorageNamespace): + * WebProcess/WebCoreSupport/WebPlatformStrategies.h: + (WebPlatformStrategies): + 2013-04-18 Timothy Hatcher Remove an ASSERT that is causing flakeyness in Debug builds. diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp index a0a57e990155825b31b133d58cc16154e00cc94b..2490e51c60686192064b3e72ef853996a853cbbd 100644 --- a/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp +++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp @@ -298,17 +298,17 @@ void WebPlatformStrategies::populatePluginCache() // StorageStrategy -PassRefPtr WebPlatformStrategies::localStorageNamespace(const String& path, unsigned quota) +PassRefPtr WebPlatformStrategies::localStorageNamespace(PageGroup* pageGroup) { - return StorageStrategy::localStorageNamespace(path, quota); + return StorageStrategy::localStorageNamespace(pageGroup); } -PassRefPtr WebPlatformStrategies::sessionStorageNamespace(Page* page, unsigned quota) +PassRefPtr WebPlatformStrategies::sessionStorageNamespace(Page* page) { #if ENABLE(UI_PROCESS_STORAGE) return StorageNamespaceImpl::createSessionStorageNamespace(WebPage::fromCorePage(page)); #else - return StorageStrategy::sessionStorageNamespace(page, quota); + return StorageStrategy::sessionStorageNamespace(page); #endif } diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h b/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h index e353b64da223860e29f2ab49ec11b999e201193b..4d1a92b92c9f54dad55ae902fae5aa5d4b2ef7fe 100644 --- a/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h +++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h @@ -84,8 +84,8 @@ private: virtual void getPluginInfo(const WebCore::Page*, Vector&) OVERRIDE; // WebCore::StorageStrategy. - virtual PassRefPtr localStorageNamespace(const String& path, unsigned quota) OVERRIDE; - virtual PassRefPtr sessionStorageNamespace(WebCore::Page*, unsigned quota) OVERRIDE; + virtual PassRefPtr localStorageNamespace(WebCore::PageGroup*) OVERRIDE; + virtual PassRefPtr sessionStorageNamespace(WebCore::Page*) OVERRIDE; // WebCore::VisitedLinkStrategy virtual bool isLinkVisited(WebCore::Page*, WebCore::LinkHash, const WebCore::KURL& baseURL, const WTF::AtomicString& attributeURL) OVERRIDE;