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

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

Issue 260073009: [dom_distiller] Add support for incremental viewer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase 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
Index: components/dom_distiller/core/viewer.cc
diff --git a/components/dom_distiller/core/viewer.cc b/components/dom_distiller/core/viewer.cc
index 365a536e421001b0f0283b87a252c647dd204891..072cff8feb08c62cb8603c74803ac213468ae1d2 100644
--- a/components/dom_distiller/core/viewer.cc
+++ b/components/dom_distiller/core/viewer.cc
@@ -7,6 +7,7 @@
#include <string>
#include <vector>
+#include "base/json/json_writer.h"
#include "base/memory/scoped_ptr.h"
#include "base/strings/string_util.h"
#include "components/dom_distiller/core/dom_distiller_service.h"
@@ -27,20 +28,26 @@ namespace dom_distiller {
namespace {
-std::string ReplaceHtmlTemplateValues(const std::string& title,
- const std::string& content,
- const std::string& original_url) {
+std::string ReplaceHtmlTemplateValues(
+ const std::string& title,
+ const std::string& content,
+ const std::string& loading_indicator_class,
+ const std::string& original_url) {
base::StringPiece html_template =
ResourceBundle::GetSharedInstance().GetRawDataResource(
IDR_DOM_DISTILLER_VIEWER_HTML);
std::vector<std::string> substitutions;
- substitutions.push_back(title); // $1
- substitutions.push_back(kCssPath); // $2
- substitutions.push_back(title); // $3
- substitutions.push_back(content); // $4
- substitutions.push_back(original_url); // $5
+ substitutions.push_back(title); // $1
+ substitutions.push_back(kViewerCssPath); // $2
+ substitutions.push_back(kViewerJsPath); // $3
+ substitutions.push_back(title); // $4
+ substitutions.push_back(content); // $5
+ substitutions.push_back(loading_indicator_class); // $6
substitutions.push_back(
- l10n_util::GetStringUTF8(IDS_DOM_DISTILLER_VIEWER_VIEW_ORIGINAL)); // $6
+ l10n_util::GetStringUTF8(IDS_DOM_DISTILLER_VIEWER_LOADING_STRING)); // $7
+ substitutions.push_back(original_url); // $8
+ substitutions.push_back(
+ l10n_util::GetStringUTF8(IDS_DOM_DISTILLER_VIEWER_VIEW_ORIGINAL)); // $9
return ReplaceStringPlaceholders(html_template, substitutions, NULL);
}
@@ -48,15 +55,48 @@ std::string ReplaceHtmlTemplateValues(const std::string& title,
namespace viewer {
-const std::string GetUnsafeHtml(const DistilledArticleProto* article_proto) {
+const std::string GetUnsafeIncrementalDistilledPageJs(
+ const DistilledPageProto* page_proto,
+ const bool is_last_page) {
+ std::string output;
+ base::StringValue value(page_proto->html());
+ base::JSONWriter::Write(&value, &output);
+ std::string page_update("addToPage(");
+ page_update += output + ");";
+ return page_update + GetToggleLoadingIndicatorJs(
+ is_last_page);
+
+}
+
+const std::string GetToggleLoadingIndicatorJs(const bool is_last_page) {
+ if (is_last_page)
+ return "showLoadingIndicator(true);";
+ else
+ return "showLoadingIndicator(false);";
+}
+
+const std::string GetUnsafePartialArticleHtml(
+ const DistilledPageProto* page_proto) {
+ DCHECK(page_proto);
+ std::string title = net::EscapeForHTML(page_proto->title());
+ std::ostringstream unsafe_output_stream;
+ unsafe_output_stream << page_proto->html();
+ std::string unsafe_article_html = unsafe_output_stream.str();
+ std::string original_url = page_proto->url();
+ return ReplaceHtmlTemplateValues(title,
+ unsafe_article_html,
+ "visible",
+ original_url);
+}
+
+const std::string GetUnsafeArticleHtml(
+ const DistilledArticleProto* article_proto) {
DCHECK(article_proto);
std::string title;
std::string unsafe_article_html;
if (article_proto->has_title() && article_proto->pages_size() > 0 &&
article_proto->pages(0).has_html()) {
title = net::EscapeForHTML(article_proto->title());
- // TODO(shashishekhar): Add support for correcting displaying multiple pages
- // after discussing the right way to display them.
std::ostringstream unsafe_output_stream;
for (int page_num = 0; page_num < article_proto->pages_size(); ++page_num) {
unsafe_output_stream << article_proto->pages(page_num).html();
@@ -73,7 +113,10 @@ const std::string GetUnsafeHtml(const DistilledArticleProto* article_proto) {
original_url = article_proto->pages(0).url();
}
- return ReplaceHtmlTemplateValues(title, unsafe_article_html, original_url);
+ return ReplaceHtmlTemplateValues(title,
+ unsafe_article_html,
+ "hidden",
+ original_url);
}
const std::string GetErrorPageHtml() {
@@ -81,7 +124,7 @@ const std::string GetErrorPageHtml() {
IDS_DOM_DISTILLER_VIEWER_FAILED_TO_FIND_ARTICLE_TITLE);
std::string content = l10n_util::GetStringUTF8(
IDS_DOM_DISTILLER_VIEWER_FAILED_TO_FIND_ARTICLE_CONTENT);
- return ReplaceHtmlTemplateValues(title, content, "");
+ return ReplaceHtmlTemplateValues(title, content, "hidden", "");
}
const std::string GetCss() {
@@ -90,6 +133,12 @@ const std::string GetCss() {
.as_string();
}
+const std::string GetJavaScript() {
+ return ResourceBundle::GetSharedInstance()
+ .GetRawDataResource(IDR_DOM_DISTILLER_VIEWER_JS)
+ .as_string();
+}
+
scoped_ptr<ViewerHandle> CreateViewRequest(
DomDistillerServiceInterface* dom_distiller_service,
const std::string& path,

Powered by Google App Engine
This is Rietveld 408576698