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

Unified Diff: chrome/browser/renderer_host/database_dispatcher_host.cc

Issue 1601005: Allow synchronous messages to be sent from threads other than the main thread... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 9 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/renderer_host/database_dispatcher_host.h ('k') | chrome/common/child_thread.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/renderer_host/database_dispatcher_host.cc
===================================================================
--- chrome/browser/renderer_host/database_dispatcher_host.cc (revision 43588)
+++ chrome/browser/renderer_host/database_dispatcher_host.cc (working copy)
@@ -90,12 +90,14 @@
*message_was_ok = true;
bool handled = true;
IPC_BEGIN_MESSAGE_MAP_EX(DatabaseDispatcherHost, message, *message_was_ok)
- IPC_MESSAGE_HANDLER(ViewHostMsg_DatabaseOpenFile, OnDatabaseOpenFile)
- IPC_MESSAGE_HANDLER(ViewHostMsg_DatabaseDeleteFile, OnDatabaseDeleteFile)
- IPC_MESSAGE_HANDLER(ViewHostMsg_DatabaseGetFileAttributes,
- OnDatabaseGetFileAttributes)
- IPC_MESSAGE_HANDLER(ViewHostMsg_DatabaseGetFileSize,
- OnDatabaseGetFileSize)
+ IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_DatabaseOpenFile,
+ OnDatabaseOpenFile)
+ IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_DatabaseDeleteFile,
+ OnDatabaseDeleteFile)
+ IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_DatabaseGetFileAttributes,
+ OnDatabaseGetFileAttributes)
+ IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_DatabaseGetFileSize,
+ OnDatabaseGetFileSize)
IPC_MESSAGE_HANDLER(ViewHostMsg_DatabaseOpened, OnDatabaseOpened)
IPC_MESSAGE_HANDLER(ViewHostMsg_DatabaseModified, OnDatabaseModified)
IPC_MESSAGE_HANDLER(ViewHostMsg_DatabaseClosed, OnDatabaseClosed)
@@ -129,7 +131,7 @@
void DatabaseDispatcherHost::OnDatabaseOpenFile(const string16& vfs_file_name,
int desired_flags,
- int32 message_id) {
+ IPC::Message* reply_msg) {
if (!observer_added_) {
observer_added_ = true;
ChromeThread::PostTask(
@@ -143,28 +145,16 @@
&DatabaseDispatcherHost::DatabaseOpenFile,
vfs_file_name,
desired_flags,
- message_id));
+ reply_msg));
}
-static void SetOpenFileResponseParams(
- ViewMsg_DatabaseOpenFileResponse_Params* params,
- base::PlatformFile file_handle,
- base::PlatformFile dir_handle) {
-#if defined(OS_WIN)
- params->file_handle = file_handle;
-#elif defined(OS_POSIX)
- params->file_handle = base::FileDescriptor(file_handle, true);
- params->dir_handle = base::FileDescriptor(dir_handle, true);
-#endif
-}
-
// Scheduled by the IO thread on the file thread.
// Opens the given database file, then schedules
// a task on the IO thread's message loop to send an IPC back to
// corresponding renderer process with the file handle.
void DatabaseDispatcherHost::DatabaseOpenFile(const string16& vfs_file_name,
int desired_flags,
- int32 message_id) {
+ IPC::Message* reply_msg) {
DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
base::PlatformFile target_handle = base::kInvalidPlatformFileValue;
base::PlatformFile target_dir_handle = base::kInvalidPlatformFileValue;
@@ -186,21 +176,28 @@
}
}
- ViewMsg_DatabaseOpenFileResponse_Params response_params;
- SetOpenFileResponseParams(&response_params, target_handle, target_dir_handle);
- Send(new ViewMsg_DatabaseOpenFileResponse(message_id, response_params));
+ ViewHostMsg_DatabaseOpenFile::WriteReplyParams(
+ reply_msg,
+#if defined(OS_WIN)
+ target_handle
+#elif defined(OS_POSIX)
+ base::FileDescriptor(target_handle, true),
+ base::FileDescriptor(target_dir_handle, true)
+#endif
+ );
+ Send(reply_msg);
}
void DatabaseDispatcherHost::OnDatabaseDeleteFile(const string16& vfs_file_name,
const bool& sync_dir,
- int32 message_id) {
+ IPC::Message* reply_msg) {
ChromeThread::PostTask(
ChromeThread::FILE, FROM_HERE,
NewRunnableMethod(this,
&DatabaseDispatcherHost::DatabaseDeleteFile,
vfs_file_name,
sync_dir,
- message_id,
+ reply_msg,
kNumDeleteRetries));
}
@@ -210,7 +207,7 @@
// corresponding renderer process with the error code.
void DatabaseDispatcherHost::DatabaseDeleteFile(const string16& vfs_file_name,
bool sync_dir,
- int32 message_id,
+ IPC::Message* reply_msg,
int reschedule_count) {
DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
@@ -229,25 +226,26 @@
&DatabaseDispatcherHost::DatabaseDeleteFile,
vfs_file_name,
sync_dir,
- message_id,
+ reply_msg,
reschedule_count - 1),
kDelayDeleteRetryMs);
return;
}
}
- Send(new ViewMsg_DatabaseDeleteFileResponse(message_id, error_code));
+ ViewHostMsg_DatabaseDeleteFile::WriteReplyParams(reply_msg, error_code);
+ Send(reply_msg);
}
void DatabaseDispatcherHost::OnDatabaseGetFileAttributes(
const string16& vfs_file_name,
- int32 message_id) {
+ IPC::Message* reply_msg) {
ChromeThread::PostTask(
ChromeThread::FILE, FROM_HERE,
NewRunnableMethod(this,
&DatabaseDispatcherHost::DatabaseGetFileAttributes,
vfs_file_name,
- message_id));
+ reply_msg));
}
// Scheduled by the IO thread on the file thread.
@@ -256,24 +254,27 @@
// corresponding renderer process.
void DatabaseDispatcherHost::DatabaseGetFileAttributes(
const string16& vfs_file_name,
- int32 message_id) {
+ IPC::Message* reply_msg) {
DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
int32 attributes = -1;
FilePath db_file =
DatabaseUtil::GetFullFilePathForVfsFile(db_tracker_, vfs_file_name);
if (!db_file.empty())
attributes = VfsBackend::GetFileAttributes(db_file);
- Send(new ViewMsg_DatabaseGetFileAttributesResponse(message_id, attributes));
+
+ ViewHostMsg_DatabaseGetFileAttributes::WriteReplyParams(
+ reply_msg, attributes);
+ Send(reply_msg);
}
void DatabaseDispatcherHost::OnDatabaseGetFileSize(
- const string16& vfs_file_name, int32 message_id) {
+ const string16& vfs_file_name, IPC::Message* reply_msg) {
ChromeThread::PostTask(
ChromeThread::FILE, FROM_HERE,
NewRunnableMethod(this,
&DatabaseDispatcherHost::DatabaseGetFileSize,
vfs_file_name,
- message_id));
+ reply_msg));
}
// Scheduled by the IO thread on the file thread.
@@ -281,14 +282,16 @@
// on the IO thread's message loop to send an IPC back to
// the corresponding renderer process.
void DatabaseDispatcherHost::DatabaseGetFileSize(const string16& vfs_file_name,
- int32 message_id) {
+ IPC::Message* reply_msg) {
DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
int64 size = 0;
FilePath db_file =
DatabaseUtil::GetFullFilePathForVfsFile(db_tracker_, vfs_file_name);
if (!db_file.empty())
size = VfsBackend::GetFileSize(db_file);
- Send(new ViewMsg_DatabaseGetFileSizeResponse(message_id, size));
+
+ ViewHostMsg_DatabaseGetFileSize::WriteReplyParams(reply_msg, size);
+ Send(reply_msg);
}
void DatabaseDispatcherHost::OnDatabaseOpened(const string16& origin_identifier,
« no previous file with comments | « chrome/browser/renderer_host/database_dispatcher_host.h ('k') | chrome/common/child_thread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698