Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(813)

Side by Side Diff: content/browser/browser_io_surface_manager_mac_unittest.cc

Issue 1137453002: content: Pass IOSurface references using Mach IPC. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rsesek's review Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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, RegisterIOSurface) {
56 const int kIOSurfaceId = 1;
57 const int kClientId = 1;
58
59 IOSurfaceManagerToken child_process_token =
60 GenerateChildProcessToken(kClientId);
61
62 IOSurfaceManagerHostMsg_RegisterIOSurface request = {{0}};
63 IOSurfaceManagerMsg_RegisterIOSurfaceReply reply = {{0}};
64
65 request.io_surface_id = kIOSurfaceId;
66 request.client_id = kClientId;
67
68 // Fails as request doesn't contain valid token.
69 EXPECT_FALSE(HandleRegisterIOSurfaceRequest(request, &reply));
70
71 memcpy(request.token_name, child_process_token.name,
72 sizeof(child_process_token.name));
73 // Fails as child process is not allowed to register IOSurfaces.
74 EXPECT_FALSE(HandleRegisterIOSurfaceRequest(request, &reply));
75
76 IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken();
77 memcpy(request.token_name, gpu_process_token.name,
78 sizeof(gpu_process_token.name));
79 EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply));
80 EXPECT_TRUE(reply.result);
81 }
82
83 TEST_F(BrowserIOSurfaceManagerTest, UnregisterIOSurface) {
84 const int kIOSurfaceId = 1;
85 const int kClientId = 1;
86
87 IOSurfaceManagerToken child_process_token =
88 GenerateChildProcessToken(kClientId);
89
90 {
91 IOSurfaceManagerHostMsg_RegisterIOSurface request = {{0}};
92 IOSurfaceManagerMsg_RegisterIOSurfaceReply reply = {{0}};
93
94 // Register IOSurface for use by kClientId.
95 request.io_surface_id = kIOSurfaceId;
96 request.client_id = kClientId;
97 IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken();
98 memcpy(request.token_name, gpu_process_token.name,
99 sizeof(gpu_process_token.name));
100 EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply));
101 EXPECT_TRUE(reply.result);
102 }
103
104 {
105 IOSurfaceManagerHostMsg_UnregisterIOSurface request = {{0}};
106
107 request.io_surface_id = kIOSurfaceId;
108 request.client_id = kClientId;
109
110 // Fails as request doesn't contain valid GPU token.
111 EXPECT_FALSE(HandleUnregisterIOSurfaceRequest(request));
112
113 memcpy(request.token_name, child_process_token.name,
114 sizeof(child_process_token.name));
115 // Fails as child process is not allowed to unregister IOSurfaces.
116 EXPECT_FALSE(HandleUnregisterIOSurfaceRequest(request));
117
118 IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken();
119 memcpy(request.token_name, gpu_process_token.name,
120 sizeof(gpu_process_token.name));
121 EXPECT_TRUE(HandleUnregisterIOSurfaceRequest(request));
122 }
123 }
124
125 TEST_F(BrowserIOSurfaceManagerTest, AcquireIOSurface) {
126 const int kIOSurfaceId1 = 10;
127 const int kIOSurfaceId2 = 20;
128 const int kClientId1 = 1;
129 const int kClientId2 = 2;
130 const mach_port_t kIOSurfacePortId1 = 100u;
131 const mach_port_t kIOSurfacePortId2 = 200u;
132
133 IOSurfaceManagerToken child_process_token1 =
134 GenerateChildProcessToken(kClientId1);
135 IOSurfaceManagerToken child_process_token2 =
136 GenerateChildProcessToken(kClientId2);
137
138 {
139 IOSurfaceManagerHostMsg_RegisterIOSurface request = {{0}};
140 IOSurfaceManagerMsg_RegisterIOSurfaceReply reply = {{0}};
141
142 // Register IOSurface for use by kClientId1.
143 request.io_surface_id = kIOSurfaceId1;
144 request.client_id = kClientId1;
145 request.io_surface_port.name = kIOSurfacePortId1;
146 IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken();
147 memcpy(request.token_name, gpu_process_token.name,
148 sizeof(gpu_process_token.name));
149 EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply));
150 EXPECT_TRUE(reply.result);
151 }
152
153 {
154 IOSurfaceManagerHostMsg_RegisterIOSurface request = {{0}};
155 IOSurfaceManagerMsg_RegisterIOSurfaceReply reply = {{0}};
156
157 // Register IOSurface for use by kClientId2.
158 request.io_surface_id = kIOSurfaceId2;
159 request.client_id = kClientId2;
160 request.io_surface_port.name = kIOSurfacePortId2;
161 IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken();
162 memcpy(request.token_name, gpu_process_token.name,
163 sizeof(gpu_process_token.name));
164 EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply));
165 EXPECT_TRUE(reply.result);
166 }
167
168 {
169 IOSurfaceManagerHostMsg_AcquireIOSurface request = {{0}};
170 IOSurfaceManagerMsg_AcquireIOSurfaceReply reply = {{0}};
171
172 request.io_surface_id = kIOSurfaceId2;
173
174 // Fails as request doesn't contain valid token.
175 EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply));
176
177 memcpy(request.token_name, child_process_token1.name,
178 sizeof(child_process_token1.name));
179 // Fails as child process 1 is not allowed to acquire this IOSurface.
180 EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply));
181
182 request.io_surface_id = kIOSurfaceId1;
183 EXPECT_TRUE(HandleAcquireIOSurfaceRequest(request, &reply));
184 EXPECT_EQ(kIOSurfacePortId1, reply.io_surface_port.name);
185 }
186
187 {
188 IOSurfaceManagerHostMsg_AcquireIOSurface request = {{0}};
189 IOSurfaceManagerMsg_AcquireIOSurfaceReply reply = {{0}};
190
191 request.io_surface_id = kIOSurfaceId2;
192
193 memcpy(request.token_name, child_process_token2.name,
194 sizeof(child_process_token2.name));
195 EXPECT_TRUE(HandleAcquireIOSurfaceRequest(request, &reply));
196 EXPECT_EQ(kIOSurfacePortId2, reply.io_surface_port.name);
197 }
198
199 InvalidateChildProcessToken(child_process_token2);
200
201 {
202 IOSurfaceManagerHostMsg_AcquireIOSurface request = {{0}};
203 IOSurfaceManagerMsg_AcquireIOSurfaceReply reply = {{0}};
204
205 request.io_surface_id = kIOSurfaceId2;
206
207 memcpy(request.token_name, child_process_token2.name,
208 sizeof(child_process_token2.name));
209 // Fails as as token is no longer valid.
210 EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply));
211 }
212 }
213
214 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698