| Index: net/url_request/url_request_file_dir_job.cc | 
| diff --git a/net/url_request/url_request_file_dir_job.cc b/net/url_request/url_request_file_dir_job.cc | 
| index 435ccb008655fc2c83d64c24eb783703f73f428b..27d7ec7fe52861aea00fc60fd7deca689823e63c 100644 | 
| --- a/net/url_request/url_request_file_dir_job.cc | 
| +++ b/net/url_request/url_request_file_dir_job.cc | 
| @@ -6,10 +6,12 @@ | 
|  | 
| #include "base/bind.h" | 
| #include "base/compiler_specific.h" | 
| +#include "base/files/file_util.h" | 
| #include "base/location.h" | 
| #include "base/single_thread_task_runner.h" | 
| #include "base/strings/sys_string_conversions.h" | 
| #include "base/strings/utf_string_conversions.h" | 
| +#include "base/task_scheduler/post_task.h" | 
| #include "base/threading/thread_task_runner_handle.h" | 
| #include "base/time/time.h" | 
| #include "net/base/directory_listing.h" | 
| @@ -37,8 +39,12 @@ URLRequestFileDirJob::URLRequestFileDirJob(URLRequest* request, | 
| weak_factory_(this) {} | 
|  | 
| void URLRequestFileDirJob::StartAsync() { | 
| -  lister_.Start(); | 
| -  NotifyHeadersComplete(); | 
| +  base::PostTaskWithTraitsAndReplyWithResult( | 
| +      FROM_HERE, | 
| +      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, | 
| +      base::Bind(&base::MakeAbsoluteFilePath, dir_path_), | 
| +      base::Bind(&URLRequestFileDirJob::DidMakeAbsolutePath, | 
| +                 weak_factory_.GetWeakPtr())); | 
| } | 
|  | 
| void URLRequestFileDirJob::Start() { | 
| @@ -136,6 +142,18 @@ void URLRequestFileDirJob::OnListDone(int error) { | 
|  | 
| URLRequestFileDirJob::~URLRequestFileDirJob() {} | 
|  | 
| +void URLRequestFileDirJob::DidMakeAbsolutePath( | 
| +    const base::FilePath& absolute_path) { | 
| +  if (network_delegate() && !network_delegate()->CanAccessFile( | 
| +                                *request(), dir_path_, absolute_path)) { | 
| +    NotifyStartError(URLRequestStatus::FromError(ERR_ACCESS_DENIED)); | 
| +    return; | 
| +  } | 
| + | 
| +  lister_.Start(); | 
| +  NotifyHeadersComplete(); | 
| +} | 
| + | 
| void URLRequestFileDirJob::CompleteRead(Error error) { | 
| DCHECK_LE(error, OK); | 
| DCHECK_NE(error, ERR_IO_PENDING); | 
|  |