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