OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
3 * Copyright (C) 2013 Samsung Electronics. All rights reserved. | 3 * Copyright (C) 2013 Samsung Electronics. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * | 8 * |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 30 matching lines...) Expand all Loading... |
41 #include "modules/storage/StorageNamespace.h" | 41 #include "modules/storage/StorageNamespace.h" |
42 #include "modules/storage/StorageNamespaceController.h" | 42 #include "modules/storage/StorageNamespaceController.h" |
43 #include "platform/weborigin/SecurityOrigin.h" | 43 #include "platform/weborigin/SecurityOrigin.h" |
44 | 44 |
45 namespace blink { | 45 namespace blink { |
46 | 46 |
47 namespace DOMStorageAgentState { | 47 namespace DOMStorageAgentState { |
48 static const char domStorageAgentEnabled[] = "domStorageAgentEnabled"; | 48 static const char domStorageAgentEnabled[] = "domStorageAgentEnabled"; |
49 }; | 49 }; |
50 | 50 |
51 static bool hadException(ExceptionState& exceptionState, | 51 static Response toResponse(ExceptionState& exceptionState) { |
52 ErrorString* errorString) { | |
53 if (!exceptionState.hadException()) | 52 if (!exceptionState.hadException()) |
54 return false; | 53 return Response::OK(); |
55 | 54 return Response::Error(DOMException::getErrorName(exceptionState.code()) + |
56 switch (exceptionState.code()) { | 55 " " + exceptionState.message()); |
57 case SecurityError: | |
58 *errorString = "Security error"; | |
59 return true; | |
60 default: | |
61 *errorString = "Unknown DOM storage error"; | |
62 return true; | |
63 } | |
64 } | 56 } |
65 | 57 |
66 InspectorDOMStorageAgent::InspectorDOMStorageAgent(Page* page) | 58 InspectorDOMStorageAgent::InspectorDOMStorageAgent(Page* page) |
67 : m_page(page), m_isEnabled(false) {} | 59 : m_page(page), m_isEnabled(false) {} |
68 | 60 |
69 InspectorDOMStorageAgent::~InspectorDOMStorageAgent() {} | 61 InspectorDOMStorageAgent::~InspectorDOMStorageAgent() {} |
70 | 62 |
71 DEFINE_TRACE(InspectorDOMStorageAgent) { | 63 DEFINE_TRACE(InspectorDOMStorageAgent) { |
72 visitor->trace(m_page); | 64 visitor->trace(m_page); |
73 InspectorBaseAgent::trace(visitor); | 65 InspectorBaseAgent::trace(visitor); |
74 } | 66 } |
75 | 67 |
76 void InspectorDOMStorageAgent::restore() { | 68 void InspectorDOMStorageAgent::restore() { |
77 if (m_state->booleanProperty(DOMStorageAgentState::domStorageAgentEnabled, | 69 if (m_state->booleanProperty(DOMStorageAgentState::domStorageAgentEnabled, |
78 false)) | 70 false)) { |
79 enable(0); | 71 enable(); |
| 72 } |
80 } | 73 } |
81 | 74 |
82 void InspectorDOMStorageAgent::enable(ErrorString*) { | 75 Response InspectorDOMStorageAgent::enable() { |
83 if (m_isEnabled) | 76 if (m_isEnabled) |
84 return; | 77 return Response::OK(); |
85 m_isEnabled = true; | 78 m_isEnabled = true; |
86 m_state->setBoolean(DOMStorageAgentState::domStorageAgentEnabled, true); | 79 m_state->setBoolean(DOMStorageAgentState::domStorageAgentEnabled, true); |
87 if (StorageNamespaceController* controller = | 80 if (StorageNamespaceController* controller = |
88 StorageNamespaceController::from(m_page)) | 81 StorageNamespaceController::from(m_page)) |
89 controller->setInspectorAgent(this); | 82 controller->setInspectorAgent(this); |
| 83 return Response::OK(); |
90 } | 84 } |
91 | 85 |
92 void InspectorDOMStorageAgent::disable(ErrorString*) { | 86 Response InspectorDOMStorageAgent::disable() { |
93 if (!m_isEnabled) | 87 if (!m_isEnabled) |
94 return; | 88 return Response::OK(); |
95 m_isEnabled = false; | 89 m_isEnabled = false; |
96 m_state->setBoolean(DOMStorageAgentState::domStorageAgentEnabled, false); | 90 m_state->setBoolean(DOMStorageAgentState::domStorageAgentEnabled, false); |
97 if (StorageNamespaceController* controller = | 91 if (StorageNamespaceController* controller = |
98 StorageNamespaceController::from(m_page)) | 92 StorageNamespaceController::from(m_page)) |
99 controller->setInspectorAgent(nullptr); | 93 controller->setInspectorAgent(nullptr); |
| 94 return Response::OK(); |
100 } | 95 } |
101 | 96 |
102 void InspectorDOMStorageAgent::getDOMStorageItems( | 97 Response InspectorDOMStorageAgent::getDOMStorageItems( |
103 ErrorString* errorString, | |
104 std::unique_ptr<protocol::DOMStorage::StorageId> storageId, | 98 std::unique_ptr<protocol::DOMStorage::StorageId> storageId, |
105 std::unique_ptr<protocol::Array<protocol::Array<String>>>* items) { | 99 std::unique_ptr<protocol::Array<protocol::Array<String>>>* items) { |
106 LocalFrame* frame; | 100 LocalFrame* frame = nullptr; |
107 StorageArea* storageArea = | 101 StorageArea* storageArea = nullptr; |
108 findStorageArea(errorString, std::move(storageId), frame); | 102 Response response = findStorageArea(std::move(storageId), frame, storageArea); |
109 if (!storageArea) | 103 if (!response.isSuccess()) |
110 return; | 104 return response; |
111 | 105 |
112 std::unique_ptr<protocol::Array<protocol::Array<String>>> storageItems = | 106 std::unique_ptr<protocol::Array<protocol::Array<String>>> storageItems = |
113 protocol::Array<protocol::Array<String>>::create(); | 107 protocol::Array<protocol::Array<String>>::create(); |
114 | 108 |
115 TrackExceptionState exceptionState; | 109 TrackExceptionState exceptionState; |
116 for (unsigned i = 0; i < storageArea->length(exceptionState, frame); ++i) { | 110 for (unsigned i = 0; i < storageArea->length(exceptionState, frame); ++i) { |
117 String name(storageArea->key(i, exceptionState, frame)); | 111 String name(storageArea->key(i, exceptionState, frame)); |
118 if (hadException(exceptionState, errorString)) | 112 response = toResponse(exceptionState); |
119 return; | 113 if (!response.isSuccess()) |
| 114 return response; |
120 String value(storageArea->getItem(name, exceptionState, frame)); | 115 String value(storageArea->getItem(name, exceptionState, frame)); |
121 if (hadException(exceptionState, errorString)) | 116 response = toResponse(exceptionState); |
122 return; | 117 if (!response.isSuccess()) |
| 118 return response; |
123 std::unique_ptr<protocol::Array<String>> entry = | 119 std::unique_ptr<protocol::Array<String>> entry = |
124 protocol::Array<String>::create(); | 120 protocol::Array<String>::create(); |
125 entry->addItem(name); | 121 entry->addItem(name); |
126 entry->addItem(value); | 122 entry->addItem(value); |
127 storageItems->addItem(std::move(entry)); | 123 storageItems->addItem(std::move(entry)); |
128 } | 124 } |
129 *items = std::move(storageItems); | 125 *items = std::move(storageItems); |
| 126 return Response::OK(); |
130 } | 127 } |
131 | 128 |
132 static String toErrorString(ExceptionState& exceptionState) { | 129 Response InspectorDOMStorageAgent::setDOMStorageItem( |
133 if (exceptionState.hadException()) | |
134 return DOMException::getErrorName(exceptionState.code()); | |
135 return ""; | |
136 } | |
137 | |
138 void InspectorDOMStorageAgent::setDOMStorageItem( | |
139 ErrorString* errorString, | |
140 std::unique_ptr<protocol::DOMStorage::StorageId> storageId, | 130 std::unique_ptr<protocol::DOMStorage::StorageId> storageId, |
141 const String& key, | 131 const String& key, |
142 const String& value) { | 132 const String& value) { |
143 LocalFrame* frame; | 133 LocalFrame* frame = nullptr; |
144 StorageArea* storageArea = findStorageArea(0, std::move(storageId), frame); | 134 StorageArea* storageArea = nullptr; |
145 if (!storageArea) { | 135 Response response = findStorageArea(std::move(storageId), frame, storageArea); |
146 *errorString = "Storage not found"; | 136 if (!response.isSuccess()) |
147 return; | 137 return response; |
148 } | |
149 | 138 |
150 TrackExceptionState exceptionState; | 139 TrackExceptionState exceptionState; |
151 storageArea->setItem(key, value, exceptionState, frame); | 140 storageArea->setItem(key, value, exceptionState, frame); |
152 *errorString = toErrorString(exceptionState); | 141 return toResponse(exceptionState); |
153 } | 142 } |
154 | 143 |
155 void InspectorDOMStorageAgent::removeDOMStorageItem( | 144 Response InspectorDOMStorageAgent::removeDOMStorageItem( |
156 ErrorString* errorString, | |
157 std::unique_ptr<protocol::DOMStorage::StorageId> storageId, | 145 std::unique_ptr<protocol::DOMStorage::StorageId> storageId, |
158 const String& key) { | 146 const String& key) { |
159 LocalFrame* frame; | 147 LocalFrame* frame = nullptr; |
160 StorageArea* storageArea = findStorageArea(0, std::move(storageId), frame); | 148 StorageArea* storageArea = nullptr; |
161 if (!storageArea) { | 149 Response response = findStorageArea(std::move(storageId), frame, storageArea); |
162 *errorString = "Storage not found"; | 150 if (!response.isSuccess()) |
163 return; | 151 return response; |
164 } | |
165 | 152 |
166 TrackExceptionState exceptionState; | 153 TrackExceptionState exceptionState; |
167 storageArea->removeItem(key, exceptionState, frame); | 154 storageArea->removeItem(key, exceptionState, frame); |
168 *errorString = toErrorString(exceptionState); | 155 return toResponse(exceptionState); |
169 } | 156 } |
170 | 157 |
171 std::unique_ptr<protocol::DOMStorage::StorageId> | 158 std::unique_ptr<protocol::DOMStorage::StorageId> |
172 InspectorDOMStorageAgent::storageId(SecurityOrigin* securityOrigin, | 159 InspectorDOMStorageAgent::storageId(SecurityOrigin* securityOrigin, |
173 bool isLocalStorage) { | 160 bool isLocalStorage) { |
174 return protocol::DOMStorage::StorageId::create() | 161 return protocol::DOMStorage::StorageId::create() |
175 .setSecurityOrigin(securityOrigin->toRawString()) | 162 .setSecurityOrigin(securityOrigin->toRawString()) |
176 .setIsLocalStorage(isLocalStorage) | 163 .setIsLocalStorage(isLocalStorage) |
177 .build(); | 164 .build(); |
178 } | 165 } |
(...skipping 13 matching lines...) Expand all Loading... |
192 if (key.isNull()) | 179 if (key.isNull()) |
193 frontend()->domStorageItemsCleared(std::move(id)); | 180 frontend()->domStorageItemsCleared(std::move(id)); |
194 else if (newValue.isNull()) | 181 else if (newValue.isNull()) |
195 frontend()->domStorageItemRemoved(std::move(id), key); | 182 frontend()->domStorageItemRemoved(std::move(id), key); |
196 else if (oldValue.isNull()) | 183 else if (oldValue.isNull()) |
197 frontend()->domStorageItemAdded(std::move(id), key, newValue); | 184 frontend()->domStorageItemAdded(std::move(id), key, newValue); |
198 else | 185 else |
199 frontend()->domStorageItemUpdated(std::move(id), key, oldValue, newValue); | 186 frontend()->domStorageItemUpdated(std::move(id), key, oldValue, newValue); |
200 } | 187 } |
201 | 188 |
202 StorageArea* InspectorDOMStorageAgent::findStorageArea( | 189 Response InspectorDOMStorageAgent::findStorageArea( |
203 ErrorString* errorString, | |
204 std::unique_ptr<protocol::DOMStorage::StorageId> storageId, | 190 std::unique_ptr<protocol::DOMStorage::StorageId> storageId, |
205 LocalFrame*& targetFrame) { | 191 LocalFrame*& frame, |
| 192 StorageArea*& storageArea) { |
206 String securityOrigin = storageId->getSecurityOrigin(); | 193 String securityOrigin = storageId->getSecurityOrigin(); |
207 bool isLocalStorage = storageId->getIsLocalStorage(); | 194 bool isLocalStorage = storageId->getIsLocalStorage(); |
208 | 195 |
209 if (!m_page->mainFrame()->isLocalFrame()) | 196 if (!m_page->mainFrame()->isLocalFrame()) |
210 return nullptr; | 197 return Response::InternalError(); |
211 | 198 |
212 InspectedFrames* inspectedFrames = | 199 InspectedFrames* inspectedFrames = |
213 InspectedFrames::create(m_page->deprecatedLocalMainFrame()); | 200 InspectedFrames::create(m_page->deprecatedLocalMainFrame()); |
214 LocalFrame* frame = inspectedFrames->frameWithSecurityOrigin(securityOrigin); | 201 frame = inspectedFrames->frameWithSecurityOrigin(securityOrigin); |
215 if (!frame) { | 202 if (!frame) |
216 if (errorString) | 203 return Response::Error("Frame not found for the given security origin"); |
217 *errorString = "LocalFrame not found for the given security origin"; | 204 |
218 return nullptr; | 205 if (isLocalStorage) { |
| 206 storageArea = StorageNamespace::localStorageArea( |
| 207 frame->document()->getSecurityOrigin()); |
| 208 return Response::OK(); |
219 } | 209 } |
220 targetFrame = frame; | |
221 | |
222 if (isLocalStorage) | |
223 return StorageNamespace::localStorageArea( | |
224 frame->document()->getSecurityOrigin()); | |
225 StorageNamespace* sessionStorage = | 210 StorageNamespace* sessionStorage = |
226 StorageNamespaceController::from(m_page)->sessionStorage(); | 211 StorageNamespaceController::from(m_page)->sessionStorage(); |
227 if (!sessionStorage) { | 212 if (!sessionStorage) |
228 if (errorString) | 213 return Response::Error("SessionStorage is not supported"); |
229 *errorString = "SessionStorage is not supported"; | 214 storageArea = |
230 return nullptr; | 215 sessionStorage->storageArea(frame->document()->getSecurityOrigin()); |
231 } | 216 return Response::OK(); |
232 return sessionStorage->storageArea(frame->document()->getSecurityOrigin()); | |
233 } | 217 } |
234 | 218 |
235 } // namespace blink | 219 } // namespace blink |
OLD | NEW |