Make GpuMemoryBufferHandle::dxgi_handle a base::win::ScopedHandle

In the process, convert the buffer_types.mojom to handle<platform>. This
also adds a legacy IPC::ParamTraits<ScopedHandle> to support sending
GpuMemoryBufferHandle over legacy IPC.

Tbr: [email protected]
Bug: 863011, 710376
Change-Id: I087d9d83edc729b512dbb79806a0b4b2db2b31bd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2064609
Commit-Queue: Robert Sesek <[email protected]>
Reviewed-by: Ken Rockot <[email protected]>
Reviewed-by: Daniele Castagna <[email protected]>
Reviewed-by: Michael Thiessen <[email protected]>
Cr-Commit-Position: refs/heads/master@{#745586}
diff --git a/ipc/ipc_message_utils_unittest.cc b/ipc/ipc_message_utils_unittest.cc
index 92f31029..d3c7427e 100644
--- a/ipc/ipc_message_utils_unittest.cc
+++ b/ipc/ipc_message_utils_unittest.cc
@@ -13,10 +13,15 @@
 #include "base/memory/ptr_util.h"
 #include "base/test/test_shared_memory_util.h"
 #include "base/unguessable_token.h"
+#include "build/build_config.h"
 #include "ipc/ipc_channel_handle.h"
 #include "ipc/ipc_message.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+#if defined(OS_WIN)
+#include <windows.h>
+#endif
+
 namespace IPC {
 namespace {
 
@@ -230,5 +235,23 @@
   EXPECT_EQ(input, output);
 }
 
+#if defined(OS_WIN)
+TEST(IPCMessageUtilsTest, ScopedHandle) {
+  HANDLE raw_dupe_handle;
+  ASSERT_TRUE(::DuplicateHandle(::GetCurrentProcess(), ::GetCurrentProcess(),
+                                ::GetCurrentProcess(), &raw_dupe_handle, 0,
+                                FALSE, DUPLICATE_SAME_ACCESS));
+  base::win::ScopedHandle dupe_handle(raw_dupe_handle);
+
+  Message message(0, 0, Message::PRIORITY_LOW);
+  WriteParam(&message, dupe_handle);
+
+  base::PickleIterator iter(message);
+  base::win::ScopedHandle read_handle;
+  EXPECT_TRUE(ReadParam(&message, &iter, &read_handle));
+  EXPECT_TRUE(read_handle.IsValid());
+}
+#endif  // defined(OS_WIN)
+
 }  // namespace
 }  // namespace IPC