OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "components/dom_distiller/core/distiller.h" | 5 #include "components/dom_distiller/core/distiller.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 base::Bind(&DistillerImpl::OnPageDistillationFinished, | 128 base::Bind(&DistillerImpl::OnPageDistillationFinished, |
129 weak_factory_.GetWeakPtr(), | 129 weak_factory_.GetWeakPtr(), |
130 page_num, | 130 page_num, |
131 url)); | 131 url)); |
132 } | 132 } |
133 } | 133 } |
134 | 134 |
135 void DistillerImpl::OnPageDistillationFinished( | 135 void DistillerImpl::OnPageDistillationFinished( |
136 int page_num, | 136 int page_num, |
137 const GURL& page_url, | 137 const GURL& page_url, |
138 scoped_ptr<DistilledPageInfo> distilled_page, | 138 scoped_ptr<proto::DomDistillerResult> distiller_result, |
139 bool distillation_successful) { | 139 bool distillation_successful) { |
140 DCHECK(distilled_page.get()); | 140 DCHECK(distiller_result.get()); |
141 DCHECK(started_pages_index_.find(page_num) != started_pages_index_.end()); | 141 DCHECK(started_pages_index_.find(page_num) != started_pages_index_.end()); |
142 if (distillation_successful) { | 142 if (distillation_successful) { |
143 DistilledPageData* page_data = | 143 DistilledPageData* page_data = |
144 GetPageAtIndex(started_pages_index_[page_num]); | 144 GetPageAtIndex(started_pages_index_[page_num]); |
145 page_data->distilled_page_proto = | 145 page_data->distilled_page_proto = |
146 new base::RefCountedData<DistilledPageProto>(); | 146 new base::RefCountedData<DistilledPageProto>(); |
147 page_data->page_num = page_num; | 147 page_data->page_num = page_num; |
148 page_data->distilled_page_proto->data.set_title(distilled_page->title); | 148 if (distiller_result->has_title()) { |
| 149 page_data->distilled_page_proto->data.set_title( |
| 150 distiller_result->title()); |
| 151 } |
149 page_data->distilled_page_proto->data.set_url(page_url.spec()); | 152 page_data->distilled_page_proto->data.set_url(page_url.spec()); |
150 page_data->distilled_page_proto->data.set_html(distilled_page->html); | 153 if (distiller_result->has_distilled_content() && |
151 | 154 distiller_result->distilled_content().has_html()) { |
152 GURL next_page_url(distilled_page->next_page_url); | 155 page_data->distilled_page_proto->data.set_html( |
153 if (next_page_url.is_valid()) { | 156 distiller_result->distilled_content().html()); |
154 // The pages should be in same origin. | |
155 DCHECK_EQ(next_page_url.GetOrigin(), page_url.GetOrigin()); | |
156 AddToDistillationQueue(page_num + 1, next_page_url); | |
157 } | 157 } |
158 | 158 |
159 GURL prev_page_url(distilled_page->prev_page_url); | 159 if (distiller_result->has_pagination_info()) { |
160 if (prev_page_url.is_valid()) { | 160 proto::PaginationInfo pagination_info = |
161 DCHECK_EQ(prev_page_url.GetOrigin(), page_url.GetOrigin()); | 161 distiller_result->pagination_info(); |
162 AddToDistillationQueue(page_num - 1, prev_page_url); | 162 if (pagination_info.has_next_page()) { |
| 163 GURL next_page_url(pagination_info.next_page()); |
| 164 if (next_page_url.is_valid()) { |
| 165 // The pages should be in same origin. |
| 166 DCHECK_EQ(next_page_url.GetOrigin(), page_url.GetOrigin()); |
| 167 AddToDistillationQueue(page_num + 1, next_page_url); |
| 168 } |
| 169 } |
| 170 |
| 171 if (pagination_info.has_prev_page()) { |
| 172 GURL prev_page_url(pagination_info.prev_page()); |
| 173 if (prev_page_url.is_valid()) { |
| 174 DCHECK_EQ(prev_page_url.GetOrigin(), page_url.GetOrigin()); |
| 175 AddToDistillationQueue(page_num - 1, prev_page_url); |
| 176 } |
| 177 } |
163 } | 178 } |
164 | 179 |
165 for (size_t img_num = 0; img_num < distilled_page->image_urls.size(); | 180 for (int img_num = 0; img_num < distiller_result->image_urls_size(); |
166 ++img_num) { | 181 ++img_num) { |
167 std::string image_id = | 182 std::string image_id = |
168 base::IntToString(page_num + 1) + "_" + base::IntToString(img_num); | 183 base::IntToString(page_num + 1) + "_" + base::IntToString(img_num); |
169 FetchImage(page_num, image_id, distilled_page->image_urls[img_num]); | 184 FetchImage(page_num, image_id, distiller_result->image_urls(img_num)); |
170 } | 185 } |
171 | 186 |
172 AddPageIfDone(page_num); | 187 AddPageIfDone(page_num); |
173 DistillNextPage(); | 188 DistillNextPage(); |
174 } else { | 189 } else { |
175 started_pages_index_.erase(page_num); | 190 started_pages_index_.erase(page_num); |
176 RunDistillerCallbackIfDone(); | 191 RunDistillerCallbackIfDone(); |
177 } | 192 } |
178 } | 193 } |
179 | 194 |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 DCHECK(finished_pages_index_.empty()); | 300 DCHECK(finished_pages_index_.empty()); |
286 | 301 |
287 base::AutoReset<bool> dont_delete_this_in_callback(&destruction_allowed_, | 302 base::AutoReset<bool> dont_delete_this_in_callback(&destruction_allowed_, |
288 false); | 303 false); |
289 finished_cb_.Run(article_proto.Pass()); | 304 finished_cb_.Run(article_proto.Pass()); |
290 finished_cb_.Reset(); | 305 finished_cb_.Reset(); |
291 } | 306 } |
292 } | 307 } |
293 | 308 |
294 } // namespace dom_distiller | 309 } // namespace dom_distiller |
OLD | NEW |