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 CONTENT_BROWSER_RENDERER_HOST_RENDER_MESSAGE_FILTER_H_
6 #define CONTENT_BROWSER_RENDERER_HOST_RENDER_MESSAGE_FILTER_H_
7 
8 #include <stddef.h>
9 #include <stdint.h>
10 
11 #include <list>
12 #include <string>
13 #include <vector>
14 
15 #include "base/files/file_path.h"
16 #include "base/macros.h"
17 #include "base/memory/weak_ptr.h"
18 #include "base/sequenced_task_runner_helpers.h"
19 #include "base/strings/string16.h"
20 #include "build/build_config.h"
21 #include "content/common/render_message_filter.mojom.h"
22 #include "content/public/browser/browser_associated_interface.h"
23 #include "content/public/browser/browser_message_filter.h"
24 #include "content/public/browser/browser_thread.h"
25 #include "content/public/common/widget_type.h"
26 #include "gpu/config/gpu_info.h"
27 #include "ipc/message_filter.h"
28 #include "mojo/public/cpp/bindings/pending_remote.h"
29 #include "third_party/blink/public/mojom/cache_storage/cache_storage.mojom.h"
30 #include "ui/gfx/geometry/rect.h"
31 #include "ui/gfx/gpu_memory_buffer.h"
32 #include "ui/gfx/native_widget_types.h"
33 #include "ui/surface/transport_dib.h"
34 
35 #if defined(OS_WIN)
36 #include <windows.h>
37 #endif
38 
39 class GURL;
40 
41 namespace media {
42 struct MediaLogRecord;
43 }
44 
45 namespace content {
46 class BrowserContext;
47 class MediaInternals;
48 class RenderWidgetHelper;
49 class ResourceContext;
50 
51 // This class filters out incoming IPC messages for the renderer process on the
52 // IPC thread.
53 class CONTENT_EXPORT RenderMessageFilter
54     : public BrowserMessageFilter,
55       public BrowserAssociatedInterface<mojom::RenderMessageFilter>,
56       public mojom::RenderMessageFilter {
57  public:
58   // Create the filter.
59   RenderMessageFilter(int render_process_id,
60                       BrowserContext* browser_context,
61                       RenderWidgetHelper* render_widget_helper,
62                       MediaInternals* media_internals);
63 
64   // BrowserMessageFilter methods:
65   bool OnMessageReceived(const IPC::Message& message) override;
66   void OnDestruct() const override;
67 
render_process_id()68   int render_process_id() const { return render_process_id_; }
69 
70  protected:
71   ~RenderMessageFilter() override;
72 
73  private:
74   friend class BrowserThread;
75   friend class base::DeleteHelper<RenderMessageFilter>;
76 
77   void OnGetProcessMemorySizes(size_t* private_bytes, size_t* shared_bytes);
78 
79   // mojom::RenderMessageFilter:
80   void GenerateRoutingID(GenerateRoutingIDCallback routing_id) override;
81   void GenerateFrameRoutingID(GenerateFrameRoutingIDCallback callback) override;
82   void HasGpuProcess(HasGpuProcessCallback callback) override;
83 #if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
84   void SetThreadPriority(int32_t ns_tid,
85                          base::ThreadPriority priority) override;
86 #endif
87 
88   void OnResolveProxy(const GURL& url, IPC::Message* reply_msg);
89 
90 #if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
91   void SetThreadPriorityOnFileThread(base::PlatformThreadId ns_tid,
92                                      base::ThreadPriority priority);
93 #endif
94 
95   void OnMediaLogRecords(const std::vector<media::MediaLogRecord>&);
96 
97   bool CheckBenchmarkingEnabled() const;
98   bool CheckPreparsedJsCachingEnabled() const;
99 
100   // The ResourceContext which is to be used on the IO thread.
101   ResourceContext* resource_context_;
102 
103   scoped_refptr<RenderWidgetHelper> render_widget_helper_;
104 
105   int render_process_id_;
106 
107   MediaInternals* media_internals_;
108 
109   base::WeakPtrFactory<RenderMessageFilter> weak_ptr_factory_{this};
110 
111   DISALLOW_COPY_AND_ASSIGN(RenderMessageFilter);
112 };
113 
114 }  // namespace content
115 
116 #endif  // CONTENT_BROWSER_RENDERER_HOST_RENDER_MESSAGE_FILTER_H_
117