OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #ifndef CHROME_BROWSER_IN_PROCESS_WEBKIT_INDEXED_DB_DISPATCHER_HOST_H_ | 5 #ifndef CHROME_BROWSER_IN_PROCESS_WEBKIT_INDEXED_DB_DISPATCHER_HOST_H_ |
6 #define CHROME_BROWSER_IN_PROCESS_WEBKIT_INDEXED_DB_DISPATCHER_HOST_H_ | 6 #define CHROME_BROWSER_IN_PROCESS_WEBKIT_INDEXED_DB_DISPATCHER_HOST_H_ |
7 | 7 |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/id_map.h" | 9 #include "base/id_map.h" |
10 #include "base/process.h" | 10 #include "base/process.h" |
11 #include "base/ref_counted.h" | 11 #include "base/ref_counted.h" |
12 #include "chrome/browser/in_process_webkit/webkit_context.h" | 12 #include "chrome/browser/in_process_webkit/webkit_context.h" |
13 #include "ipc/ipc_message.h" | 13 #include "ipc/ipc_message.h" |
14 | 14 |
15 struct ViewHostMsg_IndexedDatabaseOpen_Params; | 15 struct ViewHostMsg_IndexedDatabaseOpen_Params; |
| 16 struct ViewHostMsg_IDBDatabaseCreateObjectStore_Params; |
16 | 17 |
17 namespace WebKit { | 18 namespace WebKit { |
18 class WebIDBDatabase; | 19 class WebIDBDatabase; |
19 class WebIDBIndex; | 20 class WebIDBIndex; |
| 21 class WebIDBObjectStore; |
20 } | 22 } |
21 | 23 |
22 // Handles all IndexedDB related messages from a particular renderer process. | 24 // Handles all IndexedDB related messages from a particular renderer process. |
23 class IndexedDBDispatcherHost | 25 class IndexedDBDispatcherHost |
24 : public base::RefCountedThreadSafe<IndexedDBDispatcherHost> { | 26 : public base::RefCountedThreadSafe<IndexedDBDispatcherHost> { |
25 public: | 27 public: |
26 // Only call the constructor from the UI thread. | 28 // Only call the constructor from the UI thread. |
27 IndexedDBDispatcherHost(IPC::Message::Sender* sender, | 29 IndexedDBDispatcherHost(IPC::Message::Sender* sender, |
28 WebKitContext* webkit_context); | 30 WebKitContext* webkit_context); |
29 | 31 |
(...skipping 11 matching lines...) Expand all Loading... |
41 // IO thread. May be called from any thread. | 43 // IO thread. May be called from any thread. |
42 void Send(IPC::Message* message); | 44 void Send(IPC::Message* message); |
43 | 45 |
44 // A shortcut for accessing our context. | 46 // A shortcut for accessing our context. |
45 IndexedDBContext* Context() { | 47 IndexedDBContext* Context() { |
46 return webkit_context_->indexed_db_context(); | 48 return webkit_context_->indexed_db_context(); |
47 } | 49 } |
48 | 50 |
49 // The various IndexedDBCallbacks children call these methods to add the | 51 // The various IndexedDBCallbacks children call these methods to add the |
50 // results into the applicable map. See below for more details. | 52 // results into the applicable map. See below for more details. |
51 int32 AddIDBDatabase(WebKit::WebIDBDatabase* idb_database); | 53 int32 Add(WebKit::WebIDBDatabase* idb_database); |
52 // TODO(andreip/jorlow): Add functions for other maps here. | 54 int32 Add(WebKit::WebIDBObjectStore* idb_object_store); |
53 | 55 |
54 private: | 56 private: |
55 friend class base::RefCountedThreadSafe<IndexedDBDispatcherHost>; | 57 friend class base::RefCountedThreadSafe<IndexedDBDispatcherHost>; |
56 ~IndexedDBDispatcherHost(); | 58 ~IndexedDBDispatcherHost(); |
57 | 59 |
58 // Message processing. Most of the work is delegated to the dispatcher hosts | 60 // Message processing. Most of the work is delegated to the dispatcher hosts |
59 // below. | 61 // below. |
60 void OnMessageReceivedWebKit(const IPC::Message& message); | 62 void OnMessageReceivedWebKit(const IPC::Message& message); |
61 void OnIndexedDatabaseOpen(const ViewHostMsg_IndexedDatabaseOpen_Params& p); | 63 void OnIndexedDatabaseOpen(const ViewHostMsg_IndexedDatabaseOpen_Params& p); |
62 | 64 |
63 // Helper templates. | 65 // Helper templates. |
64 template <class ReturnType> | 66 template <class ReturnType> |
65 ReturnType* GetOrTerminateProcess( | 67 ReturnType* GetOrTerminateProcess( |
66 IDMap<ReturnType, IDMapOwnPointer>* map, int32 return_object_id, | 68 IDMap<ReturnType, IDMapOwnPointer>* map, int32 return_object_id, |
67 IPC::Message* reply_msg, uint32 message_type); | 69 IPC::Message* reply_msg, uint32 message_type); |
68 | 70 |
69 template <typename ReplyType, typename MessageType, | 71 template <typename ReplyType, typename MessageType, |
70 typename WebObjectType, typename Method> | 72 typename WebObjectType, typename Method> |
71 void SyncGetter(IDMap<WebObjectType, IDMapOwnPointer>* map, int32 object_id, | 73 void SyncGetter(IDMap<WebObjectType, IDMapOwnPointer>* map, int32 object_id, |
72 IPC::Message* reply_msg, Method method); | 74 IPC::Message* reply_msg, Method method); |
73 | 75 |
74 template <typename ObjectType> | 76 template <typename ObjectType> |
75 void DestroyObject(IDMap<ObjectType, IDMapOwnPointer>* map, int32 object_id, | 77 void DestroyObject(IDMap<ObjectType, IDMapOwnPointer>* map, int32 object_id, |
76 uint32 message_type); | 78 uint32 message_type); |
77 | 79 |
78 class DatabaseDispatcherHost { | 80 class DatabaseDispatcherHost { |
79 public: | 81 public: |
80 DatabaseDispatcherHost(IndexedDBDispatcherHost* parent); | 82 explicit DatabaseDispatcherHost(IndexedDBDispatcherHost* parent); |
81 ~DatabaseDispatcherHost(); | 83 ~DatabaseDispatcherHost(); |
82 | 84 |
83 bool OnMessageReceived(const IPC::Message& message, bool *msg_is_ok); | 85 bool OnMessageReceived(const IPC::Message& message, bool *msg_is_ok); |
84 void Send(IPC::Message* message); | 86 void Send(IPC::Message* message); |
85 | 87 |
86 void OnName(int32 idb_database_id, IPC::Message* reply_msg); | 88 void OnName(int32 idb_database_id, IPC::Message* reply_msg); |
87 void OnDescription(int32 idb_database_id, IPC::Message* reply_msg); | 89 void OnDescription(int32 idb_database_id, IPC::Message* reply_msg); |
88 void OnVersion(int32 idb_database_id, IPC::Message* reply_msg); | 90 void OnVersion(int32 idb_database_id, IPC::Message* reply_msg); |
89 void OnObjectStores(int32 idb_database_id, IPC::Message* reply_msg); | 91 void OnObjectStores(int32 idb_database_id, IPC::Message* reply_msg); |
| 92 void OnCreateObjectStore( |
| 93 const ViewHostMsg_IDBDatabaseCreateObjectStore_Params& params); |
| 94 |
90 void OnDestroyed(int32 idb_database_id); | 95 void OnDestroyed(int32 idb_database_id); |
91 | 96 |
92 IndexedDBDispatcherHost* parent_; | 97 IndexedDBDispatcherHost* parent_; |
93 IDMap<WebKit::WebIDBDatabase, IDMapOwnPointer> map_; | 98 IDMap<WebKit::WebIDBDatabase, IDMapOwnPointer> map_; |
94 }; | 99 }; |
95 | 100 |
96 class IndexDispatcherHost { | 101 class IndexDispatcherHost { |
97 public: | 102 public: |
98 IndexDispatcherHost(IndexedDBDispatcherHost* parent); | 103 explicit IndexDispatcherHost(IndexedDBDispatcherHost* parent); |
99 ~IndexDispatcherHost(); | 104 ~IndexDispatcherHost(); |
100 | 105 |
101 bool OnMessageReceived(const IPC::Message& message, bool *msg_is_ok); | 106 bool OnMessageReceived(const IPC::Message& message, bool *msg_is_ok); |
102 void Send(IPC::Message* message); | 107 void Send(IPC::Message* message); |
103 | 108 |
104 void OnName(int32 idb_index_id, IPC::Message* reply_msg); | 109 void OnName(int32 idb_index_id, IPC::Message* reply_msg); |
105 void OnKeyPath(int32 idb_index_id, IPC::Message* reply_msg); | 110 void OnKeyPath(int32 idb_index_id, IPC::Message* reply_msg); |
106 void OnUnique(int32 idb_index_id, IPC::Message* reply_msg); | 111 void OnUnique(int32 idb_index_id, IPC::Message* reply_msg); |
107 void OnDestroyed(int32 idb_index_id); | 112 void OnDestroyed(int32 idb_index_id); |
108 | 113 |
109 IndexedDBDispatcherHost* parent_; | 114 IndexedDBDispatcherHost* parent_; |
110 IDMap<WebKit::WebIDBIndex, IDMapOwnPointer> map_; | 115 IDMap<WebKit::WebIDBIndex, IDMapOwnPointer> map_; |
111 }; | 116 }; |
112 | 117 |
| 118 class ObjectStoreDispatcherHost { |
| 119 public: |
| 120 explicit ObjectStoreDispatcherHost(IndexedDBDispatcherHost* parent); |
| 121 ~ObjectStoreDispatcherHost(); |
| 122 |
| 123 bool OnMessageReceived(const IPC::Message& message, bool *msg_is_ok); |
| 124 void Send(IPC::Message* message); |
| 125 |
| 126 void OnName(int32 idb_object_store_id, IPC::Message* reply_msg); |
| 127 void OnKeyPath(int32 idb_object_store_id, IPC::Message* reply_msg); |
| 128 void OnDestroyed(int32 idb_object_store_id); |
| 129 |
| 130 IndexedDBDispatcherHost* parent_; |
| 131 IDMap<WebKit::WebIDBObjectStore, IDMapOwnPointer> map_; |
| 132 }; |
113 // Only use on the IO thread. | 133 // Only use on the IO thread. |
114 IPC::Message::Sender* sender_; | 134 IPC::Message::Sender* sender_; |
115 | 135 |
116 // Data shared between renderer processes with the same profile. | 136 // Data shared between renderer processes with the same profile. |
117 scoped_refptr<WebKitContext> webkit_context_; | 137 scoped_refptr<WebKitContext> webkit_context_; |
118 | 138 |
119 // Only access on WebKit thread. | 139 // Only access on WebKit thread. |
120 scoped_ptr<DatabaseDispatcherHost> database_dispatcher_host_; | 140 scoped_ptr<DatabaseDispatcherHost> database_dispatcher_host_; |
121 scoped_ptr<IndexDispatcherHost> index_dispatcher_host_; | 141 scoped_ptr<IndexDispatcherHost> index_dispatcher_host_; |
| 142 scoped_ptr<ObjectStoreDispatcherHost> object_store_dispatcher_host_; |
122 | 143 |
123 // If we get a corrupt message from a renderer, we need to kill it using this | 144 // If we get a corrupt message from a renderer, we need to kill it using this |
124 // handle. | 145 // handle. |
125 base::ProcessHandle process_handle_; | 146 base::ProcessHandle process_handle_; |
126 | 147 |
127 // Used to dispatch messages to the correct view host. | 148 // Used to dispatch messages to the correct view host. |
128 int process_id_; | 149 int process_id_; |
129 | 150 |
130 DISALLOW_IMPLICIT_CONSTRUCTORS(IndexedDBDispatcherHost); | 151 DISALLOW_IMPLICIT_CONSTRUCTORS(IndexedDBDispatcherHost); |
131 }; | 152 }; |
132 | 153 |
133 #endif // CHROME_BROWSER_IN_PROCESS_WEBKIT_INDEXED_DB_DISPATCHER_HOST_H_ | 154 #endif // CHROME_BROWSER_IN_PROCESS_WEBKIT_INDEXED_DB_DISPATCHER_HOST_H_ |
OLD | NEW |