| 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..d4a18d5b1b2aff150792a11f1f950429b55ea5c5 100644
|
| --- a/components/dom_distiller/content/dom_distiller_viewer_source.cc
|
| +++ b/components/dom_distiller/content/dom_distiller_viewer_source.cc
|
| @@ -80,7 +80,7 @@ class DomDistillerViewerSource::RequestViewerHandle
|
| void DidFinishLoad(content::RenderFrameHost* render_frame_host,
|
| const GURL& validated_url) override;
|
|
|
| - private:
|
| + protected:
|
| // Sends JavaScript to the attached Viewer, buffering data if the viewer isn't
|
| // ready.
|
| void SendJavaScript(const std::string& buffer) override;
|
| @@ -189,6 +189,73 @@ void DomDistillerViewerSource::RequestViewerHandle::DidFinishLoad(
|
| buffer_.clear();
|
| }
|
|
|
| +class DomDistillerViewerSource::PrintPreviewRequestViewerHandle
|
| + : public DomDistillerViewerSource::RequestViewerHandle {
|
| + public:
|
| + explicit PrintPreviewRequestViewerHandle(
|
| + content::WebContents* web_contents,
|
| + const std::string& expected_scheme,
|
| + const std::string& expected_request_path,
|
| + scoped_ptr<ContentDataCallback> callback,
|
| + DistilledPagePrefs* distilled_page_prefs);
|
| + ~PrintPreviewRequestViewerHandle() override;
|
| +
|
| + // ViewRequestDelegate implementation:
|
| + void OnArticleReady(const DistilledArticleProto* article_proto) override;
|
| + void OnArticleUpdated(ArticleDistillationUpdate article_update) override;
|
| +
|
| + private:
|
| + // DistilledPagePrefs::Observer implementation:
|
| + void OnChangeFontFamily(
|
| + DistilledPagePrefs::FontFamily new_font_family) override;
|
| + void OnChangeTheme(DistilledPagePrefs::Theme new_theme) override;
|
| +};
|
| +
|
| +DomDistillerViewerSource::
|
| + PrintPreviewRequestViewerHandle::PrintPreviewRequestViewerHandle(
|
| + content::WebContents* web_contents,
|
| + const std::string& expected_scheme,
|
| + const std::string& expected_request_path,
|
| + scoped_ptr<ContentDataCallback> callback,
|
| + DistilledPagePrefs* distilled_page_prefs)
|
| + : DomDistillerViewerSource::RequestViewerHandle(
|
| + web_contents,
|
| + expected_scheme,
|
| + expected_request_path,
|
| + callback.Pass(),
|
| + distilled_page_prefs) {
|
| +}
|
| +
|
| +DomDistillerViewerSource::
|
| + PrintPreviewRequestViewerHandle::~PrintPreviewRequestViewerHandle() {
|
| +}
|
| +
|
| +void DomDistillerViewerSource::PrintPreviewRequestViewerHandle::OnArticleReady(
|
| + const DistilledArticleProto* article_proto) {
|
| + std::string content = dom_distiller::viewer::GetUnsafePrintPreviewHtml(
|
| + article_proto,
|
| + distilled_page_prefs_->GetTheme(),
|
| + distilled_page_prefs_->GetFontFamily());
|
| + callback_->RunCallback(content);
|
| +
|
| + // No need to hold on to the ViewerHandle now that distillation is complete.
|
| + viewer_handle_.reset();
|
| +}
|
| +
|
| +void DomDistillerViewerSource::
|
| + PrintPreviewRequestViewerHandle::OnArticleUpdated(
|
| + ArticleDistillationUpdate article_update) {
|
| +}
|
| +
|
| +void DomDistillerViewerSource::PrintPreviewRequestViewerHandle::OnChangeTheme(
|
| + DistilledPagePrefs::Theme new_theme) {
|
| +}
|
| +
|
| +void DomDistillerViewerSource::
|
| + PrintPreviewRequestViewerHandle::OnChangeFontFamily(
|
| + DistilledPagePrefs::FontFamily new_font) {
|
| +}
|
| +
|
| DomDistillerViewerSource::DomDistillerViewerSource(
|
| DomDistillerServiceInterface* dom_distiller_service,
|
| const std::string& scheme,
|
| @@ -222,6 +289,10 @@ void DomDistillerViewerSource::StartDataRequest(
|
| std::string css = viewer::GetCss();
|
| callback.Run(base::RefCountedString::TakeString(&css));
|
| return;
|
| + } else if (kPrintPreviewViewerCssPath == path) {
|
| + std::string css = viewer::GetPrintPreviewCss();
|
| + callback.Run(base::RefCountedString::TakeString(&css));
|
| + return;
|
| } else if (kViewerJsPath == path) {
|
| std::string js = viewer::GetJavaScript();
|
| callback.Run(base::RefCountedString::TakeString(&js));
|
| @@ -248,15 +319,28 @@ void DomDistillerViewerSource::StartDataRequest(
|
| content::WebContents* web_contents =
|
| content::WebContents::FromRenderFrameHost(render_frame_host);
|
| 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(
|
| + RequestViewerHandle* request_viewer_handle = NULL;
|
| + std::string print_prefix = "printing/";
|
| + if (path.compare(0, print_prefix.length(), print_prefix) == 0) {
|
| + const std::string path_after_query_separator =
|
| + path.substr(print_prefix.length() + 1);
|
| + request_viewer_handle = new PrintPreviewRequestViewerHandle(
|
| web_contents, scheme_, path_after_query_separator, data_callback.Pass(),
|
| dom_distiller_service_->GetDistilledPagePrefs());
|
| +
|
| + } else {
|
| + // An empty |path| is invalid, but guard against it. If not empty, assume
|
| + // |path| starts with '?', which is stripped away.
|
| + const std::string path_after_query_separator =
|
| + path.size() > 0 ? path.substr(1) : "";
|
| + request_viewer_handle = new RequestViewerHandle(
|
| + web_contents, scheme_, path_after_query_separator, data_callback.Pass(),
|
| + dom_distiller_service_->GetDistilledPagePrefs());
|
| + }
|
| +
|
| scoped_ptr<ViewerHandle> viewer_handle = viewer::CreateViewRequest(
|
| dom_distiller_service_, path, request_viewer_handle,
|
| web_contents->GetContainerBounds().size());
|
|
|