Chromium Code Reviews| 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 |
|
cjhopman
2015/05/20 02:00:02
We probably don't want any printpreview-specific s
arjunpatel
2015/05/26 21:40:44
We've been investigating how to remove the print p
|
| + : 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()); |