• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #ifndef CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CALLBACKS_H_
6 #define CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CALLBACKS_H_
7 
8 #include <string>
9 #include <vector>
10 
11 #include "base/basictypes.h"
12 #include "base/logging.h"
13 #include "base/memory/ref_counted.h"
14 #include "base/memory/scoped_ptr.h"
15 #include "base/strings/string16.h"
16 #include "content/browser/indexed_db/indexed_db_database_error.h"
17 #include "content/browser/indexed_db/indexed_db_dispatcher_host.h"
18 #include "content/common/indexed_db/indexed_db_key.h"
19 #include "content/common/indexed_db/indexed_db_key_path.h"
20 #include "url/gurl.h"
21 
22 namespace content {
23 class IndexedDBBlobInfo;
24 class IndexedDBConnection;
25 class IndexedDBCursor;
26 class IndexedDBDatabase;
27 class IndexedDBDatabaseCallbacks;
28 struct IndexedDBDatabaseMetadata;
29 struct IndexedDBValue;
30 
31 class CONTENT_EXPORT IndexedDBCallbacks
32     : public base::RefCounted<IndexedDBCallbacks> {
33  public:
34   // Simple payload responses
35   IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host,
36                      int32 ipc_thread_id,
37                      int32 ipc_callbacks_id);
38 
39   // IndexedDBCursor responses
40   IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host,
41                      int32 ipc_thread_id,
42                      int32 ipc_callbacks_id,
43                      int32 ipc_cursor_id);
44 
45   // IndexedDBDatabase responses
46   IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host,
47                      int32 ipc_thread_id,
48                      int32 ipc_callbacks_id,
49                      int32 ipc_database_callbacks_id,
50                      int64 host_transaction_id,
51                      const GURL& origin_url);
52 
53   virtual void OnError(const IndexedDBDatabaseError& error);
54 
55   // IndexedDBFactory::GetDatabaseNames
56   virtual void OnSuccess(const std::vector<base::string16>& string);
57 
58   // IndexedDBFactory::Open / DeleteDatabase
59   virtual void OnBlocked(int64 existing_version);
60 
61   // IndexedDBFactory::Open
62   virtual void OnDataLoss(blink::WebIDBDataLoss data_loss,
63                           std::string data_loss_message);
64   virtual void OnUpgradeNeeded(
65       int64 old_version,
66       scoped_ptr<IndexedDBConnection> connection,
67       const content::IndexedDBDatabaseMetadata& metadata);
68   virtual void OnSuccess(scoped_ptr<IndexedDBConnection> connection,
69                          const content::IndexedDBDatabaseMetadata& metadata);
70 
71   // IndexedDBDatabase::OpenCursor
72   virtual void OnSuccess(scoped_refptr<IndexedDBCursor> cursor,
73                          const IndexedDBKey& key,
74                          const IndexedDBKey& primary_key,
75                          IndexedDBValue* value);
76 
77   // IndexedDBCursor::Continue / Advance
78   virtual void OnSuccess(const IndexedDBKey& key,
79                          const IndexedDBKey& primary_key,
80                          IndexedDBValue* value);
81 
82   // IndexedDBCursor::PrefetchContinue
83   virtual void OnSuccessWithPrefetch(
84       const std::vector<IndexedDBKey>& keys,
85       const std::vector<IndexedDBKey>& primary_keys,
86       std::vector<IndexedDBValue>* values);
87 
88   // IndexedDBDatabase::Get (with key injection)
89   virtual void OnSuccess(IndexedDBValue* value,
90                          const IndexedDBKey& key,
91                          const IndexedDBKeyPath& key_path);
92 
93   // IndexedDBDatabase::Get
94   virtual void OnSuccess(IndexedDBValue* value);
95 
96   // IndexedDBDatabase::Put / IndexedDBCursor::Update
97   virtual void OnSuccess(const IndexedDBKey& key);
98 
99   // IndexedDBDatabase::Count
100   // IndexedDBFactory::DeleteDatabase
101   virtual void OnSuccess(int64 value);
102 
103   // IndexedDBDatabase::Delete
104   // IndexedDBCursor::Continue / Advance (when complete)
105   virtual void OnSuccess();
106 
data_loss()107   blink::WebIDBDataLoss data_loss() const { return data_loss_; }
108 
109   void SetConnectionOpenStartTime(const base::TimeTicks& start_time);
110 
111  protected:
112   virtual ~IndexedDBCallbacks();
113 
114  private:
115   void RegisterBlobsAndSend(const std::vector<IndexedDBBlobInfo>& blob_info,
116                             const base::Closure& callback);
117 
118   friend class base::RefCounted<IndexedDBCallbacks>;
119 
120   // Originally from IndexedDBCallbacks:
121   scoped_refptr<IndexedDBDispatcherHost> dispatcher_host_;
122   int32 ipc_callbacks_id_;
123   int32 ipc_thread_id_;
124 
125   // IndexedDBCursor callbacks ------------------------
126   int32 ipc_cursor_id_;
127 
128   // IndexedDBDatabase callbacks ------------------------
129   int64 host_transaction_id_;
130   GURL origin_url_;
131   int32 ipc_database_id_;
132   int32 ipc_database_callbacks_id_;
133 
134   // Stored in OnDataLoss, merged with OnUpgradeNeeded response.
135   blink::WebIDBDataLoss data_loss_;
136   std::string data_loss_message_;
137 
138   // The "blocked" event should be sent at most once per request.
139   bool sent_blocked_;
140   base::TimeTicks connection_open_start_time_;
141   DISALLOW_COPY_AND_ASSIGN(IndexedDBCallbacks);
142 };
143 
144 }  // namespace content
145 
146 #endif  // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CALLBACKS_H_
147