Home | History | Annotate | Download | only in net
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/net/file_system_url_request_job_factory.h"
      6 
      7 #include "chrome/browser/net/chrome_url_request_context.h"
      8 #include "chrome/common/url_constants.h"
      9 #include "content/browser/browser_thread.h"
     10 #include "net/url_request/url_request.h"
     11 #include "webkit/fileapi/file_system_url_request_job.h"
     12 #include "webkit/fileapi/file_system_dir_url_request_job.h"
     13 
     14 namespace {
     15 
     16 net::URLRequestJob* FileSystemURLRequestJobFactory(net::URLRequest* request,
     17                                                    const std::string& scheme) {
     18   fileapi::FileSystemContext* file_system_context =
     19       static_cast<ChromeURLRequestContext*>(request->context())
     20           ->file_system_context();
     21   const std::string path = request->url().path();
     22 
     23   // If the path ends with a /, we know it's a directory. If the path refers
     24   // to a directory and gets dispatched to FileSystemURLRequestJob, that class
     25   // redirects back here, by adding a / to the URL.
     26   if (!path.empty() && path[path.size() - 1] == '/') {
     27     return new fileapi::FileSystemDirURLRequestJob(request, file_system_context,
     28         BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE));
     29   }
     30   return new fileapi::FileSystemURLRequestJob(request, file_system_context,
     31       BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE));
     32 }
     33 
     34 }  // anonymous namespace
     35 
     36 void RegisterFileSystemURLRequestJobFactory() {
     37   net::URLRequest::RegisterProtocolFactory(chrome::kFileSystemScheme,
     38                                            &FileSystemURLRequestJobFactory);
     39 }
     40