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