1// Copyright (c) 2011 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#pragma once
8
9#include "chrome/common/content_settings.h"
10#include "chrome/browser/prefs/pref_member.h"
11#include "content/browser/browser_message_filter.h"
12#include "third_party/WebKit/Source/WebKit/chromium/public/WebCache.h"
13
14class FilePath;
15class Profile;
16
17namespace net {
18class URLRequestContextGetter;
19}
20
21// This class filters out incoming Chrome-specific IPC messages for the renderer
22// process on the IPC thread.
23class ChromeRenderMessageFilter : public BrowserMessageFilter {
24 public:
25  ChromeRenderMessageFilter(int render_process_id,
26                            Profile* profile,
27                            net::URLRequestContextGetter* request_context);
28
29  // BrowserMessageFilter methods:
30  virtual bool OnMessageReceived(const IPC::Message& message,
31                                 bool* message_was_ok);
32  virtual void OnDestruct() const;
33  virtual void OverrideThreadForMessage(const IPC::Message& message,
34                                        BrowserThread::ID* thread);
35
36 private:
37  friend class BrowserThread;
38  friend class DeleteTask<ChromeRenderMessageFilter>;
39
40  virtual ~ChromeRenderMessageFilter();
41
42  void OnLaunchNaCl(const std::wstring& url,
43                    int channel_descriptor,
44                    IPC::Message* reply_msg);
45  void OnDnsPrefetch(const std::vector<std::string>& hostnames);
46  void OnRendererHistograms(int sequence_number,
47                            const std::vector<std::string>& histogram_info);
48  void OnResourceTypeStats(const WebKit::WebCache::ResourceTypeStats& stats);
49  void OnV8HeapStats(int v8_memory_allocated, int v8_memory_used);
50  void OnOpenChannelToExtension(int routing_id,
51                                const std::string& source_extension_id,
52                                const std::string& target_extension_id,
53                                const std::string& channel_name, int* port_id);
54  void OpenChannelToExtensionOnUIThread(int source_process_id,
55                                        int source_routing_id,
56                                        int receiver_port_id,
57                                        const std::string& source_extension_id,
58                                        const std::string& target_extension_id,
59                                        const std::string& channel_name);
60  void OnOpenChannelToTab(int routing_id, int tab_id,
61                          const std::string& extension_id,
62                          const std::string& channel_name, int* port_id);
63  void OpenChannelToTabOnUIThread(int source_process_id, int source_routing_id,
64                                  int receiver_port_id,
65                                  int tab_id, const std::string& extension_id,
66                                  const std::string& channel_name);
67
68  void OnGetExtensionMessageBundle(const std::string& extension_id,
69                                   IPC::Message* reply_msg);
70  void OnGetExtensionMessageBundleOnFileThread(
71      const FilePath& extension_path,
72      const std::string& extension_id,
73      const std::string& default_locale,
74      IPC::Message* reply_msg);
75#if defined(USE_TCMALLOC)
76  void OnRendererTcmalloc(base::ProcessId pid, const std::string& output);
77#endif
78  void OnGetOutdatedPluginsPolicy(ContentSetting* policy);
79
80  int render_process_id_;
81
82  // The Profile associated with our renderer process.  This should only be
83  // accessed on the UI thread!
84  Profile* profile_;
85  scoped_refptr<net::URLRequestContextGetter> request_context_;
86
87  BooleanPrefMember allow_outdated_plugins_;
88
89  DISALLOW_COPY_AND_ASSIGN(ChromeRenderMessageFilter);
90};
91
92#endif  // CHROME_BROWSER_RENDERER_HOST_CHROME_RENDER_MESSAGE_FILTER_H_
93