Index: chrome/browser/renderer_host/browser_render_process_host.cc |
diff --git a/chrome/browser/renderer_host/browser_render_process_host.cc b/chrome/browser/renderer_host/browser_render_process_host.cc |
index 06405ed8efcdbbeeadac3f206159b96e10c02b26..2463b39d0e257626de2ebe0a06de093cc3116701 100644 |
--- a/chrome/browser/renderer_host/browser_render_process_host.cc |
+++ b/chrome/browser/renderer_host/browser_render_process_host.cc |
@@ -30,6 +30,7 @@ |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/child_process_security_policy.h" |
#include "chrome/browser/extensions/extension_message_service.h" |
+#include "chrome/browser/extensions/extensions_service.h" |
#include "chrome/browser/extensions/user_script_master.h" |
#include "chrome/browser/history/history.h" |
#include "chrome/browser/plugin_service.h" |
@@ -273,7 +274,6 @@ bool BrowserRenderProcessHost::Init() { |
switches::kUseLowFragHeapCrt, |
switches::kEnableWebWorkers, |
switches::kEnableStatsTable, |
- switches::kEnableExtensions, |
switches::kDisableOutOfProcessDevTools, |
switches::kAutoSpellCorrect, |
switches::kDisableAudio, |
@@ -288,6 +288,25 @@ bool BrowserRenderProcessHost::Init() { |
} |
} |
+ // Tell the renderer to enable extensions if there are any extensions loaded. |
+ // |
+ // NOTE: This is subtly different than just passing along whether |
+ // --enable-extenisons is present in the browser process. For example, there |
+ // is also an extensions.enabled preference, and there may be various special |
+ // cases about whether to allow extensions to load. |
+ // |
+ // This introduces a race condition where the first renderer never gets |
+ // extensions enabled, so we also set the flag if extensions_enabled(). This |
+ // isn't perfect though, because of the special cases above. |
+ // |
+ // TODO(aa): We need to get rid of the need to pass this flag at all. It is |
+ // only used in one place in the renderer. |
+ if (profile()->GetExtensionsService()) { |
+ if (profile()->GetExtensionsService()->extensions()->size() > 0 || |
+ profile()->GetExtensionsService()->extensions_enabled()) |
+ cmd_line.AppendSwitch(switches::kEnableExtensions); |
+ } |
+ |
// Pass on the browser locale. |
const std::wstring locale = g_browser_process->GetApplicationLocale(); |
cmd_line.AppendSwitchWithValue(switches::kLang, locale); |