Index: chrome/browser/dom_distiller/tab_utils.cc |
diff --git a/chrome/browser/dom_distiller/tab_utils.cc b/chrome/browser/dom_distiller/tab_utils.cc |
index 94fb24e04b7f223fceb42651c0bca22b267603eb..06e0ee2a1c4b95850e91a2e0f78422258c6856fe 100644 |
--- a/chrome/browser/dom_distiller/tab_utils.cc |
+++ b/chrome/browser/dom_distiller/tab_utils.cc |
@@ -110,23 +110,20 @@ void StartNavigationToDistillerViewer(content::WebContents* web_contents, |
web_contents->GetController().LoadURLWithParams(params); |
} |
-void MaybeStartDistillation(content::WebContents* web_contents) { |
- const GURL& last_committed_url = web_contents->GetLastCommittedURL(); |
- if (!dom_distiller::url_utils::IsUrlDistillable(last_committed_url)) { |
- delete web_contents; |
+void MaybeStartDistillation( |
+ scoped_ptr<SourcePageHandleWebContents> source_page_handle) { |
+ const GURL& last_committed_url = |
+ source_page_handle->web_contents()->GetLastCommittedURL(); |
+ if (!dom_distiller::url_utils::IsUrlDistillable(last_committed_url)) |
return; |
- } |
- // Start distillation using |web_contents|, and ensure ViewerHandle stays |
- // around until the viewer requests distillation. |
+ // Start distillation using |source_page_handle|, and ensure ViewerHandle |
+ // stays around until the viewer requests distillation. |
SelfDeletingRequestDelegate* view_request_delegate = |
- new SelfDeletingRequestDelegate(web_contents); |
- scoped_ptr<content::WebContents> old_web_contents_sptr(web_contents); |
- scoped_ptr<SourcePageHandleWebContents> source_page_handle( |
- new SourcePageHandleWebContents(old_web_contents_sptr.Pass())); |
+ new SelfDeletingRequestDelegate(source_page_handle->web_contents()); |
DomDistillerService* dom_distiller_service = |
DomDistillerServiceFactory::GetForBrowserContext( |
- web_contents->GetBrowserContext()); |
+ source_page_handle->web_contents()->GetBrowserContext()); |
scoped_ptr<DistillerPage> distiller_page = |
dom_distiller_service->CreateDefaultDistillerPageWithHandle( |
source_page_handle.Pass()).Pass(); |
@@ -161,5 +158,21 @@ void DistillCurrentPageAndView(content::WebContents* old_web_contents) { |
CoreTabHelper::FromWebContents(old_web_contents)->delegate()->SwapTabContents( |
old_web_contents, new_web_contents, false, false); |
- MaybeStartDistillation(old_web_contents); |
+ scoped_ptr<SourcePageHandleWebContents> source_page_handle( |
+ new SourcePageHandleWebContents(old_web_contents, true)); |
+ |
+ MaybeStartDistillation(source_page_handle.Pass()); |
+} |
+ |
+void DistillAndView(content::WebContents* source_web_contents, |
+ content::WebContents* destination_web_contents) { |
+ DCHECK(source_web_contents); |
+ DCHECK(destination_web_contents); |
+ |
+ scoped_ptr<SourcePageHandleWebContents> source_page_handle( |
+ new SourcePageHandleWebContents(source_web_contents, false)); |
+ |
+ MaybeStartDistillation(source_page_handle.Pass()); |
+ StartNavigationToDistillerViewer(destination_web_contents, |
+ source_web_contents->GetLastCommittedURL()); |
} |