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

Side by Side Diff: ipc/attachment_broker_unprivileged.cc

Issue 1704743002: Revert of Clean up public interface of AttachmentBrokerUnprivileged. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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_unprivileged.h ('k') | remoting/host/desktop_process.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 "ipc/attachment_broker_unprivileged.h" 5 #include "ipc/attachment_broker_unprivileged.h"
6 6
7 #include "base/lazy_instance.h"
8 #include "base/metrics/histogram_macros.h" 7 #include "base/metrics/histogram_macros.h"
9 #include "build/build_config.h" 8 #include "build/build_config.h"
10 #include "ipc/ipc_channel.h" 9 #include "ipc/ipc_channel.h"
11 #include "ipc/ipc_endpoint.h" 10 #include "ipc/ipc_endpoint.h"
12 11
13 #if defined(OS_WIN) 12 #if defined(OS_WIN)
14 #include "ipc/attachment_broker_unprivileged_win.h" 13 #include "ipc/attachment_broker_unprivileged_win.h"
15 #endif 14 #endif
16 15
17 #if defined(OS_MACOSX) && !defined(OS_IOS) 16 #if defined(OS_MACOSX) && !defined(OS_IOS)
18 #include "ipc/attachment_broker_unprivileged_mac.h" 17 #include "ipc/attachment_broker_unprivileged_mac.h"
19 #endif 18 #endif
20 19
21 namespace IPC { 20 namespace IPC {
22 21
23 namespace { 22 AttachmentBrokerUnprivileged::AttachmentBrokerUnprivileged()
23 : sender_(nullptr) {
24 IPC::AttachmentBroker::SetGlobal(this);
25 }
24 26
25 // On platforms that support attachment brokering, returns a new instance of 27 AttachmentBrokerUnprivileged::~AttachmentBrokerUnprivileged() {
26 // a platform-specific attachment broker. Otherwise returns |nullptr|. 28 IPC::AttachmentBroker::SetGlobal(nullptr);
27 // The caller takes ownership of the newly created instance, and is 29 }
28 // responsible for ensuring that the attachment broker lives longer than 30
29 // every IPC::Channel. The new instance automatically registers itself as the 31 // static
30 // global attachment broker. 32 scoped_ptr<AttachmentBrokerUnprivileged>
31 scoped_ptr<AttachmentBrokerUnprivileged> CreateBroker() { 33 AttachmentBrokerUnprivileged::CreateBroker() {
32 #if defined(OS_WIN) 34 #if defined(OS_WIN)
33 return scoped_ptr<AttachmentBrokerUnprivileged>( 35 return scoped_ptr<AttachmentBrokerUnprivileged>(
34 new IPC::AttachmentBrokerUnprivilegedWin); 36 new IPC::AttachmentBrokerUnprivilegedWin);
35 #elif defined(OS_MACOSX) && !defined(OS_IOS) 37 #elif defined(OS_MACOSX) && !defined(OS_IOS)
36 return scoped_ptr<AttachmentBrokerUnprivileged>( 38 return scoped_ptr<AttachmentBrokerUnprivileged>(
37 new IPC::AttachmentBrokerUnprivilegedMac); 39 new IPC::AttachmentBrokerUnprivilegedMac);
38 #else 40 #else
39 return nullptr; 41 return nullptr;
40 #endif 42 #endif
41 } 43 }
42 44
43 // This class is wrapped in a LazyInstance to ensure that its constructor is 45 void AttachmentBrokerUnprivileged::DesignateBrokerCommunicationChannel(
44 // only called once. The constructor creates an attachment broker and sets it as
45 // the global broker.
46 class AttachmentBrokerMakeOnce {
47 public:
48 AttachmentBrokerMakeOnce() {
49 // Single process tests can cause an attachment broker to already exist.
50 if (AttachmentBroker::GetGlobal())
51 return;
52 attachment_broker_ = CreateBroker();
53 }
54
55 private:
56 scoped_ptr<IPC::AttachmentBrokerUnprivileged> attachment_broker_;
57 };
58
59 base::LazyInstance<AttachmentBrokerMakeOnce>::Leaky
60 g_attachment_broker_make_once = LAZY_INSTANCE_INITIALIZER;
61
62 } // namespace
63
64 AttachmentBrokerUnprivileged::AttachmentBrokerUnprivileged()
65 : sender_(nullptr) {
66 IPC::AttachmentBroker::SetGlobal(this);
67 }
68
69 AttachmentBrokerUnprivileged::~AttachmentBrokerUnprivileged() {
70 IPC::AttachmentBroker::SetGlobal(nullptr);
71 }
72
73 // static
74 void AttachmentBrokerUnprivileged::CreateBrokerIfNeeded() {
75 g_attachment_broker_make_once.Get();
76 }
77
78 void AttachmentBrokerUnprivileged::RegisterBrokerCommunicationChannel(
79 Endpoint* endpoint) { 46 Endpoint* endpoint) {
80 DCHECK(endpoint); 47 DCHECK(endpoint);
81 DCHECK(!sender_); 48 DCHECK(!sender_);
82 sender_ = endpoint; 49 sender_ = endpoint;
83 endpoint->SetAttachmentBrokerEndpoint(true); 50 endpoint->SetAttachmentBrokerEndpoint(true);
84 } 51 }
85 52
86 void AttachmentBrokerUnprivileged::DeregisterBrokerCommunicationChannel(
87 Endpoint* endpoint) {
88 DCHECK(endpoint);
89 DCHECK_EQ(endpoint, sender_);
90 sender_ = nullptr;
91 }
92
93 bool AttachmentBrokerUnprivileged::IsPrivilegedBroker() {
94 return false;
95 }
96
97 void AttachmentBrokerUnprivileged::LogError(UMAError error) { 53 void AttachmentBrokerUnprivileged::LogError(UMAError error) {
98 UMA_HISTOGRAM_ENUMERATION( 54 UMA_HISTOGRAM_ENUMERATION(
99 "IPC.AttachmentBrokerUnprivileged.BrokerAttachmentError", error, 55 "IPC.AttachmentBrokerUnprivileged.BrokerAttachmentError", error,
100 ERROR_MAX); 56 ERROR_MAX);
101 } 57 }
102 58
103 } // namespace IPC 59 } // namespace IPC
OLDNEW
« no previous file with comments | « ipc/attachment_broker_unprivileged.h ('k') | remoting/host/desktop_process.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698