aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/storage.rs
diff options
context:
space:
mode:
authorLouis Chan <louischan0325@gmail.com>2015-10-02 19:43:33 +0800
committerLouis Chan <louischan0325@gmail.com>2015-10-09 03:55:27 +0800
commitfb45b0e6913b243f6291622abf4960dd73595871 (patch)
tree6e5751754efe990eb762a1d3339d224976dc814a /components/script/dom/storage.rs
parenta8ad990c6d619bc199ee25edd5bfd12e9846eb33 (diff)
downloadservo-fb45b0e6913b243f6291622abf4960dd73595871.tar.gz
servo-fb45b0e6913b243f6291622abf4960dd73595871.zip
Implement a quota of 5MB per origin for localstorage and sessionstorage
Diffstat (limited to 'components/script/dom/storage.rs')
-rw-r--r--components/script/dom/storage.rs18
1 files changed, 12 insertions, 6 deletions
diff --git a/components/script/dom/storage.rs b/components/script/dom/storage.rs
index 4c7ac10d773..9429aecb200 100644
--- a/components/script/dom/storage.rs
+++ b/components/script/dom/storage.rs
@@ -5,6 +5,7 @@
use dom::bindings::codegen::Bindings::StorageBinding;
use dom::bindings::codegen::Bindings::StorageBinding::StorageMethods;
use dom::bindings::codegen::InheritTypes::{EventCast, EventTargetCast};
+use dom::bindings::error::{Error, ErrorResult};
use dom::bindings::global::{GlobalField, GlobalRef};
use dom::bindings::js::{Root, RootedReference};
use dom::bindings::refcounted::Trusted;
@@ -82,14 +83,19 @@ impl StorageMethods for Storage {
}
// https://html.spec.whatwg.org/multipage/#dom-storage-setitem
- fn SetItem(&self, name: DOMString, value: DOMString) {
+ fn SetItem(&self, name: DOMString, value: DOMString) -> ErrorResult {
let (sender, receiver) = ipc::channel().unwrap();
let msg = StorageTaskMsg::SetItem(sender, self.get_url(), self.storage_type, name.clone(), value.clone());
self.get_storage_task().send(msg).unwrap();
- let (changed, old_value) = receiver.recv().unwrap();
- if changed {
- self.broadcast_change_notification(Some(name), old_value, Some(value));
+ match receiver.recv().unwrap() {
+ Err(_) => Err(Error::QuotaExceeded),
+ Ok((changed, old_value)) => {
+ if changed {
+ self.broadcast_change_notification(Some(name), old_value, Some(value));
+ }
+ Ok(())
+ }
}
}
@@ -129,8 +135,8 @@ impl StorageMethods for Storage {
item
}
- fn NamedSetter(&self, name: DOMString, value: DOMString) {
- self.SetItem(name, value);
+ fn NamedSetter(&self, name: DOMString, value: DOMString) -> ErrorResult {
+ self.SetItem(name, value)
}
fn NamedDeleter(&self, name: DOMString) {