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 "chrome/common/database_util.h" | 5 #include "chrome/common/database_util.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 "chrome/common/db_message_filter.h" | 13 #include "chrome/common/child_thread.h" |
14 #include "chrome/common/render_messages.h" | 14 #include "chrome/common/render_messages.h" |
| 15 #include "ipc/ipc_sync_message_filter.h" |
15 #include "third_party/WebKit/WebKit/chromium/public/WebString.h" | 16 #include "third_party/WebKit/WebKit/chromium/public/WebString.h" |
16 | 17 |
17 using WebKit::WebKitClient; | 18 using WebKit::WebKitClient; |
18 using WebKit::WebString; | 19 using WebKit::WebString; |
19 | 20 |
20 WebKitClient::FileHandle DatabaseUtil::databaseOpenFile( | 21 WebKitClient::FileHandle DatabaseUtil::databaseOpenFile( |
21 const WebString& vfs_file_name, int desired_flags, | 22 const WebString& vfs_file_name, int desired_flags, |
22 WebKitClient::FileHandle* dir_handle) { | 23 WebKitClient::FileHandle* dir_handle) { |
23 DBMessageFilter* db_message_filter = DBMessageFilter::GetInstance(); | 24 IPC::PlatformFileForTransit file_handle; |
24 int message_id = db_message_filter->GetUniqueID(); | 25 #if defined(OS_WIN) |
| 26 file_handle = base::kInvalidPlatformFileValue; |
| 27 #elif defined(OS_POSIX) |
| 28 file_handle = |
| 29 base::FileDescriptor(base::kInvalidPlatformFileValue, true); |
| 30 base::FileDescriptor dir_handle_rv = |
| 31 base::FileDescriptor(base::kInvalidPlatformFileValue, true); |
| 32 #endif |
| 33 |
| 34 scoped_refptr<IPC::SyncMessageFilter> filter = |
| 35 ChildThread::current()->sync_message_filter(); |
| 36 |
| 37 filter->Send(new ViewHostMsg_DatabaseOpenFile( |
| 38 vfs_file_name, |
| 39 desired_flags, |
| 40 &file_handle |
| 41 #if defined(OS_POSIX) |
| 42 , &dir_handle_rv |
| 43 #endif |
| 44 )); |
25 | 45 |
26 #if defined(OS_WIN) | 46 #if defined(OS_WIN) |
27 ViewMsg_DatabaseOpenFileResponse_Params default_response = | 47 return file_handle; |
28 { base::kInvalidPlatformFileValue }; | |
29 #elif defined(OS_POSIX) | |
30 ViewMsg_DatabaseOpenFileResponse_Params default_response = | |
31 { base::FileDescriptor(base::kInvalidPlatformFileValue, true), | |
32 base::FileDescriptor(base::kInvalidPlatformFileValue, true) }; | |
33 #endif | |
34 | |
35 ViewMsg_DatabaseOpenFileResponse_Params result = | |
36 db_message_filter->SendAndWait( | |
37 new ViewHostMsg_DatabaseOpenFile( | |
38 vfs_file_name, desired_flags, message_id), | |
39 message_id, default_response); | |
40 | |
41 #if defined(OS_WIN) | |
42 if (dir_handle) | |
43 *dir_handle = base::kInvalidPlatformFileValue; | |
44 return result.file_handle; | |
45 #elif defined(OS_POSIX) | 48 #elif defined(OS_POSIX) |
46 if (dir_handle) | 49 if (dir_handle) |
47 *dir_handle = result.dir_handle.fd; | 50 *dir_handle = dir_handle_rv.fd; |
48 return result.file_handle.fd; | 51 return file_handle.fd; |
49 #endif | 52 #endif |
50 } | 53 } |
51 | 54 |
52 int DatabaseUtil::databaseDeleteFile( | 55 int DatabaseUtil::databaseDeleteFile( |
53 const WebString& vfs_file_name, bool sync_dir) { | 56 const WebString& vfs_file_name, bool sync_dir) { |
54 DBMessageFilter* db_message_filter = DBMessageFilter::GetInstance(); | 57 int rv = SQLITE_IOERR_DELETE; |
55 int message_id = db_message_filter->GetUniqueID(); | 58 scoped_refptr<IPC::SyncMessageFilter> filter = |
56 return db_message_filter->SendAndWait( | 59 ChildThread::current()->sync_message_filter(); |
57 new ViewHostMsg_DatabaseDeleteFile(vfs_file_name, sync_dir, message_id), | 60 filter->Send(new ViewHostMsg_DatabaseDeleteFile( |
58 message_id, SQLITE_IOERR_DELETE); | 61 vfs_file_name, sync_dir, &rv)); |
| 62 return rv; |
59 } | 63 } |
60 | 64 |
61 long DatabaseUtil::databaseGetFileAttributes( | 65 long DatabaseUtil::databaseGetFileAttributes(const WebString& vfs_file_name) { |
62 const WebString& vfs_file_name) { | 66 int32 rv = -1; |
63 DBMessageFilter* db_message_filter = DBMessageFilter::GetInstance(); | 67 scoped_refptr<IPC::SyncMessageFilter> filter = |
64 int message_id = db_message_filter->GetUniqueID(); | 68 ChildThread::current()->sync_message_filter(); |
65 return db_message_filter->SendAndWait( | 69 filter->Send(new ViewHostMsg_DatabaseGetFileAttributes(vfs_file_name, &rv)); |
66 new ViewHostMsg_DatabaseGetFileAttributes(vfs_file_name, message_id), | 70 return rv; |
67 message_id, -1L); | |
68 } | 71 } |
69 | 72 |
70 long long DatabaseUtil::databaseGetFileSize( | 73 long long DatabaseUtil::databaseGetFileSize(const WebString& vfs_file_name) { |
71 const WebString& vfs_file_name) { | 74 int64 rv = 0LL; |
72 DBMessageFilter* db_message_filter = DBMessageFilter::GetInstance(); | 75 scoped_refptr<IPC::SyncMessageFilter> filter = |
73 int message_id = db_message_filter->GetUniqueID(); | 76 ChildThread::current()->sync_message_filter(); |
74 return db_message_filter->SendAndWait( | 77 filter->Send(new ViewHostMsg_DatabaseGetFileSize(vfs_file_name, &rv)); |
75 new ViewHostMsg_DatabaseGetFileSize(vfs_file_name, message_id), | 78 return rv; |
76 message_id, 0LL); | |
77 } | 79 } |
OLD | NEW |