| 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 |