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 |