Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(157)

Side by Side Diff: webkit/tools/test_shell/simple_database_system.cc

Issue 384118: Enables most DB layout tests in test_shell. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Fixed the test_expectations.txt line describing the state of hash-change-with-xhr.html. Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
2 // source code is governed by a BSD-style license that can be found in the 2 // source code is governed by a BSD-style license that can be found in the
3 // LICENSE file. 3 // LICENSE file.
4 4
5 #include "webkit/tools/test_shell/simple_database_system.h" 5 #include "webkit/tools/test_shell/simple_database_system.h"
6 6
7 #if defined(USE_SYSTEM_SQLITE) 7 #if defined(USE_SYSTEM_SQLITE)
8 #include <sqlite3.h> 8 #include <sqlite3.h>
9 #else 9 #else
10 #include "third_party/sqlite/preprocessed/sqlite3.h" 10 #include "third_party/sqlite/preprocessed/sqlite3.h"
11 #endif 11 #endif
12 12
13 #include "base/file_util.h" 13 #include "base/file_util.h"
14 #include "base/platform_thread.h" 14 #include "base/platform_thread.h"
15 #include "base/process_util.h" 15 #include "base/process_util.h"
16 #include "third_party/WebKit/WebKit/chromium/public/WebDatabase.h"
17 #include "third_party/WebKit/WebKit/chromium/public/WebString.h"
18 #include "webkit/database/database_util.h"
16 #include "webkit/database/vfs_backend.h" 19 #include "webkit/database/vfs_backend.h"
17 #include "webkit/glue/webkit_glue.h"
18 20
21 using webkit_database::DatabaseTracker;
22 using webkit_database::DatabaseUtil;
19 using webkit_database::VfsBackend; 23 using webkit_database::VfsBackend;
20 24
21 SimpleDatabaseSystem* SimpleDatabaseSystem::instance_ = NULL; 25 SimpleDatabaseSystem* SimpleDatabaseSystem::instance_ = NULL;
22 26
23 SimpleDatabaseSystem* SimpleDatabaseSystem::GetInstance() { 27 SimpleDatabaseSystem* SimpleDatabaseSystem::GetInstance() {
24 DCHECK(instance_); 28 DCHECK(instance_);
25 return instance_; 29 return instance_;
26 } 30 }
27 31
28 SimpleDatabaseSystem::SimpleDatabaseSystem() 32 SimpleDatabaseSystem::SimpleDatabaseSystem() {
29 : hack_main_db_handle_(base::kInvalidPlatformFileValue) {
30 temp_dir_.CreateUniqueTempDir(); 33 temp_dir_.CreateUniqueTempDir();
34 db_tracker_ = new DatabaseTracker(temp_dir_.path());
31 DCHECK(!instance_); 35 DCHECK(!instance_);
32 instance_ = this; 36 instance_ = this;
33 } 37 }
34 38
35 SimpleDatabaseSystem::~SimpleDatabaseSystem() { 39 SimpleDatabaseSystem::~SimpleDatabaseSystem() {
36 base::ClosePlatformFile(hack_main_db_handle_);
37 instance_ = NULL; 40 instance_ = NULL;
38 } 41 }
39 42
40 base::PlatformFile SimpleDatabaseSystem::OpenFile( 43 base::PlatformFile SimpleDatabaseSystem::OpenFile(
41 const FilePath& file_name, int desired_flags, 44 const string16& vfs_file_name, int desired_flags,
42 base::PlatformFile* dir_handle) { 45 base::PlatformFile* dir_handle) {
43 base::PlatformFile file_handle = base::kInvalidPlatformFileValue; 46 base::PlatformFile file_handle = base::kInvalidPlatformFileValue;
47 FilePath file_name =
48 DatabaseUtil::GetFullFilePathForVfsFile(db_tracker_, vfs_file_name);
44 if (file_name.empty()) { 49 if (file_name.empty()) {
45 VfsBackend::OpenTempFileInDirectory( 50 VfsBackend::OpenTempFileInDirectory(
46 GetDBDir(), desired_flags, base::GetCurrentProcessHandle(), 51 db_tracker_->DatabaseDirectory(), desired_flags,
47 &file_handle, dir_handle); 52 base::GetCurrentProcessHandle(), &file_handle, dir_handle);
48 } else { 53 } else {
49 VfsBackend::OpenFile(GetDBFileFullPath(file_name), desired_flags, 54 VfsBackend::OpenFile(file_name, desired_flags,
50 base::GetCurrentProcessHandle(), &file_handle, 55 base::GetCurrentProcessHandle(), &file_handle,
51 dir_handle); 56 dir_handle);
52 } 57 }
53 58
54 // HACK: Currently, the DB object that keeps track of the main database
55 // (DatabaseTracker) is a singleton that is declared as a static variable
56 // in a function, so it gets destroyed at the very end of the program.
57 // Because of that, we have a handle opened to the main DB file until the
58 // very end of the program, which prevents temp_dir_'s destructor from
59 // deleting the database directory.
60 //
61 // We will properly solve this problem when we reimplement DatabaseTracker.
62 // For now, however, we are going to take advantage of the fact that in order
63 // to do anything related to DBs, we have to call openDatabase() first, which
64 // opens a handle to the main DB before opening handles to any other DB files.
65 // We are going to cache the first file handle we get, and we are going to
66 // manually close it in the destructor.
67 if (hack_main_db_handle_ == base::kInvalidPlatformFileValue) {
68 hack_main_db_handle_ = file_handle;
69 }
70
71 return file_handle; 59 return file_handle;
72 } 60 }
73 61
74 int SimpleDatabaseSystem::DeleteFile( 62 int SimpleDatabaseSystem::DeleteFile(
75 const FilePath& file_name, bool sync_dir) { 63 const string16& vfs_file_name, bool sync_dir) {
76 // We try to delete the file multiple times, because that's what the default 64 // We try to delete the file multiple times, because that's what the default
77 // VFS does (apparently deleting a file can sometimes fail on Windows). 65 // VFS does (apparently deleting a file can sometimes fail on Windows).
78 // We sleep for 10ms between retries for the same reason. 66 // We sleep for 10ms between retries for the same reason.
79 const int kNumDeleteRetries = 3; 67 const int kNumDeleteRetries = 3;
80 int num_retries = 0; 68 int num_retries = 0;
81 int error_code = SQLITE_OK; 69 int error_code = SQLITE_OK;
70 FilePath file_name =
71 DatabaseUtil::GetFullFilePathForVfsFile(db_tracker_, vfs_file_name);
82 do { 72 do {
83 error_code = VfsBackend::DeleteFile( 73 error_code = VfsBackend::DeleteFile(file_name, sync_dir);
84 GetDBFileFullPath(file_name), sync_dir);
85 } while ((++num_retries < kNumDeleteRetries) && 74 } while ((++num_retries < kNumDeleteRetries) &&
86 (error_code == SQLITE_IOERR_DELETE) && 75 (error_code == SQLITE_IOERR_DELETE) &&
87 (PlatformThread::Sleep(10), 1)); 76 (PlatformThread::Sleep(10), 1));
88 77
89 return error_code; 78 return error_code;
90 } 79 }
91 80
92 long SimpleDatabaseSystem::GetFileAttributes( 81 long SimpleDatabaseSystem::GetFileAttributes(const string16& vfs_file_name) {
93 const FilePath& file_name) { 82 return VfsBackend::GetFileAttributes(
94 return VfsBackend::GetFileAttributes(GetDBFileFullPath(file_name)); 83 DatabaseUtil::GetFullFilePathForVfsFile(db_tracker_, vfs_file_name));
95 } 84 }
96 85
97 long long SimpleDatabaseSystem::GetFileSize( 86 long long SimpleDatabaseSystem::GetFileSize(const string16& vfs_file_name) {
98 const FilePath& file_name) { 87 return VfsBackend::GetFileSize(
99 return VfsBackend::GetFileSize(GetDBFileFullPath(file_name)); 88 DatabaseUtil::GetFullFilePathForVfsFile(db_tracker_, vfs_file_name));
89 }
90
91 void SimpleDatabaseSystem::DatabaseOpened(const string16& origin_identifier,
92 const string16& database_name,
93 const string16& description,
94 int64 estimated_size) {
95 int64 database_size = 0;
96 int64 space_available = 0;
97 db_tracker_->DatabaseOpened(origin_identifier, database_name, description,
98 estimated_size, &database_size, &space_available);
99 OnDatabaseSizeChanged(origin_identifier, database_name,
100 database_size, space_available);
101 }
102
103 void SimpleDatabaseSystem::DatabaseModified(const string16& origin_identifier,
104 const string16& database_name) {
105 db_tracker_->DatabaseModified(origin_identifier, database_name);
106 }
107
108 void SimpleDatabaseSystem::DatabaseClosed(const string16& origin_identifier,
109 const string16& database_name) {
110 db_tracker_->DatabaseClosed(origin_identifier, database_name);
111 }
112
113 void SimpleDatabaseSystem::OnDatabaseSizeChanged(
114 const string16& origin_identifier,
115 const string16& database_name,
116 int64 database_size,
117 int64 space_available) {
118 WebKit::WebDatabase::updateDatabaseSize(
119 origin_identifier, database_name, database_size, space_available);
120 }
121
122 void SimpleDatabaseSystem::databaseOpened(const WebKit::WebDatabase& database) {
123 DatabaseOpened(database.securityOrigin().databaseIdentifier(),
124 database.name(), database.displayName(),
125 database.estimatedSize());
126 }
127
128 void SimpleDatabaseSystem::databaseModified(
129 const WebKit::WebDatabase& database) {
130 DatabaseModified(database.securityOrigin().databaseIdentifier(),
131 database.name());
132 }
133
134 void SimpleDatabaseSystem::databaseClosed(const WebKit::WebDatabase& database) {
135 DatabaseClosed(database.securityOrigin().databaseIdentifier(),
136 database.name());
100 } 137 }
101 138
102 void SimpleDatabaseSystem::ClearAllDatabases() { 139 void SimpleDatabaseSystem::ClearAllDatabases() {
103 // TODO(dumi): implement this once we refactor DatabaseTracker 140 db_tracker_->CloseTrackerDatabaseAndClearCaches();
104 //file_util::Delete(GetDBDir(), true); 141 file_util::Delete(db_tracker_->DatabaseDirectory(), true);
105 } 142 }
106
107 FilePath SimpleDatabaseSystem::GetDBDir() {
108 return temp_dir_.path().Append(FILE_PATH_LITERAL("databases"));
109 }
110
111 FilePath SimpleDatabaseSystem::GetDBFileFullPath(const FilePath& file_name) {
112 return GetDBDir().Append(file_name);
113 }
OLDNEW
« no previous file with comments | « webkit/tools/test_shell/simple_database_system.h ('k') | webkit/tools/test_shell/test_shell_webkit_init.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698