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..b37130ce019ecc7eac02178f97ebce9f91928c4d |
--- /dev/null |
+++ b/content/browser/browser_io_surface_manager_mac_unittest.cc |
@@ -0,0 +1,194 @@ |
+// 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(); } |
+ |
+ IOSurfaceManagerToken GetGpuProcessToken() const { |
+ return io_surface_manager_.GetGpuProcessToken(); |
+ } |
+ |
+ IOSurfaceManagerToken GenerateChildProcessToken(int child_process_id) { |
+ return io_surface_manager_.GenerateChildProcessToken(child_process_id); |
+ } |
+ |
+ void InvalidateChildProcessToken(const IOSurfaceManagerToken& token) { |
+ io_surface_manager_.InvalidateChildProcessToken(token); |
+ } |
+ |
+ 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(); |
+ base::mac::ScopedMachSendRight service_port = |
+ BrowserIOSurfaceManager::LookupServicePort(getpid()); |
+ EXPECT_TRUE(service_port.is_valid()); |
+} |
+ |
+TEST_F(BrowserIOSurfaceManagerTest, IOSurfaceRegistration) { |
+ const int kIOSurfaceId = 1; |
+ const int kClientId = 1; |
+ |
+ IOSurfaceManagerToken child_process_token = |
+ GenerateChildProcessToken(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 token. |
+ EXPECT_FALSE(HandleRegisterIOSurfaceRequest(request, &reply)); |
+ |
+ memcpy(request.token_name, child_process_token.name, |
+ sizeof(child_process_token.name)); |
+ // Fails as child process is not allowed to register IOSurfaces. |
+ EXPECT_FALSE(HandleRegisterIOSurfaceRequest(request, &reply)); |
+ |
+ IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken(); |
+ memcpy(request.token_name, gpu_process_token.name, |
+ sizeof(gpu_process_token.name)); |
+ EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply)); |
+ EXPECT_TRUE(reply.result); |
+ } |
Robert Sesek
2015/05/28 18:25:11
Since there's not much shared setup between these
reveman
2015/05/29 00:09:02
Done.
Robert Sesek
2015/06/01 21:58:06
Really? There's still a bunch of different test ca
reveman
2015/06/02 22:48:07
Sorry, misunderstood your previous comment. Though
|
+ |
+ { |
+ IOSurfaceManagerHostMsg_UnregisterIOSurface request = {{0}}; |
+ |
+ request.io_surface_id = kIOSurfaceId; |
+ request.client_id = kClientId; |
+ |
+ // Fails as request doesn't contain valid GPU token. |
+ EXPECT_FALSE(HandleUnregisterIOSurfaceRequest(request)); |
+ |
+ memcpy(request.token_name, child_process_token.name, |
+ sizeof(child_process_token.name)); |
+ // Fails as child process is not allowed to unregister IOSurfaces. |
+ EXPECT_FALSE(HandleUnregisterIOSurfaceRequest(request)); |
+ |
+ IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken(); |
+ memcpy(request.token_name, gpu_process_token.name, |
+ sizeof(gpu_process_token.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; |
+ |
+ IOSurfaceManagerToken child_process_token1 = |
+ GenerateChildProcessToken(kClientId1); |
+ IOSurfaceManagerToken child_process_token2 = |
+ GenerateChildProcessToken(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; |
+ IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken(); |
+ memcpy(request.token_name, gpu_process_token.name, |
+ sizeof(gpu_process_token.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; |
+ IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken(); |
+ memcpy(request.token_name, gpu_process_token.name, |
+ sizeof(gpu_process_token.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 token. |
+ EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply)); |
+ |
+ memcpy(request.token_name, child_process_token1.name, |
+ sizeof(child_process_token1.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.token_name, child_process_token2.name, |
+ sizeof(child_process_token2.name)); |
+ EXPECT_TRUE(HandleAcquireIOSurfaceRequest(request, &reply)); |
+ EXPECT_EQ(kIOSurfacePortId2, reply.io_surface_port.name); |
+ } |
+ |
+ InvalidateChildProcessToken(child_process_token2); |
+ |
+ { |
+ IOSurfaceManagerHostMsg_AcquireIOSurface request = {{0}}; |
+ IOSurfaceManagerMsg_AcquireIOSurfaceReply reply = {{0}}; |
+ |
+ request.io_surface_id = kIOSurfaceId2; |
+ |
+ memcpy(request.token_name, child_process_token2.name, |
+ sizeof(child_process_token2.name)); |
+ // Fails as as token is no longer valid. |
+ EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply)); |
+ } |
+} |
+ |
+} // namespace content |