| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/renderer_host/database_message_filter.h" | 5 #include "content/browser/renderer_host/database_message_filter.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/platform_file.h" |
| 9 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| 10 #include "base/threading/thread.h" | 11 #include "base/threading/thread.h" |
| 11 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
| 12 #include "content/browser/user_metrics.h" | 13 #include "content/browser/user_metrics.h" |
| 13 #include "content/common/database_messages.h" | 14 #include "content/common/database_messages.h" |
| 14 #include "content/common/result_codes.h" | 15 #include "content/common/result_codes.h" |
| 15 #include "googleurl/src/gurl.h" | 16 #include "googleurl/src/gurl.h" |
| 16 #include "third_party/sqlite/sqlite3.h" | 17 #include "third_party/sqlite/sqlite3.h" |
| 17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h" | 18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h" |
| 18 #include "webkit/database/database_util.h" | 19 #include "webkit/database/database_util.h" |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 } | 137 } |
| 137 | 138 |
| 138 DatabaseMessageFilter::~DatabaseMessageFilter() { | 139 DatabaseMessageFilter::~DatabaseMessageFilter() { |
| 139 } | 140 } |
| 140 | 141 |
| 141 void DatabaseMessageFilter::OnDatabaseOpenFile(const string16& vfs_file_name, | 142 void DatabaseMessageFilter::OnDatabaseOpenFile(const string16& vfs_file_name, |
| 142 int desired_flags, | 143 int desired_flags, |
| 143 IPC::Message* reply_msg) { | 144 IPC::Message* reply_msg) { |
| 144 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 145 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 145 base::PlatformFile file_handle = base::kInvalidPlatformFileValue; | 146 base::PlatformFile file_handle = base::kInvalidPlatformFileValue; |
| 146 base::PlatformFile target_handle = base::kInvalidPlatformFileValue; | 147 IPC::PlatformFileForTransit target_handle = |
| 148 IPC::InvalidPlatformFileForTransit(); |
| 147 string16 origin_identifier; | 149 string16 origin_identifier; |
| 148 string16 database_name; | 150 string16 database_name; |
| 149 | 151 |
| 150 // When in incognito mode, we want to make sure that all DB files are | 152 // When in incognito mode, we want to make sure that all DB files are |
| 151 // removed when the incognito profile goes away, so we add the | 153 // removed when the incognito profile goes away, so we add the |
| 152 // SQLITE_OPEN_DELETEONCLOSE flag when opening all files, and keep | 154 // SQLITE_OPEN_DELETEONCLOSE flag when opening all files, and keep |
| 153 // open handles to them in the database tracker to make sure they're | 155 // open handles to them in the database tracker to make sure they're |
| 154 // around for as long as needed. | 156 // around for as long as needed. |
| 155 if (vfs_file_name.empty()) { | 157 if (vfs_file_name.empty()) { |
| 156 VfsBackend::OpenTempFileInDirectory(db_tracker_->DatabaseDirectory(), | 158 VfsBackend::OpenTempFileInDirectory(db_tracker_->DatabaseDirectory(), |
| (...skipping 18 matching lines...) Expand all Loading... |
| 175 } else { | 177 } else { |
| 176 VfsBackend::OpenFile(db_file, desired_flags, &file_handle); | 178 VfsBackend::OpenFile(db_file, desired_flags, &file_handle); |
| 177 } | 179 } |
| 178 } | 180 } |
| 179 } | 181 } |
| 180 | 182 |
| 181 // Then we duplicate the file handle to make it useable in the renderer | 183 // Then we duplicate the file handle to make it useable in the renderer |
| 182 // process. The original handle is closed, unless we saved it in the | 184 // process. The original handle is closed, unless we saved it in the |
| 183 // database tracker. | 185 // database tracker. |
| 184 bool auto_close = !db_tracker_->HasSavedIncognitoFileHandle(vfs_file_name); | 186 bool auto_close = !db_tracker_->HasSavedIncognitoFileHandle(vfs_file_name); |
| 185 VfsBackend::GetFileHandleForProcess(peer_handle(), file_handle, | 187 target_handle = |
| 186 &target_handle, auto_close); | 188 IPC::GetFileHandleForProcess(file_handle, peer_handle(), auto_close); |
| 187 | 189 |
| 188 DatabaseHostMsg_OpenFile::WriteReplyParams( | 190 DatabaseHostMsg_OpenFile::WriteReplyParams(reply_msg, target_handle); |
| 189 reply_msg, | |
| 190 #if defined(OS_WIN) | |
| 191 target_handle | |
| 192 #elif defined(OS_POSIX) | |
| 193 base::FileDescriptor(target_handle, auto_close) | |
| 194 #endif | |
| 195 ); | |
| 196 Send(reply_msg); | 191 Send(reply_msg); |
| 197 } | 192 } |
| 198 | 193 |
| 199 void DatabaseMessageFilter::OnDatabaseDeleteFile(const string16& vfs_file_name, | 194 void DatabaseMessageFilter::OnDatabaseDeleteFile(const string16& vfs_file_name, |
| 200 const bool& sync_dir, | 195 const bool& sync_dir, |
| 201 IPC::Message* reply_msg) { | 196 IPC::Message* reply_msg) { |
| 202 DatabaseDeleteFile(vfs_file_name, sync_dir, reply_msg, kNumDeleteRetries); | 197 DatabaseDeleteFile(vfs_file_name, sync_dir, reply_msg, kNumDeleteRetries); |
| 203 } | 198 } |
| 204 | 199 |
| 205 void DatabaseMessageFilter::DatabaseDeleteFile(const string16& vfs_file_name, | 200 void DatabaseMessageFilter::DatabaseDeleteFile(const string16& vfs_file_name, |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 database_size)); | 347 database_size)); |
| 353 } | 348 } |
| 354 } | 349 } |
| 355 | 350 |
| 356 void DatabaseMessageFilter::OnDatabaseScheduledForDeletion( | 351 void DatabaseMessageFilter::OnDatabaseScheduledForDeletion( |
| 357 const string16& origin_identifier, | 352 const string16& origin_identifier, |
| 358 const string16& database_name) { | 353 const string16& database_name) { |
| 359 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 354 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 360 Send(new DatabaseMsg_CloseImmediately(origin_identifier, database_name)); | 355 Send(new DatabaseMsg_CloseImmediately(origin_identifier, database_name)); |
| 361 } | 356 } |
| OLD | NEW |