Home | History | Annotate | Download | only in renderer_host
      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