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) OVERRIDE; 29 30 webkit_database::DatabaseTracker* database_tracker() const { 31 return db_tracker_.get(); 32 } 33 34 private: 35 virtual ~DatabaseMessageFilter(); 36 37 class PromptDelegate; 38 39 void AddObserver(); 40 void RemoveObserver(); 41 42 // VFS message handlers (file thread) 43 void OnDatabaseOpenFile(const base::string16& vfs_file_name, 44 int desired_flags, 45 IPC::Message* reply_msg); 46 void OnDatabaseDeleteFile(const base::string16& vfs_file_name, 47 const bool& sync_dir, 48 IPC::Message* reply_msg); 49 void OnDatabaseGetFileAttributes(const base::string16& vfs_file_name, 50 IPC::Message* reply_msg); 51 void OnDatabaseGetFileSize(const base::string16& vfs_file_name, 52 IPC::Message* reply_msg); 53 54 // Quota message handler (io thread) 55 void OnDatabaseGetSpaceAvailable(const std::string& origin_identifier, 56 IPC::Message* reply_msg); 57 void OnDatabaseGetUsageAndQuota(IPC::Message* reply_msg, 58 quota::QuotaStatusCode status, 59 int64 usage, 60 int64 quota); 61 62 // Database tracker message handlers (file thread) 63 void OnDatabaseOpened(const std::string& origin_identifier, 64 const base::string16& database_name, 65 const base::string16& description, 66 int64 estimated_size); 67 void OnDatabaseModified(const std::string& origin_identifier, 68 const base::string16& database_name); 69 void OnDatabaseClosed(const std::string& origin_identifier, 70 const base::string16& database_name); 71 void OnHandleSqliteError(const std::string& origin_identifier, 72 const base::string16& database_name, 73 int error); 74 75 // DatabaseTracker::Observer callbacks (file thread) 76 virtual void OnDatabaseSizeChanged(const std::string& origin_identifier, 77 const base::string16& database_name, 78 int64 database_size) OVERRIDE; 79 virtual void OnDatabaseScheduledForDeletion( 80 const std::string& origin_identifier, 81 const base::string16& database_name) OVERRIDE; 82 83 void DatabaseDeleteFile(const base::string16& vfs_file_name, 84 bool sync_dir, 85 IPC::Message* reply_msg, 86 int reschedule_count); 87 88 // The database tracker for the current browser context. 89 scoped_refptr<webkit_database::DatabaseTracker> db_tracker_; 90 91 // True if and only if this instance was added as an observer 92 // to DatabaseTracker. 93 bool observer_added_; 94 95 // Keeps track of all DB connections opened by this renderer 96 webkit_database::DatabaseConnections database_connections_; 97 }; 98 99 } // namespace content 100 101 #endif // CONTENT_BROWSER_RENDERER_HOST_DATABASE_MESSAGE_FILTER_H_ 102