diff options
author | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-13 22:06:41 +0000 |
---|---|---|
committer | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-13 22:06:41 +0000 |
commit | f30a566d7fcc4c56004f40e9db160906bdf9ac8c (patch) | |
tree | c0d6b4c308cf7853205717a63b27ea8ce276a93b /chrome/browser | |
parent | 6e5e54e39d8e542077acdafe8cf9033b1ca9acce (diff) | |
download | chromium_src-f30a566d7fcc4c56004f40e9db160906bdf9ac8c.zip chromium_src-f30a566d7fcc4c56004f40e9db160906bdf9ac8c.tar.gz chromium_src-f30a566d7fcc4c56004f40e9db160906bdf9ac8c.tar.bz2 |
Add an "extension" process type, which mostly gets treated as a renderer everywhere.
BUG=27163
Review URL: http://codereview.chromium.org/384108
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@31955 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/renderer_host/browser_render_process_host.cc | 18 | ||||
-rw-r--r-- | chrome/browser/renderer_host/browser_render_process_host.h | 5 | ||||
-rw-r--r-- | chrome/browser/sandbox_policy.cc | 3 |
3 files changed, 23 insertions, 3 deletions
diff --git a/chrome/browser/renderer_host/browser_render_process_host.cc b/chrome/browser/renderer_host/browser_render_process_host.cc index c180fa0..a44eb55 100644 --- a/chrome/browser/renderer_host/browser_render_process_host.cc +++ b/chrome/browser/renderer_host/browser_render_process_host.cc @@ -200,7 +200,8 @@ BrowserRenderProcessHost::BrowserRenderProcessHost(Profile* profile) ALLOW_THIS_IN_INITIALIZER_LIST(cached_dibs_cleaner_( base::TimeDelta::FromSeconds(5), this, &BrowserRenderProcessHost::ClearTransportDIBCache)), - zygote_child_(false) { + zygote_child_(false), + extension_process_(false) { widget_helper_ = new RenderWidgetHelper(); registrar_.Add(this, NotificationType::USER_SCRIPTS_UPDATED, @@ -263,8 +264,16 @@ BrowserRenderProcessHost::~BrowserRenderProcessHost() { bool BrowserRenderProcessHost::Init(bool is_extensions_process) { // calling Init() more than once does nothing, this makes it more convenient // for the view host which may not be sure in some cases - if (channel_.get()) + if (channel_.get()) { + // Ensure that |is_extensions_process| doesn't change across multiple calls + // to Init(). + if (!run_renderer_in_process()) { + DCHECK_EQ(extension_process_, is_extensions_process); + } return true; + } + + extension_process_ = is_extensions_process; // run the IPC channel on the shared IO thread. base::Thread* io_thread = g_browser_process->io_thread(); @@ -458,8 +467,11 @@ void BrowserRenderProcessHost::AppendRendererCommandLine( command_line->AppendSwitch(switches::kNoErrorDialogs); // Pass the process type first, so it shows first in process listings. + // Extensions use a special pseudo-process type to make them distinguishable, + // even though they're just renderers. command_line->AppendSwitchWithValue(switches::kProcessType, - switches::kRendererProcess); + extension_process_ ? switches::kExtensionProcess : + switches::kRendererProcess); // Now send any options from our own command line we want to propogate. const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess(); diff --git a/chrome/browser/renderer_host/browser_render_process_host.h b/chrome/browser/renderer_host/browser_render_process_host.h index 762beff..42f6fe2 100644 --- a/chrome/browser/renderer_host/browser_render_process_host.h +++ b/chrome/browser/renderer_host/browser_render_process_host.h @@ -202,8 +202,13 @@ class BrowserRenderProcessHost : public RenderProcessHost, // True iff the renderer is a child of a zygote process. bool zygote_child_; + // True iff this process is being used as an extension process. Not valid + // when running in single-process mode. + bool extension_process_; + base::Process process_; + DISALLOW_COPY_AND_ASSIGN(BrowserRenderProcessHost); }; diff --git a/chrome/browser/sandbox_policy.cc b/chrome/browser/sandbox_policy.cc index 9b53eed..5d3dcfc 100644 --- a/chrome/browser/sandbox_policy.cc +++ b/chrome/browser/sandbox_policy.cc @@ -339,6 +339,9 @@ base::ProcessHandle StartProcessWithAccess(CommandLine* cmd_line, std::string type_str = cmd_line->GetSwitchValueASCII(switches::kProcessType); if (type_str == switches::kRendererProcess) { type = ChildProcessInfo::RENDER_PROCESS; + } else if (type_str == switches::kExtensionProcess) { + // Extensions are just renderers with another name. + type = ChildProcessInfo::RENDER_PROCESS; } else if (type_str == switches::kPluginProcess) { type = ChildProcessInfo::PLUGIN_PROCESS; } else if (type_str == switches::kWorkerProcess) { |