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_RENDERER_HOST_DATABASE_MESSAGE_FILTER_H_ 6 #define CONTENT_BROWSER_RENDERER_HOST_DATABASE_MESSAGE_FILTER_H_ 7 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" 14 15 namespace content { 16 17 class DatabaseMessageFilter 18 : public BrowserMessageFilter, 19 public webkit_database::DatabaseTracker::Observer { 20 public: 21 explicit DatabaseMessageFilter(webkit_database::DatabaseTracker* db_tracker); 22 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; 30 31 webkit_database::DatabaseTracker* database_tracker() const { 32 return db_tracker_.get(); 33 } 34 35 private: 36 virtual ~DatabaseMessageFilter(); 37 38 class PromptDelegate; 39 40 void AddObserver(); 41 void RemoveObserver(); 42 43 // VFS message handlers (file thread) 44 void OnDatabaseOpenFile(const string16& vfs_file_name, 45 int desired_flags, 46 IPC::Message* reply_msg); 47 void OnDatabaseDeleteFile(const string16& vfs_file_name, 48 const bool& sync_dir, 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); 54 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, 60 int64 usage, 61 int64 quota); 62 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, 74 int error); 75 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; 83 84 void DatabaseDeleteFile(const string16& vfs_file_name, 85 bool sync_dir, 86 IPC::Message* reply_msg, 87 int reschedule_count); 88 89 // The database tracker for the current browser context. 90 scoped_refptr<webkit_database::DatabaseTracker> db_tracker_; 91 92 // True if and only if this instance was added as an observer 93 // to DatabaseTracker. 94 bool observer_added_; 95 96 // Keeps track of all DB connections opened by this renderer 97 webkit_database::DatabaseConnections database_connections_; 98 }; 99 100 } // namespace content 101 102 #endif // CONTENT_BROWSER_RENDERER_HOST_DATABASE_MESSAGE_FILTER_H_ 103