Index: components/dom_distiller/core/task_tracker.cc |
diff --git a/components/dom_distiller/core/task_tracker.cc b/components/dom_distiller/core/task_tracker.cc |
index ccd5656c12fff4d5b973801703f7f51e41d0c19e..1afd4825ac75dc96777a41aafa80f4f2e9cc39da 100644 |
--- a/components/dom_distiller/core/task_tracker.cc |
+++ b/components/dom_distiller/core/task_tracker.cc |
@@ -5,6 +5,8 @@ |
#include "components/dom_distiller/core/task_tracker.h" |
#include "base/message_loop/message_loop.h" |
+#include "components/dom_distiller/core/proto/distilled_article.pb.h" |
+#include "components/dom_distiller/core/proto/distilled_page.pb.h" |
namespace dom_distiller { |
@@ -20,7 +22,8 @@ ViewerHandle::~ViewerHandle() { |
TaskTracker::TaskTracker(const ArticleEntry& entry, CancelCallback callback) |
: cancel_callback_(callback), |
entry_(entry), |
- distilled_page_(), |
+ distilled_article_(), |
+ distillation_complete_(false), |
weak_ptr_factory_(this) {} |
TaskTracker::~TaskTracker() { DCHECK(viewers_.empty()); } |
@@ -51,7 +54,7 @@ void TaskTracker::StartBlobFetcher() { |
void TaskTracker::AddSaveCallback(const SaveCallback& callback) { |
DCHECK(!callback.is_null()); |
save_callbacks_.push_back(callback); |
- if (distilled_page_) { |
+ if (distillation_complete_) { |
// Distillation for this task has already completed, and so it can be |
// immediately saved. |
ScheduleSaveCallbacks(true); |
@@ -60,7 +63,7 @@ void TaskTracker::AddSaveCallback(const SaveCallback& callback) { |
scoped_ptr<ViewerHandle> TaskTracker::AddViewer(ViewRequestDelegate* delegate) { |
viewers_.push_back(delegate); |
- if (distilled_page_) { |
+ if (distillation_complete_) { |
// Distillation for this task has already completed, and so the delegate can |
// be immediately told of the result. |
base::MessageLoop::current()->PostTask( |
@@ -120,12 +123,10 @@ void TaskTracker::ScheduleSaveCallbacks(bool distillation_succeeded) { |
void TaskTracker::DoSaveCallbacks(bool distillation_succeeded) { |
if (!save_callbacks_.empty()) { |
- DistilledPageProto* distilled_proto = |
- distillation_succeeded ? distilled_page_.get() : NULL; |
- |
for (size_t i = 0; i < save_callbacks_.size(); ++i) { |
DCHECK(!save_callbacks_[i].is_null()); |
- save_callbacks_[i].Run(entry_, distilled_proto, distillation_succeeded); |
+ save_callbacks_[i].Run( |
+ entry_, distilled_article_.get(), distillation_succeeded); |
} |
save_callbacks_.clear(); |
@@ -134,21 +135,33 @@ void TaskTracker::DoSaveCallbacks(bool distillation_succeeded) { |
} |
void TaskTracker::NotifyViewer(ViewRequestDelegate* delegate) { |
- DCHECK(distilled_page_); |
- delegate->OnArticleReady(distilled_page_.get()); |
+ DCHECK(distillation_complete_); |
+ delegate->OnArticleReady(distilled_article_.get()); |
} |
-void TaskTracker::OnDistilledDataReady(scoped_ptr<DistilledPageProto> proto) { |
- distilled_page_ = proto.Pass(); |
- DCHECK(distilled_page_); |
+void TaskTracker::OnDistilledDataReady( |
+ scoped_ptr<DistilledArticleProto> distilled_article) { |
+ distilled_article_ = distilled_article.Pass(); |
+ bool distillation_successful = false; |
+ if (distilled_article_->pages_size() > 0) { |
+ distillation_successful = true; |
+ entry_.set_title(distilled_article_->title()); |
+ // Reset the pages. |
+ entry_.clear_pages(); |
+ for (int i = 0; i < distilled_article_->pages_size(); ++i) { |
+ sync_pb::ArticlePage* page = entry_.add_pages(); |
+ page->set_url(distilled_article_->pages(i).url()); |
+ } |
+ } |
+ |
+ distillation_complete_ = true; |
- entry_.set_title(distilled_page_->title()); |
for (size_t i = 0; i < viewers_.size(); ++i) { |
NotifyViewer(viewers_[i]); |
} |
// Already inside a callback run SaveCallbacks directly. |
- DoSaveCallbacks(true); |
+ DoSaveCallbacks(distillation_successful); |
} |
} // namespace dom_distiller |