diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-03 23:12:42 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-03 23:12:42 +0000 |
commit | 79084c2d01586797f762cbb308cb2c204dd9a164 (patch) | |
tree | de83878b22e4641589e8d7ea8bc0fe020c429876 /chrome/browser/renderer_host | |
parent | 755bbc4326d8c6c05900d681e232ec7b069e25c2 (diff) | |
download | chromium_src-79084c2d01586797f762cbb308cb2c204dd9a164.zip chromium_src-79084c2d01586797f762cbb308cb2c204dd9a164.tar.gz chromium_src-79084c2d01586797f762cbb308cb2c204dd9a164.tar.bz2 |
Last patch in removing MessageLoop* caching.
BUG=25354
Review URL: http://codereview.chromium.org/353015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30881 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
7 files changed, 57 insertions, 87 deletions
diff --git a/chrome/browser/renderer_host/cross_site_resource_handler.cc b/chrome/browser/renderer_host/cross_site_resource_handler.cc index 8bc6517..158a4f3 100644 --- a/chrome/browser/renderer_host/cross_site_resource_handler.cc +++ b/chrome/browser/renderer_host/cross_site_resource_handler.cc @@ -7,7 +7,7 @@ #include "chrome/browser/renderer_host/cross_site_resource_handler.h" #include "base/logging.h" -#include "base/message_loop.h" +#include "chrome/browser/chrome_thread.h" #include "chrome/browser/renderer_host/render_view_host.h" #include "chrome/browser/renderer_host/render_view_host_delegate.h" #include "chrome/browser/renderer_host/resource_dispatcher_host_request_info.h" @@ -161,10 +161,10 @@ bool CrossSiteResourceHandler::OnResponseCompleted( // Here the request was canceled, which happens when selecting "take me // back" from an interstitial. Nothing to do but cancel the pending // render view host. - CancelPendingRenderViewTask* task = - new CancelPendingRenderViewTask(render_process_host_id_, - render_view_id_); - rdh_->ui_loop()->PostTask(FROM_HERE, task); + ChromeThread::PostTask( + ChromeThread::UI, FROM_HERE, + new CancelPendingRenderViewTask( + render_process_host_id_, render_view_id_)); return next_handler_->OnResponseCompleted(request_id, status, security_info); } else { @@ -266,9 +266,8 @@ void CrossSiteResourceHandler::StartCrossSiteTransition( // Tell the tab responsible for this request that a cross-site response is // starting, so that it can tell its old renderer to run its onunload // handler now. We will wait to hear the corresponding ClosePage_ACK. - CrossSiteNotifyTask* task = - new CrossSiteNotifyTask(render_process_host_id_, - render_view_id_, - request_id); - rdh_->ui_loop()->PostTask(FROM_HERE, task); + ChromeThread::PostTask( + ChromeThread::UI, FROM_HERE, + new CrossSiteNotifyTask( + render_process_host_id_, render_view_id_, request_id)); } diff --git a/chrome/browser/renderer_host/database_dispatcher_host.cc b/chrome/browser/renderer_host/database_dispatcher_host.cc index f4c7e3b..c13f8c7 100644 --- a/chrome/browser/renderer_host/database_dispatcher_host.cc +++ b/chrome/browser/renderer_host/database_dispatcher_host.cc @@ -14,8 +14,7 @@ #include "third_party/sqlite/preprocessed/sqlite3.h" #endif -#include "base/thread.h" -#include "chrome/browser/browser_process.h" +#include "chrome/browser/chrome_thread.h" #include "chrome/browser/renderer_host/resource_message_filter.h" #include "chrome/common/render_messages.h" #include "webkit/database/vfs_backend.h" @@ -61,8 +60,7 @@ static void SendMessage(ResourceMessageFilter* sender, // 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. -static void DatabaseOpenFile(MessageLoop* io_thread_message_loop, - const OpenFileParams& params, +static void DatabaseOpenFile(const OpenFileParams& params, int32 message_id, ResourceMessageFilter* sender) { base::PlatformFile target_handle = base::kInvalidPlatformFileValue; @@ -77,7 +75,8 @@ static void DatabaseOpenFile(MessageLoop* io_thread_message_loop, response_params.file_handle = base::FileDescriptor(target_handle, true); response_params.dir_handle = base::FileDescriptor(target_dir_handle, true); #endif - io_thread_message_loop->PostTask(FROM_HERE, + ChromeThread::PostTask( + ChromeThread::IO, FROM_HERE, NewRunnableFunction(SendMessage, sender, new ViewMsg_DatabaseOpenFileResponse(message_id, response_params))); } @@ -86,15 +85,15 @@ static void DatabaseOpenFile(MessageLoop* io_thread_message_loop, // Deletes 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 error code. -static void DatabaseDeleteFile(MessageLoop* io_thread_message_loop, - const DeleteFileParams& params, +static void DatabaseDeleteFile(const DeleteFileParams& params, int32 message_id, int reschedule_count, ResourceMessageFilter* sender) { // Return an error if the file could not be deleted // after kNumDeleteRetries times. if (!reschedule_count) { - io_thread_message_loop->PostTask(FROM_HERE, + ChromeThread::PostTask( + ChromeThread::IO, FROM_HERE, NewRunnableFunction(SendMessage, sender, new ViewMsg_DatabaseDeleteFileResponse(message_id, SQLITE_IOERR_DELETE))); @@ -106,13 +105,14 @@ static void DatabaseDeleteFile(MessageLoop* io_thread_message_loop, if (error_code == SQLITE_IOERR_DELETE) { // If the file could not be deleted, try again. MessageLoop::current()->PostDelayedTask(FROM_HERE, - NewRunnableFunction(DatabaseDeleteFile, io_thread_message_loop, - params, message_id, reschedule_count - 1, sender), + NewRunnableFunction(DatabaseDeleteFile, params, message_id, + reschedule_count - 1, sender), kDelayDeleteRetryMs); return; } - io_thread_message_loop->PostTask(FROM_HERE, + ChromeThread::PostTask( + ChromeThread::IO, FROM_HERE, NewRunnableFunction(SendMessage, sender, new ViewMsg_DatabaseDeleteFileResponse(message_id, error_code))); } @@ -121,12 +121,12 @@ static void DatabaseDeleteFile(MessageLoop* io_thread_message_loop, // Gets the attributes of the given database file, then schedules // a task on the IO thread's message loop to send an IPC back to // corresponding renderer process. -static void DatabaseGetFileAttributes(MessageLoop* io_thread_message_loop, - const FilePath& file_name, +static void DatabaseGetFileAttributes(const FilePath& file_name, int32 message_id, ResourceMessageFilter* sender) { uint32 attributes = VfsBackend::GetFileAttributes(file_name); - io_thread_message_loop->PostTask(FROM_HERE, + ChromeThread::PostTask( + ChromeThread::IO, FROM_HERE, NewRunnableFunction(SendMessage, sender, new ViewMsg_DatabaseGetFileAttributesResponse( message_id, attributes))); @@ -136,12 +136,12 @@ static void DatabaseGetFileAttributes(MessageLoop* io_thread_message_loop, // Gets the size of the given file, then schedules a task // on the IO thread's message loop to send an IPC back to // the corresponding renderer process. -static void DatabaseGetFileSize(MessageLoop* io_thread_message_loop, - const FilePath& file_name, +static void DatabaseGetFileSize(const FilePath& file_name, int32 message_id, ResourceMessageFilter* sender) { int64 size = VfsBackend::GetFileSize(file_name); - io_thread_message_loop->PostTask(FROM_HERE, + ChromeThread::PostTask( + ChromeThread::IO, FROM_HERE, NewRunnableFunction(SendMessage, sender, new ViewMsg_DatabaseGetFileSizeResponse(message_id, size))); } @@ -152,28 +152,11 @@ DatabaseDispatcherHost::DatabaseDispatcherHost( const FilePath& profile_path, ResourceMessageFilter* resource_message_filter) : profile_path_(profile_path), - resource_message_filter_(resource_message_filter), - file_thread_message_loop_( - g_browser_process->file_thread()->message_loop()) { -} - - -bool DatabaseDispatcherHost::IsDBMessage(const IPC::Message& message) { - switch (message.type()) { - case ViewHostMsg_DatabaseOpenFile::ID: - case ViewHostMsg_DatabaseDeleteFile::ID: - case ViewHostMsg_DatabaseGetFileAttributes::ID: - case ViewHostMsg_DatabaseGetFileSize::ID: - return true; - default: - return false; - } + resource_message_filter_(resource_message_filter) { } bool DatabaseDispatcherHost::OnMessageReceived( const IPC::Message& message, bool* message_was_ok) { - if (!IsDBMessage(message)) - return false; *message_was_ok = true; bool handled = true; @@ -230,9 +213,10 @@ void DatabaseDispatcherHost::OnDatabaseOpenFile(const FilePath& file_name, params.desired_flags = desired_flags; params.handle = resource_message_filter_->handle(); resource_message_filter_->AddRef(); - file_thread_message_loop_->PostTask(FROM_HERE, - NewRunnableFunction(DatabaseOpenFile, MessageLoop::current(), - params, message_id, resource_message_filter_)); + ChromeThread::PostTask( + ChromeThread::FILE, FROM_HERE, + NewRunnableFunction( + DatabaseOpenFile, params, message_id, resource_message_filter_)); } void DatabaseDispatcherHost::OnDatabaseDeleteFile( @@ -249,10 +233,11 @@ void DatabaseDispatcherHost::OnDatabaseDeleteFile( params.file_name = db_file_name; params.sync_dir = sync_dir; resource_message_filter_->AddRef(); - file_thread_message_loop_->PostTask(FROM_HERE, - NewRunnableFunction(DatabaseDeleteFile, MessageLoop::current(), - params, message_id, kNumDeleteRetries, - resource_message_filter_)); + ChromeThread::PostTask( + ChromeThread::FILE, FROM_HERE, + NewRunnableFunction( + DatabaseDeleteFile, params, message_id, kNumDeleteRetries, + resource_message_filter_)); } void DatabaseDispatcherHost::OnDatabaseGetFileAttributes( @@ -265,9 +250,11 @@ void DatabaseDispatcherHost::OnDatabaseGetFileAttributes( } resource_message_filter_->AddRef(); - file_thread_message_loop_->PostTask(FROM_HERE, - NewRunnableFunction(DatabaseGetFileAttributes, MessageLoop::current(), - db_file_name, message_id, resource_message_filter_)); + ChromeThread::PostTask( + ChromeThread::FILE, FROM_HERE, + NewRunnableFunction( + DatabaseGetFileAttributes, db_file_name, message_id, + resource_message_filter_)); } void DatabaseDispatcherHost::OnDatabaseGetFileSize( @@ -280,7 +267,9 @@ void DatabaseDispatcherHost::OnDatabaseGetFileSize( } resource_message_filter_->AddRef(); - file_thread_message_loop_->PostTask(FROM_HERE, - NewRunnableFunction(DatabaseGetFileSize, MessageLoop::current(), - db_file_name, message_id, resource_message_filter_)); + ChromeThread::PostTask( + ChromeThread::FILE, FROM_HERE, + NewRunnableFunction( + DatabaseGetFileSize, db_file_name, message_id, + resource_message_filter_)); } diff --git a/chrome/browser/renderer_host/database_dispatcher_host.h b/chrome/browser/renderer_host/database_dispatcher_host.h index 1b59f08..fd403d2 100644 --- a/chrome/browser/renderer_host/database_dispatcher_host.h +++ b/chrome/browser/renderer_host/database_dispatcher_host.h @@ -7,7 +7,6 @@ #include "base/file_path.h" -class MessageLoop; class ResourceMessageFilter; namespace IPC { @@ -23,6 +22,8 @@ class DatabaseDispatcherHost { // Returns true iff the message is HTML5 DB related and was processed. bool OnMessageReceived(const IPC::Message& message, bool* message_was_ok); + private: + // Message handlers. // Processes the request to return a handle to the given DB file. void OnDatabaseOpenFile(const FilePath& file_name, int desired_flags, @@ -41,10 +42,6 @@ class DatabaseDispatcherHost { void OnDatabaseGetFileSize(const FilePath& file_name, int32 message_id); - private: - // Determines if the message is HTML5 DB related. - bool IsDBMessage(const IPC::Message& message); - // Returns the directory where all DB files are stored. FilePath GetDBDir(); @@ -54,11 +51,10 @@ class DatabaseDispatcherHost { // The user data directory. FilePath profile_path_; - // The ResourceMessageFilter instance of this renderer process. + // The ResourceMessageFilter instance of this renderer process. Can't keep + // a refptr or else we'll get into a cycle. It's always ok to use this in + // the IO thread since if the RMF goes away, this object is deleted. ResourceMessageFilter* resource_message_filter_; - - // The message loop of the file thread. - MessageLoop* file_thread_message_loop_; }; #endif // CHROME_BROWSER_RENDERER_HOST_DATABASE_DISPATCHER_HOST_H_ diff --git a/chrome/browser/renderer_host/resource_dispatcher_host.cc b/chrome/browser/renderer_host/resource_dispatcher_host.cc index 13ca1721..8f51253 100644 --- a/chrome/browser/renderer_host/resource_dispatcher_host.cc +++ b/chrome/browser/renderer_host/resource_dispatcher_host.cc @@ -250,12 +250,10 @@ void PopulateResourceResponse(URLRequest* request, } // namespace -ResourceDispatcherHost::ResourceDispatcherHost(MessageLoop* io_loop) - : ui_loop_(MessageLoop::current()), - io_loop_(io_loop), - ALLOW_THIS_IN_INITIALIZER_LIST( +ResourceDispatcherHost::ResourceDispatcherHost() + : ALLOW_THIS_IN_INITIALIZER_LIST( download_file_manager_(new DownloadFileManager(this))), - download_request_manager_(new DownloadRequestManager(io_loop, ui_loop_)), + download_request_manager_(new DownloadRequestManager()), ALLOW_THIS_IN_INITIALIZER_LIST( save_file_manager_(new SaveFileManager(this))), ALLOW_THIS_IN_INITIALIZER_LIST(user_script_listener_( diff --git a/chrome/browser/renderer_host/resource_dispatcher_host.h b/chrome/browser/renderer_host/resource_dispatcher_host.h index 147a7f9..c354b0a 100644 --- a/chrome/browser/renderer_host/resource_dispatcher_host.h +++ b/chrome/browser/renderer_host/resource_dispatcher_host.h @@ -31,7 +31,6 @@ class CrossSiteResourceHandler; class DownloadFileManager; class DownloadRequestManager; class LoginHandler; -class MessageLoop; class PluginService; class ResourceDispatcherHostRequestInfo; class ResourceHandler; @@ -105,8 +104,7 @@ class ResourceDispatcherHost : public URLRequest::Delegate { } }; - // TODO(jam): take the parameter out once 25354 is done. - explicit ResourceDispatcherHost(MessageLoop* io_loop); + ResourceDispatcherHost(); ~ResourceDispatcherHost(); void Initialize(); @@ -193,8 +191,6 @@ class ResourceDispatcherHost : public URLRequest::Delegate { return webkit_thread_.get(); } - MessageLoop* ui_loop() const { return ui_loop_; } - // Called when the onunload handler for a cross-site request has finished. void OnClosePageACK(const ViewMsg_ClosePage_Params& params); @@ -411,13 +407,6 @@ class ResourceDispatcherHost : public URLRequest::Delegate { PendingRequestList pending_requests_; - // We cache the UI message loop so we can create new UI-related objects on it. - MessageLoop* ui_loop_; - - // We cache the IO loop to ensure that GetURLRequest is only called from the - // IO thread. - MessageLoop* io_loop_; - // A timer that periodically calls UpdateLoadStates while pending_requests_ // is not empty. base::RepeatingTimer<ResourceDispatcherHost> update_load_states_timer_; diff --git a/chrome/browser/renderer_host/resource_dispatcher_host_unittest.cc b/chrome/browser/renderer_host/resource_dispatcher_host_unittest.cc index 0b704b9..bbf97c3 100644 --- a/chrome/browser/renderer_host/resource_dispatcher_host_unittest.cc +++ b/chrome/browser/renderer_host/resource_dispatcher_host_unittest.cc @@ -147,7 +147,6 @@ class ResourceDispatcherHostTest : public testing::Test, ResourceDispatcherHostTest() : Receiver(ChildProcessInfo::RENDER_PROCESS, -1), io_thread_(ChromeThread::IO, &message_loop_), - host_(NULL), old_factory_(NULL) { set_handle(base::GetCurrentProcessHandle()); } diff --git a/chrome/browser/renderer_host/safe_browsing_resource_handler.cc b/chrome/browser/renderer_host/safe_browsing_resource_handler.cc index 63cd46d..e33e796 100644 --- a/chrome/browser/renderer_host/safe_browsing_resource_handler.cc +++ b/chrome/browser/renderer_host/safe_browsing_resource_handler.cc @@ -185,8 +185,8 @@ void SafeBrowsingResourceHandler::OnUrlCheckResult( } else { displaying_blocking_page_ = true; safe_browsing_->DisplayBlockingPage( - url, resource_type_, result, this, rdh_->ui_loop(), - render_process_host_id_, render_view_id_); + url, resource_type_, result, this, render_process_host_id_, + render_view_id_); } } |