13f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_RENDERER_HOST_SAVE_FILE_RESOURCE_HANDLER_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_RENDERER_HOST_SAVE_FILE_RESOURCE_HANDLER_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string> 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/resource_handler.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "googleurl/src/gurl.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SaveFileManager; 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Forwards data to the save thread. 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SaveFileResourceHandler : public ResourceHandler { 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SaveFileResourceHandler(int render_process_host_id, 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int render_view_id, 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GURL& url, 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SaveFileManager* manager); 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 24513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // ResourceHandler Implementation: 25513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual bool OnUploadProgress(int request_id, uint64 position, uint64 size); 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Saves the redirected URL to final_url_, we need to use the original 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // URL to match original request. 29513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual bool OnRequestRedirected(int request_id, const GURL& url, 30513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ResourceResponse* response, bool* defer); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sends the download creation information to the download thread. 33513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual bool OnResponseStarted(int request_id, ResourceResponse* response); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Pass-through implementation. 36513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual bool OnWillStart(int request_id, const GURL& url, bool* defer); 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Creates a new buffer, which will be handed to the download thread for file 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // writing and deletion. 40513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual bool OnWillRead(int request_id, net::IOBuffer** buf, int* buf_size, 41513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int min_size); 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Passes the buffer to the download file writer. 44513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual bool OnReadCompleted(int request_id, int* bytes_read); 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual bool OnResponseCompleted(int request_id, 473f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const net::URLRequestStatus& status, 48513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::string& security_info); 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void OnRequestClosed(); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If the content-length header is not present (or contains something other 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // than numbers), StringToInt64 returns 0, which indicates 'unknown size' and 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // is handled correctly by the SaveManager. 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_content_length(const std::string& content_length); 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_content_disposition(const std::string& content_disposition) { 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch content_disposition_ = content_disposition; 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 62513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual ~SaveFileResourceHandler(); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int save_id_; 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int render_process_id_; 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int render_view_id_; 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<net::IOBuffer> read_buffer_; 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string content_disposition_; 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url_; 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL final_url_; 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int64 content_length_; 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SaveFileManager* save_manager_; 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static const int kReadBufSize = 32768; // bytes 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(SaveFileResourceHandler); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_RENDERER_HOST_SAVE_FILE_RESOURCE_HANDLER_H_ 80