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

Unified Diff: chrome/browser/ui/webui/print_preview/print_preview_distiller.cc

Issue 1294663003: Fix various issues from r343263. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 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: chrome/browser/ui/webui/print_preview/print_preview_distiller.cc
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_distiller.cc b/chrome/browser/ui/webui/print_preview/print_preview_distiller.cc
index b71b6736dde1ef75ae84b18c8c795b3ebd490758..852caf8fffe0db357b05175e85f6192d3628b440 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_distiller.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_distiller.cc
@@ -6,7 +6,6 @@
#include <string>
-#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/dom_distiller/tab_utils.h"
#include "chrome/browser/printing/print_preview_dialog_controller.h"
@@ -30,14 +29,30 @@ using content::RenderViewHost;
using content::SessionStorageNamespace;
using content::WebContents;
+namespace {
+
+WebContents* CreateWebContents(
+ WebContents* source_web_contents) {
+ // TODO(ajwong): Remove the temporary map once prerendering is aware of
+ // multiple session storage namespaces per tab.
+ content::SessionStorageNamespaceMap session_storage_namespace_map;
+ session_storage_namespace_map[std::string()] =
+ source_web_contents->GetController().GetDefaultSessionStorageNamespace();
+ return WebContents::CreateWithSessionStorage(
+ WebContents::CreateParams(source_web_contents->GetBrowserContext()),
+ session_storage_namespace_map);
+}
+
+} // namespace
+
class PrintPreviewDistiller::WebContentsDelegateImpl
: public content::WebContentsDelegate,
public content::NotificationObserver,
public content::WebContentsObserver {
public:
- explicit WebContentsDelegateImpl(WebContents* web_contents,
Lei Zhang 2015/08/14 05:44:35 nit: not explicit
- scoped_ptr<base::DictionaryValue> settings,
- const base::Closure on_failed_callback)
+ WebContentsDelegateImpl(WebContents* web_contents,
+ scoped_ptr<base::DictionaryValue> settings,
+ const base::Closure& on_failed_callback)
: content::WebContentsObserver(web_contents),
settings_(settings.Pass()),
on_failed_callback_(on_failed_callback) {
@@ -62,7 +77,7 @@ class PrintPreviewDistiller::WebContentsDelegateImpl
return nullptr;
}
- void CloseContents(content::WebContents* contents) override {
+ void CloseContents(WebContents* contents) override {
on_failed_callback_.Run();
}
@@ -119,7 +134,7 @@ class PrintPreviewDistiller::WebContentsDelegateImpl
content::RenderFrameHost* render_frame_host) override {
// When a new RenderFrame is created for a distilled rendering
// WebContents, tell the new RenderFrame it's being used for
- // prerendering before any navigations occur. Note that this is
+ // prerendering before any navigations occurs. Note that this is
PhistucK 2015/08/14 06:34:03 I think you introduced a grammar error here - "nav
// always triggered before the first navigation, so there's no
// need to send the message just after the WebContents is created.
render_frame_host->Send(new PrerenderMsg_SetIsPrerendering(
@@ -132,7 +147,7 @@ class PrintPreviewDistiller::WebContentsDelegateImpl
// contents are added to the page.
dom_distiller::RunIsolatedJavaScript(
web_contents()->GetMainFrame(),
- "navigate_on_initial_content_load = true;");
+ "didNavigateOnInitialContentLoad()");
Lei Zhang 2015/08/14 05:44:35 I haven't tested this to make sure it works.
csaavedra 2015/08/14 08:21:37 This won't work, as this JS might run before the d
}
void DidNavigateMainFrame(
@@ -195,32 +210,36 @@ class PrintPreviewDistiller::WebContentsDelegateImpl
scoped_ptr<base::DictionaryValue> settings_;
content::NotificationRegistrar notification_registrar_;
- // The callback called when the preview failed.
- base::Closure on_failed_callback_;
Lei Zhang 2015/08/14 05:44:35 const since it never changes
+ // The callback called when the distilling failed.
+ const base::Closure on_failed_callback_;
};
PrintPreviewDistiller::PrintPreviewDistiller(
WebContents* source_web_contents,
- const base::Closure on_failed_callback,
+ const base::Closure& on_failed_callback,
scoped_ptr<base::DictionaryValue> settings) {
- content::SessionStorageNamespace* session_storage_namespace =
Lei Zhang 2015/08/14 05:44:35 Since this is derived from |source_web_content|, y
- source_web_contents->GetController().GetDefaultSessionStorageNamespace();
- CreateDestinationWebContents(session_storage_namespace, source_web_contents,
- settings.Pass(), on_failed_callback);
+ CreateDestinationWebContents(source_web_contents,
+ settings.Pass(),
+ on_failed_callback);
+ DistillAndView(source_web_contents, web_contents_.get());
+}
+
+PrintPreviewDistiller::~PrintPreviewDistiller() {
+ printing::PrintPreviewDialogController* dialog_controller =
+ printing::PrintPreviewDialogController::GetInstance();
+ if (!dialog_controller)
+ return;
- DCHECK(web_contents_);
Lei Zhang 2015/08/14 05:44:35 DistillAndView() will DCHECK its arguments, so thi
- ::DistillAndView(source_web_contents, web_contents_.get());
+ dialog_controller->RemoveProxyDialogForWebContents(web_contents_.get());
}
void PrintPreviewDistiller::CreateDestinationWebContents(
- SessionStorageNamespace* session_storage_namespace,
WebContents* source_web_contents,
scoped_ptr<base::DictionaryValue> settings,
- const base::Closure on_failed_callback) {
+ const base::Closure& on_failed_callback) {
DCHECK(!web_contents_);
- web_contents_.reset(
- CreateWebContents(session_storage_namespace, source_web_contents));
+ web_contents_.reset(CreateWebContents(source_web_contents));
printing::PrintPreviewMessageHandler::CreateForWebContents(
web_contents_.get());
@@ -239,27 +258,3 @@ void PrintPreviewDistiller::CreateDestinationWebContents(
dialog_controller->AddProxyDialogForWebContents(web_contents_.get(),
source_web_contents);
}
-
-PrintPreviewDistiller::~PrintPreviewDistiller() {
Lei Zhang 2015/08/14 05:44:35 Please put the dtor right below the ctor, in the s
- if (web_contents_) {
- printing::PrintPreviewDialogController* dialog_controller =
- printing::PrintPreviewDialogController::GetInstance();
- if (!dialog_controller)
- return;
-
- dialog_controller->RemoveProxyDialogForWebContents(web_contents_.get());
- }
-}
-
-WebContents* PrintPreviewDistiller::CreateWebContents(
Lei Zhang 2015/08/14 05:44:35 This is a standalone function, so it might as well
- SessionStorageNamespace* session_storage_namespace,
- WebContents* source_web_contents) {
- // TODO(ajwong): Remove the temporary map once prerendering is aware of
- // multiple session storage namespaces per tab.
- content::SessionStorageNamespaceMap session_storage_namespace_map;
- Profile* profile =
- Profile::FromBrowserContext(source_web_contents->GetBrowserContext());
- session_storage_namespace_map[std::string()] = session_storage_namespace;
- return WebContents::CreateWithSessionStorage(
- WebContents::CreateParams(profile), session_storage_namespace_map);
-}

Powered by Google App Engine
This is Rietveld 408576698