- add sources.
[platform/framework/web/crosswalk.git] / src / content / browser / renderer_host / database_message_filter.h
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_