diff options
Diffstat (limited to 'chromium/chrome/browser/printing/print_preview_dialog_controller.cc')
-rw-r--r-- | chromium/chrome/browser/printing/print_preview_dialog_controller.cc | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/chromium/chrome/browser/printing/print_preview_dialog_controller.cc b/chromium/chrome/browser/printing/print_preview_dialog_controller.cc index 2283ce8c85e..1695a0d9fc6 100644 --- a/chromium/chrome/browser/printing/print_preview_dialog_controller.cc +++ b/chromium/chrome/browser/printing/print_preview_dialog_controller.cc @@ -40,6 +40,7 @@ #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_delegate.h" +#include "content/public/browser/web_contents_observer.h" #include "ui/base/l10n/l10n_util.h" #include "ui/web_dialogs/web_dialog_delegate.h" @@ -51,10 +52,13 @@ using content::NavigationController; using content::WebContents; using content::WebUIMessageHandler; +namespace printing { + namespace { // A ui::WebDialogDelegate that specifies the print preview dialog appearance. -class PrintPreviewDialogDelegate : public ui::WebDialogDelegate { +class PrintPreviewDialogDelegate : public ui::WebDialogDelegate, + public content::WebContentsObserver { public: explicit PrintPreviewDialogDelegate(WebContents* initiator); ~PrintPreviewDialogDelegate() override; @@ -72,14 +76,13 @@ class PrintPreviewDialogDelegate : public ui::WebDialogDelegate { bool ShouldShowDialogTitle() const override; private: - WebContents* initiator_; + WebContents* initiator() const { return web_contents(); } DISALLOW_COPY_AND_ASSIGN(PrintPreviewDialogDelegate); }; PrintPreviewDialogDelegate::PrintPreviewDialogDelegate(WebContents* initiator) - : initiator_(initiator) { -} + : content::WebContentsObserver(initiator) {} PrintPreviewDialogDelegate::~PrintPreviewDialogDelegate() { } @@ -116,7 +119,10 @@ void PrintPreviewDialogDelegate::GetDialogSize(gfx::Size* size) const { web_modal::WebContentsModalDialogHost* host = nullptr; content::WebContents* outermost_web_contents = - guest_view::GuestViewBase::GetTopLevelWebContents(initiator_); + guest_view::GuestViewBase::GetTopLevelWebContents(initiator()); + if (!outermost_web_contents) + return; + Browser* browser = chrome::FindBrowserWithWebContents(outermost_web_contents); if (browser) host = browser->window()->GetWebContentsModalDialogHost(); @@ -141,6 +147,12 @@ std::string PrintPreviewDialogDelegate::GetDialogArgs() const { void PrintPreviewDialogDelegate::OnDialogClosed( const std::string& /* json_retval */) { + if (!initiator()) + return; + + auto* print_view_manager = PrintViewManager::FromWebContents(initiator()); + if (print_view_manager) + print_view_manager->PrintPreviewAlmostDone(); } void PrintPreviewDialogDelegate::OnCloseContents(WebContents* /* source */, @@ -154,8 +166,6 @@ bool PrintPreviewDialogDelegate::ShouldShowDialogTitle() const { } // namespace -namespace printing { - PrintPreviewDialogController::PrintPreviewDialogController() : waiting_for_new_preview_page_(false), is_creating_print_preview_dialog_(false) { |