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

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, 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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698