diff --git a/chrome/browser/renderer_host/render_message_filter.cc b/chrome/browser/renderer_host/render_message_filter.cc
index 5fa92ec271e56a143b3d57e126bc72ae8bb79d9f..05b40aa9f49d6ed2d84b94cfa56b01a27d62b8b0 100644
--- a/chrome/browser/renderer_host/render_message_filter.cc
+++ b/chrome/browser/renderer_host/render_message_filter.cc
@@ -240,6 +240,7 @@ RenderMessageFilter::RenderMessageFilter(
       plugin_service_(plugin_service),
       print_job_manager_(print_job_manager),
       profile_(profile),
+      content_settings_(profile->GetHostContentSettingsMap()),
       ALLOW_THIS_IN_INITIALIZER_LIST(resolve_proxy_msg_helper_(this, NULL)),
       media_request_context_(profile->GetRequestContextForMedia()),
       extensions_request_context_(profile->GetRequestContextForExtensions()),
@@ -578,7 +579,9 @@ void RenderMessageFilter::OnSetCookie(const IPC::Message& message,
 
   // If this render view is associated with an automation channel, aka
   // ChromeFrame then we need to set cookies in the external host.
-  if (!AutomationResourceMessageFilter::SetCookiesForUrl(url, cookie, callback)) {
+  if (!AutomationResourceMessageFilter::SetCookiesForUrl(url,
+                                                         cookie,
+                                                         callback)) {
     int policy = net::OK;
     if (context->cookie_policy()) {
       policy = context->cookie_policy()->CanSetCookie(
@@ -787,12 +790,12 @@ void RenderMessageFilter::OnGotPluginInfo(bool found,
   if (found) {
     info_copy.enabled = info_copy.enabled &&
         plugin_service_->PrivatePluginAllowedForURL(info_copy.path, policy_url);
-    HostContentSettingsMap* map = profile_->GetHostContentSettingsMap();
     std::string resource =
         NPAPI::PluginList::Singleton()->GetPluginGroupIdentifier(info_copy);
-    setting = map->GetContentSetting(policy_url,
-                                     CONTENT_SETTINGS_TYPE_PLUGINS,
-                                     resource);
+    setting = content_settings_->GetContentSetting(
+        policy_url,
+        CONTENT_SETTINGS_TYPE_PLUGINS,
+        resource);
   }
 
   ViewHostMsg_GetPluginInfo::WriteReplyParams(
diff --git a/chrome/browser/renderer_host/render_message_filter.h b/chrome/browser/renderer_host/render_message_filter.h
index e912aaa06cec387e7489624edf8d5a778ca44a95..d783afd05f3fc4e063e59513d21825eba3ef2bef 100644
--- a/chrome/browser/renderer_host/render_message_filter.h
+++ b/chrome/browser/renderer_host/render_message_filter.h
@@ -34,6 +34,7 @@
 
 class ChromeURLRequestContext;
 struct FontDescriptor;
+class HostContentSettingsMap;
 class HostZoomMap;
 class NotificationsPrefsCache;
 class PpapiPluginProcessHost;
@@ -413,6 +414,10 @@ class RenderMessageFilter : public IPC::ChannelProxy::MessageFilter,
   // accessed on the UI thread!
   Profile* profile_;
 
+  // The host content settings map. Stored separately from the profile so we can
+  // access it on other threads.
+  HostContentSettingsMap* content_settings_;
+
   // Helper class for handling PluginProcessHost_ResolveProxy messages (manages
   // the requests to the proxy service).
   ResolveProxyMsgHelper resolve_proxy_msg_helper_;