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

Side by Side Diff: chrome/renderer/render_thread.cc

Issue 27222: Chrome side to implement WebMimeRegistry. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <windows.h> 8 #include <windows.h>
9 #include <objbase.h> 9 #include <objbase.h>
10 #endif 10 #endif
(...skipping 11 matching lines...) Expand all
22 #include "chrome/plugin/plugin_channel.h" 22 #include "chrome/plugin/plugin_channel.h"
23 #else 23 #else
24 #include <vector> 24 #include <vector>
25 #include "base/scoped_handle.h" 25 #include "base/scoped_handle.h"
26 #include "chrome/plugin/plugin_channel_base.h" 26 #include "chrome/plugin/plugin_channel_base.h"
27 #include "webkit/glue/weburlrequest.h" 27 #include "webkit/glue/weburlrequest.h"
28 #endif 28 #endif
29 #include "chrome/renderer/net/render_dns_master.h" 29 #include "chrome/renderer/net/render_dns_master.h"
30 #include "chrome/renderer/render_process.h" 30 #include "chrome/renderer/render_process.h"
31 #include "chrome/renderer/render_view.h" 31 #include "chrome/renderer/render_view.h"
32 #include "chrome/renderer/renderer_webkitclient_impl.h"
32 #include "chrome/renderer/user_script_slave.h" 33 #include "chrome/renderer/user_script_slave.h"
33 #include "chrome/renderer/visitedlink_slave.h" 34 #include "chrome/renderer/visitedlink_slave.h"
34 #include "webkit/glue/cache_manager.h" 35 #include "webkit/glue/cache_manager.h"
35 #include "webkit/glue/webkit_client_impl.h"
36 36
37 #include "WebKit.h" 37 #include "WebKit.h"
38 38
39 static const unsigned int kCacheStatsDelayMS = 2000 /* milliseconds */; 39 static const unsigned int kCacheStatsDelayMS = 2000 /* milliseconds */;
40 40
41 // V8 needs a 1MB stack size. 41 // V8 needs a 1MB stack size.
42 static const size_t kStackSize = 1024 * 1024; 42 static const size_t kStackSize = 1024 * 1024;
43 43
44 //----------------------------------------------------------------------------- 44 //-----------------------------------------------------------------------------
45 // Methods below are only called on the owner's thread: 45 // Methods below are only called on the owner's thread:
46 46
47 // When we run plugins in process, we actually run them on the render thread, 47 // When we run plugins in process, we actually run them on the render thread,
48 // which means that we need to make the render thread pump UI events. 48 // which means that we need to make the render thread pump UI events.
49 RenderThread::RenderThread() 49 RenderThread::RenderThread()
50 : ChildThread( 50 : ChildThread(
51 base::Thread::Options(RenderProcess::InProcessPlugins() ? 51 base::Thread::Options(RenderProcess::InProcessPlugins() ?
52 MessageLoop::TYPE_UI : MessageLoop::TYPE_DEFAULT, kStackSize)), 52 MessageLoop::TYPE_UI : MessageLoop::TYPE_DEFAULT, kStackSize)) {
53 visited_link_slave_(NULL),
54 user_script_slave_(NULL),
55 render_dns_master_(NULL) {
56 } 53 }
57 54
58 RenderThread::RenderThread(const std::wstring& channel_name) 55 RenderThread::RenderThread(const std::wstring& channel_name)
59 : ChildThread( 56 : ChildThread(
60 base::Thread::Options(RenderProcess::InProcessPlugins() ? 57 base::Thread::Options(RenderProcess::InProcessPlugins() ?
61 MessageLoop::TYPE_UI : MessageLoop::TYPE_DEFAULT, kStackSize)), 58 MessageLoop::TYPE_UI : MessageLoop::TYPE_DEFAULT, kStackSize)) {
62 visited_link_slave_(NULL),
63 user_script_slave_(NULL),
64 render_dns_master_(NULL),
65 renderer_histogram_snapshots_(NULL) {
66 SetChannelName(channel_name); 59 SetChannelName(channel_name);
67 } 60 }
68 61
69 RenderThread::~RenderThread() { 62 RenderThread::~RenderThread() {
70 } 63 }
71 64
72 RenderThread* RenderThread::current() { 65 RenderThread* RenderThread::current() {
73 DCHECK(!IsPluginProcess()); 66 DCHECK(!IsPluginProcess());
74 return static_cast<RenderThread*>(ChildThread::current()); 67 return static_cast<RenderThread*>(ChildThread::current());
75 } 68 }
76 69
77 void RenderThread::AddFilter(IPC::ChannelProxy::MessageFilter* filter) { 70 void RenderThread::AddFilter(IPC::ChannelProxy::MessageFilter* filter) {
78 channel()->AddFilter(filter); 71 channel()->AddFilter(filter);
79 } 72 }
80 73
81 void RenderThread::RemoveFilter(IPC::ChannelProxy::MessageFilter* filter) { 74 void RenderThread::RemoveFilter(IPC::ChannelProxy::MessageFilter* filter) {
82 channel()->RemoveFilter(filter); 75 channel()->RemoveFilter(filter);
83 } 76 }
84 77
85 void RenderThread::Resolve(const char* name, size_t length) { 78 void RenderThread::Resolve(const char* name, size_t length) {
86 return render_dns_master_->Resolve(name, length); 79 return dns_master_->Resolve(name, length);
87 } 80 }
88 81
89 void RenderThread::SendHistograms() { 82 void RenderThread::SendHistograms() {
90 return renderer_histogram_snapshots_->SendHistograms(); 83 return histogram_snapshots_->SendHistograms();
91 } 84 }
92 85
93 void RenderThread::Init() { 86 void RenderThread::Init() {
87 // TODO(darin): Why do we need COM here? This is probably bogus.
88 #if defined(OS_WIN)
89 // The renderer thread should wind-up COM.
90 CoInitialize(0);
91 #endif
92
94 ChildThread::Init(); 93 ChildThread::Init();
95 notification_service_.reset(new NotificationService); 94 notification_service_.reset(new NotificationService);
96 cache_stats_factory_.reset( 95 cache_stats_factory_.reset(
97 new ScopedRunnableMethodFactory<RenderThread>(this)); 96 new ScopedRunnableMethodFactory<RenderThread>(this));
98 97
99 #if defined(OS_WIN) 98 webkit_client_impl_.reset(new RendererWebKitClientImpl);
100 // The renderer thread should wind-up COM.
101 CoInitialize(0);
102 #endif
103
104 webkit_client_impl_.reset(new webkit_glue::WebKitClientImpl);
105 WebKit::initialize(webkit_client_impl_.get()); 99 WebKit::initialize(webkit_client_impl_.get());
106 100
107 visited_link_slave_ = new VisitedLinkSlave(); 101 visited_link_slave_.reset(new VisitedLinkSlave());
108 user_script_slave_ = new UserScriptSlave(); 102 user_script_slave_.reset(new UserScriptSlave());
109 render_dns_master_.reset(new RenderDnsMaster()); 103 dns_master_.reset(new RenderDnsMaster());
110 renderer_histogram_snapshots_.reset(new RendererHistogramSnapshots()); 104 histogram_snapshots_.reset(new RendererHistogramSnapshots());
111 } 105 }
112 106
113 void RenderThread::CleanUp() { 107 void RenderThread::CleanUp() {
108 // Shutdown in reverse of the initialization order.
109
110 histogram_snapshots_.reset();
111 dns_master_.reset();
112 user_script_slave_.reset();
113 visited_link_slave_.reset();
114
115 WebKit::shutdown();
116
117 notification_service_.reset();
118
114 ChildThread::CleanUp(); 119 ChildThread::CleanUp();
115 120
116 // TODO(port) 121 // TODO(port)
117 #if defined(OS_WIN) 122 #if defined(OS_WIN)
118 // Clean up plugin channels before this thread goes away. 123 // Clean up plugin channels before this thread goes away.
119 PluginChannelBase::CleanupChannels(); 124 PluginChannelBase::CleanupChannels();
120 #endif 125 #endif
121 126
122 notification_service_.reset();
123
124 delete visited_link_slave_;
125 visited_link_slave_ = NULL;
126
127 delete user_script_slave_;
128 user_script_slave_ = NULL;
129
130 #if defined(OS_WIN) 127 #if defined(OS_WIN)
131 CoUninitialize(); 128 CoUninitialize();
132 #endif 129 #endif
133 } 130 }
134 131
135 void RenderThread::OnUpdateVisitedLinks(base::SharedMemoryHandle table) { 132 void RenderThread::OnUpdateVisitedLinks(base::SharedMemoryHandle table) {
136 DCHECK(base::SharedMemory::IsHandleValid(table)) << "Bad table handle"; 133 DCHECK(base::SharedMemory::IsHandleValid(table)) << "Bad table handle";
137 visited_link_slave_->Init(table); 134 visited_link_slave_->Init(table);
138 } 135 }
139 136
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 void RenderThread::InformHostOfCacheStatsLater() { 240 void RenderThread::InformHostOfCacheStatsLater() {
244 // Rate limit informing the host of our cache stats. 241 // Rate limit informing the host of our cache stats.
245 if (!cache_stats_factory_->empty()) 242 if (!cache_stats_factory_->empty())
246 return; 243 return;
247 244
248 MessageLoop::current()->PostDelayedTask(FROM_HERE, 245 MessageLoop::current()->PostDelayedTask(FROM_HERE,
249 cache_stats_factory_->NewRunnableMethod( 246 cache_stats_factory_->NewRunnableMethod(
250 &RenderThread::InformHostOfCacheStats), 247 &RenderThread::InformHostOfCacheStats),
251 kCacheStatsDelayMS); 248 kCacheStatsDelayMS);
252 } 249 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698