diff options
author | jabdelmalek@google.com <jabdelmalek@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-06 20:33:36 +0000 |
---|---|---|
committer | jabdelmalek@google.com <jabdelmalek@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-06 20:33:36 +0000 |
commit | 1e9499c21c23b52391d952572bd9059df532efcb (patch) | |
tree | bd96f3ed1bd4226b062085316346c77e6bb999ab /chrome/common/database_util.cc | |
parent | ae2e0f96d38961c160bf54962a55eb1f44a0f943 (diff) | |
download | chromium_src-1e9499c21c23b52391d952572bd9059df532efcb.zip chromium_src-1e9499c21c23b52391d952572bd9059df532efcb.tar.gz chromium_src-1e9499c21c23b52391d952572bd9059df532efcb.tar.bz2 |
Allow synchronous messages to be sent from threads other than the main thread. This simplifies code that needs to do this (i.e. webkit db and file threads).
BUG=23423
Review URL: http://codereview.chromium.org/1601005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43752 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common/database_util.cc')
-rw-r--r-- | chrome/common/database_util.cc | 78 |
1 files changed, 40 insertions, 38 deletions
diff --git a/chrome/common/database_util.cc b/chrome/common/database_util.cc index 7a54724..f149f08 100644 --- a/chrome/common/database_util.cc +++ b/chrome/common/database_util.cc @@ -10,8 +10,9 @@ #include "third_party/sqlite/preprocessed/sqlite3.h" #endif -#include "chrome/common/db_message_filter.h" +#include "chrome/common/child_thread.h" #include "chrome/common/render_messages.h" +#include "ipc/ipc_sync_message_filter.h" #include "third_party/WebKit/WebKit/chromium/public/WebString.h" using WebKit::WebKitClient; @@ -20,58 +21,59 @@ using WebKit::WebString; WebKitClient::FileHandle DatabaseUtil::databaseOpenFile( const WebString& vfs_file_name, int desired_flags, WebKitClient::FileHandle* dir_handle) { - DBMessageFilter* db_message_filter = DBMessageFilter::GetInstance(); - int message_id = db_message_filter->GetUniqueID(); - + IPC::PlatformFileForTransit file_handle; #if defined(OS_WIN) - ViewMsg_DatabaseOpenFileResponse_Params default_response = - { base::kInvalidPlatformFileValue }; + file_handle = base::kInvalidPlatformFileValue; #elif defined(OS_POSIX) - ViewMsg_DatabaseOpenFileResponse_Params default_response = - { base::FileDescriptor(base::kInvalidPlatformFileValue, true), - base::FileDescriptor(base::kInvalidPlatformFileValue, true) }; + file_handle = + base::FileDescriptor(base::kInvalidPlatformFileValue, true); + base::FileDescriptor dir_handle_rv = + base::FileDescriptor(base::kInvalidPlatformFileValue, true); #endif - ViewMsg_DatabaseOpenFileResponse_Params result = - db_message_filter->SendAndWait( - new ViewHostMsg_DatabaseOpenFile( - vfs_file_name, desired_flags, message_id), - message_id, default_response); + scoped_refptr<IPC::SyncMessageFilter> filter = + ChildThread::current()->sync_message_filter(); + + filter->Send(new ViewHostMsg_DatabaseOpenFile( + vfs_file_name, + desired_flags, + &file_handle +#if defined(OS_POSIX) + , &dir_handle_rv +#endif + )); #if defined(OS_WIN) - if (dir_handle) - *dir_handle = base::kInvalidPlatformFileValue; - return result.file_handle; + return file_handle; #elif defined(OS_POSIX) if (dir_handle) - *dir_handle = result.dir_handle.fd; - return result.file_handle.fd; + *dir_handle = dir_handle_rv.fd; + return file_handle.fd; #endif } int DatabaseUtil::databaseDeleteFile( const WebString& vfs_file_name, bool sync_dir) { - DBMessageFilter* db_message_filter = DBMessageFilter::GetInstance(); - int message_id = db_message_filter->GetUniqueID(); - return db_message_filter->SendAndWait( - new ViewHostMsg_DatabaseDeleteFile(vfs_file_name, sync_dir, message_id), - message_id, SQLITE_IOERR_DELETE); + int rv = SQLITE_IOERR_DELETE; + scoped_refptr<IPC::SyncMessageFilter> filter = + ChildThread::current()->sync_message_filter(); + filter->Send(new ViewHostMsg_DatabaseDeleteFile( + vfs_file_name, sync_dir, &rv)); + return rv; } -long DatabaseUtil::databaseGetFileAttributes( - const WebString& vfs_file_name) { - DBMessageFilter* db_message_filter = DBMessageFilter::GetInstance(); - int message_id = db_message_filter->GetUniqueID(); - return db_message_filter->SendAndWait( - new ViewHostMsg_DatabaseGetFileAttributes(vfs_file_name, message_id), - message_id, -1L); +long DatabaseUtil::databaseGetFileAttributes(const WebString& vfs_file_name) { + int32 rv = -1; + scoped_refptr<IPC::SyncMessageFilter> filter = + ChildThread::current()->sync_message_filter(); + filter->Send(new ViewHostMsg_DatabaseGetFileAttributes(vfs_file_name, &rv)); + return rv; } -long long DatabaseUtil::databaseGetFileSize( - const WebString& vfs_file_name) { - DBMessageFilter* db_message_filter = DBMessageFilter::GetInstance(); - int message_id = db_message_filter->GetUniqueID(); - return db_message_filter->SendAndWait( - new ViewHostMsg_DatabaseGetFileSize(vfs_file_name, message_id), - message_id, 0LL); +long long DatabaseUtil::databaseGetFileSize(const WebString& vfs_file_name) { + int64 rv = 0LL; + scoped_refptr<IPC::SyncMessageFilter> filter = + ChildThread::current()->sync_message_filter(); + filter->Send(new ViewHostMsg_DatabaseGetFileSize(vfs_file_name, &rv)); + return rv; } |