WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
Bug 37717
Provide a way for clients to set session storage quota
https://bugs.webkit.org/show_bug.cgi?id=37717
Summary
Provide a way for clients to set session storage quota
Ada Chan
Reported
2010-04-16 11:39:21 PDT
Right now we have a way to set the quota for local storage but there's no way to specify a quota for session storage. We should provide a way to set that quota for clients who care about limiting session storage size.
Attachments
Patch to allow setting session storage quota
(7.15 KB, patch)
2010-04-16 13:08 PDT
,
Ada Chan
jorlow
: review-
Details
Formatted Diff
Diff
Revised patch with additional comments in Settings.h and ChangeLog.
(7.37 KB, patch)
2010-04-16 17:07 PDT
,
Ada Chan
no flags
Details
Formatted Diff
Diff
Patch with chromium fix
(11.79 KB, patch)
2010-04-17 10:22 PDT
,
Ada Chan
no flags
Details
Formatted Diff
Diff
Patch with chromium fix take 2 - forgot WebKitTools last time.
(14.09 KB, patch)
2010-04-17 11:19 PDT
,
Ada Chan
jorlow
: review+
Details
Formatted Diff
Diff
Show Obsolete
(3)
View All
Add attachment
proposed patch, testcase, etc.
Ada Chan
Comment 1
2010-04-16 13:08:47 PDT
Created
attachment 53554
[details]
Patch to allow setting session storage quota Patch. I have suspicion that this may break chromium. Hopefully the trybot will tell me exactly what to fix.
Jeremy Orlow
Comment 2
2010-04-16 13:35:24 PDT
Comment on
attachment 53554
[details]
Patch to allow setting session storage quota Why should clients be able to set session storage quota? If pages want to use up all the memory, they can. And that memory goes away when the page goes away. Are you scared about session storage being filled up and the user navigating to other origins but not closing the tab/page/window (and thus it stays used)? I guess I could see that being a valid use case for this....but either way, the "why" should probably be explained better in the change log. (The meat of the patch looks good tho.)
Ada Chan
Comment 3
2010-04-16 14:11:32 PDT
Some WebKit devices may want to constrain session storage just like they do for local storage. I'll mention that in the ChangeLog.
Jeremy Orlow
Comment 4
2010-04-16 15:00:09 PDT
The reason why we constrain it for LocalStorage is because the effects last beyond just the browsing session. With SessionStorage, all you have to do to kill any negative effects is close the browser window. This is in line with the rest of the web. My point is that if you're worried about memory consumption, limiting just SessionStorage doesn't do much for you. The only thing that isn't in line with the rest of the web is that navigating to another page doesn't result in everything being cleaned up. My point is that I'm not convinced this feature is actually useful and I'd (at very least) like these nuances to be clear in the ChangeLog. Actually....maybe these should be comments in settings.h or something...
Ada Chan
Comment 5
2010-04-16 17:07:36 PDT
Created
attachment 53583
[details]
Revised patch with additional comments in Settings.h and ChangeLog.
Ada Chan
Comment 6
2010-04-16 17:13:30 PDT
> My point is that I'm not convinced this feature is actually useful and I'd (at > very least) like these nuances to be clear in the ChangeLog. Actually....maybe > these should be comments in settings.h or something...
I've added comments to Settings.h and ChangeLog. Your comment is probably valid for the desktop environment. However, a way to set a quota on session storage would be useful for devices that are more constrained in resources and therefore more concerned with memory consumption.
Jeremy Orlow
Comment 7
2010-04-16 17:14:12 PDT
Comment on
attachment 53583
[details]
Revised patch with additional comments in Settings.h and ChangeLog. I don't think your comments adequately explain the situation. This helps one element of memory consumption. And the only reason why it's interesting is that the memory used stays until the Page dies. If that weren't true, I'd r- and mark the bug invalid. LocalStorage and SessionStorage are often grouped together in peoples mind. So I want to make sure that if someone's using LocalStorage quota they don't automatically think using SessionStorage quota is important to them.
Jeremy Orlow
Comment 8
2010-04-16 17:18:27 PDT
Comment on
attachment 53583
[details]
Revised patch with additional comments in Settings.h and ChangeLog. r=me but i still think you can improve the comment a bit (per my other comment)
Ada Chan
Comment 9
2010-04-16 17:21:43 PDT
(In reply to
comment #8
)
> (From update of
attachment 53583
[details]
) > r=me > > but i still think you can improve the comment a bit (per my other comment)
I've changed comment in Settings.h to be: // Allow clients concerned with memory consumption to set a quota on session storage // since the memory used won't be released until the Page is destroyed.
Jeremy Orlow
Comment 10
2010-04-16 17:24:04 PDT
(In reply to
comment #9
)
> (In reply to
comment #8
) > > (From update of
attachment 53583
[details]
[details]) > > r=me > > > > but i still think you can improve the comment a bit (per my other comment) > > I've changed comment in Settings.h to be: > > // Allow clients concerned with memory consumption to set a quota on > session storage > // since the memory used won't be released until the Page is destroyed.
Perfect.
Ada Chan
Comment 11
2010-04-16 17:36:24 PDT
Thanks Jeremy for the review. I really want to see the chromium trybot try this patch and make sure I don't cause any breakages. Because there's a bug with trybots now not looking at r+ patches, I'll mark it back to ? for now. When the trybot finishes, hopefully someone will r+ the patch again.
Jeremy Orlow
Comment 12
2010-04-16 17:49:28 PDT
If anything
http://trac.webkit.org/browser/trunk/WebKit/chromium/src/StorageNamespaceProxy.cpp
will need some massaging. Probably by explicitly calling the parent constructor.
Jeremy Orlow
Comment 13
2010-04-16 17:50:52 PDT
You can also build locally with |webkit-build --chromium| too, which might be easier than iterating with the bot.
WebKit Review Bot
Comment 14
2010-04-16 18:19:26 PDT
Attachment 53583
[details]
did not build on chromium: Build output:
http://webkit-commit-queue.appspot.com/results/1695208
Ada Chan
Comment 15
2010-04-17 10:22:03 PDT
Created
attachment 53596
[details]
Patch with chromium fix
WebKit Review Bot
Comment 16
2010-04-17 11:10:04 PDT
Attachment 53596
[details]
did not build on chromium: Build output:
http://webkit-commit-queue.appspot.com/results/1614594
Ada Chan
Comment 17
2010-04-17 11:19:27 PDT
Created
attachment 53598
[details]
Patch with chromium fix take 2 - forgot WebKitTools last time.
Jeremy Orlow
Comment 18
2010-04-18 01:41:05 PDT
Comment on
attachment 53598
[details]
Patch with chromium fix take 2 - forgot WebKitTools last time. This will still break Chromium since it consumes the API (even though it completely compiles now). Could you please leave the default constructor and have it call the other one with noQuota? In fact, you could even skip adding the constructor that allows a quota to be passed in since we don't currently have any plans to add it (and let someone working on Chromium change it if we change our minds). Thanks!
Ada Chan
Comment 19
2010-04-18 21:50:44 PDT
> Could you please leave the default constructor and > have it call the other one with noQuota?
I'd like to get clarification on your suggestion. Are you saying instead of changing: PassRefPtr<StorageNamespace> StorageNamespace::sessionStorageNamespace(Page*) to take in a new parameter, I should just make another version that also takes in a quota PassRefPtr<StorageNamespace> StorageNamespace::sessionStorageNamespace(Page*, unsigned quota) and have the original version's implementation just call the new version with noQuota? Then the only chromium change that I need to make is passing noQuota to StorageNamespaceImpl::sessionStorageNamespace here: WebStorageNamespace* WebStorageNamespace::createSessionStorageNamespace() { return new WebStorageNamespaceImpl(WebCore::StorageNamespaceImpl::sessionStorageNamespace(noQuota)); }
Jeremy Orlow
Comment 20
2010-04-18 23:22:27 PDT
(In reply to
comment #19
)
> > Could you please leave the default constructor and > > have it call the other one with noQuota? > > I'd like to get clarification on your suggestion. Are you saying instead of > changing: > > PassRefPtr<StorageNamespace> StorageNamespace::sessionStorageNamespace(Page*) > > to take in a new parameter, I should just make another version that also takes > in a quota > > PassRefPtr<StorageNamespace> StorageNamespace::sessionStorageNamespace(Page*, > unsigned quota) > > and have the original version's implementation just call the new version with > noQuota? Then the only chromium change that I need to make is passing noQuota > to StorageNamespaceImpl::sessionStorageNamespace here: > > WebStorageNamespace* WebStorageNamespace::createSessionStorageNamespace() > { > return new > WebStorageNamespaceImpl(WebCore::StorageNamespaceImpl::sessionStorageNamespace(noQuota)); > }
I think what you've done in WebCore is great and shouldn't be changed. I believe you can simply do this last part (passing in noQuota when creating the session storage StorageNamespaceImpl) and you're done. If that doesn't make sense, it's probably because I'm missing something obvious. If so, I'm happy to take a shot at the Chromium side of this and upload it. Or you're free to land as is and we'll get our own build working again (since it really isn't your problem).
Ada Chan
Comment 21
2010-04-19 07:46:20 PDT
> I think what you've done in WebCore is great and shouldn't be changed. I > believe you can simply do this last part (passing in noQuota when creating the > session storage StorageNamespaceImpl) and you're done.
If I don't change what I have in WebCore, I'll also need to fix: PassRefPtr<StorageNamespace> StorageNamespace::sessionStorageNamespace(Page* page) to take in a quota argument since I've changed the signature of StorageNamespace:;sessionStorageNamespace in WebCore. So the entire change for chromium will look like: --- WebKit/chromium/src/StorageNamespaceProxy.cpp (revision 57799) +++ WebKit/chromium/src/StorageNamespaceProxy.cpp (working copy) @@ -47,7 +47,7 @@ PassRefPtr<StorageNamespace> StorageName return adoptRef(new StorageNamespaceProxy(WebKit::webKitClient()->createLocalStorageNamespace(path, quota), LocalStorage)); } -PassRefPtr<StorageNamespace> StorageNamespace::sessionStorageNamespace(Page* page) +PassRefPtr<StorageNamespace> StorageNamespace::sessionStorageNamespace(Page* page, unsigned quota) { WebKit::ChromeClientImpl* chromeClientImpl = static_cast<WebKit::ChromeClientImpl*>(page->chrome()->client()); WebKit::WebViewClient* webViewClient = chromeClientImpl->webView()->client(); Index: WebKit/chromium/src/WebStorageNamespaceImpl.cpp =================================================================== --- WebKit/chromium/src/WebStorageNamespaceImpl.cpp (revision 57799) +++ WebKit/chromium/src/WebStorageNamespaceImpl.cpp (working copy) @@ -47,7 +47,7 @@ WebStorageNamespace* WebStorageNamespace WebStorageNamespace* WebStorageNamespace::createSessionStorageNamespace() { - return new WebStorageNamespaceImpl(WebCore::StorageNamespaceImpl::sessionStorageNamespace()); + return new WebStorageNamespaceImpl(WebCore::StorageNamespaceImpl::sessionStorageNamespace(noQuota)); } WebStorageNamespaceImpl::WebStorageNamespaceImpl(PassRefPtr<WebCore::StorageNamespace> storageNamespace)
Ada Chan
Comment 22
2010-04-19 11:40:56 PDT
Checked in
r57822
. Checked in the minimum changes needed to fix chromium build as described in the last comment.
http://trac.webkit.org/changeset/57822
WebKit Review Bot
Comment 23
2010-04-19 11:48:56 PDT
http://trac.webkit.org/changeset/57822
might have broken Qt Linux Release minimal
Eric Seidel (no email)
Comment 24
2010-04-19 11:57:47 PDT
Looks like this broke Qt Minimal and will likely need some #ifdef QSETTINGS guards. :(
Joseph Pecoraro
Comment 25
2010-04-19 12:01:12 PDT
(In reply to
comment #24
)
> Looks like this broke Qt Minimal and will likely need some #ifdef QSETTINGS > guards. :(
This could be that Qt on the build bot uses: -DENABLE_DOM_STORAGE=0 StorageMap::noQuota is inside a ENABLE(DOM_STORAGE) guard in StorageMap.h. Eric, any way to tell if the "try" bot for Qt compiles with this flag on or off?
Eric Seidel (no email)
Comment 26
2010-04-19 12:13:11 PDT
The "try" bot (EWS) just uses "build-webkit". The code is here:
http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/webkitpy/common/config/ports.py#L152
Basically results in: build-webkit --release --qt We may want to remove the Qt MINIMAL builder from core, as personally I find trying to support an "everything off" configuration somewhat confusing. :) I guess it's useful to know that our #ifdefs are clean or not.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug