chrome_render_message_filter.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
1ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat// Use of this source code is governed by a BSD-style license that can be
3ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat// found in the LICENSE file.
4ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
5ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "chrome/browser/renderer_host/chrome_render_message_filter.h"
6ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
7ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include <string>
8ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
9ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "base/bind.h"
10ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "base/bind_helpers.h"
11ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "base/metrics/histogram.h"
12ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "chrome/browser/chrome_notification_types.h"
13ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "chrome/browser/content_settings/cookie_settings.h"
14ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "chrome/browser/content_settings/tab_specific_content_settings.h"
15ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "chrome/browser/extensions/extension_renderer_state.h"
16ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
17ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#if defined(ENABLE_EXTENSIONS)
18ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "chrome/browser/guest_view/web_view/web_view_guest.h"
19ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
20ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
21ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
22ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "chrome/browser/net/predictor.h"
23ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "chrome/browser/profiles/profile.h"
24ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "chrome/browser/profiles/profile_manager.h"
25ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "chrome/browser/renderer_host/web_cache_manager.h"
26ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "chrome/common/extensions/api/i18n/default_locale_handler.h"
27ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "chrome/common/render_messages.h"
28ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "content/public/browser/notification_service.h"
29ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "content/public/browser/render_process_host.h"
30ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
31ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#if defined(ENABLE_TASK_MANAGER)
32ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "chrome/browser/task_manager/task_manager.h"
33ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
34ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
35ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#if defined(USE_TCMALLOC)
36ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#include "chrome/browser/browser_about_handler.h"
37ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
38ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
39ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatusing content::BrowserThread;
40ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatusing blink::WebCache;
41ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
42ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatnamespace {
43ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
44ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatconst uint32 kFilteredMessageClasses[] = {
45ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  ChromeMsgStart,
46ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat};
47ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
48ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat}  // namespace
49ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
50ffd68729961f7383f2e35494a03ccdef20f86c98San MehatChromeRenderMessageFilter::ChromeRenderMessageFilter(
51ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    int render_process_id,
52ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    Profile* profile)
53ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    : BrowserMessageFilter(kFilteredMessageClasses,
54ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                           arraysize(kFilteredMessageClasses)),
55ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      render_process_id_(render_process_id),
56ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      profile_(profile),
57ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      predictor_(profile_->GetNetworkPredictor()),
58ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      cookie_settings_(CookieSettings::Factory::GetForProfile(profile)) {
59ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat}
60ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
61ffd68729961f7383f2e35494a03ccdef20f86c98San MehatChromeRenderMessageFilter::~ChromeRenderMessageFilter() {
62ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat}
63ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
64ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatbool ChromeRenderMessageFilter::OnMessageReceived(const IPC::Message& message) {
65ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  bool handled = true;
66ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  IPC_BEGIN_MESSAGE_MAP(ChromeRenderMessageFilter, message)
67ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DnsPrefetch, OnDnsPrefetch)
68ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    IPC_MESSAGE_HANDLER(ChromeViewHostMsg_Preconnect, OnPreconnect)
69ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    IPC_MESSAGE_HANDLER(ChromeViewHostMsg_ResourceTypeStats,
70ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                        OnResourceTypeStats)
71ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    IPC_MESSAGE_HANDLER(ChromeViewHostMsg_UpdatedCacheStats,
72ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                        OnUpdatedCacheStats)
73ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    IPC_MESSAGE_HANDLER(ChromeViewHostMsg_V8HeapStats, OnV8HeapStats)
74ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowDatabase, OnAllowDatabase)
75ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowDOMStorage, OnAllowDOMStorage)
76ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    IPC_MESSAGE_HANDLER_DELAY_REPLY(
77ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat        ChromeViewHostMsg_RequestFileSystemAccessSync,
78ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat        OnRequestFileSystemAccessSync)
79ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    IPC_MESSAGE_HANDLER(ChromeViewHostMsg_RequestFileSystemAccessAsync,
80ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                        OnRequestFileSystemAccessAsync)
81ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowIndexedDB, OnAllowIndexedDB)
82ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#if defined(ENABLE_PLUGINS)
83ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    IPC_MESSAGE_HANDLER(ChromeViewHostMsg_IsCrashReportingEnabled,
84ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                        OnIsCrashReportingEnabled)
85ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
86ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    IPC_MESSAGE_UNHANDLED(handled = false)
8741cd7ed80eb5e97ef9893633d05f0877da7d6d0cRobert Greenwalt  IPC_END_MESSAGE_MAP()
88ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
89ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  return handled;
90ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat}
91ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
92ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatvoid ChromeRenderMessageFilter::OverrideThreadForMessage(
93ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    const IPC::Message& message, BrowserThread::ID* thread) {
94ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  switch (message.type()) {
95ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    case ChromeViewHostMsg_ResourceTypeStats::ID:
96ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    case ChromeViewHostMsg_UpdatedCacheStats::ID:
97ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      *thread = BrowserThread::UI;
98ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      break;
99ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    default:
100ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      break;
101ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  }
102ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat}
103ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
104ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatvoid ChromeRenderMessageFilter::OnDnsPrefetch(
105ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    const std::vector<std::string>& hostnames) {
106ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  if (predictor_)
107ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    predictor_->DnsPrefetchList(hostnames);
108ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat}
109ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
110ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatvoid ChromeRenderMessageFilter::OnPreconnect(const GURL& url) {
111ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  if (predictor_)
112ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    predictor_->PreconnectUrl(
113ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat        url, GURL(), chrome_browser_net::UrlInfo::MOUSE_OVER_MOTIVATED, 1);
114ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat}
115ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
116ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatvoid ChromeRenderMessageFilter::OnResourceTypeStats(
117ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    const WebCache::ResourceTypeStats& stats) {
118ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  HISTOGRAM_COUNTS("WebCoreCache.ImagesSizeKB",
119ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                   static_cast<int>(stats.images.size / 1024));
120ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  HISTOGRAM_COUNTS("WebCoreCache.CSSStylesheetsSizeKB",
121ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                   static_cast<int>(stats.cssStyleSheets.size / 1024));
122ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  HISTOGRAM_COUNTS("WebCoreCache.ScriptsSizeKB",
123ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                   static_cast<int>(stats.scripts.size / 1024));
124ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  HISTOGRAM_COUNTS("WebCoreCache.XSLStylesheetsSizeKB",
125ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                   static_cast<int>(stats.xslStyleSheets.size / 1024));
126ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  HISTOGRAM_COUNTS("WebCoreCache.FontsSizeKB",
127ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                   static_cast<int>(stats.fonts.size / 1024));
128ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
129ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
130ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#if defined(ENABLE_TASK_MANAGER)
131ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  TaskManager::GetInstance()->model()->NotifyResourceTypeStats(peer_pid(),
132ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                                               stats);
133ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif  // defined(ENABLE_TASK_MANAGER)
134ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat}
135ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
136ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatvoid ChromeRenderMessageFilter::OnUpdatedCacheStats(
137ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    const WebCache::UsageStats& stats) {
138ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  WebCacheManager::GetInstance()->ObserveStats(render_process_id_, stats);
139ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat}
140ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
141ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatvoid ChromeRenderMessageFilter::OnV8HeapStats(int v8_memory_allocated,
142ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                              int v8_memory_used) {
143ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
144ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    BrowserThread::PostTask(
145ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat        BrowserThread::UI, FROM_HERE,
146ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat        base::Bind(&ChromeRenderMessageFilter::OnV8HeapStats, this,
147ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                   v8_memory_allocated, v8_memory_used));
148ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    return;
149ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  }
150ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
151ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  base::ProcessId renderer_id = peer_pid();
152ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
153ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#if defined(ENABLE_TASK_MANAGER)
154ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  TaskManager::GetInstance()->model()->NotifyV8HeapStats(
155ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      renderer_id,
156ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      static_cast<size_t>(v8_memory_allocated),
157ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      static_cast<size_t>(v8_memory_used));
158ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif  // defined(ENABLE_TASK_MANAGER)
159ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
160ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  V8HeapStatsDetails details(v8_memory_allocated, v8_memory_used);
161ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  content::NotificationService::current()->Notify(
162ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      chrome::NOTIFICATION_RENDERER_V8_HEAP_STATS_COMPUTED,
163ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      content::Source<const base::ProcessId>(&renderer_id),
164ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      content::Details<const V8HeapStatsDetails>(&details));
165ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat}
166ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
167ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatvoid ChromeRenderMessageFilter::OnAllowDatabase(
168ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    int render_frame_id,
169ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    const GURL& origin_url,
170ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    const GURL& top_origin_url,
171ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    const base::string16& name,
172ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    const base::string16& display_name,
173ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    bool* allowed) {
174ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  *allowed =
175ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      cookie_settings_->IsSettingCookieAllowed(origin_url, top_origin_url);
176ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  BrowserThread::PostTask(
177ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      BrowserThread::UI, FROM_HERE,
178ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      base::Bind(&TabSpecificContentSettings::WebDatabaseAccessed,
179ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                 render_process_id_, render_frame_id, origin_url, name,
180ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                 display_name, !*allowed));
181ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat}
182ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
183ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatvoid ChromeRenderMessageFilter::OnAllowDOMStorage(int render_frame_id,
184ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                                  const GURL& origin_url,
185ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                                  const GURL& top_origin_url,
186ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                                  bool local,
187ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                                  bool* allowed) {
188ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  *allowed =
189ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      cookie_settings_->IsSettingCookieAllowed(origin_url, top_origin_url);
190ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  // Record access to DOM storage for potential display in UI.
191ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  BrowserThread::PostTask(
192ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      BrowserThread::UI, FROM_HERE,
193ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      base::Bind(&TabSpecificContentSettings::DOMStorageAccessed,
194ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                 render_process_id_, render_frame_id, origin_url, local,
195ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                 !*allowed));
196ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat}
197ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
198ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatvoid ChromeRenderMessageFilter::OnRequestFileSystemAccessSync(
199ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    int render_frame_id,
200ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    const GURL& origin_url,
201ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    const GURL& top_origin_url,
202ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    IPC::Message* reply_msg) {
203ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  bool allowed =
204ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      cookie_settings_->IsSettingCookieAllowed(origin_url, top_origin_url);
205ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
206ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#if defined(ENABLE_EXTENSIONS)
207ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  bool is_web_view_guest =
208ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      ExtensionRendererState::GetInstance()->IsWebViewRenderer(
209ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat          render_process_id_);
210ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  if (is_web_view_guest) {
211ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    // Record access to file system for potential display in UI.
212ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    BrowserThread::PostTask(BrowserThread::UI,
213ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                            FROM_HERE,
214ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                            base::Bind(&WebViewGuest::FileSystemAccessedSync,
215ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                       render_process_id_,
216ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                       render_frame_id,
217ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                       origin_url,
218ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                       !allowed,
219ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                       reply_msg));
220ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    return;
221ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  }
222ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
223ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  ChromeViewHostMsg_RequestFileSystemAccessSync::WriteReplyParams(reply_msg,
224ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                                                  allowed);
225ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  Send(reply_msg);
226ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  // Record access to file system for potential display in UI.
227ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  BrowserThread::PostTask(
228ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      BrowserThread::UI,
229ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      FROM_HERE,
230ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      base::Bind(&TabSpecificContentSettings::FileSystemAccessed,
231ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                 render_process_id_,
232ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                 render_frame_id,
233ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                 origin_url,
234ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                 !allowed));
235ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat}
236ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
237ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatvoid ChromeRenderMessageFilter::OnRequestFileSystemAccessAsync(
238ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    int render_frame_id,
239ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    int request_id,
240ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    const GURL& origin_url,
241ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    const GURL& top_origin_url) {
242ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
243ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
244ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  bool allowed =
245ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      cookie_settings_->IsSettingCookieAllowed(origin_url, top_origin_url);
246ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
247ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#if defined(ENABLE_EXTENSIONS)
248ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  bool is_web_view_guest =
249ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      ExtensionRendererState::GetInstance()->IsWebViewRenderer(
250ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat          render_process_id_);
251ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  if (is_web_view_guest) {
252ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    // Record access to file system for potential display in UI.
253ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    BrowserThread::PostTask(BrowserThread::UI,
254ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                            FROM_HERE,
255ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                            base::Bind(&WebViewGuest::FileSystemAccessedAsync,
256ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                       render_process_id_,
257ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                       render_frame_id,
258ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                       request_id,
259ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                       origin_url,
260ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                       !allowed));
261ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat    return;
262ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  }
263ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
264ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  Send(new ChromeViewMsg_RequestFileSystemAccessAsyncResponse(render_frame_id,
265ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                                              request_id,
266ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                                              allowed));
267ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  // Record access to file system for potential display in UI.
268ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  BrowserThread::PostTask(
269ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      BrowserThread::UI,
270ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      FROM_HERE,
271ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      base::Bind(&TabSpecificContentSettings::FileSystemAccessed,
272ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                render_process_id_,
273ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                render_frame_id,
274ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                origin_url,
275ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                !allowed));
276ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat}
277ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
278ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatvoid ChromeRenderMessageFilter::OnAllowIndexedDB(int render_frame_id,
279ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                                 const GURL& origin_url,
280ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                                 const GURL& top_origin_url,
281ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                                 const base::string16& name,
282ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                                                 bool* allowed) {
283ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  *allowed =
284ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      cookie_settings_->IsSettingCookieAllowed(origin_url, top_origin_url);
285ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  BrowserThread::PostTask(
286ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      BrowserThread::UI, FROM_HERE,
287ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      base::Bind(&TabSpecificContentSettings::IndexedDBAccessed,
288ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                 render_process_id_, render_frame_id, origin_url, name,
289ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                 !*allowed));
290ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat}
291ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
292ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#if defined(ENABLE_PLUGINS)
293ffd68729961f7383f2e35494a03ccdef20f86c98San Mehatvoid ChromeRenderMessageFilter::OnIsCrashReportingEnabled(bool* enabled) {
294ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  *enabled = ChromeMetricsServiceAccessor::IsCrashReportingEnabled();
295ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat}
296ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
297ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat