diff options
author | dumi@chromium.org <dumi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-20 22:19:38 +0000 |
---|---|---|
committer | dumi@chromium.org <dumi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-20 22:19:38 +0000 |
commit | c6a7b86c54d8b920943c97d990268ba1aee7b04b (patch) | |
tree | 9855910f1fa828374dc17d8ae375323d83cc4b1d | |
parent | cef8f4b2e19291efaacc00de6f6f36b46995d3cb (diff) | |
download | chromium_src-c6a7b86c54d8b920943c97d990268ba1aee7b04b.zip chromium_src-c6a7b86c54d8b920943c97d990268ba1aee7b04b.tar.gz chromium_src-c6a7b86c54d8b920943c97d990268ba1aee7b04b.tar.bz2 |
Add a file thread to the renderer process.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/3151029
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@56917 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/renderer/render_thread.cc | 14 | ||||
-rw-r--r-- | chrome/renderer/render_thread.h | 13 |
2 files changed, 27 insertions, 0 deletions
diff --git a/chrome/renderer/render_thread.cc b/chrome/renderer/render_thread.cc index d89615b..00934cb 100644 --- a/chrome/renderer/render_thread.cc +++ b/chrome/renderer/render_thread.cc @@ -307,6 +307,10 @@ RenderThread::~RenderThread() { db_message_filter_ = NULL; RemoveFilter(devtools_agent_filter_.get()); + // Shutdown the file thread if it's running. + if (file_thread_.get()) + file_thread_->Stop(); + if (webkit_client_.get()) WebKit::shutdown(); @@ -1100,3 +1104,13 @@ std::string RenderThread::GetExtensionIdByBrowseExtent(const GURL& url) { return std::string(); } + +scoped_refptr<base::MessageLoopProxy> +RenderThread::GetFileThreadMessageLoopProxy() { + DCHECK(message_loop() == MessageLoop::current()); + if (!file_thread_.get()) { + file_thread_.reset(new base::Thread("Renderer::FILE")); + file_thread_->Start(); + } + return file_thread_->message_loop_proxy(); +} diff --git a/chrome/renderer/render_thread.h b/chrome/renderer/render_thread.h index 19679cf3..308bb17 100644 --- a/chrome/renderer/render_thread.h +++ b/chrome/renderer/render_thread.h @@ -46,6 +46,11 @@ struct ViewMsg_ExtensionExtentsUpdated_Params; struct ViewMsg_New_Params; struct WebPreferences; +namespace base { +class MessageLoopProxy; +class Thread; +} + namespace IPC { struct ChannelHandle; } @@ -227,6 +232,11 @@ class RenderThread : public RenderThreadBase, std::string GetExtensionIdByBrowseExtent(const GURL& url); + // Returns a MessageLoopProxy instance corresponding to the message loop + // of the thread on which file operations should be run. Must be called + // on the renderer's main thread. + scoped_refptr<base::MessageLoopProxy> GetFileThreadMessageLoopProxy(); + private: virtual void OnControlMessageReceived(const IPC::Message& msg); @@ -365,6 +375,9 @@ class RenderThread : public RenderThreadBase, struct ExtensionInfo; std::vector<ExtensionInfo> extension_extents_; + // A lazily initiated thread on which file operations are run. + scoped_ptr<base::Thread> file_thread_; + DISALLOW_COPY_AND_ASSIGN(RenderThread); }; |