Home | History | Annotate | Download | only in indexed_db
      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 
    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