summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordumi@chromium.org <dumi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-20 22:19:38 +0000
committerdumi@chromium.org <dumi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-20 22:19:38 +0000
commitc6a7b86c54d8b920943c97d990268ba1aee7b04b (patch)
tree9855910f1fa828374dc17d8ae375323d83cc4b1d
parentcef8f4b2e19291efaacc00de6f6f36b46995d3cb (diff)
downloadchromium_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.cc14
-rw-r--r--chrome/renderer/render_thread.h13
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);
};