Home | History | Annotate | Download | only in renderer_host
      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 
     19 class CookieSettings;
     20 struct ExtensionHostMsg_APIActionOrEvent_Params;
     21 struct ExtensionHostMsg_DOMAction_Params;
     22 struct ExtensionHostMsg_Request_Params;
     23 struct ExtensionMsg_ExternalConnectionInfo;
     24 class GURL;
     25 
     26 namespace extensions {
     27 class InfoMap;
     28 }
     29 
     30 namespace net {
     31 class HostResolver;
     32 class URLRequestContextGetter;
     33 }
     34 
     35 // This class filters out incoming Chrome-specific IPC messages for the renderer
     36 // process on the IPC thread.
     37 class ChromeRenderMessageFilter : public content::BrowserMessageFilter {
     38  public:
     39   ChromeRenderMessageFilter(int render_process_id,
     40                             Profile* profile,
     41                             net::URLRequestContextGetter* request_context);
     42 
     43   // Notification detail classes.
     44   class FPSDetails {
     45    public:
     46     FPSDetails(int routing_id, float fps)
     47         : routing_id_(routing_id),
     48           fps_(fps) {}
     49     int routing_id() const { return routing_id_; }
     50     float fps() const { return fps_; }
     51    private:
     52     int routing_id_;
     53     float fps_;
     54   };
     55 
     56   class V8HeapStatsDetails {
     57    public:
     58     V8HeapStatsDetails(size_t v8_memory_allocated,
     59                        size_t v8_memory_used)
     60         : v8_memory_allocated_(v8_memory_allocated),
     61           v8_memory_used_(v8_memory_used) {}
     62     size_t v8_memory_allocated() const { return v8_memory_allocated_; }
     63     size_t v8_memory_used() const { return v8_memory_used_; }
     64    private:
     65     size_t v8_memory_allocated_;
     66     size_t v8_memory_used_;
     67   };
     68 
     69   // content::BrowserMessageFilter methods:
     70   virtual bool OnMessageReceived(const IPC::Message& message,
     71                                  bool* message_was_ok) OVERRIDE;
     72   virtual void OverrideThreadForMessage(
     73       const IPC::Message& message,
     74       content::BrowserThread::ID* thread) OVERRIDE;
     75 
     76   int render_process_id() { return render_process_id_; }
     77   bool off_the_record() { return off_the_record_; }
     78   net::HostResolver* GetHostResolver();
     79 
     80  private:
     81   friend class content::BrowserThread;
     82   friend class base::DeleteHelper<ChromeRenderMessageFilter>;
     83 
     84   virtual ~ChromeRenderMessageFilter();
     85 
     86   void OnDnsPrefetch(const std::vector<std::string>& hostnames);
     87   void OnPreconnect(const GURL& url);
     88   void OnResourceTypeStats(const blink::WebCache::ResourceTypeStats& stats);
     89   void OnUpdatedCacheStats(const blink::WebCache::UsageStats& stats);
     90   void OnFPS(int routing_id, float fps);
     91   void OnV8HeapStats(int v8_memory_allocated, int v8_memory_used);
     92   void OnOpenChannelToExtension(int routing_id,
     93                                 const ExtensionMsg_ExternalConnectionInfo& info,
     94                                 const std::string& channel_name,
     95                                 bool include_tls_channel_id,
     96                                 int* port_id);
     97   void OpenChannelToExtensionOnUIThread(
     98       int source_process_id,
     99       int source_routing_id,
    100       int receiver_port_id,
    101       const ExtensionMsg_ExternalConnectionInfo& info,
    102       const std::string& channel_name,
    103       bool include_tls_channel_id);
    104   void OnOpenChannelToNativeApp(int routing_id,
    105                                 const std::string& source_extension_id,
    106                                 const std::string& native_app_name,
    107                                 int* port_id);
    108   void OpenChannelToNativeAppOnUIThread(int source_routing_id,
    109                                         int receiver_port_id,
    110                                         const std::string& source_extension_id,
    111                                         const std::string& native_app_name);
    112   void OnOpenChannelToTab(int routing_id, int tab_id,
    113                           const std::string& extension_id,
    114                           const std::string& channel_name, int* port_id);
    115   void OpenChannelToTabOnUIThread(int source_process_id, int source_routing_id,
    116                                   int receiver_port_id,
    117                                   int tab_id, const std::string& extension_id,
    118                                   const std::string& channel_name);
    119   void OnGetExtensionMessageBundle(const std::string& extension_id,
    120                                    IPC::Message* reply_msg);
    121   void OnGetExtensionMessageBundleOnFileThread(
    122       const base::FilePath& extension_path,
    123       const std::string& extension_id,
    124       const std::string& default_locale,
    125       IPC::Message* reply_msg);
    126   void OnExtensionAddListener(const std::string& extension_id,
    127                               const std::string& event_name);
    128   void OnExtensionRemoveListener(const std::string& extension_id,
    129                                  const std::string& event_name);
    130   void OnExtensionAddLazyListener(const std::string& extension_id,
    131                                   const std::string& event_name);
    132   void OnExtensionRemoveLazyListener(const std::string& extension_id,
    133                                      const std::string& event_name);
    134   void OnExtensionAddFilteredListener(const std::string& extension_id,
    135                                       const std::string& event_name,
    136                                       const base::DictionaryValue& filter,
    137                                       bool lazy);
    138   void OnExtensionRemoveFilteredListener(const std::string& extension_id,
    139                                          const std::string& event_name,
    140                                          const base::DictionaryValue& filter,
    141                                          bool lazy);
    142   void OnExtensionCloseChannel(int port_id, const std::string& error_message);
    143   void OnExtensionRequestForIOThread(
    144       int routing_id,
    145       const ExtensionHostMsg_Request_Params& params);
    146   void OnExtensionShouldSuspendAck(const std::string& extension_id,
    147                                    int sequence_id);
    148   void OnExtensionSuspendAck(const std::string& extension_id);
    149   void OnExtensionGenerateUniqueID(int* unique_id);
    150   void OnExtensionResumeRequests(int route_id);
    151   void OnAddAPIActionToExtensionActivityLog(
    152       const std::string& extension_id,
    153       const ExtensionHostMsg_APIActionOrEvent_Params& params);
    154   void OnAddBlockedCallToExtensionActivityLog(
    155       const std::string& extension_id,
    156       const std::string& function_name);
    157   void OnAddDOMActionToExtensionActivityLog(
    158       const std::string& extension_id,
    159       const ExtensionHostMsg_DOMAction_Params& params);
    160   void OnAddEventToExtensionActivityLog(
    161       const std::string& extension_id,
    162       const ExtensionHostMsg_APIActionOrEvent_Params& params);
    163   void OnAllowDatabase(int render_view_id,
    164                        const GURL& origin_url,
    165                        const GURL& top_origin_url,
    166                        const base::string16& name,
    167                        const base::string16& display_name,
    168                        bool* allowed);
    169   void OnAllowDOMStorage(int render_view_id,
    170                          const GURL& origin_url,
    171                          const GURL& top_origin_url,
    172                          bool local,
    173                          bool* allowed);
    174   void OnAllowFileSystem(int render_view_id,
    175                          const GURL& origin_url,
    176                          const GURL& top_origin_url,
    177                          bool* allowed);
    178   void OnAllowIndexedDB(int render_view_id,
    179                         const GURL& origin_url,
    180                         const GURL& top_origin_url,
    181                         const base::string16& name,
    182                         bool* allowed);
    183   void OnCanTriggerClipboardRead(const GURL& origin, bool* allowed);
    184   void OnCanTriggerClipboardWrite(const GURL& origin, bool* allowed);
    185   void OnIsWebGLDebugRendererInfoAllowed(const GURL& origin, bool* allowed);
    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   // The Predictor for the associated Profile. It is stored so that it can be
    195   // used on the IO thread.
    196   chrome_browser_net::Predictor* predictor_;
    197   scoped_refptr<net::URLRequestContextGetter> request_context_;
    198   scoped_refptr<extensions::InfoMap> extension_info_map_;
    199   // Used to look up permissions at database creation time.
    200   scoped_refptr<CookieSettings> cookie_settings_;
    201 
    202   base::WeakPtrFactory<ChromeRenderMessageFilter> weak_ptr_factory_;
    203 
    204   DISALLOW_COPY_AND_ASSIGN(ChromeRenderMessageFilter);
    205 };
    206 
    207 #endif  // CHROME_BROWSER_RENDERER_HOST_CHROME_RENDER_MESSAGE_FILTER_H_
    208