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.
5 #ifndef CONTENT_BROWSER_RENDERER_HOST_DATABASE_MESSAGE_FILTER_H_
6 #define CONTENT_BROWSER_RENDERER_HOST_DATABASE_MESSAGE_FILTER_H_
8 #include "base/containers/hash_tables.h"
9 #include "base/strings/string16.h"
10 #include "content/public/browser/browser_message_filter.h"
11 #include "storage/browser/database/database_tracker.h"
12 #include "storage/common/database/database_connections.h"
13 #include "storage/common/quota/quota_types.h"
17 class DatabaseMessageFilter : public BrowserMessageFilter,
18 public storage::DatabaseTracker::Observer {
20 explicit DatabaseMessageFilter(storage::DatabaseTracker* db_tracker);
22 // BrowserMessageFilter implementation.
23 virtual void OnChannelClosing() OVERRIDE;
24 virtual void OverrideThreadForMessage(
25 const IPC::Message& message,
26 BrowserThread::ID* thread) OVERRIDE;
27 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
29 storage::DatabaseTracker* database_tracker() const {
30 return db_tracker_.get();
34 virtual ~DatabaseMessageFilter();
39 void RemoveObserver();
41 // VFS message handlers (file thread)
42 void OnDatabaseOpenFile(const base::string16& vfs_file_name,
44 IPC::Message* reply_msg);
45 void OnDatabaseDeleteFile(const base::string16& vfs_file_name,
47 IPC::Message* reply_msg);
48 void OnDatabaseGetFileAttributes(const base::string16& vfs_file_name,
49 IPC::Message* reply_msg);
50 void OnDatabaseGetFileSize(const base::string16& vfs_file_name,
51 IPC::Message* reply_msg);
53 // Quota message handler (io thread)
54 void OnDatabaseGetSpaceAvailable(const std::string& origin_identifier,
55 IPC::Message* reply_msg);
56 void OnDatabaseGetUsageAndQuota(IPC::Message* reply_msg,
57 storage::QuotaStatusCode status,
61 // Database tracker message handlers (file thread)
62 void OnDatabaseOpened(const std::string& origin_identifier,
63 const base::string16& database_name,
64 const base::string16& description,
65 int64 estimated_size);
66 void OnDatabaseModified(const std::string& origin_identifier,
67 const base::string16& database_name);
68 void OnDatabaseClosed(const std::string& origin_identifier,
69 const base::string16& database_name);
70 void OnHandleSqliteError(const std::string& origin_identifier,
71 const base::string16& database_name,
74 // DatabaseTracker::Observer callbacks (file thread)
75 virtual void OnDatabaseSizeChanged(const std::string& origin_identifier,
76 const base::string16& database_name,
77 int64 database_size) OVERRIDE;
78 virtual void OnDatabaseScheduledForDeletion(
79 const std::string& origin_identifier,
80 const base::string16& database_name) OVERRIDE;
82 void DatabaseDeleteFile(const base::string16& vfs_file_name,
84 IPC::Message* reply_msg,
85 int reschedule_count);
87 // The database tracker for the current browser context.
88 scoped_refptr<storage::DatabaseTracker> db_tracker_;
90 // True if and only if this instance was added as an observer
91 // to DatabaseTracker.
94 // Keeps track of all DB connections opened by this renderer
95 storage::DatabaseConnections database_connections_;
98 } // namespace content
100 #endif // CONTENT_BROWSER_RENDERER_HOST_DATABASE_MESSAGE_FILTER_H_