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 #include "content/browser/download/mhtml_generation_manager.h" | 5 #include "content/browser/download/mhtml_generation_manager.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <queue> | 8 #include <queue> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 void RenderProcessHostDestroyed(RenderProcessHost* host) override; | 72 void RenderProcessHostDestroyed(RenderProcessHost* host) override; |
73 | 73 |
74 private: | 74 private: |
75 static int64_t CloseFileOnFileThread(base::File file); | 75 static int64_t CloseFileOnFileThread(base::File file); |
76 void AddFrame(RenderFrameHost* render_frame_host); | 76 void AddFrame(RenderFrameHost* render_frame_host); |
77 | 77 |
78 // Creates a new map with values (content ids) the same as in | 78 // Creates a new map with values (content ids) the same as in |
79 // |frame_tree_node_to_content_id_| map, but with the keys translated from | 79 // |frame_tree_node_to_content_id_| map, but with the keys translated from |
80 // frame_tree_node_id into a |site_instance|-specific routing_id. | 80 // frame_tree_node_id into a |site_instance|-specific routing_id. |
81 std::map<int, std::string> CreateFrameRoutingIdToContentId( | 81 std::map<int, std::string> CreateFrameRoutingIdToContentId( |
82 SiteInstance* site_instance); | 82 SiteInstanceImpl* site_instance); |
83 | 83 |
84 // Id used to map renderer responses to jobs. | 84 // Id used to map renderer responses to jobs. |
85 // See also MHTMLGenerationManager::id_to_job_ map. | 85 // See also MHTMLGenerationManager::id_to_job_ map. |
86 int job_id_; | 86 int job_id_; |
87 | 87 |
88 // The IDs of frames that still need to be processed. | 88 // The IDs of frames that still need to be processed. |
89 std::queue<int> pending_frame_tree_node_ids_; | 89 std::queue<int> pending_frame_tree_node_ids_; |
90 | 90 |
91 // Identifies a frame to which we've sent FrameMsg_SerializeAsMHTML but for | 91 // Identifies a frame to which we've sent FrameMsg_SerializeAsMHTML but for |
92 // which we didn't yet process FrameHostMsg_SerializeAsMHTMLResponse via | 92 // which we didn't yet process FrameHostMsg_SerializeAsMHTMLResponse via |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 DCHECK(FrameTreeNode::GloballyFindByID(pending_frame_tree_node_ids_.front()) | 136 DCHECK(FrameTreeNode::GloballyFindByID(pending_frame_tree_node_ids_.front()) |
137 ->parent() == nullptr); | 137 ->parent() == nullptr); |
138 } | 138 } |
139 | 139 |
140 MHTMLGenerationManager::Job::~Job() { | 140 MHTMLGenerationManager::Job::~Job() { |
141 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 141 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
142 } | 142 } |
143 | 143 |
144 std::map<int, std::string> | 144 std::map<int, std::string> |
145 MHTMLGenerationManager::Job::CreateFrameRoutingIdToContentId( | 145 MHTMLGenerationManager::Job::CreateFrameRoutingIdToContentId( |
146 SiteInstance* site_instance) { | 146 SiteInstanceImpl* site_instance) { |
147 std::map<int, std::string> result; | 147 std::map<int, std::string> result; |
148 for (const auto& it : frame_tree_node_to_content_id_) { | 148 for (const auto& it : frame_tree_node_to_content_id_) { |
149 int ftn_id = it.first; | 149 int ftn_id = it.first; |
150 const std::string& content_id = it.second; | 150 const std::string& content_id = it.second; |
151 | 151 |
152 FrameTreeNode* ftn = FrameTreeNode::GloballyFindByID(ftn_id); | 152 FrameTreeNode* ftn = FrameTreeNode::GloballyFindByID(ftn_id); |
153 if (!ftn) | 153 if (!ftn) |
154 continue; | 154 continue; |
155 | 155 |
156 int routing_id = | 156 int routing_id = |
(...skipping 14 matching lines...) Expand all Loading... |
171 ipc_params.job_id = job_id_; | 171 ipc_params.job_id = job_id_; |
172 ipc_params.mhtml_boundary_marker = mhtml_boundary_marker_; | 172 ipc_params.mhtml_boundary_marker = mhtml_boundary_marker_; |
173 | 173 |
174 int frame_tree_node_id = pending_frame_tree_node_ids_.front(); | 174 int frame_tree_node_id = pending_frame_tree_node_ids_.front(); |
175 pending_frame_tree_node_ids_.pop(); | 175 pending_frame_tree_node_ids_.pop(); |
176 ipc_params.is_last_frame = pending_frame_tree_node_ids_.empty(); | 176 ipc_params.is_last_frame = pending_frame_tree_node_ids_.empty(); |
177 | 177 |
178 FrameTreeNode* ftn = FrameTreeNode::GloballyFindByID(frame_tree_node_id); | 178 FrameTreeNode* ftn = FrameTreeNode::GloballyFindByID(frame_tree_node_id); |
179 if (!ftn) // The contents went away. | 179 if (!ftn) // The contents went away. |
180 return false; | 180 return false; |
181 RenderFrameHost* rfh = ftn->current_frame_host(); | 181 RenderFrameHostImpl* rfh = ftn->current_frame_host(); |
182 | 182 |
183 // Get notified if the target of the IPC message dies between responding. | 183 // Get notified if the target of the IPC message dies between responding. |
184 observed_renderer_process_host_.RemoveAll(); | 184 observed_renderer_process_host_.RemoveAll(); |
185 observed_renderer_process_host_.Add(rfh->GetProcess()); | 185 observed_renderer_process_host_.Add(rfh->GetProcess()); |
186 | 186 |
187 // Tell the renderer to skip (= deduplicate) already covered MHTML parts. | 187 // Tell the renderer to skip (= deduplicate) already covered MHTML parts. |
188 ipc_params.salt = salt_; | 188 ipc_params.salt = salt_; |
189 ipc_params.digests_of_uris_to_skip = digests_of_already_serialized_uris_; | 189 ipc_params.digests_of_uris_to_skip = digests_of_already_serialized_uris_; |
190 | 190 |
191 ipc_params.destination_file = IPC::GetFileHandleForProcess( | 191 ipc_params.destination_file = IPC::GetFileHandleForProcess( |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
416 return iter->second; | 416 return iter->second; |
417 } | 417 } |
418 | 418 |
419 void MHTMLGenerationManager::RenderProcessExited(Job* job) { | 419 void MHTMLGenerationManager::RenderProcessExited(Job* job) { |
420 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 420 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
421 DCHECK(job); | 421 DCHECK(job); |
422 JobFinished(job, JobStatus::FAILURE); | 422 JobFinished(job, JobStatus::FAILURE); |
423 } | 423 } |
424 | 424 |
425 } // namespace content | 425 } // namespace content |
OLD | NEW |