diff options
author | Louis Chan <louischan0325@gmail.com> | 2015-10-02 19:43:33 +0800 |
---|---|---|
committer | Louis Chan <louischan0325@gmail.com> | 2015-10-09 03:55:27 +0800 |
commit | fb45b0e6913b243f6291622abf4960dd73595871 (patch) | |
tree | 6e5751754efe990eb762a1d3339d224976dc814a /components/script/dom/storage.rs | |
parent | a8ad990c6d619bc199ee25edd5bfd12e9846eb33 (diff) | |
download | servo-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.rs | 18 |
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) { |