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

Unified Diff: components/dom_distiller/content/dom_distiller_viewer_source.cc

Issue 1130703003: Show template before distiller finishes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ios-superclass
Patch Set: Fix flaky test Created 5 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/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 f1ed1a8932e8c4bba3a7ebb1c13d6338ed3de2e3..b6b611cac83ed92551be0e8c9c0ebcb62c2d36b7 100644
--- a/components/dom_distiller/content/dom_distiller_viewer_source.cc
+++ b/components/dom_distiller/content/dom_distiller_viewer_source.cc
@@ -20,6 +20,7 @@
#include "components/dom_distiller/core/feedback_reporter.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/navigation_details.h"
#include "content/public/browser/navigation_entry.h"
@@ -28,35 +29,13 @@
#include "content/public/browser/user_metrics.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_observer.h"
+#include "grit/components_strings.h"
#include "net/base/url_util.h"
#include "net/url_request/url_request.h"
+#include "ui/base/l10n/l10n_util.h"
namespace dom_distiller {
-namespace {
-
-class ContentDataCallback : public DistillerDataCallback {
- public:
- ContentDataCallback(const content::URLDataSource::GotDataCallback& callback);
- // Runs the callback.
- void RunCallback(std::string& data) override;
-
- private:
- // The callback that actually gets run.
- content::URLDataSource::GotDataCallback callback_;
-};
-
-ContentDataCallback::ContentDataCallback(
- const content::URLDataSource::GotDataCallback& callback) {
- callback_ = callback;
-}
-
-void ContentDataCallback::RunCallback(std::string& data) {
- callback_.Run(base::RefCountedString::TakeString(&data));
-}
-
-} // namespace
-
// Handles receiving data asynchronously for a specific entry, and passing
// it along to the data callback for the data source. Lifetime matches that of
// the current main frame's page in the Viewer instance.
@@ -67,7 +46,6 @@ class DomDistillerViewerSource::RequestViewerHandle
RequestViewerHandle(content::WebContents* web_contents,
const std::string& expected_scheme,
const std::string& expected_request_path,
- scoped_ptr<ContentDataCallback> callback,
DistilledPagePrefs* distilled_page_prefs);
~RequestViewerHandle() override;
@@ -109,9 +87,8 @@ DomDistillerViewerSource::RequestViewerHandle::RequestViewerHandle(
content::WebContents* web_contents,
const std::string& expected_scheme,
const std::string& expected_request_path,
- scoped_ptr<ContentDataCallback> callback,
DistilledPagePrefs* distilled_page_prefs)
- : DomDistillerRequestViewBase(callback.Pass(), distilled_page_prefs),
+ : DomDistillerRequestViewBase(distilled_page_prefs),
expected_scheme_(expected_scheme),
expected_request_path_(expected_request_path),
waiting_for_page_ready_(true) {
@@ -173,7 +150,12 @@ void DomDistillerViewerSource::RequestViewerHandle::DidFinishLoad(
if (IsErrorPage()) {
waiting_for_page_ready_ = false;
SendJavaScript(viewer::GetErrorPageJs());
+ std::string title(l10n_util::GetStringUTF8(
+ IDS_DOM_DISTILLER_VIEWER_FAILED_TO_FIND_ARTICLE_CONTENT));
+ SendJavaScript(viewer::GetSetTitleJs(title));
+ SendJavaScript(viewer::GetSetTextDirectionJs(std::string("auto")));
SendJavaScript(viewer::GetShowFeedbackFormJs());
+
Cancel(); // This will cause the object to clean itself up.
return;
}
@@ -250,17 +232,21 @@ void DomDistillerViewerSource::StartDataRequest(
DCHECK(web_contents);
// An empty |path| is invalid, but guard against it. If not empty, assume
// |path| starts with '?', which is stripped away.
- scoped_ptr<ContentDataCallback> data_callback(
- new ContentDataCallback(callback));
const std::string path_after_query_separator =
path.size() > 0 ? path.substr(1) : "";
- RequestViewerHandle* request_viewer_handle = new RequestViewerHandle(
- web_contents, scheme_, path_after_query_separator, data_callback.Pass(),
- dom_distiller_service_->GetDistilledPagePrefs());
+ RequestViewerHandle* request_viewer_handle =
+ new RequestViewerHandle(web_contents, scheme_, path_after_query_separator,
+ dom_distiller_service_->GetDistilledPagePrefs());
scoped_ptr<ViewerHandle> viewer_handle = viewer::CreateViewRequest(
dom_distiller_service_, path, request_viewer_handle,
web_contents->GetContainerBounds().size());
+ GURL current_url = web_contents->GetLastCommittedURL();
+ std::string unsafe_page_html = viewer::GetUnsafeArticleTemplateHtml(
+ url_utils::GetOriginalUrlFromDistillerUrl(current_url).spec(),
+ dom_distiller_service_->GetDistilledPagePrefs()->GetTheme(),
+ dom_distiller_service_->GetDistilledPagePrefs()->GetFontFamily());
+
if (viewer_handle) {
// The service returned a |ViewerHandle| and guarantees it will call
// the |RequestViewerHandle|, so passing ownership to it, to ensure the
@@ -270,6 +256,9 @@ void DomDistillerViewerSource::StartDataRequest(
} else {
request_viewer_handle->FlagAsErrorPage();
}
+
+ // Place template on the page.
+ callback.Run(base::RefCountedString::TakeString(&unsafe_page_html));
};
std::string DomDistillerViewerSource::GetMimeType(
« no previous file with comments | « components/dom_distiller/content/distiller_page_web_contents_browsertest.cc ('k') | components/dom_distiller/core/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698