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

Side by Side Diff: content/browser/fileapi/fileapi_message_filter_unittest.cc

Issue 292443004: Remove IPC_BEGIN_MESSAGE_MAP_EX macro since r270839 made all bad IPCs kill their child processes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/browser/fileapi/fileapi_message_filter.h" 5 #include "content/browser/fileapi/fileapi_message_filter.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 0 /* process_id */, 68 0 /* process_id */,
69 browser_context_.GetRequestContext(), 69 browser_context_.GetRequestContext(),
70 file_system_context_.get(), 70 file_system_context_.get(),
71 blob_storage_context_, 71 blob_storage_context_,
72 stream_context_); 72 stream_context_);
73 73
74 // Complete initialization. 74 // Complete initialization.
75 message_loop_.RunUntilIdle(); 75 message_loop_.RunUntilIdle();
76 } 76 }
77 77
78 // Tests via OnMessageReceived(const IPC::Message&). The channel proxy calls
79 // this method.
80 bool InvokeOnMessageReceived(const IPC::Message& message) {
81 bool message_was_ok;
82 return filter_->OnMessageReceived(message, &message_was_ok);
83 }
84
85 base::MessageLoop message_loop_; 78 base::MessageLoop message_loop_;
86 TestBrowserThread io_browser_thread_; 79 TestBrowserThread io_browser_thread_;
87 80
88 TestBrowserContext browser_context_; 81 TestBrowserContext browser_context_;
89 scoped_refptr<fileapi::FileSystemContext> file_system_context_; 82 scoped_refptr<fileapi::FileSystemContext> file_system_context_;
90 StreamContext* stream_context_; 83 StreamContext* stream_context_;
91 ChromeBlobStorageContext* blob_storage_context_; 84 ChromeBlobStorageContext* blob_storage_context_;
92 85
93 scoped_refptr<FileAPIMessageFilter> filter_; 86 scoped_refptr<FileAPIMessageFilter> filter_;
94 }; 87 };
95 88
96 TEST_F(FileAPIMessageFilterTest, CloseChannelWithInflightRequest) { 89 TEST_F(FileAPIMessageFilterTest, CloseChannelWithInflightRequest) {
97 scoped_refptr<FileAPIMessageFilter> filter( 90 scoped_refptr<FileAPIMessageFilter> filter(
98 new FileAPIMessageFilter( 91 new FileAPIMessageFilter(
99 0 /* process_id */, 92 0 /* process_id */,
100 browser_context_.GetRequestContext(), 93 browser_context_.GetRequestContext(),
101 file_system_context_.get(), 94 file_system_context_.get(),
102 ChromeBlobStorageContext::GetFor(&browser_context_), 95 ChromeBlobStorageContext::GetFor(&browser_context_),
103 StreamContext::GetFor(&browser_context_))); 96 StreamContext::GetFor(&browser_context_)));
104 filter->OnChannelConnected(0); 97 filter->OnChannelConnected(0);
105 98
106 // Complete initialization. 99 // Complete initialization.
107 message_loop_.RunUntilIdle(); 100 message_loop_.RunUntilIdle();
108 101
109 int request_id = 0; 102 int request_id = 0;
110 const GURL kUrl("filesystem:http://example.com/temporary/foo"); 103 const GURL kUrl("filesystem:http://example.com/temporary/foo");
111 FileSystemHostMsg_ReadMetadata read_metadata(request_id++, kUrl); 104 FileSystemHostMsg_ReadMetadata read_metadata(request_id++, kUrl);
112 bool message_was_ok; 105 EXPECT_TRUE(filter->OnMessageReceived(read_metadata));
113 EXPECT_TRUE(filter->OnMessageReceived(read_metadata, &message_was_ok));
114 106
115 // Close the filter while it has inflight request. 107 // Close the filter while it has inflight request.
116 filter->OnChannelClosing(); 108 filter->OnChannelClosing();
117 109
118 // This shouldn't cause DCHECK failure. 110 // This shouldn't cause DCHECK failure.
119 message_loop_.RunUntilIdle(); 111 message_loop_.RunUntilIdle();
120 } 112 }
121 113
122 TEST_F(FileAPIMessageFilterTest, MultipleFilters) { 114 TEST_F(FileAPIMessageFilterTest, MultipleFilters) {
123 scoped_refptr<FileAPIMessageFilter> filter1( 115 scoped_refptr<FileAPIMessageFilter> filter1(
(...skipping 12 matching lines...) Expand all
136 StreamContext::GetFor(&browser_context_))); 128 StreamContext::GetFor(&browser_context_)));
137 filter1->OnChannelConnected(0); 129 filter1->OnChannelConnected(0);
138 filter2->OnChannelConnected(1); 130 filter2->OnChannelConnected(1);
139 131
140 // Complete initialization. 132 // Complete initialization.
141 message_loop_.RunUntilIdle(); 133 message_loop_.RunUntilIdle();
142 134
143 int request_id = 0; 135 int request_id = 0;
144 const GURL kUrl("filesystem:http://example.com/temporary/foo"); 136 const GURL kUrl("filesystem:http://example.com/temporary/foo");
145 FileSystemHostMsg_ReadMetadata read_metadata(request_id++, kUrl); 137 FileSystemHostMsg_ReadMetadata read_metadata(request_id++, kUrl);
146 bool message_was_ok; 138 EXPECT_TRUE(filter1->OnMessageReceived(read_metadata));
147 EXPECT_TRUE(filter1->OnMessageReceived(read_metadata, &message_was_ok));
148 139
149 // Close the other filter before the request for filter1 is processed. 140 // Close the other filter before the request for filter1 is processed.
150 filter2->OnChannelClosing(); 141 filter2->OnChannelClosing();
151 142
152 // This shouldn't cause DCHECK failure. 143 // This shouldn't cause DCHECK failure.
153 message_loop_.RunUntilIdle(); 144 message_loop_.RunUntilIdle();
154 } 145 }
155 146
156 TEST_F(FileAPIMessageFilterTest, BuildEmptyStream) { 147 TEST_F(FileAPIMessageFilterTest, BuildEmptyStream) {
157 StreamRegistry* stream_registry = stream_context_->registry(); 148 StreamRegistry* stream_registry = stream_context_->registry();
158 149
159 const GURL kUrl(kFakeBlobInternalUrlSpec); 150 const GURL kUrl(kFakeBlobInternalUrlSpec);
160 const GURL kDifferentUrl("blob:barfoo"); 151 const GURL kDifferentUrl("blob:barfoo");
161 152
162 EXPECT_EQ(NULL, stream_registry->GetStream(kUrl).get()); 153 EXPECT_EQ(NULL, stream_registry->GetStream(kUrl).get());
163 154
164 StreamHostMsg_StartBuilding start_message(kUrl, kFakeContentType); 155 StreamHostMsg_StartBuilding start_message(kUrl, kFakeContentType);
165 EXPECT_TRUE(InvokeOnMessageReceived(start_message)); 156 EXPECT_TRUE(filter_->OnMessageReceived(start_message));
166 157
167 const int kBufferSize = 10; 158 const int kBufferSize = 10;
168 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); 159 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize));
169 int bytes_read = 0; 160 int bytes_read = 0;
170 161
171 scoped_refptr<Stream> stream = stream_registry->GetStream(kUrl); 162 scoped_refptr<Stream> stream = stream_registry->GetStream(kUrl);
172 // Stream becomes available for read right after registration. 163 // Stream becomes available for read right after registration.
173 ASSERT_FALSE(stream.get() == NULL); 164 ASSERT_FALSE(stream.get() == NULL);
174 EXPECT_EQ(Stream::STREAM_EMPTY, 165 EXPECT_EQ(Stream::STREAM_EMPTY,
175 stream->ReadRawData(buffer.get(), kBufferSize, &bytes_read)); 166 stream->ReadRawData(buffer.get(), kBufferSize, &bytes_read));
176 EXPECT_EQ(0, bytes_read); 167 EXPECT_EQ(0, bytes_read);
177 stream = NULL; 168 stream = NULL;
178 169
179 StreamHostMsg_FinishBuilding finish_message(kUrl); 170 StreamHostMsg_FinishBuilding finish_message(kUrl);
180 EXPECT_TRUE(InvokeOnMessageReceived(finish_message)); 171 EXPECT_TRUE(filter_->OnMessageReceived(finish_message));
181 172
182 stream = stream_registry->GetStream(kUrl); 173 stream = stream_registry->GetStream(kUrl);
183 ASSERT_FALSE(stream.get() == NULL); 174 ASSERT_FALSE(stream.get() == NULL);
184 EXPECT_EQ(Stream::STREAM_EMPTY, 175 EXPECT_EQ(Stream::STREAM_EMPTY,
185 stream->ReadRawData(buffer.get(), kBufferSize, &bytes_read)); 176 stream->ReadRawData(buffer.get(), kBufferSize, &bytes_read));
186 EXPECT_EQ(0, bytes_read); 177 EXPECT_EQ(0, bytes_read);
187 178
188 // Run loop to finish transfer. 179 // Run loop to finish transfer.
189 message_loop_.RunUntilIdle(); 180 message_loop_.RunUntilIdle();
190 181
191 EXPECT_EQ(Stream::STREAM_COMPLETE, 182 EXPECT_EQ(Stream::STREAM_COMPLETE,
192 stream->ReadRawData(buffer.get(), kBufferSize, &bytes_read)); 183 stream->ReadRawData(buffer.get(), kBufferSize, &bytes_read));
193 EXPECT_EQ(0, bytes_read); 184 EXPECT_EQ(0, bytes_read);
194 185
195 // Nothing should be returned for a URL we didn't use. 186 // Nothing should be returned for a URL we didn't use.
196 EXPECT_TRUE(stream_registry->GetStream(kDifferentUrl).get() == NULL); 187 EXPECT_TRUE(stream_registry->GetStream(kDifferentUrl).get() == NULL);
197 } 188 }
198 189
199 TEST_F(FileAPIMessageFilterTest, BuildNonEmptyStream) { 190 TEST_F(FileAPIMessageFilterTest, BuildNonEmptyStream) {
200 StreamRegistry* stream_registry = stream_context_->registry(); 191 StreamRegistry* stream_registry = stream_context_->registry();
201 192
202 const GURL kUrl(kFakeBlobInternalUrlSpec); 193 const GURL kUrl(kFakeBlobInternalUrlSpec);
203 194
204 EXPECT_EQ(NULL, stream_registry->GetStream(kUrl).get()); 195 EXPECT_EQ(NULL, stream_registry->GetStream(kUrl).get());
205 196
206 StreamHostMsg_StartBuilding start_message(kUrl, kFakeContentType); 197 StreamHostMsg_StartBuilding start_message(kUrl, kFakeContentType);
207 EXPECT_TRUE(InvokeOnMessageReceived(start_message)); 198 EXPECT_TRUE(filter_->OnMessageReceived(start_message));
208 199
209 webkit_blob::BlobData::Item item; 200 webkit_blob::BlobData::Item item;
210 const std::string kFakeData = "foobarbaz"; 201 const std::string kFakeData = "foobarbaz";
211 item.SetToBytes(kFakeData.data(), kFakeData.size()); 202 item.SetToBytes(kFakeData.data(), kFakeData.size());
212 StreamHostMsg_AppendBlobDataItem append_message(kUrl, item); 203 StreamHostMsg_AppendBlobDataItem append_message(kUrl, item);
213 EXPECT_TRUE(InvokeOnMessageReceived(append_message)); 204 EXPECT_TRUE(filter_->OnMessageReceived(append_message));
214 205
215 StreamHostMsg_FinishBuilding finish_message(kUrl); 206 StreamHostMsg_FinishBuilding finish_message(kUrl);
216 EXPECT_TRUE(InvokeOnMessageReceived(finish_message)); 207 EXPECT_TRUE(filter_->OnMessageReceived(finish_message));
217 208
218 // Run loop to finish transfer and commit finalize command. 209 // Run loop to finish transfer and commit finalize command.
219 message_loop_.RunUntilIdle(); 210 message_loop_.RunUntilIdle();
220 211
221 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kFakeData.size())); 212 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kFakeData.size()));
222 int bytes_read = 0; 213 int bytes_read = 0;
223 214
224 scoped_refptr<Stream> stream = stream_registry->GetStream(kUrl); 215 scoped_refptr<Stream> stream = stream_registry->GetStream(kUrl);
225 ASSERT_FALSE(stream.get() == NULL); 216 ASSERT_FALSE(stream.get() == NULL);
226 217
(...skipping 14 matching lines...) Expand all
241 232
242 EXPECT_EQ(NULL, stream_registry->GetStream(kUrl).get()); 233 EXPECT_EQ(NULL, stream_registry->GetStream(kUrl).get());
243 234
244 // For win, we need to set valid PID to the filter. 235 // For win, we need to set valid PID to the filter.
245 // OnAppendSharedMemoryToStream passes the peer process's handle to 236 // OnAppendSharedMemoryToStream passes the peer process's handle to
246 // SharedMemory's constructor. If it's incorrect, DuplicateHandle won't work 237 // SharedMemory's constructor. If it's incorrect, DuplicateHandle won't work
247 // correctly. 238 // correctly.
248 filter_->set_peer_pid_for_testing(base::Process::Current().pid()); 239 filter_->set_peer_pid_for_testing(base::Process::Current().pid());
249 240
250 StreamHostMsg_StartBuilding start_message(kUrl, kFakeContentType); 241 StreamHostMsg_StartBuilding start_message(kUrl, kFakeContentType);
251 EXPECT_TRUE(InvokeOnMessageReceived(start_message)); 242 EXPECT_TRUE(filter_->OnMessageReceived(start_message));
252 243
253 const std::string kFakeData = "foobarbaz"; 244 const std::string kFakeData = "foobarbaz";
254 245
255 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory); 246 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory);
256 ASSERT_TRUE(shared_memory->CreateAndMapAnonymous(kFakeData.size())); 247 ASSERT_TRUE(shared_memory->CreateAndMapAnonymous(kFakeData.size()));
257 memcpy(shared_memory->memory(), kFakeData.data(), kFakeData.size()); 248 memcpy(shared_memory->memory(), kFakeData.data(), kFakeData.size());
258 StreamHostMsg_SyncAppendSharedMemory append_message( 249 StreamHostMsg_SyncAppendSharedMemory append_message(
259 kUrl, shared_memory->handle(), kFakeData.size()); 250 kUrl, shared_memory->handle(), kFakeData.size());
260 EXPECT_TRUE(InvokeOnMessageReceived(append_message)); 251 EXPECT_TRUE(filter_->OnMessageReceived(append_message));
261 252
262 StreamHostMsg_FinishBuilding finish_message(kUrl); 253 StreamHostMsg_FinishBuilding finish_message(kUrl);
263 EXPECT_TRUE(InvokeOnMessageReceived(finish_message)); 254 EXPECT_TRUE(filter_->OnMessageReceived(finish_message));
264 255
265 // Run loop to finish transfer and commit finalize command. 256 // Run loop to finish transfer and commit finalize command.
266 message_loop_.RunUntilIdle(); 257 message_loop_.RunUntilIdle();
267 258
268 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kFakeData.size())); 259 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kFakeData.size()));
269 int bytes_read = 0; 260 int bytes_read = 0;
270 261
271 scoped_refptr<Stream> stream = stream_registry->GetStream(kUrl); 262 scoped_refptr<Stream> stream = stream_registry->GetStream(kUrl);
272 ASSERT_FALSE(stream.get() == NULL); 263 ASSERT_FALSE(stream.get() == NULL);
273 264
274 EXPECT_EQ(Stream::STREAM_HAS_DATA, 265 EXPECT_EQ(Stream::STREAM_HAS_DATA,
275 stream->ReadRawData(buffer.get(), kFakeData.size(), &bytes_read)); 266 stream->ReadRawData(buffer.get(), kFakeData.size(), &bytes_read));
276 EXPECT_EQ(kFakeData.size(), static_cast<size_t>(bytes_read)); 267 EXPECT_EQ(kFakeData.size(), static_cast<size_t>(bytes_read));
277 EXPECT_EQ(kFakeData, std::string(buffer->data(), bytes_read)); 268 EXPECT_EQ(kFakeData, std::string(buffer->data(), bytes_read));
278 269
279 EXPECT_EQ(Stream::STREAM_COMPLETE, 270 EXPECT_EQ(Stream::STREAM_COMPLETE,
280 stream->ReadRawData(buffer.get(), kFakeData.size(), &bytes_read)); 271 stream->ReadRawData(buffer.get(), kFakeData.size(), &bytes_read));
281 EXPECT_EQ(0, bytes_read); 272 EXPECT_EQ(0, bytes_read);
282 } 273 }
283 274
284 TEST_F(FileAPIMessageFilterTest, BuildStreamAndCallOnChannelClosing) { 275 TEST_F(FileAPIMessageFilterTest, BuildStreamAndCallOnChannelClosing) {
285 StreamRegistry* stream_registry = stream_context_->registry(); 276 StreamRegistry* stream_registry = stream_context_->registry();
286 277
287 const GURL kUrl(kFakeBlobInternalUrlSpec); 278 const GURL kUrl(kFakeBlobInternalUrlSpec);
288 279
289 StreamHostMsg_StartBuilding start_message(kUrl, kFakeContentType); 280 StreamHostMsg_StartBuilding start_message(kUrl, kFakeContentType);
290 EXPECT_TRUE(InvokeOnMessageReceived(start_message)); 281 EXPECT_TRUE(filter_->OnMessageReceived(start_message));
291 282
292 ASSERT_FALSE(stream_registry->GetStream(kUrl).get() == NULL); 283 ASSERT_FALSE(stream_registry->GetStream(kUrl).get() == NULL);
293 284
294 filter_->OnChannelClosing(); 285 filter_->OnChannelClosing();
295 286
296 ASSERT_EQ(NULL, stream_registry->GetStream(kUrl).get()); 287 ASSERT_EQ(NULL, stream_registry->GetStream(kUrl).get());
297 } 288 }
298 289
299 TEST_F(FileAPIMessageFilterTest, CloneStream) { 290 TEST_F(FileAPIMessageFilterTest, CloneStream) {
300 StreamRegistry* stream_registry = stream_context_->registry(); 291 StreamRegistry* stream_registry = stream_context_->registry();
301 292
302 const GURL kUrl(kFakeBlobInternalUrlSpec); 293 const GURL kUrl(kFakeBlobInternalUrlSpec);
303 const GURL kDestUrl(kFakeBlobInternalUrlSpec2); 294 const GURL kDestUrl(kFakeBlobInternalUrlSpec2);
304 295
305 StreamHostMsg_StartBuilding start_message(kUrl, kFakeContentType); 296 StreamHostMsg_StartBuilding start_message(kUrl, kFakeContentType);
306 EXPECT_TRUE(InvokeOnMessageReceived(start_message)); 297 EXPECT_TRUE(filter_->OnMessageReceived(start_message));
307 298
308 StreamHostMsg_Clone clone_message(kDestUrl, kUrl); 299 StreamHostMsg_Clone clone_message(kDestUrl, kUrl);
309 EXPECT_TRUE(InvokeOnMessageReceived(clone_message)); 300 EXPECT_TRUE(filter_->OnMessageReceived(clone_message));
310 301
311 ASSERT_FALSE(stream_registry->GetStream(kUrl).get() == NULL); 302 ASSERT_FALSE(stream_registry->GetStream(kUrl).get() == NULL);
312 ASSERT_FALSE(stream_registry->GetStream(kDestUrl).get() == NULL); 303 ASSERT_FALSE(stream_registry->GetStream(kDestUrl).get() == NULL);
313 } 304 }
314 305
315 } // namespace content 306 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/fileapi/fileapi_message_filter.cc ('k') | content/browser/frame_host/cross_process_frame_connector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698