Index: WebKit/chromium/src/StorageAreaProxy.cpp |
=================================================================== |
--- WebKit/chromium/src/StorageAreaProxy.cpp (revision 119965) |
+++ WebKit/chromium/src/StorageAreaProxy.cpp (working copy) |
@@ -53,6 +53,8 @@ |
StorageAreaProxy::StorageAreaProxy(WebKit::WebStorageArea* storageArea, StorageType storageType) |
: m_storageArea(adoptPtr(storageArea)) |
, m_storageType(storageType) |
+ , m_cachedCanAccessSetting(false) |
+ , m_cachedCanAccessSettingForFrame(0) |
{ |
} |
@@ -108,16 +110,23 @@ |
bool StorageAreaProxy::contains(const String& key, Frame* frame) const |
{ |
- return !getItem(key, frame).isNull(); |
+ if (!canAccessStorage(frame)) |
+ return false; |
+ return m_storageArea->containsItem(key); |
} |
bool StorageAreaProxy::canAccessStorage(Frame* frame) const |
{ |
if (!frame->page()) |
return false; |
+ if (m_cachedCanAccessSettingForFrame == reinterpret_cast<void*>(frame)) |
+ return m_cachedCanAccessSetting; |
+ |
WebKit::WebFrameImpl* webFrame = WebKit::WebFrameImpl::fromFrame(frame); |
WebKit::WebViewImpl* webView = webFrame->viewImpl(); |
- return !webView->permissionClient() || webView->permissionClient()->allowStorage(webFrame, m_storageType == LocalStorage); |
+ m_cachedCanAccessSetting = !webView->permissionClient() || webView->permissionClient()->allowStorage(webFrame, m_storageType == LocalStorage); |
+ m_cachedCanAccessSettingForFrame = reinterpret_cast<void*>(frame); |
+ return m_cachedCanAccessSetting; |
} |
void StorageAreaProxy::dispatchLocalStorageEvent(PageGroup* pageGroup, const String& key, const String& oldValue, const String& newValue, |