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

Side by Side Diff: ipc/attachment_broker_privileged_win_unittest.cc

Issue 1903663004: IPC: Fix attachment brokering race condition. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase (scoped_ptr->std::unique_ptr) Created 4 years, 7 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
« no previous file with comments | « ipc/attachment_broker_mac_unittest.cc ('k') | ipc/ipc_channel.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <tuple> 10 #include <tuple>
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 } 258 }
259 259
260 void TearDown() override { IPCTestBase::TearDown(); } 260 void TearDown() override { IPCTestBase::TearDown(); }
261 261
262 // Takes ownership of |broker|. Has no effect if called after CommonSetUp(). 262 // Takes ownership of |broker|. Has no effect if called after CommonSetUp().
263 void set_broker(IPC::AttachmentBrokerUnprivilegedWin* broker) { 263 void set_broker(IPC::AttachmentBrokerUnprivilegedWin* broker) {
264 broker_.reset(broker); 264 broker_.reset(broker);
265 } 265 }
266 266
267 void CommonSetUp() { 267 void CommonSetUp() {
268 PreConnectSetUp();
269 PostConnectSetUp();
270 }
271
272 // All of setup before the channel is connected.
273 void PreConnectSetUp() {
268 if (!broker_.get()) 274 if (!broker_.get())
269 set_broker(new IPC::AttachmentBrokerUnprivilegedWin); 275 set_broker(new IPC::AttachmentBrokerUnprivilegedWin);
270 broker_->AddObserver(&observer_, task_runner()); 276 broker_->AddObserver(&observer_, task_runner());
271 CreateChannel(&proxy_listener_); 277 CreateChannel(&proxy_listener_);
272 broker_->RegisterBrokerCommunicationChannel(channel()); 278 broker_->RegisterBrokerCommunicationChannel(channel());
279 }
280
281 // All of setup including the connection and everything after.
282 void PostConnectSetUp() {
273 ASSERT_TRUE(ConnectChannel()); 283 ASSERT_TRUE(ConnectChannel());
274 ASSERT_TRUE(StartClient()); 284 ASSERT_TRUE(StartClient());
275 285
276 handle_count_ = GetCurrentProcessHandleCount(); 286 handle_count_ = GetCurrentProcessHandleCount();
277 EXPECT_NE(handle_count_, 0u); 287 EXPECT_NE(handle_count_, 0u);
278 } 288 }
279 289
280 void CommonTearDown() { 290 void CommonTearDown() {
281 EXPECT_EQ(handle_count_, handle_count_); 291 EXPECT_EQ(handle_count_, handle_count_);
282 292
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 CommonTearDown(); 393 CommonTearDown();
384 } 394 }
385 395
386 // Similar to SendHandle, except the attachment's destination process is this 396 // Similar to SendHandle, except the attachment's destination process is this
387 // process. This is an unrealistic scenario, but simulates an unprivileged 397 // process. This is an unrealistic scenario, but simulates an unprivileged
388 // process sending an attachment to another unprivileged process. 398 // process sending an attachment to another unprivileged process.
389 TEST_F(IPCAttachmentBrokerPrivilegedWinTest, SendHandleToSelf) { 399 TEST_F(IPCAttachmentBrokerPrivilegedWinTest, SendHandleToSelf) {
390 Init("SendHandleToSelf"); 400 Init("SendHandleToSelf");
391 401
392 set_broker(new MockBroker); 402 set_broker(new MockBroker);
393 CommonSetUp(); 403
404 PreConnectSetUp();
394 // Technically, the channel is an endpoint, but we need the proxy listener to 405 // Technically, the channel is an endpoint, but we need the proxy listener to
395 // receive the messages so that it can quit the message loop. 406 // receive the messages so that it can quit the message loop.
396 channel()->SetAttachmentBrokerEndpoint(false); 407 channel()->SetAttachmentBrokerEndpoint(false);
408 PostConnectSetUp();
397 get_proxy_listener()->set_listener(get_broker()); 409 get_proxy_listener()->set_listener(get_broker());
398 410
399 HANDLE h = CreateTempFile(); 411 HANDLE h = CreateTempFile();
400 SendMessageWithAttachment(h); 412 SendMessageWithAttachment(h);
401 base::MessageLoop::current()->Run(); 413 base::MessageLoop::current()->Run();
402 414
403 // Get the received attachment. 415 // Get the received attachment.
404 IPC::BrokerableAttachment::AttachmentId* id = get_observer()->get_id(); 416 IPC::BrokerableAttachment::AttachmentId* id = get_observer()->get_id();
405 scoped_refptr<IPC::BrokerableAttachment> received_attachment; 417 scoped_refptr<IPC::BrokerableAttachment> received_attachment;
406 get_broker()->GetAttachmentWithId(*id, &received_attachment); 418 get_broker()->GetAttachmentWithId(*id, &received_attachment);
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 memcmp(shared_memory->memory(), kDataBuffer, strlen(kDataBuffer)) == 0; 657 memcmp(shared_memory->memory(), kDataBuffer, strlen(kDataBuffer)) == 0;
646 SendControlMessage(sender, success); 658 SendControlMessage(sender, success);
647 } 659 }
648 660
649 MULTIPROCESS_IPC_TEST_CLIENT_MAIN(SendSharedMemoryHandle) { 661 MULTIPROCESS_IPC_TEST_CLIENT_MAIN(SendSharedMemoryHandle) {
650 return CommonPrivilegedProcessMain(&SendSharedMemoryHandleCallback, 662 return CommonPrivilegedProcessMain(&SendSharedMemoryHandleCallback,
651 "SendSharedMemoryHandle"); 663 "SendSharedMemoryHandle");
652 } 664 }
653 665
654 } // namespace 666 } // namespace
OLDNEW
« no previous file with comments | « ipc/attachment_broker_mac_unittest.cc ('k') | ipc/ipc_channel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698