chrome_render_message_filter.h revision 7d4cd473f85ac64c3747c96c277f9e506a0d2246
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_RENDERER_HOST_CHROME_RENDER_MESSAGE_FILTER_H_
6#define CHROME_BROWSER_RENDERER_HOST_CHROME_RENDER_MESSAGE_FILTER_H_
7
8#include <string>
9#include <vector>
10
11#include "base/files/file_path.h"
12#include "base/memory/weak_ptr.h"
13#include "base/sequenced_task_runner_helpers.h"
14#include "chrome/browser/profiles/profile.h"
15#include "chrome/common/content_settings.h"
16#include "content/public/browser/browser_message_filter.h"
17#include "third_party/WebKit/public/web/WebCache.h"
18
19class CookieSettings;
20struct ExtensionHostMsg_APIActionOrEvent_Params;
21struct ExtensionHostMsg_DOMAction_Params;
22struct ExtensionHostMsg_Request_Params;
23struct ExtensionMsg_ExternalConnectionInfo;
24class ExtensionInfoMap;
25class GURL;
26
27namespace net {
28class HostResolver;
29class URLRequestContextGetter;
30}
31
32// This class filters out incoming Chrome-specific IPC messages for the renderer
33// process on the IPC thread.
34class ChromeRenderMessageFilter : public content::BrowserMessageFilter {
35 public:
36  ChromeRenderMessageFilter(int render_process_id,
37                            Profile* profile,
38                            net::URLRequestContextGetter* request_context);
39
40  // Notification detail classes.
41  class FPSDetails {
42   public:
43    FPSDetails(int routing_id, float fps)
44        : routing_id_(routing_id),
45          fps_(fps) {}
46    int routing_id() const { return routing_id_; }
47    float fps() const { return fps_; }
48   private:
49    int routing_id_;
50    float fps_;
51  };
52
53  class V8HeapStatsDetails {
54   public:
55    V8HeapStatsDetails(size_t v8_memory_allocated,
56                       size_t v8_memory_used)
57        : v8_memory_allocated_(v8_memory_allocated),
58          v8_memory_used_(v8_memory_used) {}
59    size_t v8_memory_allocated() const { return v8_memory_allocated_; }
60    size_t v8_memory_used() const { return v8_memory_used_; }
61   private:
62    size_t v8_memory_allocated_;
63    size_t v8_memory_used_;
64  };
65
66  // content::BrowserMessageFilter methods:
67  virtual bool OnMessageReceived(const IPC::Message& message,
68                                 bool* message_was_ok) OVERRIDE;
69  virtual void OverrideThreadForMessage(
70      const IPC::Message& message,
71      content::BrowserThread::ID* thread) OVERRIDE;
72
73  int render_process_id() { return render_process_id_; }
74  bool off_the_record() { return off_the_record_; }
75  net::HostResolver* GetHostResolver();
76
77 private:
78  friend class content::BrowserThread;
79  friend class base::DeleteHelper<ChromeRenderMessageFilter>;
80
81  virtual ~ChromeRenderMessageFilter();
82
83  void OnDnsPrefetch(const std::vector<std::string>& hostnames);
84  void OnPreconnect(const GURL& url);
85  void OnResourceTypeStats(const WebKit::WebCache::ResourceTypeStats& stats);
86  void OnUpdatedCacheStats(const WebKit::WebCache::UsageStats& stats);
87  void OnFPS(int routing_id, float fps);
88  void OnV8HeapStats(int v8_memory_allocated, int v8_memory_used);
89  void OnOpenChannelToExtension(int routing_id,
90                                const ExtensionMsg_ExternalConnectionInfo& info,
91                                const std::string& channel_name, int* port_id);
92  void OpenChannelToExtensionOnUIThread(
93      int source_process_id,
94      int source_routing_id,
95      int receiver_port_id,
96      const ExtensionMsg_ExternalConnectionInfo& info,
97      const std::string& channel_name);
98  void OnOpenChannelToNativeApp(int routing_id,
99                                const std::string& source_extension_id,
100                                const std::string& native_app_name,
101                                int* port_id);
102  void OpenChannelToNativeAppOnUIThread(int source_routing_id,
103                                        int receiver_port_id,
104                                        const std::string& source_extension_id,
105                                        const std::string& native_app_name);
106  void OnOpenChannelToTab(int routing_id, int tab_id,
107                          const std::string& extension_id,
108                          const std::string& channel_name, int* port_id);
109  void OpenChannelToTabOnUIThread(int source_process_id, int source_routing_id,
110                                  int receiver_port_id,
111                                  int tab_id, const std::string& extension_id,
112                                  const std::string& channel_name);
113  void OnGetExtensionMessageBundle(const std::string& extension_id,
114                                   IPC::Message* reply_msg);
115  void OnGetExtensionMessageBundleOnFileThread(
116      const base::FilePath& extension_path,
117      const std::string& extension_id,
118      const std::string& default_locale,
119      IPC::Message* reply_msg);
120  void OnExtensionAddListener(const std::string& extension_id,
121                              const std::string& event_name);
122  void OnExtensionRemoveListener(const std::string& extension_id,
123                                 const std::string& event_name);
124  void OnExtensionAddLazyListener(const std::string& extension_id,
125                                  const std::string& event_name);
126  void OnExtensionRemoveLazyListener(const std::string& extension_id,
127                                     const std::string& event_name);
128  void OnExtensionAddFilteredListener(const std::string& extension_id,
129                                      const std::string& event_name,
130                                      const base::DictionaryValue& filter,
131                                      bool lazy);
132  void OnExtensionRemoveFilteredListener(const std::string& extension_id,
133                                         const std::string& event_name,
134                                         const base::DictionaryValue& filter,
135                                         bool lazy);
136  void OnExtensionCloseChannel(int port_id, const std::string& error_message);
137  void OnExtensionRequestForIOThread(
138      int routing_id,
139      const ExtensionHostMsg_Request_Params& params);
140  void OnExtensionShouldSuspendAck(const std::string& extension_id,
141                                   int sequence_id);
142  void OnExtensionSuspendAck(const std::string& extension_id);
143  void OnExtensionGenerateUniqueID(int* unique_id);
144  void OnExtensionResumeRequests(int route_id);
145  void OnAddAPIActionToExtensionActivityLog(
146      const std::string& extension_id,
147      const ExtensionHostMsg_APIActionOrEvent_Params& params);
148  void OnAddBlockedCallToExtensionActivityLog(
149      const std::string& extension_id,
150      const std::string& function_name);
151  void OnAddDOMActionToExtensionActivityLog(
152      const std::string& extension_id,
153      const ExtensionHostMsg_DOMAction_Params& params);
154  void OnAddEventToExtensionActivityLog(
155      const std::string& extension_id,
156      const ExtensionHostMsg_APIActionOrEvent_Params& params);
157  void OnAllowDatabase(int render_view_id,
158                       const GURL& origin_url,
159                       const GURL& top_origin_url,
160                       const string16& name,
161                       const string16& display_name,
162                       bool* allowed);
163  void OnAllowDOMStorage(int render_view_id,
164                         const GURL& origin_url,
165                         const GURL& top_origin_url,
166                         bool local,
167                         bool* allowed);
168  void OnAllowFileSystem(int render_view_id,
169                         const GURL& origin_url,
170                         const GURL& top_origin_url,
171                         bool* allowed);
172  void OnAllowIndexedDB(int render_view_id,
173                        const GURL& origin_url,
174                        const GURL& top_origin_url,
175                        const string16& name,
176                        bool* allowed);
177  void OnCanTriggerClipboardRead(const GURL& origin, bool* allowed);
178  void OnCanTriggerClipboardWrite(const GURL& origin, bool* allowed);
179  void OnGetCookies(const GURL& url,
180                    const GURL& first_party_for_cookies,
181                    IPC::Message* reply_msg);
182  void OnSetCookie(const IPC::Message& message,
183                   const GURL& url,
184                   const GURL& first_party_for_cookies,
185                   const std::string& cookie);
186
187  int render_process_id_;
188
189  // The Profile associated with our renderer process.  This should only be
190  // accessed on the UI thread!
191  Profile* profile_;
192  // Copied from the profile so that it can be read on the IO thread.
193  bool off_the_record_;
194  scoped_refptr<net::URLRequestContextGetter> request_context_;
195  scoped_refptr<ExtensionInfoMap> extension_info_map_;
196  // Used to look up permissions at database creation time.
197  scoped_refptr<CookieSettings> cookie_settings_;
198
199  base::WeakPtrFactory<ChromeRenderMessageFilter> weak_ptr_factory_;
200
201  DISALLOW_COPY_AND_ASSIGN(ChromeRenderMessageFilter);
202};
203
204#endif  // CHROME_BROWSER_RENDERER_HOST_CHROME_RENDER_MESSAGE_FILTER_H_
205