Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(361)

Side by Side Diff: content/browser/download/save_package.h

Issue 12213066: Use base namespace for FilePath in content/browser (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/browser/download/save_item.cc ('k') | content/browser/download/save_package.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CONTENT_BROWSER_DOWNLOAD_SAVE_PACKAGE_H_ 5 #ifndef CONTENT_BROWSER_DOWNLOAD_SAVE_PACKAGE_H_
6 #define CONTENT_BROWSER_DOWNLOAD_SAVE_PACKAGE_H_ 6 #define CONTENT_BROWSER_DOWNLOAD_SAVE_PACKAGE_H_
7 7
8 #include <queue> 8 #include <queue>
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 // Waiting for data sent from net IO or from file system. 66 // Waiting for data sent from net IO or from file system.
67 NET_FILES, 67 NET_FILES,
68 // Waiting for html DOM data sent from render process. 68 // Waiting for html DOM data sent from render process.
69 HTML_DATA, 69 HTML_DATA,
70 // Saving page finished successfully. 70 // Saving page finished successfully.
71 SUCCESSFUL, 71 SUCCESSFUL,
72 // Failed to save page. 72 // Failed to save page.
73 FAILED 73 FAILED
74 }; 74 };
75 75
76 static const FilePath::CharType kDefaultHtmlExtension[]; 76 static const base::FilePath::CharType kDefaultHtmlExtension[];
77 77
78 // Constructor for user initiated page saving. This constructor results in a 78 // Constructor for user initiated page saving. This constructor results in a
79 // SavePackage that will generate and sanitize a suggested name for the user 79 // SavePackage that will generate and sanitize a suggested name for the user
80 // in the "Save As" dialog box. 80 // in the "Save As" dialog box.
81 explicit SavePackage(WebContents* web_contents); 81 explicit SavePackage(WebContents* web_contents);
82 82
83 // This contructor is used only for testing. We can bypass the file and 83 // This contructor is used only for testing. We can bypass the file and
84 // directory name generation / sanitization by providing well known paths 84 // directory name generation / sanitization by providing well known paths
85 // better suited for tests. 85 // better suited for tests.
86 SavePackage(WebContents* web_contents, 86 SavePackage(WebContents* web_contents,
87 SavePageType save_type, 87 SavePageType save_type,
88 const FilePath& file_full_path, 88 const base::FilePath& file_full_path,
89 const FilePath& directory_full_path); 89 const base::FilePath& directory_full_path);
90 90
91 // Initialize the SavePackage. Returns true if it initializes properly. Need 91 // Initialize the SavePackage. Returns true if it initializes properly. Need
92 // to make sure that this method must be called in the UI thread because using 92 // to make sure that this method must be called in the UI thread because using
93 // g_browser_process on a non-UI thread can cause crashes during shutdown. 93 // g_browser_process on a non-UI thread can cause crashes during shutdown.
94 // |cb| will be called when the DownloadItem is created, before data is 94 // |cb| will be called when the DownloadItem is created, before data is
95 // written to disk. 95 // written to disk.
96 bool Init(const SavePackageDownloadCreatedCallback& cb); 96 bool Init(const SavePackageDownloadCreatedCallback& cb);
97 97
98 // Cancel all in progress request, might be called by user or internal error. 98 // Cancel all in progress request, might be called by user or internal error.
99 void Cancel(bool user_action); 99 void Cancel(bool user_action);
(...skipping 17 matching lines...) Expand all
117 int contents_id() const { return contents_id_; } 117 int contents_id() const { return contents_id_; }
118 int id() const { return unique_id_; } 118 int id() const { return unique_id_; }
119 WebContents* web_contents() const; 119 WebContents* web_contents() const;
120 120
121 void GetSaveInfo(); 121 void GetSaveInfo();
122 122
123 private: 123 private:
124 friend class base::RefCountedThreadSafe<SavePackage>; 124 friend class base::RefCountedThreadSafe<SavePackage>;
125 125
126 // Callback for WebContents::GenerateMHTML(). 126 // Callback for WebContents::GenerateMHTML().
127 void OnMHTMLGenerated(const FilePath& path, int64 size); 127 void OnMHTMLGenerated(const base::FilePath& path, int64 size);
128 128
129 // For testing only. 129 // For testing only.
130 SavePackage(WebContents* web_contents, 130 SavePackage(WebContents* web_contents,
131 const FilePath& file_full_path, 131 const base::FilePath& file_full_path,
132 const FilePath& directory_full_path); 132 const base::FilePath& directory_full_path);
133 133
134 virtual ~SavePackage(); 134 virtual ~SavePackage();
135 135
136 // Notes from Init() above applies here as well. 136 // Notes from Init() above applies here as well.
137 void InternalInit(); 137 void InternalInit();
138 138
139 void Stop(); 139 void Stop();
140 void CheckFinish(); 140 void CheckFinish();
141 void SaveNextFile(bool process_all_remainder_items); 141 void SaveNextFile(bool process_all_remainder_items);
142 void DoSavingProcess(); 142 void DoSavingProcess();
143 143
144 // WebContentsObserver implementation. 144 // WebContentsObserver implementation.
145 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 145 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
146 146
147 // DownloadItem::Observer implementation. 147 // DownloadItem::Observer implementation.
148 virtual void OnDownloadDestroyed(DownloadItem* download) OVERRIDE; 148 virtual void OnDownloadDestroyed(DownloadItem* download) OVERRIDE;
149 149
150 // Update the download history of this item upon completion. 150 // Update the download history of this item upon completion.
151 void FinalizeDownloadEntry(); 151 void FinalizeDownloadEntry();
152 152
153 // Detach from DownloadManager. 153 // Detach from DownloadManager.
154 void StopObservation(); 154 void StopObservation();
155 155
156 // Return max length of a path for a specific base directory. 156 // Return max length of a path for a specific base directory.
157 // This is needed on POSIX, which restrict the length of file names in 157 // This is needed on POSIX, which restrict the length of file names in
158 // addition to the restriction on the length of path names. 158 // addition to the restriction on the length of path names.
159 // |base_dir| is assumed to be a directory name with no trailing slash. 159 // |base_dir| is assumed to be a directory name with no trailing slash.
160 static uint32 GetMaxPathLengthForDirectory(const FilePath& base_dir); 160 static uint32 GetMaxPathLengthForDirectory(const base::FilePath& base_dir);
161 161
162 static bool GetSafePureFileName(const FilePath& dir_path, 162 static bool GetSafePureFileName(
163 const FilePath::StringType& file_name_ext, 163 const base::FilePath& dir_path,
164 uint32 max_file_path_len, 164 const base::FilePath::StringType& file_name_ext,
165 FilePath::StringType* pure_file_name); 165 uint32 max_file_path_len,
166 base::FilePath::StringType* pure_file_name);
166 167
167 // Create a file name based on the response from the server. 168 // Create a file name based on the response from the server.
168 bool GenerateFileName(const std::string& disposition, 169 bool GenerateFileName(const std::string& disposition,
169 const GURL& url, 170 const GURL& url,
170 bool need_html_ext, 171 bool need_html_ext,
171 FilePath::StringType* generated_name); 172 base::FilePath::StringType* generated_name);
172 173
173 // Get all savable resource links from current web page, include main 174 // Get all savable resource links from current web page, include main
174 // frame and sub-frame. 175 // frame and sub-frame.
175 void GetAllSavableResourceLinksForCurrentPage(); 176 void GetAllSavableResourceLinksForCurrentPage();
176 // Get html data by serializing all frames of current page with lists 177 // Get html data by serializing all frames of current page with lists
177 // which contain all resource links that have local copy. 178 // which contain all resource links that have local copy.
178 void GetSerializedHtmlDataForCurrentPageWithLocalLinks(); 179 void GetSerializedHtmlDataForCurrentPageWithLocalLinks();
179 180
180 // Look up SaveItem by save id from in progress map. 181 // Look up SaveItem by save id from in progress map.
181 SaveItem* LookupItemInProcessBySaveId(int32 save_id); 182 SaveItem* LookupItemInProcessBySaveId(int32 save_id);
182 183
183 // Remove SaveItem from in progress map and put it to saved map. 184 // Remove SaveItem from in progress map and put it to saved map.
184 void PutInProgressItemToSavedMap(SaveItem* save_item); 185 void PutInProgressItemToSavedMap(SaveItem* save_item);
185 186
186 // Retrieves the URL to be saved from the WebContents. 187 // Retrieves the URL to be saved from the WebContents.
187 GURL GetUrlToBeSaved(); 188 GURL GetUrlToBeSaved();
188 189
189 void CreateDirectoryOnFileThread(const FilePath& website_save_dir, 190 void CreateDirectoryOnFileThread(const base::FilePath& website_save_dir,
190 const FilePath& download_save_dir, 191 const base::FilePath& download_save_dir,
191 bool skip_dir_check, 192 bool skip_dir_check,
192 const std::string& mime_type, 193 const std::string& mime_type,
193 const std::string& accept_langs); 194 const std::string& accept_langs);
194 void ContinueGetSaveInfo(const FilePath& suggested_path, 195 void ContinueGetSaveInfo(const base::FilePath& suggested_path,
195 bool can_save_as_complete); 196 bool can_save_as_complete);
196 void OnPathPicked( 197 void OnPathPicked(
197 const FilePath& final_name, 198 const base::FilePath& final_name,
198 SavePageType type, 199 SavePageType type,
199 const SavePackageDownloadCreatedCallback& cb); 200 const SavePackageDownloadCreatedCallback& cb);
200 void OnReceivedSavableResourceLinksForCurrentPage( 201 void OnReceivedSavableResourceLinksForCurrentPage(
201 const std::vector<GURL>& resources_list, 202 const std::vector<GURL>& resources_list,
202 const std::vector<Referrer>& referrers_list, 203 const std::vector<Referrer>& referrers_list,
203 const std::vector<GURL>& frames_list); 204 const std::vector<GURL>& frames_list);
204 205
205 void OnReceivedSerializedHtmlData(const GURL& frame_url, 206 void OnReceivedSerializedHtmlData(const GURL& frame_url,
206 const std::string& data, 207 const std::string& data,
207 int32 status); 208 int32 status);
(...skipping 18 matching lines...) Expand all
226 227
227 // The current speed in files per second. This is used to update the 228 // The current speed in files per second. This is used to update the
228 // DownloadItem associated to this SavePackage. The files per second is 229 // DownloadItem associated to this SavePackage. The files per second is
229 // presented by the DownloadItem to the UI as bytes per second, which is 230 // presented by the DownloadItem to the UI as bytes per second, which is
230 // not correct but matches the way the total and received number of files is 231 // not correct but matches the way the total and received number of files is
231 // presented as the total and received bytes. 232 // presented as the total and received bytes.
232 int64 CurrentSpeed() const; 233 int64 CurrentSpeed() const;
233 234
234 // Helper function for preparing suggested name for the SaveAs Dialog. The 235 // Helper function for preparing suggested name for the SaveAs Dialog. The
235 // suggested name is determined by the web document's title. 236 // suggested name is determined by the web document's title.
236 FilePath GetSuggestedNameForSaveAs( 237 base::FilePath GetSuggestedNameForSaveAs(
237 bool can_save_as_complete, 238 bool can_save_as_complete,
238 const std::string& contents_mime_type, 239 const std::string& contents_mime_type,
239 const std::string& accept_langs); 240 const std::string& accept_langs);
240 241
241 // Ensures that the file name has a proper extension for HTML by adding ".htm" 242 // Ensures that the file name has a proper extension for HTML by adding ".htm"
242 // if necessary. 243 // if necessary.
243 static FilePath EnsureHtmlExtension(const FilePath& name); 244 static base::FilePath EnsureHtmlExtension(const base::FilePath& name);
244 245
245 // Ensures that the file name has a proper extension for supported formats 246 // Ensures that the file name has a proper extension for supported formats
246 // if necessary. 247 // if necessary.
247 static FilePath EnsureMimeExtension(const FilePath& name, 248 static base::FilePath EnsureMimeExtension(const base::FilePath& name,
248 const std::string& contents_mime_type); 249 const std::string& contents_mime_type);
249 250
250 // Returns extension for supported MIME types (for example, for "text/plain" 251 // Returns extension for supported MIME types (for example, for "text/plain"
251 // it returns "txt"). 252 // it returns "txt").
252 static const FilePath::CharType* ExtensionForMimeType( 253 static const base::FilePath::CharType* ExtensionForMimeType(
253 const std::string& contents_mime_type); 254 const std::string& contents_mime_type);
254 255
255 typedef std::queue<SaveItem*> SaveItemQueue; 256 typedef std::queue<SaveItem*> SaveItemQueue;
256 // A queue for items we are about to start saving. 257 // A queue for items we are about to start saving.
257 SaveItemQueue waiting_item_queue_; 258 SaveItemQueue waiting_item_queue_;
258 259
259 typedef base::hash_map<int32, SaveItem*> SavedItemMap; 260 typedef base::hash_map<int32, SaveItem*> SavedItemMap;
260 // saved_success_items_ is map of all saving job which are successfully saved. 261 // saved_success_items_ is map of all saving job which are successfully saved.
261 SavedItemMap saved_success_items_; 262 SavedItemMap saved_success_items_;
262 263
263 // Non-owning pointer for handling file writing on the file thread. 264 // Non-owning pointer for handling file writing on the file thread.
264 SaveFileManager* file_manager_; 265 SaveFileManager* file_manager_;
265 266
266 // DownloadManager owns the DownloadItem and handles history and UI. 267 // DownloadManager owns the DownloadItem and handles history and UI.
267 DownloadManagerImpl* download_manager_; 268 DownloadManagerImpl* download_manager_;
268 DownloadItemImpl* download_; 269 DownloadItemImpl* download_;
269 270
270 // The URL of the page the user wants to save. 271 // The URL of the page the user wants to save.
271 GURL page_url_; 272 GURL page_url_;
272 FilePath saved_main_file_path_; 273 base::FilePath saved_main_file_path_;
273 FilePath saved_main_directory_path_; 274 base::FilePath saved_main_directory_path_;
274 275
275 // The title of the page the user wants to save. 276 // The title of the page the user wants to save.
276 string16 title_; 277 string16 title_;
277 278
278 // Used to calculate package download speed (in files per second). 279 // Used to calculate package download speed (in files per second).
279 base::TimeTicks start_tick_; 280 base::TimeTicks start_tick_;
280 281
281 // Indicates whether the actual saving job is finishing or not. 282 // Indicates whether the actual saving job is finishing or not.
282 bool finished_; 283 bool finished_;
283 284
284 // Indicates whether a call to Finish() has been scheduled. 285 // Indicates whether a call to Finish() has been scheduled.
285 bool mhtml_finishing_; 286 bool mhtml_finishing_;
286 287
287 // Indicates whether user canceled the saving job. 288 // Indicates whether user canceled the saving job.
288 bool user_canceled_; 289 bool user_canceled_;
289 290
290 // Indicates whether user get disk error. 291 // Indicates whether user get disk error.
291 bool disk_error_occurred_; 292 bool disk_error_occurred_;
292 293
293 // Type about saving page as only-html or complete-html. 294 // Type about saving page as only-html or complete-html.
294 SavePageType save_type_; 295 SavePageType save_type_;
295 296
296 // Number of all need to be saved resources. 297 // Number of all need to be saved resources.
297 size_t all_save_items_count_; 298 size_t all_save_items_count_;
298 299
299 typedef std::set<FilePath::StringType, 300 typedef std::set<base::FilePath::StringType,
300 bool (*)(const FilePath::StringType&, 301 bool (*)(const base::FilePath::StringType&,
301 const FilePath::StringType&)> FileNameSet; 302 const base::FilePath::StringType&)> FileNameSet;
302 // This set is used to eliminate duplicated file names in saving directory. 303 // This set is used to eliminate duplicated file names in saving directory.
303 FileNameSet file_name_set_; 304 FileNameSet file_name_set_;
304 305
305 typedef base::hash_map<FilePath::StringType, uint32> FileNameCountMap; 306 typedef base::hash_map<base::FilePath::StringType, uint32> FileNameCountMap;
306 // This map is used to track serial number for specified filename. 307 // This map is used to track serial number for specified filename.
307 FileNameCountMap file_name_count_map_; 308 FileNameCountMap file_name_count_map_;
308 309
309 // Indicates current waiting state when SavePackage try to get something 310 // Indicates current waiting state when SavePackage try to get something
310 // from outside. 311 // from outside.
311 WaitState wait_state_; 312 WaitState wait_state_;
312 313
313 // Since for one contents, it can only have one SavePackage in same time. 314 // Since for one contents, it can only have one SavePackage in same time.
314 // Now we actually use render_process_id as the contents's unique id. 315 // Now we actually use render_process_id as the contents's unique id.
315 const int contents_id_; 316 const int contents_id_;
316 317
317 // Unique ID for this SavePackage. 318 // Unique ID for this SavePackage.
318 const int unique_id_; 319 const int unique_id_;
319 320
320 // Variables to record errors that happened so we can record them via 321 // Variables to record errors that happened so we can record them via
321 // UMA statistics. 322 // UMA statistics.
322 bool wrote_to_completed_file_; 323 bool wrote_to_completed_file_;
323 bool wrote_to_failed_file_; 324 bool wrote_to_failed_file_;
324 325
325 friend class SavePackageTest; 326 friend class SavePackageTest;
326 FRIEND_TEST_ALL_PREFIXES(SavePackageTest, TestSuggestedSaveNames); 327 FRIEND_TEST_ALL_PREFIXES(SavePackageTest, TestSuggestedSaveNames);
327 FRIEND_TEST_ALL_PREFIXES(SavePackageTest, TestLongSafePureFilename); 328 FRIEND_TEST_ALL_PREFIXES(SavePackageTest, TestLongSafePureFilename);
328 329
329 DISALLOW_COPY_AND_ASSIGN(SavePackage); 330 DISALLOW_COPY_AND_ASSIGN(SavePackage);
330 }; 331 };
331 332
332 } // namespace content 333 } // namespace content
333 334
334 #endif // CONTENT_BROWSER_DOWNLOAD_SAVE_PACKAGE_H_ 335 #endif // CONTENT_BROWSER_DOWNLOAD_SAVE_PACKAGE_H_
OLDNEW
« no previous file with comments | « content/browser/download/save_item.cc ('k') | content/browser/download/save_package.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698