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 "webkit/browser/database/database_tracker.h"
12 #include "webkit/common/database/database_connections.h"
13 #include "webkit/common/quota/quota_types.h"
17 class DatabaseMessageFilter
18 : public BrowserMessageFilter,
19 public webkit_database::DatabaseTracker::Observer {
21 explicit DatabaseMessageFilter(webkit_database::DatabaseTracker* db_tracker);
23 // BrowserMessageFilter implementation.
24 virtual void OnChannelClosing() OVERRIDE;
25 virtual void OverrideThreadForMessage(
26 const IPC::Message& message,
27 BrowserThread::ID* thread) OVERRIDE;
28 virtual bool OnMessageReceived(const IPC::Message& message,
29 bool* message_was_ok) OVERRIDE;
31 webkit_database::DatabaseTracker* database_tracker() const {
32 return db_tracker_.get();
36 virtual ~DatabaseMessageFilter();
41 void RemoveObserver();
43 // VFS message handlers (file thread)
44 void OnDatabaseOpenFile(const string16& vfs_file_name,
46 IPC::Message* reply_msg);
47 void OnDatabaseDeleteFile(const string16& vfs_file_name,
49 IPC::Message* reply_msg);
50 void OnDatabaseGetFileAttributes(const string16& vfs_file_name,
51 IPC::Message* reply_msg);
52 void OnDatabaseGetFileSize(const string16& vfs_file_name,
53 IPC::Message* reply_msg);
55 // Quota message handler (io thread)
56 void OnDatabaseGetSpaceAvailable(const std::string& origin_identifier,
57 IPC::Message* reply_msg);
58 void OnDatabaseGetUsageAndQuota(IPC::Message* reply_msg,
59 quota::QuotaStatusCode status,
63 // Database tracker message handlers (file thread)
64 void OnDatabaseOpened(const std::string& origin_identifier,
65 const string16& database_name,
66 const string16& description,
67 int64 estimated_size);
68 void OnDatabaseModified(const std::string& origin_identifier,
69 const string16& database_name);
70 void OnDatabaseClosed(const std::string& origin_identifier,
71 const string16& database_name);
72 void OnHandleSqliteError(const std::string& origin_identifier,
73 const string16& database_name,
76 // DatabaseTracker::Observer callbacks (file thread)
77 virtual void OnDatabaseSizeChanged(const std::string& origin_identifier,
78 const string16& database_name,
79 int64 database_size) OVERRIDE;
80 virtual void OnDatabaseScheduledForDeletion(
81 const std::string& origin_identifier,
82 const string16& database_name) OVERRIDE;
84 void DatabaseDeleteFile(const string16& vfs_file_name,
86 IPC::Message* reply_msg,
87 int reschedule_count);
89 // The database tracker for the current browser context.
90 scoped_refptr<webkit_database::DatabaseTracker> db_tracker_;
92 // True if and only if this instance was added as an observer
93 // to DatabaseTracker.
96 // Keeps track of all DB connections opened by this renderer
97 webkit_database::DatabaseConnections database_connections_;
100 } // namespace content
102 #endif // CONTENT_BROWSER_RENDERER_HOST_DATABASE_MESSAGE_FILTER_H_