OLD | NEW |
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 // Objects that handle file operations for saving files, on the file thread. | 5 // Objects that handle file operations for saving files, on the file thread. |
6 // | 6 // |
7 // The SaveFileManager owns a set of SaveFile objects, each of which connects | 7 // The SaveFileManager owns a set of SaveFile objects, each of which connects |
8 // with a SaveItem object which belongs to one SavePackage and runs on the file | 8 // with a SaveItem object which belongs to one SavePackage and runs on the file |
9 // thread for saving data in order to avoid disk activity on either network IO | 9 // thread for saving data in order to avoid disk activity on either network IO |
10 // thread or the UI thread. It coordinates the notifications from the network | 10 // thread or the UI thread. It coordinates the notifications from the network |
11 // and UI. | 11 // and UI. |
12 // | 12 // |
13 // The SaveFileManager itself is a singleton object owned by the | 13 // The SaveFileManager itself is a singleton object owned by the |
14 // ResourceDispatcherHostImpl. | 14 // ResourceDispatcherHostImpl. |
15 // | 15 // |
16 // The data sent to SaveFileManager have 2 sources, one is from | 16 // The data sent to SaveFileManager have 2 sources, one is from |
17 // ResourceDispatcherHostImpl, run in network IO thread, the all sub-resources | 17 // ResourceDispatcherHostImpl, run in network IO thread, the all sub-resources |
18 // and save-only-HTML pages will be got from network IO. The second is from | 18 // and save-only-HTML pages will be got from network IO. The second is from |
19 // render process, those html pages which are serialized from DOM will be | 19 // render process, those html pages which are serialized from DOM will be |
20 // composed in render process and encoded to its original encoding, then sent | 20 // composed in render process and encoded to its original encoding, then sent |
21 // to UI loop in browser process, then UI loop will dispatch the data to | 21 // to UI loop in browser process, then UI loop will dispatch the data to |
22 // SaveFileManager on the file thread. SaveFileManager will directly | 22 // SaveFileManager on the file thread. SaveFileManager will directly |
23 // call SaveFile's method to persist data. | 23 // call SaveFile's method to persist data. |
24 // | 24 // |
25 // A typical saving job operation involves multiple threads: | 25 // A typical saving job operation involves multiple threads and sequences: |
26 // | 26 // |
27 // Updating an in progress save file | 27 // Updating an in progress save file |
28 // io_thread | 28 // io_thread |
29 // |----> data from net ---->| | 29 // |----> data from net ---->| |
30 // | | 30 // | |
31 // | | 31 // | |
32 // |----> data from ---->| | | 32 // |----> data from ---->| | |
33 // | render process | | | 33 // | render process | | |
34 // ui_thread | | | 34 // ui_thread | | |
35 // file_thread (writes to disk) | 35 // download_task_runner (writes to disk) |
36 // |----> stats ---->| | 36 // |----> stats ---->| |
37 // ui_thread (feedback for user) | 37 // ui_thread (feedback for user) |
38 // | 38 // |
39 // | 39 // |
40 // Cancel operations perform the inverse order when triggered by a user action: | 40 // Cancel operations perform the inverse order when triggered by a user action: |
41 // ui_thread (user click) | 41 // ui_thread (user click) |
42 // |----> cancel command ---->| | 42 // |----> cancel command ---->| |
43 // | | file_thread (close file) | 43 // | | download_task_runner (close file) |
44 // | |---------------------> cancel command ---->| | 44 // | |---------------------> cancel command ---->| |
45 // | io_thread (stops net IO | 45 // | io_thread (stops net IO |
46 // ui_thread (user close contents) for saving) | 46 // ui_thread (user close contents) for saving) |
47 // |----> cancel command ---->| | 47 // |----> cancel command ---->| |
48 // Render process(stop serializing DOM and sending | 48 // Render process(stop serializing DOM and sending |
49 // data) | 49 // data) |
50 // | 50 // |
51 // | 51 // |
52 // The SaveFileManager tracks saving requests, mapping from a save item id to | 52 // The SaveFileManager tracks saving requests, mapping from a save item id to |
53 // the SavePackage for the contents where the saving job was initiated. In the | 53 // the SavePackage for the contents where the saving job was initiated. In the |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 // Tracks which SavePackage to send data to, called only on UI thread. | 216 // Tracks which SavePackage to send data to, called only on UI thread. |
217 // SavePackageMap maps save item ids to their SavePackage. | 217 // SavePackageMap maps save item ids to their SavePackage. |
218 std::unordered_map<SaveItemId, SavePackage*, SaveItemId::Hasher> packages_; | 218 std::unordered_map<SaveItemId, SavePackage*, SaveItemId::Hasher> packages_; |
219 | 219 |
220 DISALLOW_COPY_AND_ASSIGN(SaveFileManager); | 220 DISALLOW_COPY_AND_ASSIGN(SaveFileManager); |
221 }; | 221 }; |
222 | 222 |
223 } // namespace content | 223 } // namespace content |
224 | 224 |
225 #endif // CONTENT_BROWSER_DOWNLOAD_SAVE_FILE_MANAGER_H_ | 225 #endif // CONTENT_BROWSER_DOWNLOAD_SAVE_FILE_MANAGER_H_ |
OLD | NEW |