indexed_db_callbacks.h revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CALLBACKS_H_
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CALLBACKS_H_
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <string>
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <vector>
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/basictypes.h"
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/logging.h"
13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/memory/ref_counted.h"
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/memory/scoped_ptr.h"
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/strings/string16.h"
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/browser/indexed_db/indexed_db_database_error.h"
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/browser/indexed_db/indexed_db_dispatcher_host.h"
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/common/indexed_db/indexed_db_key.h"
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/common/indexed_db/indexed_db_key_path.h"
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "googleurl/src/gurl.h"
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/platform/WebIDBCallbacks.h"
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace content {
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass IndexedDBConnection;
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass IndexedDBCursor;
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass IndexedDBDatabase;
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass IndexedDBDatabaseCallbacks;
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct IndexedDBDatabaseMetadata;
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass CONTENT_EXPORT IndexedDBCallbacks
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    : public base::RefCounted<IndexedDBCallbacks> {
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Simple payload responses
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  static scoped_refptr<IndexedDBCallbacks> Create(
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IndexedDBDispatcherHost* dispatcher_host,
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      int32 ipc_thread_id,
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      int32 ipc_callbacks_id) {
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return make_scoped_refptr(new IndexedDBCallbacks(
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        dispatcher_host, ipc_thread_id, ipc_callbacks_id));
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBCursor responses
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  static scoped_refptr<IndexedDBCallbacks> Create(
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IndexedDBDispatcherHost* dispatcher_host,
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      int32 ipc_thread_id,
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      int32 ipc_callbacks_id,
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      int32 ipc_cursor_id) {
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return make_scoped_refptr(new IndexedDBCallbacks(
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        dispatcher_host, ipc_thread_id, ipc_callbacks_id, ipc_cursor_id));
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBDatabase responses
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  static scoped_refptr<IndexedDBCallbacks> Create(
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IndexedDBDispatcherHost* dispatcher_host,
54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      int32 ipc_thread_id,
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      int32 ipc_callbacks_id,
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      int32 ipc_database_callbacks_id,
57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      int64 host_transaction_id,
58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const GURL& origin_url) {
59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return make_scoped_refptr(new IndexedDBCallbacks(dispatcher_host,
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                     ipc_thread_id,
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                     ipc_callbacks_id,
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                     ipc_database_callbacks_id,
63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                     host_transaction_id,
64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                     origin_url));
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnError(const IndexedDBDatabaseError& error);
68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBFactory::GetDatabaseNames
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnSuccess(const std::vector<string16>& string);
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBFactory::Open / DeleteDatabase
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnBlocked(int64 existing_version);
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBFactory::Open
76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnUpgradeNeeded(
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      int64 old_version,
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      scoped_ptr<IndexedDBConnection> connection,
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const content::IndexedDBDatabaseMetadata& metadata,
80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      WebKit::WebIDBCallbacks::DataLoss data_loss);
81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnSuccess(scoped_ptr<IndexedDBConnection> connection,
82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         const content::IndexedDBDatabaseMetadata& metadata);
83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBDatabase::OpenCursor
85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnSuccess(scoped_refptr<IndexedDBCursor> cursor,
86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         const IndexedDBKey& key,
87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         const IndexedDBKey& primary_key,
88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         std::vector<char>* value);
89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBCursor::Continue / Advance
91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnSuccess(const IndexedDBKey& key,
92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         const IndexedDBKey& primary_key,
93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         std::vector<char>* value);
94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBCursor::PrefetchContinue
96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnSuccessWithPrefetch(
97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::vector<IndexedDBKey>& keys,
98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::vector<IndexedDBKey>& primary_keys,
99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::vector<std::vector<char> >& values);
100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBDatabase::Get (with key injection)
102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnSuccess(std::vector<char>* data,
103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         const IndexedDBKey& key,
104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         const IndexedDBKeyPath& key_path);
105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBDatabase::Get
107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnSuccess(std::vector<char>* value);
108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBDatabase::Put / IndexedDBCursor::Update
110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnSuccess(const IndexedDBKey& value);
111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBDatabase::Count
113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnSuccess(int64 value);
114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBDatabase::Delete
116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBCursor::Continue / Advance (when complete)
117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnSuccess();
118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected:
120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ~IndexedDBCallbacks();
121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Simple payload responses
123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host,
124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                     int32 ipc_thread_id,
125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                     int32 ipc_callbacks_id);
126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBCursor responses
128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host,
129eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                     int32 ipc_thread_id,
130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                     int32 ipc_callbacks_id,
131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                     int32 ipc_cursor_id);
132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
133eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBDatabase responses
134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host,
135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                     int32 ipc_thread_id,
136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                     int32 ipc_callbacks_id,
137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                     int32 ipc_database_callbacks_id,
138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                     int64 host_transaction_id,
139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                     const GURL& origin_url);
140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  friend class base::RefCounted<IndexedDBCallbacks>;
143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Originally from IndexedDBCallbacks:
145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_refptr<IndexedDBDispatcherHost> dispatcher_host_;
146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int32 ipc_callbacks_id_;
147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int32 ipc_thread_id_;
148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBCursor callbacks ------------------------
150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int32 ipc_cursor_id_;
151eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IndexedDBDatabase callbacks ------------------------
153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int64 host_transaction_id_;
154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  GURL origin_url_;
155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int32 ipc_database_id_;
156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int32 ipc_database_callbacks_id_;
157eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
158eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
159eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace content
160eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif  // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CALLBACKS_H_
162