Index: content/child/child_thread_impl.cc |
diff --git a/content/child/child_thread_impl.cc b/content/child/child_thread_impl.cc |
index 3978af0b74a438b49b1758b62803fa11f0f28ca1..e7df2f68bc1951c16c1ce73554762d527154cf42 100644 |
--- a/content/child/child_thread_impl.cc |
+++ b/content/child/child_thread_impl.cc |
@@ -68,6 +68,10 @@ |
#include "content/child/child_io_surface_manager_mac.h" |
#endif |
+#if defined(USE_OZONE) |
+#include "ui/ozone/public/client_native_pixmap_factory.h" |
+#endif |
+ |
#if defined(OS_WIN) |
#include "ipc/attachment_broker_unprivileged_win.h" |
#endif |
@@ -192,6 +196,29 @@ class IOSurfaceManagerFilter : public IPC::MessageFilter { |
}; |
#endif |
+#if defined(USE_OZONE) |
+class ClientNativePixmapFactoryFilter : public IPC::MessageFilter { |
+ public: |
+ // Overridden from IPC::MessageFilter: |
+ bool OnMessageReceived(const IPC::Message& message) override { |
+ bool handled = true; |
+ IPC_BEGIN_MESSAGE_MAP(ClientNativePixmapFactoryFilter, message) |
+ IPC_MESSAGE_HANDLER(ChildProcessMsg_SetVgemFD, OnSetVgemFD) |
+ IPC_MESSAGE_UNHANDLED(handled = false) |
+ IPC_END_MESSAGE_MAP() |
+ return handled; |
+ } |
+ |
+ protected: |
+ ~ClientNativePixmapFactoryFilter() override {} |
+ |
+ void OnSetVgemFD(const base::FileDescriptor& vgem_fd) { |
+ base::ScopedFD scoped_fd(vgem_fd.fd); |
+ ui::ClientNativePixmapFactory::GetInstance()->SetVgemFD(&scoped_fd); |
+ } |
+}; |
+#endif |
+ |
#if defined(OS_ANDROID) |
// A class that allows for triggering a clean shutdown from another |
// thread through draining the main thread's msg loop. |
@@ -428,6 +455,10 @@ void ChildThreadImpl::Init(const Options& options) { |
channel_->AddFilter(new IOSurfaceManagerFilter()); |
#endif |
+#if defined(USE_OZONE) |
+ channel_->AddFilter(new ClientNativePixmapFactoryFilter()); |
+#endif |
+ |
// Add filters passed here via options. |
for (auto startup_filter : options.startup_filters) { |
channel_->AddFilter(startup_filter); |