| Index: components/dom_distiller/content/dom_distiller_viewer_source.cc
|
| diff --git a/components/dom_distiller/content/dom_distiller_viewer_source.cc b/components/dom_distiller/content/dom_distiller_viewer_source.cc
|
| index 90f3e45413811c9b36cf916a96f137dac0f81026..c3351c2cc5383870384c95f89af27b1d1cd3c977 100644
|
| --- a/components/dom_distiller/content/dom_distiller_viewer_source.cc
|
| +++ b/components/dom_distiller/content/dom_distiller_viewer_source.cc
|
| @@ -11,46 +11,15 @@
|
| #include "base/memory/ref_counted_memory.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/message_loop/message_loop.h"
|
| -#include "base/strings/string_util.h"
|
| -#include "components/dom_distiller/core/dom_distiller_service.h"
|
| -#include "components/dom_distiller/core/proto/distilled_article.pb.h"
|
| -#include "components/dom_distiller/core/proto/distilled_page.pb.h"
|
| #include "components/dom_distiller/core/task_tracker.h"
|
| #include "components/dom_distiller/core/url_constants.h"
|
| -#include "components/dom_distiller/core/url_utils.h"
|
| +#include "components/dom_distiller/core/viewer.h"
|
| #include "content/public/browser/render_frame_host.h"
|
| #include "content/public/browser/render_view_host.h"
|
| -#include "grit/component_resources.h"
|
| -#include "grit/component_strings.h"
|
| -#include "net/base/escape.h"
|
| #include "net/url_request/url_request.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -#include "ui/base/resource/resource_bundle.h"
|
| -#include "url/gurl.h"
|
|
|
| namespace dom_distiller {
|
|
|
| -namespace {
|
| -
|
| -std::string ReplaceHtmlTemplateValues(const std::string& title,
|
| - const std::string& content,
|
| - 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(
|
| - l10n_util::GetStringUTF8(IDS_DOM_DISTILLER_VIEWER_VIEW_ORIGINAL)); // $6
|
| - return ReplaceStringPlaceholders(html_template, substitutions, NULL);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| // Handles receiving data asynchronously for a specific entry, and passing
|
| // it along to the data callback for the data source.
|
| class DomDistillerViewerSource::RequestViewerHandle
|
| @@ -61,11 +30,11 @@ class DomDistillerViewerSource::RequestViewerHandle
|
| virtual ~RequestViewerHandle();
|
|
|
| // ViewRequestDelegate implementation.
|
| - virtual void OnArticleReady(const DistilledArticleProto* article_proto)
|
| - OVERRIDE;
|
| + virtual void OnArticleReady(
|
| + const DistilledArticleProto* article_proto) OVERRIDE;
|
|
|
| - virtual void OnArticleUpdated(ArticleDistillationUpdate article_update)
|
| - OVERRIDE;
|
| + virtual void OnArticleUpdated(
|
| + ArticleDistillationUpdate article_update) OVERRIDE;
|
|
|
| void TakeViewerHandle(scoped_ptr<ViewerHandle> viewer_handle);
|
|
|
| @@ -80,38 +49,15 @@ class DomDistillerViewerSource::RequestViewerHandle
|
|
|
| DomDistillerViewerSource::RequestViewerHandle::RequestViewerHandle(
|
| const content::URLDataSource::GotDataCallback& callback)
|
| - : callback_(callback) {}
|
| + : callback_(callback) {
|
| +}
|
|
|
| -DomDistillerViewerSource::RequestViewerHandle::~RequestViewerHandle() {}
|
| +DomDistillerViewerSource::RequestViewerHandle::~RequestViewerHandle() {
|
| +}
|
|
|
| void DomDistillerViewerSource::RequestViewerHandle::OnArticleReady(
|
| 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();
|
| - }
|
| - unsafe_article_html = unsafe_output_stream.str();
|
| - } else {
|
| - title = l10n_util::GetStringUTF8(IDS_DOM_DISTILLER_VIEWER_NO_DATA_TITLE);
|
| - unsafe_article_html =
|
| - l10n_util::GetStringUTF8(IDS_DOM_DISTILLER_VIEWER_NO_DATA_CONTENT);
|
| - }
|
| -
|
| - std::string original_url;
|
| - if (article_proto->pages_size() > 0 && article_proto->pages(0).has_url()) {
|
| - original_url = article_proto->pages(0).url();
|
| - }
|
| -
|
| - std::string unsafe_page_html =
|
| - ReplaceHtmlTemplateValues(title, unsafe_article_html, original_url);
|
| + std::string unsafe_page_html = viewer::GetUnsafeHtml(article_proto);
|
| callback_.Run(base::RefCountedString::TakeString(&unsafe_page_html));
|
| base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
|
| }
|
| @@ -129,9 +75,11 @@ void DomDistillerViewerSource::RequestViewerHandle::TakeViewerHandle(
|
| DomDistillerViewerSource::DomDistillerViewerSource(
|
| DomDistillerServiceInterface* dom_distiller_service,
|
| const std::string& scheme)
|
| - : scheme_(scheme), dom_distiller_service_(dom_distiller_service) {}
|
| + : scheme_(scheme), dom_distiller_service_(dom_distiller_service) {
|
| +}
|
|
|
| -DomDistillerViewerSource::~DomDistillerViewerSource() {}
|
| +DomDistillerViewerSource::~DomDistillerViewerSource() {
|
| +}
|
|
|
| std::string DomDistillerViewerSource::GetSource() const {
|
| return scheme_ + "://";
|
| @@ -151,17 +99,15 @@ void DomDistillerViewerSource::StartDataRequest(
|
| CHECK_EQ(0, render_view_host->GetEnabledBindings());
|
|
|
| if (kCssPath == path) {
|
| - std::string css = ResourceBundle::GetSharedInstance()
|
| - .GetRawDataResource(IDR_DISTILLER_CSS)
|
| - .as_string();
|
| + std::string css = viewer::GetCss();
|
| callback.Run(base::RefCountedString::TakeString(&css));
|
| return;
|
| }
|
|
|
| RequestViewerHandle* request_viewer_handle =
|
| new RequestViewerHandle(callback);
|
| - scoped_ptr<ViewerHandle> viewer_handle =
|
| - CreateViewRequest(path, request_viewer_handle);
|
| + scoped_ptr<ViewerHandle> viewer_handle = viewer::CreateViewRequest(
|
| + dom_distiller_service_, path, request_viewer_handle);
|
|
|
| if (viewer_handle) {
|
| // The service returned a |ViewerHandle| and guarantees it will call
|
| @@ -174,12 +120,8 @@ void DomDistillerViewerSource::StartDataRequest(
|
| // |RequestViewerHandle| will never be called, so clean up now.
|
| delete request_viewer_handle;
|
|
|
| - std::string title = l10n_util::GetStringUTF8(
|
| - IDS_DOM_DISTILLER_VIEWER_FAILED_TO_FIND_ARTICLE_TITLE);
|
| - std::string content = l10n_util::GetStringUTF8(
|
| - IDS_DOM_DISTILLER_VIEWER_FAILED_TO_FIND_ARTICLE_CONTENT);
|
| - std::string html = ReplaceHtmlTemplateValues(title, content, "");
|
| - callback.Run(base::RefCountedString::TakeString(&html));
|
| + std::string error_page_html = viewer::GetErrorPageHtml();
|
| + callback.Run(base::RefCountedString::TakeString(&error_page_html));
|
| }
|
| };
|
|
|
| @@ -198,42 +140,12 @@ bool DomDistillerViewerSource::ShouldServiceRequest(
|
| // TODO(nyquist): Start tracking requests using this method.
|
| void DomDistillerViewerSource::WillServiceRequest(
|
| const net::URLRequest* request,
|
| - std::string* path) const {}
|
| + std::string* path) const {
|
| +}
|
|
|
| std::string DomDistillerViewerSource::GetContentSecurityPolicyObjectSrc()
|
| const {
|
| return "object-src 'none'; style-src 'self';";
|
| }
|
|
|
| -scoped_ptr<ViewerHandle> DomDistillerViewerSource::CreateViewRequest(
|
| - const std::string& path,
|
| - ViewRequestDelegate* view_request_delegate) {
|
| - std::string entry_id =
|
| - url_utils::GetValueForKeyInUrlPathQuery(path, kEntryIdKey);
|
| - bool has_valid_entry_id = !entry_id.empty();
|
| - entry_id = StringToUpperASCII(entry_id);
|
| -
|
| - std::string requested_url_str =
|
| - url_utils::GetValueForKeyInUrlPathQuery(path, kUrlKey);
|
| - GURL requested_url(requested_url_str);
|
| - bool has_valid_url = url_utils::IsUrlDistillable(requested_url);
|
| -
|
| - if (has_valid_entry_id && has_valid_url) {
|
| - // It is invalid to specify a query param for both |kEntryIdKey| and
|
| - // |kUrlKey|.
|
| - return scoped_ptr<ViewerHandle>();
|
| - }
|
| -
|
| - if (has_valid_entry_id) {
|
| - return dom_distiller_service_->ViewEntry(view_request_delegate, entry_id)
|
| - .Pass();
|
| - } else if (has_valid_url) {
|
| - return dom_distiller_service_->ViewUrl(view_request_delegate, requested_url)
|
| - .Pass();
|
| - }
|
| -
|
| - // It is invalid to not specify a query param for |kEntryIdKey| or |kUrlKey|.
|
| - return scoped_ptr<ViewerHandle>();
|
| -}
|
| -
|
| } // namespace dom_distiller
|
|
|