| Index: content/browser/browser_io_surface_manager_mac_unittest.cc
|
| diff --git a/content/browser/browser_io_surface_manager_mac_unittest.cc b/content/browser/browser_io_surface_manager_mac_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..07be739e7b578147e3afad6bf0fb990d4fdcf9c4
|
| --- /dev/null
|
| +++ b/content/browser/browser_io_surface_manager_mac_unittest.cc
|
| @@ -0,0 +1,192 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "content/browser/browser_io_surface_manager_mac.h"
|
| +
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace content {
|
| +
|
| +class BrowserIOSurfaceManagerTest : public testing::Test {
|
| + public:
|
| + void EnsureRunning() { io_surface_manager_.EnsureRunning(); }
|
| +
|
| + gpu::Mailbox GetGpuProcessMailbox() const {
|
| + return io_surface_manager_.GetGpuProcessMailbox();
|
| + }
|
| +
|
| + gpu::Mailbox GenerateChildProcessMailbox(int child_process_id) {
|
| + return io_surface_manager_.GenerateChildProcessMailbox(child_process_id);
|
| + }
|
| +
|
| + void InvalidateChildProcessMailbox(const gpu::Mailbox& mailbox) {
|
| + io_surface_manager_.InvalidateChildProcessMailbox(mailbox);
|
| + }
|
| +
|
| + bool HandleRegisterIOSurfaceRequest(
|
| + const IOSurfaceManagerHostMsg_RegisterIOSurface& request,
|
| + IOSurfaceManagerMsg_RegisterIOSurfaceReply* reply) {
|
| + return io_surface_manager_.HandleRegisterIOSurfaceRequest(request, reply);
|
| + }
|
| +
|
| + bool HandleUnregisterIOSurfaceRequest(
|
| + const IOSurfaceManagerHostMsg_UnregisterIOSurface& request) {
|
| + return io_surface_manager_.HandleUnregisterIOSurfaceRequest(request);
|
| + }
|
| +
|
| + bool HandleAcquireIOSurfaceRequest(
|
| + const IOSurfaceManagerHostMsg_AcquireIOSurface& request,
|
| + IOSurfaceManagerMsg_AcquireIOSurfaceReply* reply) {
|
| + return io_surface_manager_.HandleAcquireIOSurfaceRequest(request, reply);
|
| + }
|
| +
|
| + private:
|
| + BrowserIOSurfaceManager io_surface_manager_;
|
| +};
|
| +
|
| +TEST_F(BrowserIOSurfaceManagerTest, EnsureRunning) {
|
| + EnsureRunning();
|
| + mach_port_t service_port =
|
| + BrowserIOSurfaceManager::LookupServicePort(getpid());
|
| + EXPECT_NE(static_cast<mach_port_t>(MACH_PORT_NULL), service_port);
|
| + mach_port_deallocate(mach_task_self(), service_port);
|
| +}
|
| +
|
| +TEST_F(BrowserIOSurfaceManagerTest, IOSurfaceRegistration) {
|
| + const int kIOSurfaceId = 1;
|
| + const int kClientId = 1;
|
| +
|
| + gpu::Mailbox child_process_mailbox = GenerateChildProcessMailbox(kClientId);
|
| +
|
| + {
|
| + IOSurfaceManagerHostMsg_RegisterIOSurface request = {{0}};
|
| + IOSurfaceManagerMsg_RegisterIOSurfaceReply reply = {{0}};
|
| +
|
| + request.io_surface_id = kIOSurfaceId;
|
| + request.client_id = kClientId;
|
| +
|
| + // Fails as request doesn't contain valid mailbox.
|
| + EXPECT_FALSE(HandleRegisterIOSurfaceRequest(request, &reply));
|
| +
|
| + memcpy(request.mailbox_name, child_process_mailbox.name,
|
| + sizeof(child_process_mailbox.name));
|
| + // Fails as child process is not allowed to register IOSurfaces.
|
| + EXPECT_FALSE(HandleRegisterIOSurfaceRequest(request, &reply));
|
| +
|
| + gpu::Mailbox gpu_process_mailbox = GetGpuProcessMailbox();
|
| + memcpy(request.mailbox_name, gpu_process_mailbox.name,
|
| + sizeof(gpu_process_mailbox.name));
|
| + EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply));
|
| + EXPECT_TRUE(reply.result);
|
| + }
|
| +
|
| + {
|
| + IOSurfaceManagerHostMsg_UnregisterIOSurface request = {{0}};
|
| +
|
| + request.io_surface_id = kIOSurfaceId;
|
| + request.client_id = kClientId;
|
| +
|
| + // Fails as request doesn't contain valid GPU mailbox.
|
| + EXPECT_FALSE(HandleUnregisterIOSurfaceRequest(request));
|
| +
|
| + memcpy(request.mailbox_name, child_process_mailbox.name,
|
| + sizeof(child_process_mailbox.name));
|
| + // Fails as child process is not allowed to unregister IOSurfaces.
|
| + EXPECT_FALSE(HandleUnregisterIOSurfaceRequest(request));
|
| +
|
| + gpu::Mailbox gpu_process_mailbox = GetGpuProcessMailbox();
|
| + memcpy(request.mailbox_name, gpu_process_mailbox.name,
|
| + sizeof(gpu_process_mailbox.name));
|
| + EXPECT_TRUE(HandleUnregisterIOSurfaceRequest(request));
|
| + }
|
| +}
|
| +
|
| +TEST_F(BrowserIOSurfaceManagerTest, AcquireIOSurface) {
|
| + const int kIOSurfaceId1 = 10;
|
| + const int kIOSurfaceId2 = 20;
|
| + const int kClientId1 = 1;
|
| + const int kClientId2 = 2;
|
| + const mach_port_t kIOSurfacePortId1 = 100u;
|
| + const mach_port_t kIOSurfacePortId2 = 200u;
|
| +
|
| + gpu::Mailbox child_process_mailbox1 = GenerateChildProcessMailbox(kClientId1);
|
| + gpu::Mailbox child_process_mailbox2 = GenerateChildProcessMailbox(kClientId2);
|
| +
|
| + {
|
| + IOSurfaceManagerHostMsg_RegisterIOSurface request = {{0}};
|
| + IOSurfaceManagerMsg_RegisterIOSurfaceReply reply = {{0}};
|
| +
|
| + // Register IOSurface for use by kClientId1.
|
| + request.io_surface_id = kIOSurfaceId1;
|
| + request.client_id = kClientId1;
|
| + request.io_surface_port.name = kIOSurfacePortId1;
|
| + gpu::Mailbox gpu_process_mailbox = GetGpuProcessMailbox();
|
| + memcpy(request.mailbox_name, gpu_process_mailbox.name,
|
| + sizeof(gpu_process_mailbox.name));
|
| + EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply));
|
| + EXPECT_TRUE(reply.result);
|
| + }
|
| +
|
| + {
|
| + IOSurfaceManagerHostMsg_RegisterIOSurface request = {{0}};
|
| + IOSurfaceManagerMsg_RegisterIOSurfaceReply reply = {{0}};
|
| +
|
| + // Register IOSurface for use by kClientId2.
|
| + request.io_surface_id = kIOSurfaceId2;
|
| + request.client_id = kClientId2;
|
| + request.io_surface_port.name = kIOSurfacePortId2;
|
| + gpu::Mailbox gpu_process_mailbox = GetGpuProcessMailbox();
|
| + memcpy(request.mailbox_name, gpu_process_mailbox.name,
|
| + sizeof(gpu_process_mailbox.name));
|
| + EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply));
|
| + EXPECT_TRUE(reply.result);
|
| + }
|
| +
|
| + {
|
| + IOSurfaceManagerHostMsg_AcquireIOSurface request = {{0}};
|
| + IOSurfaceManagerMsg_AcquireIOSurfaceReply reply = {{0}};
|
| +
|
| + request.io_surface_id = kIOSurfaceId2;
|
| +
|
| + // Fails as request doesn't contain valid mailbox.
|
| + EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply));
|
| +
|
| + memcpy(request.mailbox_name, child_process_mailbox1.name,
|
| + sizeof(child_process_mailbox1.name));
|
| + // Fails as child process 1 is not allowed to acquire this IOSurface.
|
| + EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply));
|
| +
|
| + request.io_surface_id = kIOSurfaceId1;
|
| + EXPECT_TRUE(HandleAcquireIOSurfaceRequest(request, &reply));
|
| + EXPECT_EQ(kIOSurfacePortId1, reply.io_surface_port.name);
|
| + }
|
| +
|
| + {
|
| + IOSurfaceManagerHostMsg_AcquireIOSurface request = {{0}};
|
| + IOSurfaceManagerMsg_AcquireIOSurfaceReply reply = {{0}};
|
| +
|
| + request.io_surface_id = kIOSurfaceId2;
|
| +
|
| + memcpy(request.mailbox_name, child_process_mailbox2.name,
|
| + sizeof(child_process_mailbox2.name));
|
| + EXPECT_TRUE(HandleAcquireIOSurfaceRequest(request, &reply));
|
| + EXPECT_EQ(kIOSurfacePortId2, reply.io_surface_port.name);
|
| + }
|
| +
|
| + InvalidateChildProcessMailbox(child_process_mailbox2);
|
| +
|
| + {
|
| + IOSurfaceManagerHostMsg_AcquireIOSurface request = {{0}};
|
| + IOSurfaceManagerMsg_AcquireIOSurfaceReply reply = {{0}};
|
| +
|
| + request.io_surface_id = kIOSurfaceId2;
|
| +
|
| + memcpy(request.mailbox_name, child_process_mailbox2.name,
|
| + sizeof(child_process_mailbox2.name));
|
| + // Fails as as mailbox is no longer valid.
|
| + EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply));
|
| + }
|
| +}
|
| +
|
| +} // namespace content
|
|
|