OLD | NEW |
| (Empty) |
1 // Copyright (c) 2010 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 CHROME_BROWSER_RENDERER_HOST_DATABASE_DISPATCHER_HOST_H_ | |
6 #define CHROME_BROWSER_RENDERER_HOST_DATABASE_DISPATCHER_HOST_H_ | |
7 #pragma once | |
8 | |
9 #include "base/hash_tables.h" | |
10 #include "base/process.h" | |
11 #include "base/ref_counted.h" | |
12 #include "base/string16.h" | |
13 #include "chrome/common/content_settings.h" | |
14 #include "ipc/ipc_message.h" | |
15 #include "webkit/database/database_connections.h" | |
16 #include "webkit/database/database_tracker.h" | |
17 | |
18 class GURL; | |
19 class HostContentSettingsMap; | |
20 class Receiver; | |
21 class ResourceMessageFilter; | |
22 | |
23 class DatabaseDispatcherHost | |
24 : public base::RefCountedThreadSafe<DatabaseDispatcherHost>, | |
25 public webkit_database::DatabaseTracker::Observer { | |
26 public: | |
27 DatabaseDispatcherHost(webkit_database::DatabaseTracker* db_tracker, | |
28 IPC::Message::Sender* sender, | |
29 HostContentSettingsMap *host_content_settings_map); | |
30 void Init(base::ProcessHandle process_handle); | |
31 void Shutdown(); | |
32 | |
33 bool OnMessageReceived(const IPC::Message& message, bool* message_was_ok); | |
34 | |
35 // VFS message handlers (IO thread) | |
36 void OnDatabaseOpenFile(const string16& vfs_file_name, | |
37 int desired_flags, | |
38 IPC::Message* reply_msg); | |
39 void OnDatabaseDeleteFile(const string16& vfs_file_name, | |
40 const bool& sync_dir, | |
41 IPC::Message* reply_msg); | |
42 void OnDatabaseGetFileAttributes(const string16& vfs_file_name, | |
43 IPC::Message* reply_msg); | |
44 void OnDatabaseGetFileSize(const string16& vfs_file_name, | |
45 IPC::Message* reply_msg); | |
46 | |
47 // Database tracker message handlers (IO thread) | |
48 void OnDatabaseOpened(const string16& origin_identifier, | |
49 const string16& database_name, | |
50 const string16& description, | |
51 int64 estimated_size); | |
52 void OnDatabaseModified(const string16& origin_identifier, | |
53 const string16& database_name); | |
54 void OnDatabaseClosed(const string16& origin_identifier, | |
55 const string16& database_name); | |
56 void OnAllowDatabase(const std::string& origin_url, | |
57 const string16& name, | |
58 const string16& display_name, | |
59 unsigned long estimated_size, | |
60 IPC::Message* reply_msg); | |
61 | |
62 // DatabaseTracker::Observer callbacks (file thread) | |
63 virtual void OnDatabaseSizeChanged(const string16& origin_identifier, | |
64 const string16& database_name, | |
65 int64 database_size, | |
66 int64 space_available); | |
67 virtual void OnDatabaseScheduledForDeletion(const string16& origin_identifier, | |
68 const string16& database_name); | |
69 | |
70 webkit_database::DatabaseTracker* database_tracker() const { | |
71 return db_tracker_.get(); | |
72 } | |
73 | |
74 void Send(IPC::Message* message); | |
75 | |
76 private: | |
77 friend class base::RefCountedThreadSafe<DatabaseDispatcherHost>; | |
78 virtual ~DatabaseDispatcherHost(); | |
79 | |
80 class PromptDelegate; | |
81 | |
82 void AddObserver(); | |
83 void RemoveObserver(); | |
84 | |
85 void ReceivedBadMessage(uint32 msg_type); | |
86 | |
87 // VFS message handlers (file thread) | |
88 void DatabaseOpenFile(const string16& vfs_file_name, | |
89 int desired_flags, | |
90 IPC::Message* reply_msg); | |
91 void DatabaseDeleteFile(const string16& vfs_file_name, | |
92 bool sync_dir, | |
93 IPC::Message* reply_msg, | |
94 int reschedule_count); | |
95 void DatabaseGetFileAttributes(const string16& vfs_file_name, | |
96 IPC::Message* reply_msg); | |
97 void DatabaseGetFileSize(const string16& vfs_file_name, | |
98 IPC::Message* reply_msg); | |
99 | |
100 // Database tracker message handlers (file thread) | |
101 void DatabaseOpened(const string16& origin_identifier, | |
102 const string16& database_name, | |
103 const string16& description, | |
104 int64 estimated_size); | |
105 void DatabaseModified(const string16& origin_identifier, | |
106 const string16& database_name); | |
107 void DatabaseClosed(const string16& origin_identifier, | |
108 const string16& database_name); | |
109 | |
110 // CookiePromptModalDialog response handler (io thread) | |
111 void AllowDatabaseResponse(IPC::Message* reply_msg, | |
112 ContentSetting content_setting); | |
113 | |
114 // The database tracker for the current profile. | |
115 scoped_refptr<webkit_database::DatabaseTracker> db_tracker_; | |
116 | |
117 // The sender to be used for sending out IPC messages. | |
118 IPC::Message::Sender* message_sender_; | |
119 | |
120 // The handle of this process. | |
121 base::ProcessHandle process_handle_; | |
122 | |
123 // True if and only if this instance was added as an observer | |
124 // to DatabaseTracker. | |
125 bool observer_added_; | |
126 | |
127 // If true, all messages that are normally processed by this class | |
128 // will be silently discarded. This field should be set to true | |
129 // only when the corresponding renderer process is about to go away. | |
130 bool shutdown_; | |
131 | |
132 // Keeps track of all DB connections opened by this renderer | |
133 webkit_database::DatabaseConnections database_connections_; | |
134 | |
135 // Used to look up permissions at database creation time. | |
136 scoped_refptr<HostContentSettingsMap> host_content_settings_map_; | |
137 }; | |
138 | |
139 #endif // CHROME_BROWSER_RENDERER_HOST_DATABASE_DISPATCHER_HOST_H_ | |
OLD | NEW |