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" 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace content { 230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass IndexedDBBlobInfo; 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass IndexedDBConnection; 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass IndexedDBCursor; 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass IndexedDBDatabase; 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass IndexedDBDatabaseCallbacks; 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct IndexedDBDatabaseMetadata; 2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)struct IndexedDBValue; 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass CONTENT_EXPORT IndexedDBCallbacks 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch : public base::RefCounted<IndexedDBCallbacks> { 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Simple payload responses 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host, 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int32 ipc_thread_id, 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int32 ipc_callbacks_id); 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IndexedDBCursor responses 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host, 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int32 ipc_thread_id, 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int32 ipc_callbacks_id, 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int32 ipc_cursor_id); 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IndexedDBDatabase responses 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host, 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int32 ipc_thread_id, 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int32 ipc_callbacks_id, 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int32 ipc_database_callbacks_id, 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int64 host_transaction_id, 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const GURL& origin_url); 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnError(const IndexedDBDatabaseError& error); 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IndexedDBFactory::GetDatabaseNames 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OnSuccess(const std::vector<base::string16>& string); 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IndexedDBFactory::Open / DeleteDatabase 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnBlocked(int64 existing_version); 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IndexedDBFactory::Open 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnDataLoss(blink::WebIDBDataLoss data_loss, 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string data_loss_message); 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnUpgradeNeeded( 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64 old_version, 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<IndexedDBConnection> connection, 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const content::IndexedDBDatabaseMetadata& metadata); 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnSuccess(scoped_ptr<IndexedDBConnection> connection, 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const content::IndexedDBDatabaseMetadata& metadata); 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IndexedDBDatabase::OpenCursor 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnSuccess(scoped_refptr<IndexedDBCursor> cursor, 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const IndexedDBKey& key, 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const IndexedDBKey& primary_key, 7523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) IndexedDBValue* value); 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IndexedDBCursor::Continue / Advance 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnSuccess(const IndexedDBKey& key, 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const IndexedDBKey& primary_key, 8023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) IndexedDBValue* value); 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IndexedDBCursor::PrefetchContinue 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnSuccessWithPrefetch( 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::vector<IndexedDBKey>& keys, 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::vector<IndexedDBKey>& primary_keys, 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<IndexedDBValue>* values); 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IndexedDBDatabase::Get (with key injection) 8923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void OnSuccess(IndexedDBValue* value, 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const IndexedDBKey& key, 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const IndexedDBKeyPath& key_path); 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IndexedDBDatabase::Get 9423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void OnSuccess(IndexedDBValue* value); 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IndexedDBDatabase::Put / IndexedDBCursor::Update 9723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void OnSuccess(const IndexedDBKey& key); 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IndexedDBDatabase::Count 100a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // IndexedDBFactory::DeleteDatabase 101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnSuccess(int64 value); 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IndexedDBDatabase::Delete 104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IndexedDBCursor::Continue / Advance (when complete) 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnSuccess(); 106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blink::WebIDBDataLoss data_loss() const { return data_loss_; } 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void SetConnectionOpenStartTime(const base::TimeTicks& start_time); 11003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected: 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual ~IndexedDBCallbacks(); 113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private: 1150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void RegisterBlobsAndSend(const std::vector<IndexedDBBlobInfo>& blob_info, 1160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const base::Closure& callback); 1170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch friend class base::RefCounted<IndexedDBCallbacks>; 119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Originally from IndexedDBCallbacks: 121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_refptr<IndexedDBDispatcherHost> dispatcher_host_; 122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int32 ipc_callbacks_id_; 123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int32 ipc_thread_id_; 124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IndexedDBCursor callbacks ------------------------ 126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int32 ipc_cursor_id_; 127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IndexedDBDatabase callbacks ------------------------ 129eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64 host_transaction_id_; 130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL origin_url_; 131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int32 ipc_database_id_; 132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int32 ipc_database_callbacks_id_; 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Stored in OnDataLoss, merged with OnUpgradeNeeded response. 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blink::WebIDBDataLoss data_loss_; 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string data_loss_message_; 137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The "blocked" event should be sent at most once per request. 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool sent_blocked_; 14003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::TimeTicks connection_open_start_time_; 141f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(IndexedDBCallbacks); 142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace content 145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CALLBACKS_H_ 147