| 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
|
|
|