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

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

Issue 270663005: Use new DomDistillerJs Proto API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Meh, let's just accept an empty script during tests Created 6 years, 7 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
« no previous file with comments | « components/dom_distiller/DEPS ('k') | components/dom_distiller/core/distiller_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/dom_distiller/core/distiller_page.cc
diff --git a/components/dom_distiller/core/distiller_page.cc b/components/dom_distiller/core/distiller_page.cc
index a935c7a36decda737eb210153c52d7e487a484c5..ceee2a8ba79caf9eccc501159fe51a5d5fc38dd0 100644
--- a/components/dom_distiller/core/distiller_page.cc
+++ b/components/dom_distiller/core/distiller_page.cc
@@ -5,14 +5,49 @@
#include "components/dom_distiller/core/distiller_page.h"
#include "base/bind.h"
+#include "base/json/json_writer.h"
#include "base/logging.h"
#include "base/message_loop/message_loop.h"
+#include "base/strings/string_util.h"
+#include "base/strings/utf_string_conversions.h"
#include "grit/component_resources.h"
+#include "third_party/dom_distiller_js/dom_distiller.pb.h"
+#include "third_party/dom_distiller_js/dom_distiller_json_converter.h"
#include "ui/base/resource/resource_bundle.h"
#include "url/gurl.h"
namespace dom_distiller {
+namespace {
+
+const char* kOptionsPlaceholder = "$$OPTIONS";
+
+std::string GetDistillerScriptWithOptions(
+ const dom_distiller::proto::DomDistillerOptions& options) {
+ std::string script = ResourceBundle::GetSharedInstance()
+ .GetRawDataResource(IDR_DISTILLER_JS)
+ .as_string();
+ if (script.empty()) {
+ return "";
+ }
+
+ scoped_ptr<base::Value> options_value(
+ dom_distiller::proto::json::DomDistillerOptions::WriteToValue(options));
+ std::string options_json;
+ if (!base::JSONWriter::Write(options_value.get(), &options_json)) {
+ NOTREACHED();
+ }
+ size_t options_offset = script.find(kOptionsPlaceholder);
+ DCHECK_NE(std::string::npos, options_offset);
+ DCHECK_EQ(std::string::npos,
+ script.find(kOptionsPlaceholder, options_offset + 1));
+ script =
+ script.replace(options_offset, strlen(kOptionsPlaceholder), options_json);
+ return script;
+}
+
+}
+
DistilledPageInfo::DistilledPageInfo() {}
DistilledPageInfo::~DistilledPageInfo() {}
@@ -30,59 +65,37 @@ void DistillerPage::DistillPage(const GURL& gurl,
// the callback to OnDistillationDone happens.
ready_ = false;
distiller_page_callback_ = callback;
- std::string script = ResourceBundle::GetSharedInstance()
- .GetRawDataResource(IDR_DISTILLER_JS)
- .as_string();
- DistillPageImpl(gurl, script);
+ dom_distiller::proto::DomDistillerOptions options;
+ DistillPageImpl(gurl, GetDistillerScriptWithOptions(options));
}
void DistillerPage::OnDistillationDone(const GURL& page_url,
const base::Value* value) {
DCHECK(!ready_);
ready_ = true;
+
scoped_ptr<DistilledPageInfo> page_info(new DistilledPageInfo());
- std::string result;
- const base::ListValue* result_list = NULL;
- bool found_content = false;
- if (!value->GetAsList(&result_list)) {
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(distiller_page_callback_, base::Passed(&page_info), false));
- } else {
- int i = 0;
- for (base::ListValue::const_iterator iter = result_list->begin();
- iter != result_list->end();
- ++iter, ++i) {
- std::string item;
- (*iter)->GetAsString(&item);
- // The JavaScript returns an array where the first element is the title,
- // the second element is the article content HTML, and the remaining
- // elements are image URLs referenced in the HTML.
- switch (i) {
- case 0:
- page_info->title = item;
- break;
- case 1:
- page_info->html = item;
- found_content = true;
- break;
- case 2:
- page_info->next_page_url = item;
- break;
- case 3:
- page_info->prev_page_url = item;
- break;
- default:
- if (GURL(item).is_valid()) {
- page_info->image_urls.push_back(item);
- }
+ bool found_content = !value->IsType(base::Value::TYPE_NULL);
+ if (found_content) {
+ dom_distiller::proto::DomDistillerResult distiller_result =
+ dom_distiller::proto::json::DomDistillerResult::ReadFromValue(value);
+
+ page_info->title = distiller_result.title();
+ page_info->html = distiller_result.distilled_content().html();
+ page_info->next_page_url = distiller_result.pagination_info().next_page();
+ page_info->prev_page_url = distiller_result.pagination_info().prev_page();
+ for (int i = 0; i < distiller_result.image_urls_size(); ++i) {
+ const std::string image_url = distiller_result.image_urls(i);
+ if (GURL(image_url).is_valid()) {
+ page_info->image_urls.push_back(image_url);
}
}
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(
- distiller_page_callback_, base::Passed(&page_info), found_content));
}
+
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(
+ distiller_page_callback_, base::Passed(&page_info), found_content));
}
} // namespace dom_distiller
« no previous file with comments | « components/dom_distiller/DEPS ('k') | components/dom_distiller/core/distiller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698