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

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

Issue 11787028: New FileSystemURL cracking (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix test on Win Created 7 years, 11 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 "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/bind.h" 10 #include "base/bind.h"
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 108
109 // Close all files that are previously OpenFile()'ed in this process. 109 // Close all files that are previously OpenFile()'ed in this process.
110 if (!open_filesystem_urls_.empty()) { 110 if (!open_filesystem_urls_.empty()) {
111 DLOG(INFO) 111 DLOG(INFO)
112 << "File API: Renderer process shut down before NotifyCloseFile" 112 << "File API: Renderer process shut down before NotifyCloseFile"
113 << " for " << open_filesystem_urls_.size() << " files opened in PPAPI"; 113 << " for " << open_filesystem_urls_.size() << " files opened in PPAPI";
114 } 114 }
115 for (std::multiset<GURL>::const_iterator iter = 115 for (std::multiset<GURL>::const_iterator iter =
116 open_filesystem_urls_.begin(); 116 open_filesystem_urls_.begin();
117 iter != open_filesystem_urls_.end(); ++iter) { 117 iter != open_filesystem_urls_.end(); ++iter) {
118 FileSystemURL url(*iter); 118 FileSystemURL url(context_->CrackURL(*iter));
119 FileSystemOperation* operation = context_->CreateFileSystemOperation( 119 FileSystemOperation* operation = context_->CreateFileSystemOperation(
120 url, NULL); 120 url, NULL);
121 if (operation) 121 if (operation)
122 operation->NotifyCloseFile(url); 122 operation->NotifyCloseFile(url);
123 } 123 }
124 } 124 }
125 125
126 void FileAPIMessageFilter::OverrideThreadForMessage( 126 void FileAPIMessageFilter::OverrideThreadForMessage(
127 const IPC::Message& message, 127 const IPC::Message& message,
128 BrowserThread::ID* thread) { 128 BrowserThread::ID* thread) {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 fileapi::FileSystemType type) { 200 fileapi::FileSystemType type) {
201 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 201 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
202 context_->DeleteFileSystem(origin_url, type, base::Bind( 202 context_->DeleteFileSystem(origin_url, type, base::Bind(
203 &FileAPIMessageFilter::DidDeleteFileSystem, this, request_id)); 203 &FileAPIMessageFilter::DidDeleteFileSystem, this, request_id));
204 } 204 }
205 205
206 void FileAPIMessageFilter::OnMove( 206 void FileAPIMessageFilter::OnMove(
207 int request_id, const GURL& src_path, const GURL& dest_path) { 207 int request_id, const GURL& src_path, const GURL& dest_path) {
208 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 208 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
209 base::PlatformFileError error; 209 base::PlatformFileError error;
210 FileSystemURL src_url(src_path); 210 FileSystemURL src_url(context_->CrackURL(src_path));
211 FileSystemURL dest_url(dest_path); 211 FileSystemURL dest_url(context_->CrackURL(dest_path));
212 const int src_permissions = 212 const int src_permissions =
213 fileapi::kReadFilePermissions | fileapi::kWriteFilePermissions; 213 fileapi::kReadFilePermissions | fileapi::kWriteFilePermissions;
214 if (!HasPermissionsForFile(src_url, src_permissions, &error) || 214 if (!HasPermissionsForFile(src_url, src_permissions, &error) ||
215 !HasPermissionsForFile( 215 !HasPermissionsForFile(
216 dest_url, fileapi::kCreateFilePermissions, &error)) { 216 dest_url, fileapi::kCreateFilePermissions, &error)) {
217 Send(new FileSystemMsg_DidFail(request_id, error)); 217 Send(new FileSystemMsg_DidFail(request_id, error));
218 return; 218 return;
219 } 219 }
220 220
221 FileSystemOperation* operation = GetNewOperation(dest_url, request_id); 221 FileSystemOperation* operation = GetNewOperation(dest_url, request_id);
222 if (!operation) 222 if (!operation)
223 return; 223 return;
224 operation->Move( 224 operation->Move(
225 src_url, dest_url, 225 src_url, dest_url,
226 base::Bind(&FileAPIMessageFilter::DidFinish, this, request_id)); 226 base::Bind(&FileAPIMessageFilter::DidFinish, this, request_id));
227 } 227 }
228 228
229 void FileAPIMessageFilter::OnCopy( 229 void FileAPIMessageFilter::OnCopy(
230 int request_id, const GURL& src_path, const GURL& dest_path) { 230 int request_id, const GURL& src_path, const GURL& dest_path) {
231 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 231 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
232 base::PlatformFileError error; 232 base::PlatformFileError error;
233 FileSystemURL src_url(src_path); 233 FileSystemURL src_url(context_->CrackURL(src_path));
234 FileSystemURL dest_url(dest_path); 234 FileSystemURL dest_url(context_->CrackURL(dest_path));
235 if (!HasPermissionsForFile(src_url, fileapi::kReadFilePermissions, &error) || 235 if (!HasPermissionsForFile(src_url, fileapi::kReadFilePermissions, &error) ||
236 !HasPermissionsForFile( 236 !HasPermissionsForFile(
237 dest_url, fileapi::kCreateFilePermissions, &error)) { 237 dest_url, fileapi::kCreateFilePermissions, &error)) {
238 Send(new FileSystemMsg_DidFail(request_id, error)); 238 Send(new FileSystemMsg_DidFail(request_id, error));
239 return; 239 return;
240 } 240 }
241 241
242 FileSystemOperation* operation = GetNewOperation(dest_url, request_id); 242 FileSystemOperation* operation = GetNewOperation(dest_url, request_id);
243 if (!operation) 243 if (!operation)
244 return; 244 return;
245 operation->Copy( 245 operation->Copy(
246 src_url, dest_url, 246 src_url, dest_url,
247 base::Bind(&FileAPIMessageFilter::DidFinish, this, request_id)); 247 base::Bind(&FileAPIMessageFilter::DidFinish, this, request_id));
248 } 248 }
249 249
250 void FileAPIMessageFilter::OnRemove( 250 void FileAPIMessageFilter::OnRemove(
251 int request_id, const GURL& path, bool recursive) { 251 int request_id, const GURL& path, bool recursive) {
252 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 252 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
253 base::PlatformFileError error; 253 base::PlatformFileError error;
254 FileSystemURL url(path); 254 FileSystemURL url(context_->CrackURL(path));
255 if (!HasPermissionsForFile(url, fileapi::kWriteFilePermissions, &error)) { 255 if (!HasPermissionsForFile(url, fileapi::kWriteFilePermissions, &error)) {
256 Send(new FileSystemMsg_DidFail(request_id, error)); 256 Send(new FileSystemMsg_DidFail(request_id, error));
257 return; 257 return;
258 } 258 }
259 259
260 FileSystemOperation* operation = GetNewOperation(url, request_id); 260 FileSystemOperation* operation = GetNewOperation(url, request_id);
261 if (!operation) 261 if (!operation)
262 return; 262 return;
263 operation->Remove( 263 operation->Remove(
264 url, recursive, 264 url, recursive,
265 base::Bind(&FileAPIMessageFilter::DidFinish, this, request_id)); 265 base::Bind(&FileAPIMessageFilter::DidFinish, this, request_id));
266 } 266 }
267 267
268 void FileAPIMessageFilter::OnReadMetadata( 268 void FileAPIMessageFilter::OnReadMetadata(
269 int request_id, const GURL& path) { 269 int request_id, const GURL& path) {
270 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 270 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
271 base::PlatformFileError error; 271 base::PlatformFileError error;
272 FileSystemURL url(path); 272 FileSystemURL url(context_->CrackURL(path));
273 if (!HasPermissionsForFile(url, fileapi::kReadFilePermissions, &error)) { 273 if (!HasPermissionsForFile(url, fileapi::kReadFilePermissions, &error)) {
274 Send(new FileSystemMsg_DidFail(request_id, error)); 274 Send(new FileSystemMsg_DidFail(request_id, error));
275 return; 275 return;
276 } 276 }
277 277
278 FileSystemOperation* operation = GetNewOperation(url, request_id); 278 FileSystemOperation* operation = GetNewOperation(url, request_id);
279 if (!operation) 279 if (!operation)
280 return; 280 return;
281 operation->GetMetadata( 281 operation->GetMetadata(
282 url, 282 url,
283 base::Bind(&FileAPIMessageFilter::DidGetMetadata, this, request_id)); 283 base::Bind(&FileAPIMessageFilter::DidGetMetadata, this, request_id));
284 } 284 }
285 285
286 void FileAPIMessageFilter::OnCreate( 286 void FileAPIMessageFilter::OnCreate(
287 int request_id, const GURL& path, bool exclusive, 287 int request_id, const GURL& path, bool exclusive,
288 bool is_directory, bool recursive) { 288 bool is_directory, bool recursive) {
289 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 289 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
290 base::PlatformFileError error; 290 base::PlatformFileError error;
291 FileSystemURL url(path); 291 FileSystemURL url(context_->CrackURL(path));
292 if (!HasPermissionsForFile(url, fileapi::kCreateFilePermissions, &error)) { 292 if (!HasPermissionsForFile(url, fileapi::kCreateFilePermissions, &error)) {
293 Send(new FileSystemMsg_DidFail(request_id, error)); 293 Send(new FileSystemMsg_DidFail(request_id, error));
294 return; 294 return;
295 } 295 }
296 296
297 FileSystemOperation* operation = GetNewOperation(url, request_id); 297 FileSystemOperation* operation = GetNewOperation(url, request_id);
298 if (!operation) 298 if (!operation)
299 return; 299 return;
300 if (is_directory) { 300 if (is_directory) {
301 operation->CreateDirectory( 301 operation->CreateDirectory(
302 url, exclusive, recursive, 302 url, exclusive, recursive,
303 base::Bind(&FileAPIMessageFilter::DidFinish, this, request_id)); 303 base::Bind(&FileAPIMessageFilter::DidFinish, this, request_id));
304 } else { 304 } else {
305 operation->CreateFile( 305 operation->CreateFile(
306 url, exclusive, 306 url, exclusive,
307 base::Bind(&FileAPIMessageFilter::DidFinish, this, request_id)); 307 base::Bind(&FileAPIMessageFilter::DidFinish, this, request_id));
308 } 308 }
309 } 309 }
310 310
311 void FileAPIMessageFilter::OnExists( 311 void FileAPIMessageFilter::OnExists(
312 int request_id, const GURL& path, bool is_directory) { 312 int request_id, const GURL& path, bool is_directory) {
313 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 313 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
314 base::PlatformFileError error; 314 base::PlatformFileError error;
315 FileSystemURL url(path); 315 FileSystemURL url(context_->CrackURL(path));
316 if (!HasPermissionsForFile(url, fileapi::kReadFilePermissions, &error)) { 316 if (!HasPermissionsForFile(url, fileapi::kReadFilePermissions, &error)) {
317 Send(new FileSystemMsg_DidFail(request_id, error)); 317 Send(new FileSystemMsg_DidFail(request_id, error));
318 return; 318 return;
319 } 319 }
320 320
321 FileSystemOperation* operation = GetNewOperation(url, request_id); 321 FileSystemOperation* operation = GetNewOperation(url, request_id);
322 if (!operation) 322 if (!operation)
323 return; 323 return;
324 if (is_directory) { 324 if (is_directory) {
325 operation->DirectoryExists( 325 operation->DirectoryExists(
326 url, 326 url,
327 base::Bind(&FileAPIMessageFilter::DidFinish, this, request_id)); 327 base::Bind(&FileAPIMessageFilter::DidFinish, this, request_id));
328 } else { 328 } else {
329 operation->FileExists( 329 operation->FileExists(
330 url, 330 url,
331 base::Bind(&FileAPIMessageFilter::DidFinish, this, request_id)); 331 base::Bind(&FileAPIMessageFilter::DidFinish, this, request_id));
332 } 332 }
333 } 333 }
334 334
335 void FileAPIMessageFilter::OnReadDirectory( 335 void FileAPIMessageFilter::OnReadDirectory(
336 int request_id, const GURL& path) { 336 int request_id, const GURL& path) {
337 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 337 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
338 base::PlatformFileError error; 338 base::PlatformFileError error;
339 FileSystemURL url(path); 339 FileSystemURL url(context_->CrackURL(path));
340 if (!HasPermissionsForFile(url, fileapi::kReadFilePermissions, &error)) { 340 if (!HasPermissionsForFile(url, fileapi::kReadFilePermissions, &error)) {
341 Send(new FileSystemMsg_DidFail(request_id, error)); 341 Send(new FileSystemMsg_DidFail(request_id, error));
342 return; 342 return;
343 } 343 }
344 344
345 FileSystemOperation* operation = GetNewOperation(url, request_id); 345 FileSystemOperation* operation = GetNewOperation(url, request_id);
346 if (!operation) 346 if (!operation)
347 return; 347 return;
348 operation->ReadDirectory( 348 operation->ReadDirectory(
349 url, base::Bind(&FileAPIMessageFilter::DidReadDirectory, 349 url, base::Bind(&FileAPIMessageFilter::DidReadDirectory,
350 this, request_id)); 350 this, request_id));
351 } 351 }
352 352
353 void FileAPIMessageFilter::OnWrite( 353 void FileAPIMessageFilter::OnWrite(
354 int request_id, 354 int request_id,
355 const GURL& path, 355 const GURL& path,
356 const GURL& blob_url, 356 const GURL& blob_url,
357 int64 offset) { 357 int64 offset) {
358 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 358 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
359 if (!request_context_) { 359 if (!request_context_) {
360 // We can't write w/o a request context, trying to do so will crash. 360 // We can't write w/o a request context, trying to do so will crash.
361 NOTREACHED(); 361 NOTREACHED();
362 return; 362 return;
363 } 363 }
364 364
365 FileSystemURL url(path); 365 FileSystemURL url(context_->CrackURL(path));
366 base::PlatformFileError error; 366 base::PlatformFileError error;
367 if (!HasPermissionsForFile(url, fileapi::kWriteFilePermissions, &error)) { 367 if (!HasPermissionsForFile(url, fileapi::kWriteFilePermissions, &error)) {
368 Send(new FileSystemMsg_DidFail(request_id, error)); 368 Send(new FileSystemMsg_DidFail(request_id, error));
369 return; 369 return;
370 } 370 }
371 371
372 FileSystemOperation* operation = GetNewOperation(url, request_id); 372 FileSystemOperation* operation = GetNewOperation(url, request_id);
373 if (!operation) 373 if (!operation)
374 return; 374 return;
375 operation->Write( 375 operation->Write(
376 request_context_, url, blob_url, offset, 376 request_context_, url, blob_url, offset,
377 base::Bind(&FileAPIMessageFilter::DidWrite, this, request_id)); 377 base::Bind(&FileAPIMessageFilter::DidWrite, this, request_id));
378 } 378 }
379 379
380 void FileAPIMessageFilter::OnTruncate( 380 void FileAPIMessageFilter::OnTruncate(
381 int request_id, 381 int request_id,
382 const GURL& path, 382 const GURL& path,
383 int64 length) { 383 int64 length) {
384 base::PlatformFileError error; 384 base::PlatformFileError error;
385 FileSystemURL url(path); 385 FileSystemURL url(context_->CrackURL(path));
386 if (!HasPermissionsForFile(url, fileapi::kWriteFilePermissions, &error)) { 386 if (!HasPermissionsForFile(url, fileapi::kWriteFilePermissions, &error)) {
387 Send(new FileSystemMsg_DidFail(request_id, error)); 387 Send(new FileSystemMsg_DidFail(request_id, error));
388 return; 388 return;
389 } 389 }
390 390
391 FileSystemOperation* operation = GetNewOperation(url, request_id); 391 FileSystemOperation* operation = GetNewOperation(url, request_id);
392 if (!operation) 392 if (!operation)
393 return; 393 return;
394 operation->Truncate( 394 operation->Truncate(
395 url, length, 395 url, length,
396 base::Bind(&FileAPIMessageFilter::DidFinish, this, request_id)); 396 base::Bind(&FileAPIMessageFilter::DidFinish, this, request_id));
397 } 397 }
398 398
399 void FileAPIMessageFilter::OnTouchFile( 399 void FileAPIMessageFilter::OnTouchFile(
400 int request_id, 400 int request_id,
401 const GURL& path, 401 const GURL& path,
402 const base::Time& last_access_time, 402 const base::Time& last_access_time,
403 const base::Time& last_modified_time) { 403 const base::Time& last_modified_time) {
404 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 404 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
405 FileSystemURL url(path); 405 FileSystemURL url(context_->CrackURL(path));
406 base::PlatformFileError error; 406 base::PlatformFileError error;
407 if (!HasPermissionsForFile(url, fileapi::kCreateFilePermissions, &error)) { 407 if (!HasPermissionsForFile(url, fileapi::kCreateFilePermissions, &error)) {
408 Send(new FileSystemMsg_DidFail(request_id, error)); 408 Send(new FileSystemMsg_DidFail(request_id, error));
409 return; 409 return;
410 } 410 }
411 411
412 FileSystemOperation* operation = GetNewOperation(url, request_id); 412 FileSystemOperation* operation = GetNewOperation(url, request_id);
413 if (!operation) 413 if (!operation)
414 return; 414 return;
415 operation->TouchFile( 415 operation->TouchFile(
(...skipping 17 matching lines...) Expand all
433 request_id, base::PLATFORM_FILE_ERROR_INVALID_OPERATION)); 433 request_id, base::PLATFORM_FILE_ERROR_INVALID_OPERATION));
434 } 434 }
435 } 435 }
436 436
437 void FileAPIMessageFilter::OnOpenFile( 437 void FileAPIMessageFilter::OnOpenFile(
438 int request_id, const GURL& path, int file_flags) { 438 int request_id, const GURL& path, int file_flags) {
439 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 439 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
440 base::PlatformFileError error; 440 base::PlatformFileError error;
441 const int open_permissions = base::PLATFORM_FILE_OPEN | 441 const int open_permissions = base::PLATFORM_FILE_OPEN |
442 (file_flags & fileapi::kOpenFilePermissions); 442 (file_flags & fileapi::kOpenFilePermissions);
443 FileSystemURL url(path); 443 FileSystemURL url(context_->CrackURL(path));
444 if (!HasPermissionsForFile(url, open_permissions, &error)) { 444 if (!HasPermissionsForFile(url, open_permissions, &error)) {
445 Send(new FileSystemMsg_DidFail(request_id, error)); 445 Send(new FileSystemMsg_DidFail(request_id, error));
446 return; 446 return;
447 } 447 }
448 448
449 FileSystemOperation* operation = GetNewOperation(url, request_id); 449 FileSystemOperation* operation = GetNewOperation(url, request_id);
450 if (!operation) 450 if (!operation)
451 return; 451 return;
452 operation->OpenFile( 452 operation->OpenFile(
453 url, file_flags, peer_handle(), 453 url, file_flags, peer_handle(),
454 base::Bind(&FileAPIMessageFilter::DidOpenFile, this, request_id, path)); 454 base::Bind(&FileAPIMessageFilter::DidOpenFile, this, request_id, path));
455 } 455 }
456 456
457 void FileAPIMessageFilter::OnNotifyCloseFile(const GURL& path) { 457 void FileAPIMessageFilter::OnNotifyCloseFile(const GURL& path) {
458 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 458 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
459 459
460 // Remove |path| from the set of opened urls. It must only be called for a URL 460 // Remove |path| from the set of opened urls. It must only be called for a URL
461 // that is successfully opened and enrolled in DidOpenFile. 461 // that is successfully opened and enrolled in DidOpenFile.
462 std::multiset<GURL>::iterator iter = open_filesystem_urls_.find(path); 462 std::multiset<GURL>::iterator iter = open_filesystem_urls_.find(path);
463 DCHECK(iter != open_filesystem_urls_.end()); 463 DCHECK(iter != open_filesystem_urls_.end());
464 open_filesystem_urls_.erase(iter); 464 open_filesystem_urls_.erase(iter);
465 465
466 FileSystemURL url(path); 466 FileSystemURL url(context_->CrackURL(path));
467 467
468 // Do not use GetNewOperation() here, because NotifyCloseFile is a one-way 468 // Do not use GetNewOperation() here, because NotifyCloseFile is a one-way
469 // operation that does not have request_id by which we respond back. 469 // operation that does not have request_id by which we respond back.
470 FileSystemOperation* operation = context_->CreateFileSystemOperation( 470 FileSystemOperation* operation = context_->CreateFileSystemOperation(
471 url, NULL); 471 url, NULL);
472 if (operation) 472 if (operation)
473 operation->NotifyCloseFile(url); 473 operation->NotifyCloseFile(url);
474 } 474 }
475 475
476 void FileAPIMessageFilter::OnWillUpdate(const GURL& path) { 476 void FileAPIMessageFilter::OnWillUpdate(const GURL& path) {
477 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 477 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
478 FileSystemURL url(path); 478 FileSystemURL url(context_->CrackURL(path));
479 if (!url.is_valid()) 479 if (!url.is_valid())
480 return; 480 return;
481 const UpdateObserverList* observers = 481 const UpdateObserverList* observers =
482 context_->GetUpdateObservers(url.type()); 482 context_->GetUpdateObservers(url.type());
483 if (!observers) 483 if (!observers)
484 return; 484 return;
485 observers->Notify(&FileUpdateObserver::OnStartUpdate, MakeTuple(url)); 485 observers->Notify(&FileUpdateObserver::OnStartUpdate, MakeTuple(url));
486 } 486 }
487 487
488 void FileAPIMessageFilter::OnDidUpdate(const GURL& path, int64 delta) { 488 void FileAPIMessageFilter::OnDidUpdate(const GURL& path, int64 delta) {
489 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 489 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
490 FileSystemURL url(path); 490 FileSystemURL url(context_->CrackURL(path));
491 if (!url.is_valid()) 491 if (!url.is_valid())
492 return; 492 return;
493 const UpdateObserverList* observers = 493 const UpdateObserverList* observers =
494 context_->GetUpdateObservers(url.type()); 494 context_->GetUpdateObservers(url.type());
495 if (!observers) 495 if (!observers)
496 return; 496 return;
497 observers->Notify(&FileUpdateObserver::OnUpdate, MakeTuple(url, delta)); 497 observers->Notify(&FileUpdateObserver::OnUpdate, MakeTuple(url, delta));
498 observers->Notify(&FileUpdateObserver::OnEndUpdate, MakeTuple(url)); 498 observers->Notify(&FileUpdateObserver::OnEndUpdate, MakeTuple(url));
499 } 499 }
500 500
501 void FileAPIMessageFilter::OnSyncGetPlatformPath( 501 void FileAPIMessageFilter::OnSyncGetPlatformPath(
502 const GURL& path, FilePath* platform_path) { 502 const GURL& path, FilePath* platform_path) {
503 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 503 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
504 DCHECK(platform_path); 504 DCHECK(platform_path);
505 *platform_path = FilePath(); 505 *platform_path = FilePath();
506 FileSystemURL url(path); 506 FileSystemURL url(context_->CrackURL(path));
507 if (!url.is_valid()) 507 if (!url.is_valid())
508 return; 508 return;
509 509
510 // Make sure if this file is ok to be read (in the current architecture 510 // Make sure if this file is ok to be read (in the current architecture
511 // which means roughly same as the renderer is allowed to get the platform 511 // which means roughly same as the renderer is allowed to get the platform
512 // path to the file). 512 // path to the file).
513 base::PlatformFileError error; 513 base::PlatformFileError error;
514 if (!HasPermissionsForFile(url, fileapi::kReadFilePermissions, &error)) 514 if (!HasPermissionsForFile(url, fileapi::kReadFilePermissions, &error))
515 return; 515 return;
516 516
(...skipping 17 matching lines...) Expand all
534 if (!ChildProcessSecurityPolicyImpl::GetInstance()->CanReadFile( 534 if (!ChildProcessSecurityPolicyImpl::GetInstance()->CanReadFile(
535 process_id_, *platform_path)) { 535 process_id_, *platform_path)) {
536 ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadFile( 536 ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadFile(
537 process_id_, *platform_path); 537 process_id_, *platform_path);
538 } 538 }
539 } 539 }
540 540
541 void FileAPIMessageFilter::OnCreateSnapshotFile( 541 void FileAPIMessageFilter::OnCreateSnapshotFile(
542 int request_id, const GURL& blob_url, const GURL& path) { 542 int request_id, const GURL& blob_url, const GURL& path) {
543 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 543 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
544 FileSystemURL url(path); 544 FileSystemURL url(context_->CrackURL(path));
545 base::Callback<void(const FilePath&)> register_file_callback = 545 base::Callback<void(const FilePath&)> register_file_callback =
546 base::Bind(&FileAPIMessageFilter::RegisterFileAsBlob, 546 base::Bind(&FileAPIMessageFilter::RegisterFileAsBlob,
547 this, blob_url, url); 547 this, blob_url, url);
548 548
549 // Make sure if this file can be read by the renderer as this is 549 // Make sure if this file can be read by the renderer as this is
550 // called when the renderer is about to create a new File object 550 // called when the renderer is about to create a new File object
551 // (for reading the file). 551 // (for reading the file).
552 base::PlatformFileError error; 552 base::PlatformFileError error;
553 if (!HasPermissionsForFile(url, fileapi::kReadFilePermissions, &error)) { 553 if (!HasPermissionsForFile(url, fileapi::kReadFilePermissions, &error)) {
554 Send(new FileSystemMsg_DidFail(request_id, error)); 554 Send(new FileSystemMsg_DidFail(request_id, error));
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
865 Send(new FileSystemMsg_DidFail(request_id, error_code)); 865 Send(new FileSystemMsg_DidFail(request_id, error_code));
866 return NULL; 866 return NULL;
867 } 867 }
868 868
869 DCHECK(operation); 869 DCHECK(operation);
870 operations_.AddWithID(operation, request_id); 870 operations_.AddWithID(operation, request_id);
871 return operation; 871 return operation;
872 } 872 }
873 873
874 } // namespace content 874 } // namespace content
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/sync_file_system/sync_file_system_apitest.cc ('k') | content/content_tests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698