• 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  protected:
110   virtual ~IndexedDBCallbacks();
111 
112  private:
113   void RegisterBlobsAndSend(const std::vector<IndexedDBBlobInfo>& blob_info,
114                             const base::Closure& callback);
115 
116   friend class base::RefCounted<IndexedDBCallbacks>;
117 
118   // Originally from IndexedDBCallbacks:
119   scoped_refptr<IndexedDBDispatcherHost> dispatcher_host_;
120   int32 ipc_callbacks_id_;
121   int32 ipc_thread_id_;
122 
123   // IndexedDBCursor callbacks ------------------------
124   int32 ipc_cursor_id_;
125 
126   // IndexedDBDatabase callbacks ------------------------
127   int64 host_transaction_id_;
128   GURL origin_url_;
129   int32 ipc_database_id_;
130   int32 ipc_database_callbacks_id_;
131 
132   // Stored in OnDataLoss, merged with OnUpgradeNeeded response.
133   blink::WebIDBDataLoss data_loss_;
134   std::string data_loss_message_;
135 
136   DISALLOW_COPY_AND_ASSIGN(IndexedDBCallbacks);
137 };
138 
139 }  // namespace content
140 
141 #endif  // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CALLBACKS_H_
142