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.
5 #ifndef WEBKIT_SUPPORT_SIMPLE_DATABASE_SYSTEM_H_
6 #define WEBKIT_SUPPORT_SIMPLE_DATABASE_SYSTEM_H_
8 #include "base/file_path.h"
9 #include "base/files/scoped_temp_dir.h"
10 #include "base/hash_tables.h"
11 #include "base/memory/ref_counted.h"
12 #include "base/platform_file.h"
13 #include "base/string16.h"
14 #include "base/synchronization/lock.h"
15 #include "base/threading/thread.h"
16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDatabaseObserver.h"
17 #include "webkit/database/database_connections.h"
18 #include "webkit/database/database_tracker.h"
21 class MessageLoopProxy
;
25 class SimpleDatabaseSystem
: public webkit_database::DatabaseTracker::Observer
,
26 public WebKit::WebDatabaseObserver
{
28 static SimpleDatabaseSystem
* GetInstance();
30 SimpleDatabaseSystem();
31 virtual ~SimpleDatabaseSystem();
33 // WebDatabaseObserver implementation, these are called on the script
34 // execution context thread on which the database is opened. This may be
35 // the main thread or background WebWorker threads.
36 virtual void databaseOpened(const WebKit::WebDatabase
& database
);
37 virtual void databaseModified(const WebKit::WebDatabase
& database
);
38 virtual void databaseClosed(const WebKit::WebDatabase
& database
);
40 // SQLite VFS related methods, these are called on webcore's
41 // background database threads via the WebKitPlatformSupport impl.
42 base::PlatformFile
OpenFile(const string16
& vfs_file_name
, int desired_flags
);
43 int DeleteFile(const string16
& vfs_file_name
, bool sync_dir
);
44 uint32
GetFileAttributes(const string16
& vfs_file_name
);
45 int64
GetFileSize(const string16
& vfs_file_name
);
46 int64
GetSpaceAvailable(const string16
& origin_identifier
);
48 // For use by testRunner, called on the main thread.
49 void ClearAllDatabases();
50 void SetDatabaseQuota(int64 quota
);
53 // Used by our WebDatabaseObserver impl, only called on the db_thread
54 void DatabaseOpened(const string16
& origin_identifier
,
55 const string16
& database_name
,
56 const string16
& description
,
57 int64 estimated_size
);
58 void DatabaseModified(const string16
& origin_identifier
,
59 const string16
& database_name
);
60 void DatabaseClosed(const string16
& origin_identifier
,
61 const string16
& database_name
);
63 // DatabaseTracker::Observer implementation
64 virtual void OnDatabaseSizeChanged(const string16
& origin_identifier
,
65 const string16
& database_name
,
66 int64 database_size
) OVERRIDE
;
67 virtual void OnDatabaseScheduledForDeletion(
68 const string16
& origin_identifier
,
69 const string16
& database_name
) OVERRIDE
;
71 // Used by our public SQLite VFS methods, only called on the db_thread.
72 void VfsOpenFile(const string16
& vfs_file_name
, int desired_flags
,
73 base::PlatformFile
* result
, base::WaitableEvent
* done_event
);
74 void VfsDeleteFile(const string16
& vfs_file_name
, bool sync_dir
,
75 int* result
, base::WaitableEvent
* done_event
);
76 void VfsGetFileAttributes(const string16
& vfs_file_name
,
77 uint32
* result
, base::WaitableEvent
* done_event
);
78 void VfsGetFileSize(const string16
& vfs_file_name
,
79 int64
* result
, base::WaitableEvent
* done_event
);
80 void VfsGetSpaceAvailable(const string16
& origin_identifier
,
81 int64
* result
, base::WaitableEvent
* done_event
);
83 base::FilePath
GetFullFilePathForVfsFile(const string16
& vfs_file_name
);
86 void ThreadCleanup(base::WaitableEvent
* done_event
);
88 // Where the tracker database file and per origin database files reside.
89 base::ScopedTempDir temp_dir_
;
91 // All access to the db_tracker (except for its construction) and
92 // vfs operations are serialized on a background thread.
93 base::Thread db_thread_
;
94 scoped_refptr
<base::MessageLoopProxy
> db_thread_proxy_
;
95 scoped_refptr
<webkit_database::DatabaseTracker
> db_tracker_
;
96 int64 quota_per_origin_
;
98 // Data members to support waiting for all connections to be closed.
99 scoped_refptr
<webkit_database::DatabaseConnectionsWrapper
> open_connections_
;
101 static SimpleDatabaseSystem
* instance_
;
104 #endif // WEBKIT_SUPPORT_SIMPLE_DATABASE_SYSTEM_H_