summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authormpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-13 22:06:41 +0000
committermpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-13 22:06:41 +0000
commitf30a566d7fcc4c56004f40e9db160906bdf9ac8c (patch)
treec0d6b4c308cf7853205717a63b27ea8ce276a93b /chrome/browser
parent6e5e54e39d8e542077acdafe8cf9033b1ca9acce (diff)
downloadchromium_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.cc18
-rw-r--r--chrome/browser/renderer_host/browser_render_process_host.h5
-rw-r--r--chrome/browser/sandbox_policy.cc3
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) {