Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / components / dom_distiller / content / dom_distiller_viewer_source.cc
index 90f3e45..c3351c2 100644 (file)
 #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