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