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

Side by Side Diff: chrome/browser/extensions/api/socket/tcp_socket_unittest.cc

Issue 10919201: Make sure that a given app/extension requests only its own resources. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Improve tests; fix merge conflicts. Created 8 years, 3 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 | Annotate | Revision Log
OLDNEW
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 "chrome/browser/extensions/api/socket/tcp_socket.h" 5 #include "chrome/browser/extensions/api/socket/tcp_socket.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "chrome/browser/extensions/api/api_resource_event_notifier.h" 8 #include "chrome/browser/extensions/api/api_resource_event_notifier.h"
9 #include "net/base/address_list.h" 9 #include "net/base/address_list.h"
10 #include "net/base/completion_callback.h" 10 #include "net/base/completion_callback.h"
(...skipping 25 matching lines...) Expand all
36 virtual bool IsConnected() const OVERRIDE { 36 virtual bool IsConnected() const OVERRIDE {
37 return true; 37 return true;
38 } 38 }
39 39
40 private: 40 private:
41 DISALLOW_COPY_AND_ASSIGN(MockTCPSocket); 41 DISALLOW_COPY_AND_ASSIGN(MockTCPSocket);
42 }; 42 };
43 43
44 class MockApiResourceEventNotifier : public ApiResourceEventNotifier { 44 class MockApiResourceEventNotifier : public ApiResourceEventNotifier {
45 public: 45 public:
46 MockApiResourceEventNotifier() : ApiResourceEventNotifier(NULL, NULL, 46 MockApiResourceEventNotifier(const std::string& owner_extension_id)
47 std::string(), 47 : ApiResourceEventNotifier(NULL, NULL,
48 0, GURL()) {} 48 owner_extension_id,
49 0, GURL()) {}
49 50
50 MOCK_METHOD2(OnReadComplete, void(int result_code, 51 MOCK_METHOD2(OnReadComplete, void(int result_code,
51 const std::string& message)); 52 const std::string& message));
52 MOCK_METHOD1(OnWriteComplete, void(int result_code)); 53 MOCK_METHOD1(OnWriteComplete, void(int result_code));
53 54
54 protected: 55 protected:
55 virtual ~MockApiResourceEventNotifier() {} 56 virtual ~MockApiResourceEventNotifier() {}
56 }; 57 };
57 58
58 class CompleteHandler { 59 class CompleteHandler {
59 public: 60 public:
60 CompleteHandler() {} 61 CompleteHandler() {}
61 MOCK_METHOD1(OnComplete, void(int result_code)); 62 MOCK_METHOD1(OnComplete, void(int result_code));
62 MOCK_METHOD2(OnReadComplete, void(int result_code, 63 MOCK_METHOD2(OnReadComplete, void(int result_code,
63 scoped_refptr<net::IOBuffer> io_buffer)); 64 scoped_refptr<net::IOBuffer> io_buffer));
64 private: 65 private:
65 DISALLOW_COPY_AND_ASSIGN(CompleteHandler); 66 DISALLOW_COPY_AND_ASSIGN(CompleteHandler);
66 }; 67 };
67 68
69 const std::string FAKE_ID = "abcdefghijklmnopqrst";
68 70
69 TEST(SocketTest, TestTCPSocketRead) { 71 TEST(SocketTest, TestTCPSocketRead) {
70 net::AddressList address_list; 72 net::AddressList address_list;
71 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); 73 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list);
72 ApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); 74 ApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(
75 FAKE_ID);
73 CompleteHandler handler; 76 CompleteHandler handler;
74 77
75 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( 78 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting(
76 tcp_client_socket, notifier)); 79 tcp_client_socket, FAKE_ID, notifier));
77 80
78 EXPECT_CALL(*tcp_client_socket, Read(_, _, _)) 81 EXPECT_CALL(*tcp_client_socket, Read(_, _, _))
79 .Times(1); 82 .Times(1);
80 EXPECT_CALL(handler, OnReadComplete(_, _)) 83 EXPECT_CALL(handler, OnReadComplete(_, _))
81 .Times(1); 84 .Times(1);
82 85
83 const int count = 512; 86 const int count = 512;
84 socket->Read(count, base::Bind(&CompleteHandler::OnReadComplete, 87 socket->Read(count, base::Bind(&CompleteHandler::OnReadComplete,
85 base::Unretained(&handler))); 88 base::Unretained(&handler)));
86 } 89 }
87 90
88 TEST(SocketTest, TestTCPSocketWrite) { 91 TEST(SocketTest, TestTCPSocketWrite) {
89 net::AddressList address_list; 92 net::AddressList address_list;
90 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); 93 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list);
91 ApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); 94 ApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(
95 FAKE_ID);
92 CompleteHandler handler; 96 CompleteHandler handler;
93 97
94 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( 98 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting(
95 tcp_client_socket, notifier)); 99 tcp_client_socket, FAKE_ID, notifier));
96 100
97 net::CompletionCallback callback; 101 net::CompletionCallback callback;
98 EXPECT_CALL(*tcp_client_socket, Write(_, _, _)) 102 EXPECT_CALL(*tcp_client_socket, Write(_, _, _))
99 .Times(2) 103 .Times(2)
100 .WillRepeatedly(testing::DoAll(SaveArg<2>(&callback), 104 .WillRepeatedly(testing::DoAll(SaveArg<2>(&callback),
101 Return(128))); 105 Return(128)));
102 EXPECT_CALL(handler, OnComplete(_)) 106 EXPECT_CALL(handler, OnComplete(_))
103 .Times(1); 107 .Times(1);
104 108
105 scoped_refptr<net::IOBufferWithSize> io_buffer( 109 scoped_refptr<net::IOBufferWithSize> io_buffer(
106 new net::IOBufferWithSize(256)); 110 new net::IOBufferWithSize(256));
107 socket->Write(io_buffer.get(), io_buffer->size(), 111 socket->Write(io_buffer.get(), io_buffer->size(),
108 base::Bind(&CompleteHandler::OnComplete, base::Unretained(&handler))); 112 base::Bind(&CompleteHandler::OnComplete, base::Unretained(&handler)));
109 } 113 }
110 114
111 TEST(SocketTest, TestTCPSocketBlockedWrite) { 115 TEST(SocketTest, TestTCPSocketBlockedWrite) {
112 net::AddressList address_list; 116 net::AddressList address_list;
113 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); 117 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list);
114 MockApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); 118 MockApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(
119 FAKE_ID);
115 CompleteHandler handler; 120 CompleteHandler handler;
116 121
117 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( 122 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting(
118 tcp_client_socket, notifier)); 123 tcp_client_socket, FAKE_ID, notifier));
119 124
120 net::CompletionCallback callback; 125 net::CompletionCallback callback;
121 EXPECT_CALL(*tcp_client_socket, Write(_, _, _)) 126 EXPECT_CALL(*tcp_client_socket, Write(_, _, _))
122 .Times(2) 127 .Times(2)
123 .WillRepeatedly(testing::DoAll(SaveArg<2>(&callback), 128 .WillRepeatedly(testing::DoAll(SaveArg<2>(&callback),
124 Return(net::ERR_IO_PENDING))); 129 Return(net::ERR_IO_PENDING)));
125 scoped_refptr<net::IOBufferWithSize> io_buffer(new net::IOBufferWithSize(42)); 130 scoped_refptr<net::IOBufferWithSize> io_buffer(new net::IOBufferWithSize(42));
126 socket->Write(io_buffer.get(), io_buffer->size(), 131 socket->Write(io_buffer.get(), io_buffer->size(),
127 base::Bind(&CompleteHandler::OnComplete, base::Unretained(&handler))); 132 base::Bind(&CompleteHandler::OnComplete, base::Unretained(&handler)));
128 133
129 // Good. Original call came back unable to complete. Now pretend the socket 134 // Good. Original call came back unable to complete. Now pretend the socket
130 // finished, and confirm that we passed the error back. 135 // finished, and confirm that we passed the error back.
131 EXPECT_CALL(handler, OnComplete(42)) 136 EXPECT_CALL(handler, OnComplete(42))
132 .Times(1); 137 .Times(1);
133 callback.Run(40); 138 callback.Run(40);
134 callback.Run(2); 139 callback.Run(2);
135 } 140 }
136 141
137 TEST(SocketTest, TestTCPSocketBlockedWriteReentry) { 142 TEST(SocketTest, TestTCPSocketBlockedWriteReentry) {
138 net::AddressList address_list; 143 net::AddressList address_list;
139 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); 144 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list);
140 MockApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); 145 MockApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(
146 FAKE_ID);
141 CompleteHandler handlers[5]; 147 CompleteHandler handlers[5];
142 148
143 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( 149 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting(
144 tcp_client_socket, notifier)); 150 tcp_client_socket, FAKE_ID, notifier));
145 151
146 net::CompletionCallback callback; 152 net::CompletionCallback callback;
147 EXPECT_CALL(*tcp_client_socket, Write(_, _, _)) 153 EXPECT_CALL(*tcp_client_socket, Write(_, _, _))
148 .Times(5) 154 .Times(5)
149 .WillRepeatedly(testing::DoAll(SaveArg<2>(&callback), 155 .WillRepeatedly(testing::DoAll(SaveArg<2>(&callback),
150 Return(net::ERR_IO_PENDING))); 156 Return(net::ERR_IO_PENDING)));
151 scoped_refptr<net::IOBufferWithSize> io_buffers[5]; 157 scoped_refptr<net::IOBufferWithSize> io_buffers[5];
152 int i; 158 int i;
153 for (i = 0; i < 5; i++) { 159 for (i = 0; i < 5; i++) {
154 io_buffers[i] = new net::IOBufferWithSize(128 + i * 50); 160 io_buffers[i] = new net::IOBufferWithSize(128 + i * 50);
155 scoped_refptr<net::IOBufferWithSize> io_buffer1( 161 scoped_refptr<net::IOBufferWithSize> io_buffer1(
156 new net::IOBufferWithSize(42)); 162 new net::IOBufferWithSize(42));
157 socket->Write(io_buffers[i].get(), io_buffers[i]->size(), 163 socket->Write(io_buffers[i].get(), io_buffers[i]->size(),
158 base::Bind(&CompleteHandler::OnComplete, 164 base::Bind(&CompleteHandler::OnComplete,
159 base::Unretained(&handlers[i]))); 165 base::Unretained(&handlers[i])));
160 166
161 EXPECT_CALL(handlers[i], OnComplete(io_buffers[i]->size())) 167 EXPECT_CALL(handlers[i], OnComplete(io_buffers[i]->size()))
162 .Times(1); 168 .Times(1);
163 } 169 }
164 170
165 for (i = 0; i < 5; i++) { 171 for (i = 0; i < 5; i++) {
166 callback.Run(128 + i * 50); 172 callback.Run(128 + i * 50);
167 } 173 }
168 } 174 }
169 175
170 TEST(SocketTest, TestTCPSocketSetNoDelay) { 176 TEST(SocketTest, TestTCPSocketSetNoDelay) {
171 net::AddressList address_list; 177 net::AddressList address_list;
172 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); 178 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list);
173 MockApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); 179 MockApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(
180 FAKE_ID);
174 181
175 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( 182 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting(
176 tcp_client_socket, notifier)); 183 tcp_client_socket, FAKE_ID, notifier));
177 184
178 bool no_delay = false; 185 bool no_delay = false;
179 EXPECT_CALL(*tcp_client_socket, SetNoDelay(_)) 186 EXPECT_CALL(*tcp_client_socket, SetNoDelay(_))
180 .WillOnce(testing::DoAll(SaveArg<0>(&no_delay), Return(true))); 187 .WillOnce(testing::DoAll(SaveArg<0>(&no_delay), Return(true)));
181 int result = socket->SetNoDelay(true); 188 int result = socket->SetNoDelay(true);
182 EXPECT_TRUE(result); 189 EXPECT_TRUE(result);
183 EXPECT_TRUE(no_delay); 190 EXPECT_TRUE(no_delay);
184 191
185 EXPECT_CALL(*tcp_client_socket, SetNoDelay(_)) 192 EXPECT_CALL(*tcp_client_socket, SetNoDelay(_))
186 .WillOnce(testing::DoAll(SaveArg<0>(&no_delay), Return(false))); 193 .WillOnce(testing::DoAll(SaveArg<0>(&no_delay), Return(false)));
187 194
188 result = socket->SetNoDelay(false); 195 result = socket->SetNoDelay(false);
189 EXPECT_FALSE(result); 196 EXPECT_FALSE(result);
190 EXPECT_FALSE(no_delay); 197 EXPECT_FALSE(no_delay);
191 } 198 }
192 199
193 TEST(SocketTest, TestTCPSocketSetKeepAlive) { 200 TEST(SocketTest, TestTCPSocketSetKeepAlive) {
194 net::AddressList address_list; 201 net::AddressList address_list;
195 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); 202 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list);
196 MockApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); 203 MockApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(
204 FAKE_ID);
197 205
198 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( 206 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting(
199 tcp_client_socket, notifier)); 207 tcp_client_socket, FAKE_ID, notifier));
200 208
201 bool enable = false; 209 bool enable = false;
202 int delay = 0; 210 int delay = 0;
203 EXPECT_CALL(*tcp_client_socket, SetKeepAlive(_, _)) 211 EXPECT_CALL(*tcp_client_socket, SetKeepAlive(_, _))
204 .WillOnce(testing::DoAll(SaveArg<0>(&enable), 212 .WillOnce(testing::DoAll(SaveArg<0>(&enable),
205 SaveArg<1>(&delay), 213 SaveArg<1>(&delay),
206 Return(true))); 214 Return(true)));
207 int result = socket->SetKeepAlive(true, 4500); 215 int result = socket->SetKeepAlive(true, 4500);
208 EXPECT_TRUE(result); 216 EXPECT_TRUE(result);
209 EXPECT_TRUE(enable); 217 EXPECT_TRUE(enable);
210 EXPECT_EQ(4500, delay); 218 EXPECT_EQ(4500, delay);
211 219
212 EXPECT_CALL(*tcp_client_socket, SetKeepAlive(_, _)) 220 EXPECT_CALL(*tcp_client_socket, SetKeepAlive(_, _))
213 .WillOnce(testing::DoAll(SaveArg<0>(&enable), 221 .WillOnce(testing::DoAll(SaveArg<0>(&enable),
214 SaveArg<1>(&delay), 222 SaveArg<1>(&delay),
215 Return(false))); 223 Return(false)));
216 result = socket->SetKeepAlive(false, 0); 224 result = socket->SetKeepAlive(false, 0);
217 EXPECT_FALSE(result); 225 EXPECT_FALSE(result);
218 EXPECT_FALSE(enable); 226 EXPECT_FALSE(enable);
219 EXPECT_EQ(0, delay); 227 EXPECT_EQ(0, delay);
220 } 228 }
221 229
222 } // namespace extensions 230 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/socket/tcp_socket.cc ('k') | chrome/browser/extensions/api/socket/udp_socket.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698