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

Side by Side Diff: chrome/browser/renderer_host/browser_render_process_host.cc

Issue 5513001: Add a base class for objects that want to filter messages on the UI thread. ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Fix possible race condition Created 10 years 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 // Represents the browser side of the browser <--> renderer communication 5 // Represents the browser side of the browser <--> renderer communication
6 // channel. There will be one RenderProcessHost per renderer process. 6 // channel. There will be one RenderProcessHost per renderer process.
7 7
8 #include "chrome/browser/renderer_host/browser_render_process_host.h" 8 #include "chrome/browser/renderer_host/browser_render_process_host.h"
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 290
291 accessibility_enabled_ = is_accessibility_enabled; 291 accessibility_enabled_ = is_accessibility_enabled;
292 292
293 // It is possible for an extension process to be reused for non-extension 293 // It is possible for an extension process to be reused for non-extension
294 // content, e.g. if an extension calls window.open. 294 // content, e.g. if an extension calls window.open.
295 extension_process_ = extension_process_ || is_extensions_process; 295 extension_process_ = extension_process_ || is_extensions_process;
296 296
297 // run the IPC channel on the shared IO thread. 297 // run the IPC channel on the shared IO thread.
298 base::Thread* io_thread = g_browser_process->io_thread(); 298 base::Thread* io_thread = g_browser_process->io_thread();
299 299
300 // Construct the AudioRendererHost with the IO thread.
301 audio_renderer_host_ = new AudioRendererHost();
302
303 scoped_refptr<ResourceMessageFilter> resource_message_filter(
304 new ResourceMessageFilter(g_browser_process->resource_dispatcher_host(),
305 id(),
306 audio_renderer_host_.get(),
307 PluginService::GetInstance(),
308 g_browser_process->print_job_manager(),
309 profile(),
310 widget_helper_));
311
312 CommandLine::StringType renderer_prefix; 300 CommandLine::StringType renderer_prefix;
313 #if defined(OS_POSIX) 301 #if defined(OS_POSIX)
314 // A command prefix is something prepended to the command line of the spawned 302 // A command prefix is something prepended to the command line of the spawned
315 // process. It is supported only on POSIX systems. 303 // process. It is supported only on POSIX systems.
316 const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess(); 304 const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess();
317 renderer_prefix = 305 renderer_prefix =
318 browser_command_line.GetSwitchValueNative(switches::kRendererCmdPrefix); 306 browser_command_line.GetSwitchValueNative(switches::kRendererCmdPrefix);
319 #endif // defined(OS_POSIX) 307 #endif // defined(OS_POSIX)
320 308
321 // Find the renderer before creating the channel so if this fails early we 309 // Find the renderer before creating the channel so if this fails early we
322 // return without creating the channel. 310 // return without creating the channel.
323 FilePath renderer_path = 311 FilePath renderer_path =
324 ChildProcessHost::GetChildPath(renderer_prefix.empty()); 312 ChildProcessHost::GetChildPath(renderer_prefix.empty());
325 if (renderer_path.empty()) 313 if (renderer_path.empty())
326 return false; 314 return false;
327 315
328 // Setup the IPC channel. 316 // Setup the IPC channel.
329 const std::string channel_id = 317 const std::string channel_id =
330 ChildProcessInfo::GenerateRandomChannelID(this); 318 ChildProcessInfo::GenerateRandomChannelID(this);
331 channel_.reset( 319 channel_.reset(
332 new IPC::SyncChannel(channel_id, IPC::Channel::MODE_SERVER, this, 320 new IPC::SyncChannel(channel_id, IPC::Channel::MODE_SERVER, this,
333 resource_message_filter,
334 io_thread->message_loop(), true, 321 io_thread->message_loop(), true,
335 g_browser_process->shutdown_event())); 322 g_browser_process->shutdown_event()));
336 // As a preventive mesure, we DCHECK if someone sends a synchronous message 323 // As a preventive mesure, we DCHECK if someone sends a synchronous message
337 // with no time-out, which in the context of the browser process we should not 324 // with no time-out, which in the context of the browser process we should not
338 // be doing. 325 // be doing.
339 channel_->set_sync_messages_with_no_timeout_allowed(false); 326 channel_->set_sync_messages_with_no_timeout_allowed(false);
340 327
341 scoped_refptr<PepperFileMessageFilter> pepper_file_message_filter( 328 CreateMessageFilters();
342 new PepperFileMessageFilter(id(), profile()));
343 channel_->AddFilter(pepper_file_message_filter);
344 329
345 if (run_renderer_in_process()) { 330 if (run_renderer_in_process()) {
346 // Crank up a thread and run the initialization there. With the way that 331 // Crank up a thread and run the initialization there. With the way that
347 // messages flow between the browser and renderer, this thread is required 332 // messages flow between the browser and renderer, this thread is required
348 // to prevent a deadlock in single-process mode. Since the primordial 333 // to prevent a deadlock in single-process mode. Since the primordial
349 // thread in the renderer process runs the WebKit code and can sometimes 334 // thread in the renderer process runs the WebKit code and can sometimes
350 // make blocking calls to the UI thread (i.e. this thread), they need to run 335 // make blocking calls to the UI thread (i.e. this thread), they need to run
351 // on separate threads. 336 // on separate threads.
352 in_process_renderer_.reset(new RendererMainThread(channel_id)); 337 in_process_renderer_.reset(new RendererMainThread(channel_id));
353 338
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 #endif 370 #endif
386 cmd_line, 371 cmd_line,
387 this)); 372 this));
388 373
389 fast_shutdown_started_ = false; 374 fast_shutdown_started_ = false;
390 } 375 }
391 376
392 return true; 377 return true;
393 } 378 }
394 379
380 void BrowserRenderProcessHost::CreateMessageFilters() {
381 // Construct the AudioRendererHost with the IO thread.
382 audio_renderer_host_ = new AudioRendererHost();
383
384 scoped_refptr<ResourceMessageFilter> resource_message_filter(
385 new ResourceMessageFilter(g_browser_process->resource_dispatcher_host(),
386 id(),
387 audio_renderer_host_.get(),
388 PluginService::GetInstance(),
389 g_browser_process->print_job_manager(),
390 profile(),
391 widget_helper_));
392 channel_->AddFilter(resource_message_filter);
393
394 scoped_refptr<PepperFileMessageFilter> pepper_file_message_filter(
395 new PepperFileMessageFilter(id(), profile()));
396 channel_->AddFilter(pepper_file_message_filter);
397 }
398
395 int BrowserRenderProcessHost::GetNextRoutingID() { 399 int BrowserRenderProcessHost::GetNextRoutingID() {
396 return widget_helper_->GetNextRoutingID(); 400 return widget_helper_->GetNextRoutingID();
397 } 401 }
398 402
399 void BrowserRenderProcessHost::CancelResourceRequests(int render_widget_id) { 403 void BrowserRenderProcessHost::CancelResourceRequests(int render_widget_id) {
400 widget_helper_->CancelResourceRequests(render_widget_id); 404 widget_helper_->CancelResourceRequests(render_widget_id);
401 } 405 }
402 406
403 void BrowserRenderProcessHost::CrossSiteClosePageACK( 407 void BrowserRenderProcessHost::CrossSiteClosePageACK(
404 const ViewMsg_ClosePage_Params& params) { 408 const ViewMsg_ClosePage_Params& params) {
(...skipping 769 matching lines...) Expand 10 before | Expand all | Expand 10 after
1174 IPC::InvalidPlatformFileForTransit(), 1178 IPC::InvalidPlatformFileForTransit(),
1175 std::vector<std::string>(), 1179 std::vector<std::string>(),
1176 std::string(), 1180 std::string(),
1177 false)); 1181 false));
1178 } 1182 }
1179 } 1183 }
1180 1184
1181 void BrowserRenderProcessHost::EnableAutoSpellCorrect(bool enable) { 1185 void BrowserRenderProcessHost::EnableAutoSpellCorrect(bool enable) {
1182 Send(new ViewMsg_SpellChecker_EnableAutoSpellCorrect(enable)); 1186 Send(new ViewMsg_SpellChecker_EnableAutoSpellCorrect(enable));
1183 } 1187 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698