| 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/renderer/indexed_db/indexed_db_dispatcher.h" | 5 #include "content/common/indexed_db/indexed_db_dispatcher.h" |
| 6 | 6 |
| 7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
| 8 #include "base/threading/thread_local.h" | 8 #include "base/threading/thread_local.h" |
| 9 #include "content/common/child_thread.h" |
| 9 #include "content/common/indexed_db/indexed_db_messages.h" | 10 #include "content/common/indexed_db/indexed_db_messages.h" |
| 10 #include "content/renderer/indexed_db/renderer_webidbcursor_impl.h" | 11 #include "content/common/indexed_db/proxy_webidbcursor_impl.h" |
| 11 #include "content/renderer/indexed_db/renderer_webidbdatabase_impl.h" | 12 #include "content/common/indexed_db/proxy_webidbdatabase_impl.h" |
| 12 #include "content/renderer/indexed_db/renderer_webidbindex_impl.h" | 13 #include "content/common/indexed_db/proxy_webidbindex_impl.h" |
| 13 #include "content/renderer/indexed_db/renderer_webidbobjectstore_impl.h" | 14 #include "content/common/indexed_db/proxy_webidbobjectstore_impl.h" |
| 14 #include "content/renderer/indexed_db/renderer_webidbtransaction_impl.h" | 15 #include "content/common/indexed_db/proxy_webidbtransaction_impl.h" |
| 15 #include "content/renderer/render_thread_impl.h" | |
| 16 #include "content/renderer/render_view_impl.h" | |
| 17 #include "ipc/ipc_channel.h" | 16 #include "ipc/ipc_channel.h" |
| 18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" | 17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" |
| 19 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBDatabaseCallbac
ks.h" | 18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBDatabaseCallbac
ks.h" |
| 20 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBDatabaseError.h
" | 19 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBDatabaseError.h
" |
| 21 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBKeyRange.h" | 20 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBKeyRange.h" |
| 22 | 21 |
| 23 using base::ThreadLocalPointer; | 22 using base::ThreadLocalPointer; |
| 24 using WebKit::WebDOMStringList; | 23 using WebKit::WebDOMStringList; |
| 25 using WebKit::WebExceptionCode; | 24 using WebKit::WebExceptionCode; |
| 26 using WebKit::WebFrame; | 25 using WebKit::WebFrame; |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 } | 171 } |
| 173 | 172 |
| 174 void IndexedDBDispatcher::RequestIDBFactoryOpen( | 173 void IndexedDBDispatcher::RequestIDBFactoryOpen( |
| 175 const string16& name, | 174 const string16& name, |
| 176 WebIDBCallbacks* callbacks_ptr, | 175 WebIDBCallbacks* callbacks_ptr, |
| 177 const string16& origin, | 176 const string16& origin, |
| 178 WebFrame* web_frame) { | 177 WebFrame* web_frame) { |
| 179 ResetCursorPrefetchCaches(); | 178 ResetCursorPrefetchCaches(); |
| 180 scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); | 179 scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); |
| 181 | 180 |
| 182 if (!web_frame) | 181 if (!CurrentWorkerId() && |
| 183 return; // We must be shutting down. | 182 !ChildThread::current()->IsWebFrameValid(web_frame)) |
| 184 RenderViewImpl* render_view = RenderViewImpl::FromWebView(web_frame->view()); | 183 return; |
| 185 if (!render_view) | |
| 186 return; // We must be shutting down. | |
| 187 | 184 |
| 188 IndexedDBHostMsg_FactoryOpen_Params params; | 185 IndexedDBHostMsg_FactoryOpen_Params params; |
| 189 params.thread_id = CurrentWorkerId(); | 186 params.thread_id = CurrentWorkerId(); |
| 190 params.response_id = pending_callbacks_.Add(callbacks.release()); | 187 params.response_id = pending_callbacks_.Add(callbacks.release()); |
| 191 params.origin = origin; | 188 params.origin = origin; |
| 192 params.name = name; | 189 params.name = name; |
| 193 Send(new IndexedDBHostMsg_FactoryOpen(params)); | 190 Send(new IndexedDBHostMsg_FactoryOpen(params)); |
| 194 } | 191 } |
| 195 | 192 |
| 196 void IndexedDBDispatcher::RequestIDBFactoryGetDatabaseNames( | 193 void IndexedDBDispatcher::RequestIDBFactoryGetDatabaseNames( |
| 197 WebIDBCallbacks* callbacks_ptr, | 194 WebIDBCallbacks* callbacks_ptr, |
| 198 const string16& origin, | 195 const string16& origin, |
| 199 WebFrame* web_frame) { | 196 WebFrame* web_frame) { |
| 200 ResetCursorPrefetchCaches(); | 197 ResetCursorPrefetchCaches(); |
| 201 scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); | 198 scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); |
| 202 | 199 |
| 203 if (!web_frame) | 200 if (!CurrentWorkerId() && |
| 204 return; // We must be shutting down. | 201 !ChildThread::current()->IsWebFrameValid(web_frame)) |
| 205 RenderViewImpl* render_view = RenderViewImpl::FromWebView(web_frame->view()); | 202 return; |
| 206 if (!render_view) | |
| 207 return; // We must be shutting down. | |
| 208 | 203 |
| 209 IndexedDBHostMsg_FactoryGetDatabaseNames_Params params; | 204 IndexedDBHostMsg_FactoryGetDatabaseNames_Params params; |
| 210 params.thread_id = CurrentWorkerId(); | 205 params.thread_id = CurrentWorkerId(); |
| 211 params.response_id = pending_callbacks_.Add(callbacks.release()); | 206 params.response_id = pending_callbacks_.Add(callbacks.release()); |
| 212 params.origin = origin; | 207 params.origin = origin; |
| 213 Send(new IndexedDBHostMsg_FactoryGetDatabaseNames(params)); | 208 Send(new IndexedDBHostMsg_FactoryGetDatabaseNames(params)); |
| 214 } | 209 } |
| 215 | 210 |
| 216 void IndexedDBDispatcher::RequestIDBFactoryDeleteDatabase( | 211 void IndexedDBDispatcher::RequestIDBFactoryDeleteDatabase( |
| 217 const string16& name, | 212 const string16& name, |
| 218 WebIDBCallbacks* callbacks_ptr, | 213 WebIDBCallbacks* callbacks_ptr, |
| 219 const string16& origin, | 214 const string16& origin, |
| 220 WebFrame* web_frame) { | 215 WebFrame* web_frame) { |
| 221 ResetCursorPrefetchCaches(); | 216 ResetCursorPrefetchCaches(); |
| 222 scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); | 217 scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); |
| 223 | 218 |
| 224 if (!web_frame) | 219 if (!CurrentWorkerId() && |
| 225 return; // We must be shutting down. | 220 !ChildThread::current()->IsWebFrameValid(web_frame)) |
| 226 RenderViewImpl* render_view = RenderViewImpl::FromWebView(web_frame->view()); | 221 return; |
| 227 if (!render_view) | |
| 228 return; // We must be shutting down. | |
| 229 | 222 |
| 230 IndexedDBHostMsg_FactoryDeleteDatabase_Params params; | 223 IndexedDBHostMsg_FactoryDeleteDatabase_Params params; |
| 231 params.thread_id = CurrentWorkerId(); | 224 params.thread_id = CurrentWorkerId(); |
| 232 params.response_id = pending_callbacks_.Add(callbacks.release()); | 225 params.response_id = pending_callbacks_.Add(callbacks.release()); |
| 233 params.origin = origin; | 226 params.origin = origin; |
| 234 params.name = name; | 227 params.name = name; |
| 235 Send(new IndexedDBHostMsg_FactoryDeleteDatabase(params)); | 228 Send(new IndexedDBHostMsg_FactoryDeleteDatabase(params)); |
| 236 } | 229 } |
| 237 | 230 |
| 238 void IndexedDBDispatcher::RequestIDBDatabaseClose(int32 idb_database_id) { | 231 void IndexedDBDispatcher::RequestIDBDatabaseClose(int32 idb_database_id) { |
| (...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 679 } | 672 } |
| 680 | 673 |
| 681 void IndexedDBDispatcher::ResetCursorPrefetchCaches(int32 exception_cursor_id) { | 674 void IndexedDBDispatcher::ResetCursorPrefetchCaches(int32 exception_cursor_id) { |
| 682 typedef std::map<int32, RendererWebIDBCursorImpl*>::iterator Iterator; | 675 typedef std::map<int32, RendererWebIDBCursorImpl*>::iterator Iterator; |
| 683 for (Iterator i = cursors_.begin(); i != cursors_.end(); ++i) { | 676 for (Iterator i = cursors_.begin(); i != cursors_.end(); ++i) { |
| 684 if (i->first == exception_cursor_id) | 677 if (i->first == exception_cursor_id) |
| 685 continue; | 678 continue; |
| 686 i->second->ResetPrefetchCache(); | 679 i->second->ResetPrefetchCache(); |
| 687 } | 680 } |
| 688 } | 681 } |
| OLD | NEW |