OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <errno.h> | 5 #include <errno.h> |
6 #include <fcntl.h> | 6 #include <fcntl.h> |
7 #include <poll.h> | 7 #include <poll.h> |
8 #include <sys/socket.h> | 8 #include <sys/socket.h> |
9 #include <sys/stat.h> | 9 #include <sys/stat.h> |
10 #include <sys/time.h> | 10 #include <sys/time.h> |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 DCHECK(len); | 116 DCHECK(len); |
117 data_.assign(data, len - 1); | 117 data_.assign(data, len - 1); |
118 } | 118 } |
119 Notify(EVENT_READ); | 119 Notify(EVENT_READ); |
120 } | 120 } |
121 | 121 |
122 virtual void DidClose(StreamListenSocket* sock) OVERRIDE { | 122 virtual void DidClose(StreamListenSocket* sock) OVERRIDE { |
123 Notify(EVENT_CLOSE); | 123 Notify(EVENT_CLOSE); |
124 } | 124 } |
125 | 125 |
126 void OnListenCompleted() { | 126 void OnListenCompleted() { Notify(EVENT_LISTEN); } |
127 Notify(EVENT_LISTEN); | |
128 } | |
129 | 127 |
130 string ReceivedData() { | 128 string ReceivedData() { |
131 base::AutoLock lock(mutex_); | 129 base::AutoLock lock(mutex_); |
132 return data_; | 130 return data_; |
133 } | 131 } |
134 | 132 |
135 private: | 133 private: |
136 void Notify(EventType event) { | 134 void Notify(EventType event) { event_manager_->Notify(event); } |
137 event_manager_->Notify(event); | |
138 } | |
139 | 135 |
140 const scoped_refptr<EventManager> event_manager_; | 136 const scoped_refptr<EventManager> event_manager_; |
141 scoped_ptr<StreamListenSocket> connection_; | 137 scoped_ptr<StreamListenSocket> connection_; |
142 base::Lock mutex_; | 138 base::Lock mutex_; |
143 string data_; | 139 string data_; |
144 }; | 140 }; |
145 | 141 |
146 bool UserCanConnectCallback( | 142 bool UserCanConnectCallback(bool allow_user, |
147 bool allow_user, const scoped_refptr<EventManager>& event_manager, | 143 const scoped_refptr<EventManager>& event_manager, |
148 uid_t, gid_t) { | 144 uid_t, |
149 event_manager->Notify( | 145 gid_t) { |
150 allow_user ? EVENT_AUTH_GRANTED : EVENT_AUTH_DENIED); | 146 event_manager->Notify(allow_user ? EVENT_AUTH_GRANTED : EVENT_AUTH_DENIED); |
151 return allow_user; | 147 return allow_user; |
152 } | 148 } |
153 | 149 |
154 class UnixDomainSocketTestHelper : public testing::Test { | 150 class UnixDomainSocketTestHelper : public testing::Test { |
155 public: | 151 public: |
156 void CreateAndListen() { | 152 void CreateAndListen() { |
157 socket_ = UnixDomainSocket::CreateAndListen( | 153 socket_ = UnixDomainSocket::CreateAndListen( |
158 file_path_.value(), socket_delegate_.get(), MakeAuthCallback()); | 154 file_path_.value(), socket_delegate_.get(), MakeAuthCallback()); |
159 socket_delegate_->OnListenCompleted(); | 155 socket_delegate_->OnListenCompleted(); |
160 } | 156 } |
161 | 157 |
162 protected: | 158 protected: |
163 UnixDomainSocketTestHelper(const string& path, bool allow_user) | 159 UnixDomainSocketTestHelper(const string& path, bool allow_user) |
164 : file_path_(path), | 160 : file_path_(path), allow_user_(allow_user) {} |
165 allow_user_(allow_user) {} | |
166 | 161 |
167 virtual void SetUp() OVERRIDE { | 162 virtual void SetUp() OVERRIDE { |
168 event_manager_ = new EventManager(); | 163 event_manager_ = new EventManager(); |
169 socket_delegate_.reset(new TestListenSocketDelegate(event_manager_)); | 164 socket_delegate_.reset(new TestListenSocketDelegate(event_manager_)); |
170 DeleteSocketFile(); | 165 DeleteSocketFile(); |
171 } | 166 } |
172 | 167 |
173 virtual void TearDown() OVERRIDE { | 168 virtual void TearDown() OVERRIDE { |
174 DeleteSocketFile(); | 169 DeleteSocketFile(); |
175 socket_.reset(); | 170 socket_.reset(); |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
262 file_path_.value(), "", socket_delegate_.get(), MakeAuthCallback()); | 257 file_path_.value(), "", socket_delegate_.get(), MakeAuthCallback()); |
263 EXPECT_FALSE(socket_.get() == NULL); | 258 EXPECT_FALSE(socket_.get() == NULL); |
264 } | 259 } |
265 | 260 |
266 TEST_F(UnixDomainSocketTest, TestFallbackName) { | 261 TEST_F(UnixDomainSocketTest, TestFallbackName) { |
267 scoped_ptr<UnixDomainSocket> existing_socket = | 262 scoped_ptr<UnixDomainSocket> existing_socket = |
268 UnixDomainSocket::CreateAndListenWithAbstractNamespace( | 263 UnixDomainSocket::CreateAndListenWithAbstractNamespace( |
269 file_path_.value(), "", socket_delegate_.get(), MakeAuthCallback()); | 264 file_path_.value(), "", socket_delegate_.get(), MakeAuthCallback()); |
270 EXPECT_FALSE(existing_socket.get() == NULL); | 265 EXPECT_FALSE(existing_socket.get() == NULL); |
271 // First, try to bind socket with the same name with no fallback name. | 266 // First, try to bind socket with the same name with no fallback name. |
272 socket_ = | 267 socket_ = UnixDomainSocket::CreateAndListenWithAbstractNamespace( |
273 UnixDomainSocket::CreateAndListenWithAbstractNamespace( | 268 file_path_.value(), "", socket_delegate_.get(), MakeAuthCallback()); |
274 file_path_.value(), "", socket_delegate_.get(), MakeAuthCallback()); | |
275 EXPECT_TRUE(socket_.get() == NULL); | 269 EXPECT_TRUE(socket_.get() == NULL); |
276 // Now with a fallback name. | 270 // Now with a fallback name. |
277 const char kFallbackSocketName[] = "unix_domain_socket_for_testing_2"; | 271 const char kFallbackSocketName[] = "unix_domain_socket_for_testing_2"; |
278 socket_ = UnixDomainSocket::CreateAndListenWithAbstractNamespace( | 272 socket_ = UnixDomainSocket::CreateAndListenWithAbstractNamespace( |
279 file_path_.value(), | 273 file_path_.value(), |
280 MakeSocketPath(kFallbackSocketName), | 274 MakeSocketPath(kFallbackSocketName), |
281 socket_delegate_.get(), | 275 socket_delegate_.get(), |
282 MakeAuthCallback()); | 276 MakeAuthCallback()); |
283 EXPECT_FALSE(socket_.get() == NULL); | 277 EXPECT_FALSE(socket_.get() == NULL); |
284 } | 278 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 | 323 |
330 // Send() must fail. | 324 // Send() must fail. |
331 ssize_t ret = HANDLE_EINTR(send(sock, kMsg, sizeof(kMsg), 0)); | 325 ssize_t ret = HANDLE_EINTR(send(sock, kMsg, sizeof(kMsg), 0)); |
332 ASSERT_EQ(-1, ret); | 326 ASSERT_EQ(-1, ret); |
333 ASSERT_EQ(EPIPE, errno); | 327 ASSERT_EQ(EPIPE, errno); |
334 ASSERT_FALSE(event_manager_->HasPendingEvent()); | 328 ASSERT_FALSE(event_manager_->HasPendingEvent()); |
335 } | 329 } |
336 | 330 |
337 } // namespace | 331 } // namespace |
338 } // namespace net | 332 } // namespace net |
OLD | NEW |