OLD | NEW |
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 // 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 "build/build_config.h" | 10 #include "build/build_config.h" |
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
517 return base::Process::Current().handle(); | 517 return base::Process::Current().handle(); |
518 return process_.handle(); | 518 return process_.handle(); |
519 } | 519 } |
520 | 520 |
521 void BrowserRenderProcessHost::InitVisitedLinks() { | 521 void BrowserRenderProcessHost::InitVisitedLinks() { |
522 VisitedLinkMaster* visitedlink_master = profile()->GetVisitedLinkMaster(); | 522 VisitedLinkMaster* visitedlink_master = profile()->GetVisitedLinkMaster(); |
523 if (!visitedlink_master) { | 523 if (!visitedlink_master) { |
524 return; | 524 return; |
525 } | 525 } |
526 | 526 |
527 #if defined(OS_WIN) | 527 base::SharedMemoryHandle handle_for_process; |
528 base::SharedMemoryHandle handle_for_process = NULL; | 528 bool r = visitedlink_master->ShareToProcess(GetRendererProcessHandle(), |
529 visitedlink_master->ShareToProcess(GetRendererProcessHandle(), | 529 &handle_for_process); |
530 &handle_for_process); | 530 DCHECK(r); |
531 DCHECK(handle_for_process); | 531 |
532 if (handle_for_process) { | 532 if (base::SharedMemory::IsHandleValid(handle_for_process)) { |
533 channel_->Send(new ViewMsg_VisitedLink_NewTable(handle_for_process)); | 533 channel_->Send(new ViewMsg_VisitedLink_NewTable(handle_for_process)); |
534 } | 534 } |
535 #else | |
536 // TODO(port): ShareToProcess is Windows-specific. | |
537 NOTIMPLEMENTED(); | |
538 #endif | |
539 } | 535 } |
540 | 536 |
541 void BrowserRenderProcessHost::InitUserScripts() { | 537 void BrowserRenderProcessHost::InitUserScripts() { |
542 UserScriptMaster* user_script_master = profile()->GetUserScriptMaster(); | 538 UserScriptMaster* user_script_master = profile()->GetUserScriptMaster(); |
543 DCHECK(user_script_master); | 539 DCHECK(user_script_master); |
544 | 540 |
545 if (!user_script_master->ScriptsReady()) { | 541 if (!user_script_master->ScriptsReady()) { |
546 // No scripts ready. :( | 542 // No scripts ready. :( |
547 return; | 543 return; |
548 } | 544 } |
549 | 545 |
550 // Update the renderer process with the current scripts. | 546 // Update the renderer process with the current scripts. |
551 SendUserScriptsUpdate(user_script_master->GetSharedMemory()); | 547 SendUserScriptsUpdate(user_script_master->GetSharedMemory()); |
552 } | 548 } |
553 | 549 |
554 void BrowserRenderProcessHost::SendUserScriptsUpdate( | 550 void BrowserRenderProcessHost::SendUserScriptsUpdate( |
555 base::SharedMemory *shared_memory) { | 551 base::SharedMemory *shared_memory) { |
556 base::SharedMemoryHandle handle_for_process = NULL; | 552 base::SharedMemoryHandle handle_for_process; |
557 shared_memory->ShareToProcess(GetRendererProcessHandle(), | 553 bool r = shared_memory->ShareToProcess(GetRendererProcessHandle(), |
558 &handle_for_process); | 554 &handle_for_process); |
559 DCHECK(handle_for_process); | 555 DCHECK(r); |
560 if (handle_for_process) { | 556 if (base::SharedMemory::IsHandleValid(handle_for_process)) { |
561 channel_->Send(new ViewMsg_UserScripts_NewScripts(handle_for_process)); | 557 channel_->Send(new ViewMsg_UserScripts_NewScripts(handle_for_process)); |
562 } | 558 } |
563 } | 559 } |
564 | 560 |
565 bool BrowserRenderProcessHost::FastShutdownIfPossible() { | 561 bool BrowserRenderProcessHost::FastShutdownIfPossible() { |
566 if (!process_.handle()) | 562 if (!process_.handle()) |
567 return false; // Render process is probably crashed. | 563 return false; // Render process is probably crashed. |
568 if (BrowserRenderProcessHost::run_renderer_in_process()) | 564 if (BrowserRenderProcessHost::run_renderer_in_process()) |
569 return false; // Since process mode can't do fast shutdown. | 565 return false; // Since process mode can't do fast shutdown. |
570 | 566 |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
818 // child processes determine the pid of the parent. | 814 // child processes determine the pid of the parent. |
819 // Build the channel ID. This is composed of a unique identifier for the | 815 // Build the channel ID. This is composed of a unique identifier for the |
820 // parent browser process, an identifier for the renderer/plugin instance, | 816 // parent browser process, an identifier for the renderer/plugin instance, |
821 // and a random component. We use a random component so that a hacked child | 817 // and a random component. We use a random component so that a hacked child |
822 // process can't cause denial of service by causing future named pipe creation | 818 // process can't cause denial of service by causing future named pipe creation |
823 // to fail. | 819 // to fail. |
824 return StringPrintf(L"%d.%x.%d", | 820 return StringPrintf(L"%d.%x.%d", |
825 base::GetCurrentProcId(), instance, | 821 base::GetCurrentProcId(), instance, |
826 base::RandInt(0, std::numeric_limits<int>::max())); | 822 base::RandInt(0, std::numeric_limits<int>::max())); |
827 } | 823 } |
OLD | NEW |