| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/in_process_webkit/dom_storage_area.h" | 5 #include "content/browser/in_process_webkit/dom_storage_area.h" |
| 6 | 6 |
| 7 #include "base/task.h" | 7 #include "base/task.h" |
| 8 #include "chrome/browser/content_settings/host_content_settings_map.h" | |
| 9 #include "content/browser/in_process_webkit/dom_storage_context.h" | 8 #include "content/browser/in_process_webkit/dom_storage_context.h" |
| 10 #include "content/browser/in_process_webkit/dom_storage_namespace.h" | 9 #include "content/browser/in_process_webkit/dom_storage_namespace.h" |
| 11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h" | 10 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h" |
| 12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebStorageArea.h" | 11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebStorageArea.h" |
| 13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" | 12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" |
| 14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURL.h" | 13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURL.h" |
| 15 #include "webkit/glue/webkit_glue.h" | 14 #include "webkit/glue/webkit_glue.h" |
| 16 | 15 |
| 17 using WebKit::WebSecurityOrigin; | 16 using WebKit::WebSecurityOrigin; |
| 18 using WebKit::WebStorageArea; | 17 using WebKit::WebStorageArea; |
| 19 using WebKit::WebString; | 18 using WebKit::WebString; |
| 20 using WebKit::WebURL; | 19 using WebKit::WebURL; |
| 21 | 20 |
| 22 DOMStorageArea::DOMStorageArea( | 21 DOMStorageArea::DOMStorageArea( |
| 23 const string16& origin, | 22 const string16& origin, |
| 24 int64 id, | 23 int64 id, |
| 25 DOMStorageNamespace* owner, | 24 DOMStorageNamespace* owner) |
| 26 HostContentSettingsMap* host_content_settings_map) | |
| 27 : origin_(origin), | 25 : origin_(origin), |
| 28 origin_url_(origin), | 26 origin_url_(origin), |
| 29 id_(id), | 27 id_(id), |
| 30 owner_(owner), | 28 owner_(owner) { |
| 31 host_content_settings_map_(host_content_settings_map) { | |
| 32 DCHECK(owner_); | 29 DCHECK(owner_); |
| 33 DCHECK(host_content_settings_map_); | |
| 34 } | 30 } |
| 35 | 31 |
| 36 DOMStorageArea::~DOMStorageArea() { | 32 DOMStorageArea::~DOMStorageArea() { |
| 37 } | 33 } |
| 38 | 34 |
| 39 unsigned DOMStorageArea::Length() { | 35 unsigned DOMStorageArea::Length() { |
| 40 CreateWebStorageAreaIfNecessary(); | 36 CreateWebStorageAreaIfNecessary(); |
| 41 return storage_area_->length(); | 37 return storage_area_->length(); |
| 42 } | 38 } |
| 43 | 39 |
| 44 NullableString16 DOMStorageArea::Key(unsigned index) { | 40 NullableString16 DOMStorageArea::Key(unsigned index) { |
| 45 CreateWebStorageAreaIfNecessary(); | 41 CreateWebStorageAreaIfNecessary(); |
| 46 return storage_area_->key(index); | 42 return storage_area_->key(index); |
| 47 } | 43 } |
| 48 | 44 |
| 49 NullableString16 DOMStorageArea::GetItem(const string16& key) { | 45 NullableString16 DOMStorageArea::GetItem(const string16& key) { |
| 50 CreateWebStorageAreaIfNecessary(); | 46 CreateWebStorageAreaIfNecessary(); |
| 51 return storage_area_->getItem(key); | 47 return storage_area_->getItem(key); |
| 52 } | 48 } |
| 53 | 49 |
| 54 NullableString16 DOMStorageArea::SetItem( | 50 NullableString16 DOMStorageArea::SetItem( |
| 55 const string16& key, const string16& value, | 51 const string16& key, const string16& value, |
| 56 WebStorageArea::Result* result) { | 52 WebStorageArea::Result* result) { |
| 57 if (!CheckContentSetting(key, value)) { | |
| 58 *result = WebStorageArea::ResultBlockedByPolicy; | |
| 59 return NullableString16(true); // Ignored if the content was blocked. | |
| 60 } | |
| 61 | |
| 62 CreateWebStorageAreaIfNecessary(); | 53 CreateWebStorageAreaIfNecessary(); |
| 63 WebString old_value; | 54 WebString old_value; |
| 64 storage_area_->setItem(key, value, WebURL(), *result, old_value); | 55 storage_area_->setItem(key, value, WebURL(), *result, old_value); |
| 65 return old_value; | 56 return old_value; |
| 66 } | 57 } |
| 67 | 58 |
| 68 NullableString16 DOMStorageArea::RemoveItem(const string16& key) { | 59 NullableString16 DOMStorageArea::RemoveItem(const string16& key) { |
| 69 CreateWebStorageAreaIfNecessary(); | 60 CreateWebStorageAreaIfNecessary(); |
| 70 WebString old_value; | 61 WebString old_value; |
| 71 storage_area_->removeItem(key, WebURL(), old_value); | 62 storage_area_->removeItem(key, WebURL(), old_value); |
| 72 return old_value; | 63 return old_value; |
| 73 } | 64 } |
| 74 | 65 |
| 75 bool DOMStorageArea::Clear() { | 66 bool DOMStorageArea::Clear() { |
| 76 CreateWebStorageAreaIfNecessary(); | 67 CreateWebStorageAreaIfNecessary(); |
| 77 bool somethingCleared; | 68 bool somethingCleared; |
| 78 storage_area_->clear(WebURL(), somethingCleared); | 69 storage_area_->clear(WebURL(), somethingCleared); |
| 79 return somethingCleared; | 70 return somethingCleared; |
| 80 } | 71 } |
| 81 | 72 |
| 82 void DOMStorageArea::PurgeMemory() { | 73 void DOMStorageArea::PurgeMemory() { |
| 83 storage_area_.reset(); | 74 storage_area_.reset(); |
| 84 } | 75 } |
| 85 | 76 |
| 86 void DOMStorageArea::CreateWebStorageAreaIfNecessary() { | 77 void DOMStorageArea::CreateWebStorageAreaIfNecessary() { |
| 87 if (!storage_area_.get()) | 78 if (!storage_area_.get()) |
| 88 storage_area_.reset(owner_->CreateWebStorageArea(origin_)); | 79 storage_area_.reset(owner_->CreateWebStorageArea(origin_)); |
| 89 } | 80 } |
| 90 | |
| 91 bool DOMStorageArea::CheckContentSetting( | |
| 92 const string16& key, const string16& value) { | |
| 93 ContentSetting content_setting = | |
| 94 host_content_settings_map_->GetContentSetting( | |
| 95 origin_url_, CONTENT_SETTINGS_TYPE_COOKIES, ""); | |
| 96 return (content_setting != CONTENT_SETTING_BLOCK); | |
| 97 } | |
| OLD | NEW |