15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_RENDERER_HOST_CHROME_RENDER_MESSAGE_FILTER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_RENDERER_HOST_CHROME_RENDER_MESSAGE_FILTER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/callback.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/sequenced_task_runner_helpers.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_message_filter.h"
147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebCache.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CookieSettings;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL;
1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class Profile;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace chrome_browser_net {
2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class Predictor;
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace extensions {
2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class InfoMap;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class filters out incoming Chrome-specific IPC messages for the renderer
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// process on the IPC thread.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeRenderMessageFilter : public content::BrowserMessageFilter {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ChromeRenderMessageFilter(int render_process_id, Profile* profile);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class V8HeapStatsDetails {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    V8HeapStatsDetails(size_t v8_memory_allocated,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       size_t v8_memory_used)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        : v8_memory_allocated_(v8_memory_allocated),
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          v8_memory_used_(v8_memory_used) {}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    size_t v8_memory_allocated() const { return v8_memory_allocated_; }
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    size_t v8_memory_used() const { return v8_memory_used_; }
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   private:
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    size_t v8_memory_allocated_;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    size_t v8_memory_used_;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // content::BrowserMessageFilter methods:
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OverrideThreadForMessage(
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const IPC::Message& message,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::BrowserThread::ID* thread) OVERRIDE;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class content::BrowserThread;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class base::DeleteHelper<ChromeRenderMessageFilter>;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ChromeRenderMessageFilter();
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnDnsPrefetch(const std::vector<std::string>& hostnames);
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void OnPreconnect(const GURL& url);
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void OnResourceTypeStats(const blink::WebCache::ResourceTypeStats& stats);
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void OnUpdatedCacheStats(const blink::WebCache::UsageStats& stats);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnV8HeapStats(int v8_memory_allocated, int v8_memory_used);
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnAllowDatabase(int render_frame_id,
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const GURL& origin_url,
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const GURL& top_origin_url,
68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                       const base::string16& name,
69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                       const base::string16& display_name,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       bool* allowed);
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnAllowDOMStorage(int render_frame_id,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const GURL& origin_url,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const GURL& top_origin_url,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         bool local,
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         bool* allowed);
76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void OnRequestFileSystemAccessSync(int render_frame_id,
77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                     const GURL& origin_url,
78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                     const GURL& top_origin_url,
79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                     IPC::Message* message);
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS)
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static void FileSystemAccessedSyncOnUIThread(
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      int render_process_id,
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      int render_frame_id,
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const GURL& url,
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      bool blocked_by_policy,
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      IPC::Message* reply_msg);
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void OnRequestFileSystemAccessAsync(int render_frame_id,
89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                      int request_id,
90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                      const GURL& origin_url,
91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                      const GURL& top_origin_url);
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnRequestFileSystemAccessSyncResponse(IPC::Message* reply_msg,
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                             bool allowed);
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnRequestFileSystemAccessAsyncResponse(int render_frame_id,
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                              int request_id,
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                              bool allowed);
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnRequestFileSystemAccess(int render_frame_id,
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                 const GURL& origin_url,
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                 const GURL& top_origin_url,
100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                 base::Callback<void(bool)> callback);
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS)
102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static void FileSystemAccessedOnUIThread(int render_process_id,
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                           int render_frame_id,
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                           const GURL& url,
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                           bool allowed,
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                           base::Callback<void(bool)> callback);
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static void FileSystemAccessedResponse(int render_process_id,
108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                         int render_frame_id,
109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                         const GURL& url,
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                         base::Callback<void(bool)> callback,
111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                         bool allowed);
112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnAllowIndexedDB(int render_frame_id,
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        const GURL& origin_url,
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        const GURL& top_origin_url,
116a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                        const base::string16& name,
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        bool* allowed);
118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(ENABLE_PLUGINS)
119effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void OnIsCrashReportingEnabled(bool* enabled);
120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const int render_process_id_;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The Profile associated with our renderer process.  This should only be
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // accessed on the UI thread!
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_;
127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // The Predictor for the associated Profile. It is stored so that it can be
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // used on the IO thread.
129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  chrome_browser_net::Predictor* predictor_;
130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Used to look up permissions at database creation time.
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<CookieSettings> cookie_settings_;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChromeRenderMessageFilter);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_RENDERER_HOST_CHROME_RENDER_MESSAGE_FILTER_H_
138