Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2015 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 #include "content/browser/browser_io_surface_manager_mac.h" | |
| 6 | |
| 7 #include "testing/gtest/include/gtest/gtest.h" | |
| 8 | |
| 9 namespace content { | |
| 10 | |
| 11 class BrowserIOSurfaceManagerTest : public testing::Test { | |
| 12 public: | |
| 13 void EnsureRunning() { io_surface_manager_.EnsureRunning(); } | |
| 14 | |
| 15 IOSurfaceManagerToken GetGpuProcessToken() const { | |
| 16 return io_surface_manager_.GetGpuProcessToken(); | |
| 17 } | |
| 18 | |
| 19 IOSurfaceManagerToken GenerateChildProcessToken(int child_process_id) { | |
| 20 return io_surface_manager_.GenerateChildProcessToken(child_process_id); | |
| 21 } | |
| 22 | |
| 23 void InvalidateChildProcessToken(const IOSurfaceManagerToken& token) { | |
| 24 io_surface_manager_.InvalidateChildProcessToken(token); | |
| 25 } | |
| 26 | |
| 27 bool HandleRegisterIOSurfaceRequest( | |
| 28 const IOSurfaceManagerHostMsg_RegisterIOSurface& request, | |
| 29 IOSurfaceManagerMsg_RegisterIOSurfaceReply* reply) { | |
| 30 return io_surface_manager_.HandleRegisterIOSurfaceRequest(request, reply); | |
| 31 } | |
| 32 | |
| 33 bool HandleUnregisterIOSurfaceRequest( | |
| 34 const IOSurfaceManagerHostMsg_UnregisterIOSurface& request) { | |
| 35 return io_surface_manager_.HandleUnregisterIOSurfaceRequest(request); | |
| 36 } | |
| 37 | |
| 38 bool HandleAcquireIOSurfaceRequest( | |
| 39 const IOSurfaceManagerHostMsg_AcquireIOSurface& request, | |
| 40 IOSurfaceManagerMsg_AcquireIOSurfaceReply* reply) { | |
| 41 return io_surface_manager_.HandleAcquireIOSurfaceRequest(request, reply); | |
| 42 } | |
| 43 | |
| 44 private: | |
| 45 BrowserIOSurfaceManager io_surface_manager_; | |
| 46 }; | |
| 47 | |
| 48 TEST_F(BrowserIOSurfaceManagerTest, EnsureRunning) { | |
| 49 EnsureRunning(); | |
| 50 base::mac::ScopedMachSendRight service_port = | |
| 51 BrowserIOSurfaceManager::LookupServicePort(getpid()); | |
| 52 EXPECT_TRUE(service_port.is_valid()); | |
| 53 } | |
| 54 | |
| 55 TEST_F(BrowserIOSurfaceManagerTest, IOSurfaceRegistration) { | |
| 56 const int kIOSurfaceId = 1; | |
| 57 const int kClientId = 1; | |
| 58 | |
| 59 IOSurfaceManagerToken child_process_token = | |
| 60 GenerateChildProcessToken(kClientId); | |
| 61 | |
| 62 { | |
| 63 IOSurfaceManagerHostMsg_RegisterIOSurface request = {{0}}; | |
| 64 IOSurfaceManagerMsg_RegisterIOSurfaceReply reply = {{0}}; | |
| 65 | |
| 66 request.io_surface_id = kIOSurfaceId; | |
| 67 request.client_id = kClientId; | |
| 68 | |
| 69 // Fails as request doesn't contain valid token. | |
| 70 EXPECT_FALSE(HandleRegisterIOSurfaceRequest(request, &reply)); | |
| 71 | |
| 72 memcpy(request.token_name, child_process_token.name, | |
| 73 sizeof(child_process_token.name)); | |
| 74 // Fails as child process is not allowed to register IOSurfaces. | |
| 75 EXPECT_FALSE(HandleRegisterIOSurfaceRequest(request, &reply)); | |
| 76 | |
| 77 IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken(); | |
| 78 memcpy(request.token_name, gpu_process_token.name, | |
| 79 sizeof(gpu_process_token.name)); | |
| 80 EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply)); | |
| 81 EXPECT_TRUE(reply.result); | |
| 82 } | |
|
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
| |
| 83 | |
| 84 { | |
| 85 IOSurfaceManagerHostMsg_UnregisterIOSurface request = {{0}}; | |
| 86 | |
| 87 request.io_surface_id = kIOSurfaceId; | |
| 88 request.client_id = kClientId; | |
| 89 | |
| 90 // Fails as request doesn't contain valid GPU token. | |
| 91 EXPECT_FALSE(HandleUnregisterIOSurfaceRequest(request)); | |
| 92 | |
| 93 memcpy(request.token_name, child_process_token.name, | |
| 94 sizeof(child_process_token.name)); | |
| 95 // Fails as child process is not allowed to unregister IOSurfaces. | |
| 96 EXPECT_FALSE(HandleUnregisterIOSurfaceRequest(request)); | |
| 97 | |
| 98 IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken(); | |
| 99 memcpy(request.token_name, gpu_process_token.name, | |
| 100 sizeof(gpu_process_token.name)); | |
| 101 EXPECT_TRUE(HandleUnregisterIOSurfaceRequest(request)); | |
| 102 } | |
| 103 } | |
| 104 | |
| 105 TEST_F(BrowserIOSurfaceManagerTest, AcquireIOSurface) { | |
| 106 const int kIOSurfaceId1 = 10; | |
| 107 const int kIOSurfaceId2 = 20; | |
| 108 const int kClientId1 = 1; | |
| 109 const int kClientId2 = 2; | |
| 110 const mach_port_t kIOSurfacePortId1 = 100u; | |
| 111 const mach_port_t kIOSurfacePortId2 = 200u; | |
| 112 | |
| 113 IOSurfaceManagerToken child_process_token1 = | |
| 114 GenerateChildProcessToken(kClientId1); | |
| 115 IOSurfaceManagerToken child_process_token2 = | |
| 116 GenerateChildProcessToken(kClientId2); | |
| 117 | |
| 118 { | |
| 119 IOSurfaceManagerHostMsg_RegisterIOSurface request = {{0}}; | |
| 120 IOSurfaceManagerMsg_RegisterIOSurfaceReply reply = {{0}}; | |
| 121 | |
| 122 // Register IOSurface for use by kClientId1. | |
| 123 request.io_surface_id = kIOSurfaceId1; | |
| 124 request.client_id = kClientId1; | |
| 125 request.io_surface_port.name = kIOSurfacePortId1; | |
| 126 IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken(); | |
| 127 memcpy(request.token_name, gpu_process_token.name, | |
| 128 sizeof(gpu_process_token.name)); | |
| 129 EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply)); | |
| 130 EXPECT_TRUE(reply.result); | |
| 131 } | |
| 132 | |
| 133 { | |
| 134 IOSurfaceManagerHostMsg_RegisterIOSurface request = {{0}}; | |
| 135 IOSurfaceManagerMsg_RegisterIOSurfaceReply reply = {{0}}; | |
| 136 | |
| 137 // Register IOSurface for use by kClientId2. | |
| 138 request.io_surface_id = kIOSurfaceId2; | |
| 139 request.client_id = kClientId2; | |
| 140 request.io_surface_port.name = kIOSurfacePortId2; | |
| 141 IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken(); | |
| 142 memcpy(request.token_name, gpu_process_token.name, | |
| 143 sizeof(gpu_process_token.name)); | |
| 144 EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply)); | |
| 145 EXPECT_TRUE(reply.result); | |
| 146 } | |
| 147 | |
| 148 { | |
| 149 IOSurfaceManagerHostMsg_AcquireIOSurface request = {{0}}; | |
| 150 IOSurfaceManagerMsg_AcquireIOSurfaceReply reply = {{0}}; | |
| 151 | |
| 152 request.io_surface_id = kIOSurfaceId2; | |
| 153 | |
| 154 // Fails as request doesn't contain valid token. | |
| 155 EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply)); | |
| 156 | |
| 157 memcpy(request.token_name, child_process_token1.name, | |
| 158 sizeof(child_process_token1.name)); | |
| 159 // Fails as child process 1 is not allowed to acquire this IOSurface. | |
| 160 EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply)); | |
| 161 | |
| 162 request.io_surface_id = kIOSurfaceId1; | |
| 163 EXPECT_TRUE(HandleAcquireIOSurfaceRequest(request, &reply)); | |
| 164 EXPECT_EQ(kIOSurfacePortId1, reply.io_surface_port.name); | |
| 165 } | |
| 166 | |
| 167 { | |
| 168 IOSurfaceManagerHostMsg_AcquireIOSurface request = {{0}}; | |
| 169 IOSurfaceManagerMsg_AcquireIOSurfaceReply reply = {{0}}; | |
| 170 | |
| 171 request.io_surface_id = kIOSurfaceId2; | |
| 172 | |
| 173 memcpy(request.token_name, child_process_token2.name, | |
| 174 sizeof(child_process_token2.name)); | |
| 175 EXPECT_TRUE(HandleAcquireIOSurfaceRequest(request, &reply)); | |
| 176 EXPECT_EQ(kIOSurfacePortId2, reply.io_surface_port.name); | |
| 177 } | |
| 178 | |
| 179 InvalidateChildProcessToken(child_process_token2); | |
| 180 | |
| 181 { | |
| 182 IOSurfaceManagerHostMsg_AcquireIOSurface request = {{0}}; | |
| 183 IOSurfaceManagerMsg_AcquireIOSurfaceReply reply = {{0}}; | |
| 184 | |
| 185 request.io_surface_id = kIOSurfaceId2; | |
| 186 | |
| 187 memcpy(request.token_name, child_process_token2.name, | |
| 188 sizeof(child_process_token2.name)); | |
| 189 // Fails as as token is no longer valid. | |
| 190 EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply)); | |
| 191 } | |
| 192 } | |
| 193 | |
| 194 } // namespace content | |
| OLD | NEW |