1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 53f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#ifndef NET_URL_REQUEST_URL_REQUEST_FILE_DIR_JOB_H_ 63f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#define NET_URL_REQUEST_URL_REQUEST_FILE_DIR_JOB_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <string> 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/file_path.h" 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/file_util.h" 1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/task.h" 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/base/directory_lister.h" 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/url_request/url_request_job.h" 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 173f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsennamespace net { 183f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass URLRequestFileDirJob 203f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen : public URLRequestJob, 213f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen public DirectoryLister::DirectoryListerDelegate { 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 233f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen URLRequestFileDirJob(URLRequest* request, const FilePath& dir_path); 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool list_complete() const { return list_complete_; } 2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void StartAsync(); 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 293f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // Overridden from URLRequestJob: 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual void Start(); 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual void Kill(); 323f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen virtual bool ReadRawData(IOBuffer* buf, int buf_size, int *bytes_read); 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual bool GetMimeType(std::string* mime_type) const; 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual bool GetCharset(std::string* charset); 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 363f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // Overridden from DirectoryLister::DirectoryListerDelegate: 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void OnListFile( 383f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const DirectoryLister::DirectoryListerData& data); 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual void OnListDone(int error); 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual ~URLRequestFileDirJob(); 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void CloseLister(); 4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // When we have data and a read has been pending, this function 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // will fill the response buffer and notify the request 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // appropriately. 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void CompleteRead(); 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Fills a buffer with the output. 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool FillReadBuffer(char *buf, int buf_size, int *bytes_read); 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 543f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen scoped_refptr<DirectoryLister> lister_; 55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott FilePath dir_path_; 56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott std::string data_; 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool canceled_; 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Indicates whether we have the complete list of the dir 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool list_complete_; 61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Indicates whether we have written the HTML header 63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool wrote_header_; 64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // To simulate Async IO, we hold onto the Reader's buffer while 66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // we wait for IO to complete. When done, we fill the buffer 67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // manually. 68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool read_pending_; 693f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen scoped_refptr<IOBuffer> read_buffer_; 70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int read_buffer_length_; 7121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ScopedRunnableMethodFactory<URLRequestFileDirJob> method_factory_; 72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(URLRequestFileDirJob); 74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 763f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} // namespace net 773f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 783f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#endif // NET_URL_REQUEST_URL_REQUEST_FILE_DIR_JOB_H_ 79