- add sources.
[platform/framework/web/crosswalk.git] / src / content / browser / download / save_file_resource_handler.h
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
3 // found in the LICENSE file.
4
5 #ifndef CONTENT_BROWSER_DOWNLOAD_SAVE_FILE_RESOURCE_HANDLER_H_
6 #define CONTENT_BROWSER_DOWNLOAD_SAVE_FILE_RESOURCE_HANDLER_H_
7
8 #include <string>
9
10 #include "base/memory/ref_counted.h"
11 #include "content/browser/loader/resource_handler.h"
12 #include "url/gurl.h"
13
14 namespace content {
15 class SaveFileManager;
16
17 // Forwards data to the save thread.
18 class SaveFileResourceHandler : public ResourceHandler {
19  public:
20   SaveFileResourceHandler(int render_process_host_id,
21                           int render_view_id,
22                           const GURL& url,
23                           SaveFileManager* manager);
24   virtual ~SaveFileResourceHandler();
25
26   // ResourceHandler Implementation:
27   virtual bool OnUploadProgress(int request_id,
28                                 uint64 position,
29                                 uint64 size) OVERRIDE;
30
31   // Saves the redirected URL to final_url_, we need to use the original
32   // URL to match original request.
33   virtual bool OnRequestRedirected(int request_id,
34                                    const GURL& url,
35                                    ResourceResponse* response,
36                                    bool* defer) OVERRIDE;
37
38   // Sends the download creation information to the download thread.
39   virtual bool OnResponseStarted(int request_id,
40                                  ResourceResponse* response,
41                                  bool* defer) OVERRIDE;
42
43   // Pass-through implementation.
44   virtual bool OnWillStart(int request_id,
45                            const GURL& url,
46                            bool* defer) OVERRIDE;
47
48   // Creates a new buffer, which will be handed to the download thread for file
49   // writing and deletion.
50   virtual bool OnWillRead(int request_id,
51                           scoped_refptr<net::IOBuffer>* buf,
52                           int* buf_size,
53                           int min_size) OVERRIDE;
54
55   // Passes the buffer to the download file writer.
56   virtual bool OnReadCompleted(int request_id, int bytes_read,
57                                bool* defer) OVERRIDE;
58
59   virtual bool OnResponseCompleted(int request_id,
60                                    const net::URLRequestStatus& status,
61                                    const std::string& security_info) OVERRIDE;
62
63   // N/A to this flavor of SaveFileResourceHandler.
64   virtual void OnDataDownloaded(int request_id, int bytes_downloaded) OVERRIDE;
65
66   // If the content-length header is not present (or contains something other
67   // than numbers), StringToInt64 returns 0, which indicates 'unknown size' and
68   // is handled correctly by the SaveManager.
69   void set_content_length(const std::string& content_length);
70
71   void set_content_disposition(const std::string& content_disposition) {
72     content_disposition_ = content_disposition;
73   }
74
75  private:
76   int save_id_;
77   int render_process_id_;
78   int render_view_id_;
79   scoped_refptr<net::IOBuffer> read_buffer_;
80   std::string content_disposition_;
81   GURL url_;
82   GURL final_url_;
83   int64 content_length_;
84   SaveFileManager* save_manager_;
85
86   static const int kReadBufSize = 32768;  // bytes
87
88   DISALLOW_COPY_AND_ASSIGN(SaveFileResourceHandler);
89 };
90
91 }  // namespace content
92
93 #endif  // CONTENT_BROWSER_DOWNLOAD_SAVE_FILE_RESOURCE_HANDLER_H_