Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Unified Diff: components/dom_distiller/core/task_tracker.cc

Issue 146843010: Add support for multipage distillation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698