summaryrefslogtreecommitdiffstats
path: root/chrome/browser/renderer_host
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-10 21:55:21 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-10 21:55:21 +0000
commit7c27203a71841cb6de9b630ff4730a13f454a90a (patch)
tree9fba51a19fca8a11ceb7a29500ec5b44eda175c6 /chrome/browser/renderer_host
parent8ada8c50ea727c2fa0a93a7ac1e7256a80a2e53f (diff)
downloadchromium_src-7c27203a71841cb6de9b630ff4730a13f454a90a.zip
chromium_src-7c27203a71841cb6de9b630ff4730a13f454a90a.tar.gz
chromium_src-7c27203a71841cb6de9b630ff4730a13f454a90a.tar.bz2
Get rid of --start-renderers-manually since it's been broken for a long time (the browser needs the renderer's handle to duplicate handles).
Review URL: http://codereview.chromium.org/43035 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11379 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
-rw-r--r--chrome/browser/renderer_host/browser_render_process_host.cc170
-rw-r--r--chrome/browser/renderer_host/browser_render_process_host.h3
2 files changed, 69 insertions, 104 deletions
diff --git a/chrome/browser/renderer_host/browser_render_process_host.cc b/chrome/browser/renderer_host/browser_render_process_host.cc
index 03bdbc8..fd5ba33 100644
--- a/chrome/browser/renderer_host/browser_render_process_host.cc
+++ b/chrome/browser/renderer_host/browser_render_process_host.cc
@@ -121,11 +121,6 @@ bool GetRendererPath(std::wstring* cmd_line) {
const wchar_t* const kDesktopName = L"ChromeRendererDesktop";
-// static
-void BrowserRenderProcessHost::RegisterPrefs(PrefService* prefs) {
- prefs->RegisterBooleanPref(prefs::kStartRenderersManually, false);
-}
-
BrowserRenderProcessHost::BrowserRenderProcessHost(Profile* profile)
: RenderProcessHost(profile),
visible_widgets_(0),
@@ -179,27 +174,6 @@ BrowserRenderProcessHost::~BrowserRenderProcessHost() {
ClearTransportDIBCache();
}
-// When we're started with the --start-renderers-manually flag, we pop up a
-// modal dialog requesting the user manually start up a renderer.
-// |cmd_line| is the command line to start the renderer with.
-static void RunStartRenderersManuallyDialog(const CommandLine& cmd_line) {
-#if defined(OS_WIN)
- std::wstring message =
- L"Please start a renderer process using:\n" +
- cmd_line.command_line_string();
-
- // We don't know the owner window for RenderProcessHost and therefore we
- // pass a NULL HWND argument.
- win_util::MessageBox(NULL,
- message,
- switches::kBrowserStartRenderersManually,
- MB_OK);
-#else
- // TODO(port): refactor above code / pop up a message box here.
- NOTIMPLEMENTED();
-#endif
-}
-
bool BrowserRenderProcessHost::Init() {
// calling Init() more than once does nothing, this makes it more convenient
// for the view host which may not be sure in some cases
@@ -350,92 +324,86 @@ bool BrowserRenderProcessHost::Init() {
options.message_loop_type = MessageLoop::TYPE_IO;
in_process_renderer_->StartWithOptions(options);
} else {
- if (g_browser_process->local_state() &&
- g_browser_process->local_state()->GetBoolean(
- prefs::kStartRenderersManually)) {
- RunStartRenderersManuallyDialog(cmd_line);
- } else {
#if defined(OS_WIN)
- if (in_sandbox) {
- // spawn the child process in the sandbox
- sandbox::BrokerServices* broker_service =
- g_browser_process->broker_services();
-
- sandbox::ResultCode result;
- PROCESS_INFORMATION target = {0};
- sandbox::TargetPolicy* policy = broker_service->CreatePolicy();
- policy->SetJobLevel(sandbox::JOB_LOCKDOWN, 0);
-
- sandbox::TokenLevel initial_token = sandbox::USER_UNPROTECTED;
- if (win_util::GetWinVersion() > win_util::WINVERSION_XP) {
- // On 2003/Vista the initial token has to be restricted if the main
- // token is restricted.
- initial_token = sandbox::USER_RESTRICTED_SAME_ACCESS;
- }
-
- policy->SetTokenLevel(initial_token, sandbox::USER_LOCKDOWN);
- policy->SetDelayedIntegrityLevel(sandbox::INTEGRITY_LEVEL_LOW);
+ if (in_sandbox) {
+ // spawn the child process in the sandbox
+ sandbox::BrokerServices* broker_service =
+ g_browser_process->broker_services();
+
+ sandbox::ResultCode result;
+ PROCESS_INFORMATION target = {0};
+ sandbox::TargetPolicy* policy = broker_service->CreatePolicy();
+ policy->SetJobLevel(sandbox::JOB_LOCKDOWN, 0);
+
+ sandbox::TokenLevel initial_token = sandbox::USER_UNPROTECTED;
+ if (win_util::GetWinVersion() > win_util::WINVERSION_XP) {
+ // On 2003/Vista the initial token has to be restricted if the main
+ // token is restricted.
+ initial_token = sandbox::USER_RESTRICTED_SAME_ACCESS;
+ }
- HDESK desktop = CreateDesktop(kDesktopName, NULL, NULL, 0,
- DESKTOP_CREATEWINDOW, NULL);
- if (desktop) {
- policy->SetDesktop(kDesktopName);
- } else {
- DLOG(WARNING) << "Failed to apply desktop security to the renderer";
- }
+ policy->SetTokenLevel(initial_token, sandbox::USER_LOCKDOWN);
+ policy->SetDelayedIntegrityLevel(sandbox::INTEGRITY_LEVEL_LOW);
- if (!AddGenericPolicy(policy)) {
- NOTREACHED();
- return false;
- }
+ HDESK desktop = CreateDesktop(kDesktopName, NULL, NULL, 0,
+ DESKTOP_CREATEWINDOW, NULL);
+ if (desktop) {
+ policy->SetDesktop(kDesktopName);
+ } else {
+ DLOG(WARNING) << "Failed to apply desktop security to the renderer";
+ }
- if (browser_command_line.HasSwitch(switches::kGearsInRenderer)) {
- if (!AddPolicyForGearsInRenderer(policy)) {
- NOTREACHED();
- return false;
- }
- }
+ if (!AddGenericPolicy(policy)) {
+ NOTREACHED();
+ return false;
+ }
- if (!AddDllEvictionPolicy(policy)) {
+ if (browser_command_line.HasSwitch(switches::kGearsInRenderer)) {
+ if (!AddPolicyForGearsInRenderer(policy)) {
NOTREACHED();
return false;
}
+ }
- result =
- broker_service->SpawnTarget(renderer_path.c_str(),
- cmd_line.command_line_string().c_str(),
- policy, &target);
- policy->Release();
-
- if (desktop)
- CloseDesktop(desktop);
-
- if (sandbox::SBOX_ALL_OK != result)
- return false;
+ if (!AddDllEvictionPolicy(policy)) {
+ NOTREACHED();
+ return false;
+ }
- bool on_sandbox_desktop = (desktop != NULL);
- NotificationService::current()->Notify(
- NotificationType::RENDERER_PROCESS_IN_SBOX,
- Source<BrowserRenderProcessHost>(this),
- Details<bool>(&on_sandbox_desktop));
-
- ResumeThread(target.hThread);
- CloseHandle(target.hThread);
- process_.set_handle(target.hProcess);
-
- // Help the process a little. It can't start the debugger by itself if
- // the process is in a sandbox.
- if (child_needs_help)
- DebugUtil::SpawnDebuggerOnProcess(target.dwProcessId);
- } else
+ result =
+ broker_service->SpawnTarget(renderer_path.c_str(),
+ cmd_line.command_line_string().c_str(),
+ policy, &target);
+ policy->Release();
+
+ if (desktop)
+ CloseDesktop(desktop);
+
+ if (sandbox::SBOX_ALL_OK != result)
+ return false;
+
+ bool on_sandbox_desktop = (desktop != NULL);
+ NotificationService::current()->Notify(
+ NotificationType::RENDERER_PROCESS_IN_SBOX,
+ Source<BrowserRenderProcessHost>(this),
+ Details<bool>(&on_sandbox_desktop));
+
+ ResumeThread(target.hThread);
+ CloseHandle(target.hThread);
+ process_.set_handle(target.hProcess);
+
+ // Help the process a little. It can't start the debugger by itself if
+ // the process is in a sandbox.
+ if (child_needs_help)
+ DebugUtil::SpawnDebuggerOnProcess(target.dwProcessId);
+ } else
#endif // OS_WIN and sandbox
- {
- // spawn child process
- base::ProcessHandle process = 0;
- if (!SpawnChild(cmd_line, channel_.get(), &process))
- return false;
- process_.set_handle(process);
- }
+ {
+ // spawn child process
+ base::ProcessHandle process = 0;
+ if (!SpawnChild(cmd_line, channel_.get(), &process))
+ return false;
+ process_.set_handle(process);
}
}
diff --git a/chrome/browser/renderer_host/browser_render_process_host.h b/chrome/browser/renderer_host/browser_render_process_host.h
index 62a7dc6..556bbfc 100644
--- a/chrome/browser/renderer_host/browser_render_process_host.h
+++ b/chrome/browser/renderer_host/browser_render_process_host.h
@@ -23,7 +23,6 @@
class CommandLine;
class GURL;
-class PrefService;
class RendererMainThread;
class RenderWidgetHelper;
class WebContents;
@@ -76,8 +75,6 @@ class BrowserRenderProcessHost : public RenderProcessHost,
virtual void OnChannelConnected(int32 peer_pid);
virtual void OnChannelError();
- static void RegisterPrefs(PrefService* prefs);
-
// If the a process has sent a message that cannot be decoded, it is deemed
// corrupted and thus needs to be terminated using this call. This function
// can be safely called from any thread.