| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/indexed_db_dispatcher_host.h" | 5 #include "content/browser/in_process_webkit/indexed_db_dispatcher_host.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
| 10 #include "content/browser/in_process_webkit/indexed_db_callbacks.h" | 10 #include "content/browser/in_process_webkit/indexed_db_callbacks.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBCursor.h" | 22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBCursor.h" |
| 23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBDatabase.h" | 23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBDatabase.h" |
| 24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBDatabaseError.h
" | 24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBDatabaseError.h
" |
| 25 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBFactory.h" | 25 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBFactory.h" |
| 26 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBIndex.h" | 26 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBIndex.h" |
| 27 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBKeyRange.h" | 27 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBKeyRange.h" |
| 28 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBObjectStore.h" | 28 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBObjectStore.h" |
| 29 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBTransaction.h" | 29 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBTransaction.h" |
| 30 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h" | 30 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h" |
| 31 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebVector.h" | 31 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebVector.h" |
| 32 #include "webkit/database/database_util.h" |
| 32 #include "webkit/glue/webkit_glue.h" | 33 #include "webkit/glue/webkit_glue.h" |
| 33 | 34 |
| 34 using content::BrowserMessageFilter; | 35 using content::BrowserMessageFilter; |
| 35 using content::BrowserThread; | 36 using content::BrowserThread; |
| 36 using content::UserMetricsAction; | 37 using content::UserMetricsAction; |
| 38 using webkit_database::DatabaseUtil; |
| 37 using WebKit::WebDOMStringList; | 39 using WebKit::WebDOMStringList; |
| 38 using WebKit::WebExceptionCode; | 40 using WebKit::WebExceptionCode; |
| 39 using WebKit::WebIDBCallbacks; | 41 using WebKit::WebIDBCallbacks; |
| 40 using WebKit::WebIDBCursor; | 42 using WebKit::WebIDBCursor; |
| 41 using WebKit::WebIDBDatabase; | 43 using WebKit::WebIDBDatabase; |
| 42 using WebKit::WebIDBDatabaseError; | 44 using WebKit::WebIDBDatabaseError; |
| 43 using WebKit::WebIDBIndex; | 45 using WebKit::WebIDBIndex; |
| 44 using WebKit::WebIDBKey; | 46 using WebKit::WebIDBKey; |
| 45 using WebKit::WebIDBKeyRange; | 47 using WebKit::WebIDBKeyRange; |
| 46 using WebKit::WebIDBObjectStore; | 48 using WebKit::WebIDBObjectStore; |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 } | 201 } |
| 200 | 202 |
| 201 WebIDBCursor* IndexedDBDispatcherHost::GetCursorFromId(int32 cursor_id) { | 203 WebIDBCursor* IndexedDBDispatcherHost::GetCursorFromId(int32 cursor_id) { |
| 202 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED)); | 204 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED)); |
| 203 return cursor_dispatcher_host_->map_.Lookup(cursor_id); | 205 return cursor_dispatcher_host_->map_.Lookup(cursor_id); |
| 204 } | 206 } |
| 205 | 207 |
| 206 void IndexedDBDispatcherHost::OnIDBFactoryGetDatabaseNames( | 208 void IndexedDBDispatcherHost::OnIDBFactoryGetDatabaseNames( |
| 207 const IndexedDBHostMsg_FactoryGetDatabaseNames_Params& params) { | 209 const IndexedDBHostMsg_FactoryGetDatabaseNames_Params& params) { |
| 208 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED)); | 210 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED)); |
| 209 FilePath base_path = indexed_db_context_->data_path(); | 211 FilePath indexed_db_path = indexed_db_context_->data_path(); |
| 210 FilePath indexed_db_path; | |
| 211 if (!base_path.empty()) { | |
| 212 indexed_db_path = base_path.Append( | |
| 213 IndexedDBContextImpl::kIndexedDBDirectory); | |
| 214 } | |
| 215 | 212 |
| 216 // TODO(jorlow): This doesn't support file:/// urls properly. We probably need | |
| 217 // to add some toString method to WebSecurityOrigin that doesn't | |
| 218 // return null for them. Look at | |
| 219 // DatabaseUtil::GetOriginFromIdentifier. | |
| 220 WebSecurityOrigin origin( | 213 WebSecurityOrigin origin( |
| 221 WebSecurityOrigin::createFromDatabaseIdentifier(params.origin)); | 214 WebSecurityOrigin::createFromDatabaseIdentifier(params.origin)); |
| 222 GURL origin_url(origin.toString()); | |
| 223 | |
| 224 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED)); | |
| 225 | 215 |
| 226 Context()->GetIDBFactory()->getDatabaseNames( | 216 Context()->GetIDBFactory()->getDatabaseNames( |
| 227 new IndexedDBCallbacks<WebDOMStringList>(this, params.thread_id, | 217 new IndexedDBCallbacks<WebDOMStringList>(this, params.thread_id, |
| 228 params.response_id), origin, NULL, | 218 params.response_id), origin, NULL, |
| 229 webkit_glue::FilePathToWebString(indexed_db_path)); | 219 webkit_glue::FilePathToWebString(indexed_db_path)); |
| 230 } | 220 } |
| 231 | 221 |
| 232 void IndexedDBDispatcherHost::OnIDBFactoryOpen( | 222 void IndexedDBDispatcherHost::OnIDBFactoryOpen( |
| 233 const IndexedDBHostMsg_FactoryOpen_Params& params) { | 223 const IndexedDBHostMsg_FactoryOpen_Params& params) { |
| 234 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED)); | 224 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED)); |
| 235 FilePath base_path = indexed_db_context_->data_path(); | 225 FilePath indexed_db_path = indexed_db_context_->data_path(); |
| 236 FilePath indexed_db_path; | |
| 237 if (!base_path.empty()) { | |
| 238 indexed_db_path = base_path.Append( | |
| 239 IndexedDBContextImpl::kIndexedDBDirectory); | |
| 240 } | |
| 241 | 226 |
| 242 // TODO(jorlow): This doesn't support file:/// urls properly. We probably need | 227 GURL origin_url = DatabaseUtil::GetOriginFromIdentifier(params.origin); |
| 243 // to add some toString method to WebSecurityOrigin that doesn't | |
| 244 // return null for them. Look at | |
| 245 // DatabaseUtil::GetOriginFromIdentifier. | |
| 246 WebSecurityOrigin origin( | 228 WebSecurityOrigin origin( |
| 247 WebSecurityOrigin::createFromDatabaseIdentifier(params.origin)); | 229 WebSecurityOrigin::createFromDatabaseIdentifier(params.origin)); |
| 248 GURL origin_url(origin.toString()); | |
| 249 | 230 |
| 250 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED)); | 231 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED)); |
| 251 | 232 |
| 252 // TODO(dgrogan): Don't let a non-existing database be opened (and therefore | 233 // TODO(dgrogan): Don't let a non-existing database be opened (and therefore |
| 253 // created) if this origin is already over quota. | 234 // created) if this origin is already over quota. |
| 254 Context()->GetIDBFactory()->open( | 235 Context()->GetIDBFactory()->open( |
| 255 params.name, | 236 params.name, |
| 256 new IndexedDBCallbacks<WebIDBDatabase>(this, params.thread_id, | 237 new IndexedDBCallbacks<WebIDBDatabase>(this, params.thread_id, |
| 257 params.response_id, origin_url), | 238 params.response_id, origin_url), |
| 258 origin, NULL, webkit_glue::FilePathToWebString(indexed_db_path)); | 239 origin, NULL, webkit_glue::FilePathToWebString(indexed_db_path)); |
| 259 } | 240 } |
| 260 | 241 |
| 261 void IndexedDBDispatcherHost::OnIDBFactoryDeleteDatabase( | 242 void IndexedDBDispatcherHost::OnIDBFactoryDeleteDatabase( |
| 262 const IndexedDBHostMsg_FactoryDeleteDatabase_Params& params) { | 243 const IndexedDBHostMsg_FactoryDeleteDatabase_Params& params) { |
| 263 FilePath base_path = indexed_db_context_->data_path(); | 244 FilePath indexed_db_path = indexed_db_context_->data_path(); |
| 264 FilePath indexed_db_path; | |
| 265 if (!base_path.empty()) { | |
| 266 indexed_db_path = base_path.Append( | |
| 267 IndexedDBContextImpl::kIndexedDBDirectory); | |
| 268 } | |
| 269 | 245 |
| 270 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED)); | 246 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED)); |
| 271 Context()->GetIDBFactory()->deleteDatabase( | 247 Context()->GetIDBFactory()->deleteDatabase( |
| 272 params.name, | 248 params.name, |
| 273 new IndexedDBCallbacks<WebSerializedScriptValue>(this, | 249 new IndexedDBCallbacks<WebSerializedScriptValue>(this, |
| 274 params.thread_id, | 250 params.thread_id, |
| 275 params.response_id), | 251 params.response_id), |
| 276 WebSecurityOrigin::createFromDatabaseIdentifier(params.origin), NULL, | 252 WebSecurityOrigin::createFromDatabaseIdentifier(params.origin), NULL, |
| 277 webkit_glue::FilePathToWebString(indexed_db_path)); | 253 webkit_glue::FilePathToWebString(indexed_db_path)); |
| 278 } | 254 } |
| (...skipping 922 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1201 | 1177 |
| 1202 void IndexedDBDispatcherHost:: | 1178 void IndexedDBDispatcherHost:: |
| 1203 TransactionDispatcherHost::OnDidCompleteTaskEvents(int transaction_id) { | 1179 TransactionDispatcherHost::OnDidCompleteTaskEvents(int transaction_id) { |
| 1204 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED)); | 1180 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED)); |
| 1205 WebIDBTransaction* idb_transaction = parent_->GetOrTerminateProcess( | 1181 WebIDBTransaction* idb_transaction = parent_->GetOrTerminateProcess( |
| 1206 &map_, transaction_id); | 1182 &map_, transaction_id); |
| 1207 if (!idb_transaction) | 1183 if (!idb_transaction) |
| 1208 return; | 1184 return; |
| 1209 | 1185 |
| 1210 // TODO(dgrogan): Tell the page the transaction aborted because of quota. | 1186 // TODO(dgrogan): Tell the page the transaction aborted because of quota. |
| 1187 // http://crbug.com/113118 |
| 1211 if (parent_->Context()->WouldBeOverQuota( | 1188 if (parent_->Context()->WouldBeOverQuota( |
| 1212 transaction_url_map_[transaction_id], | 1189 transaction_url_map_[transaction_id], |
| 1213 transaction_size_map_[transaction_id])) { | 1190 transaction_size_map_[transaction_id])) { |
| 1214 idb_transaction->abort(); | 1191 idb_transaction->abort(); |
| 1215 return; | 1192 return; |
| 1216 } | 1193 } |
| 1217 idb_transaction->didCompleteTaskEvents(); | 1194 idb_transaction->didCompleteTaskEvents(); |
| 1218 } | 1195 } |
| 1219 | 1196 |
| 1220 void IndexedDBDispatcherHost::TransactionDispatcherHost::OnDestroyed( | 1197 void IndexedDBDispatcherHost::TransactionDispatcherHost::OnDestroyed( |
| 1221 int32 object_id) { | 1198 int32 object_id) { |
| 1222 transaction_size_map_.erase(object_id); | 1199 transaction_size_map_.erase(object_id); |
| 1223 transaction_url_map_.erase(object_id); | 1200 transaction_url_map_.erase(object_id); |
| 1224 parent_->DestroyObject(&map_, object_id); | 1201 parent_->DestroyObject(&map_, object_id); |
| 1225 } | 1202 } |
| OLD | NEW |