Chromium Code Reviews| Index: chrome/browser/printing/print_preview_dialog_controller.cc |
| diff --git a/chrome/browser/printing/print_preview_dialog_controller.cc b/chrome/browser/printing/print_preview_dialog_controller.cc |
| index 780928be53474d99790f012a18a42736c78587d5..1c19971cac4deb7d51c32fbaddc6ee2793a326f2 100644 |
| --- a/chrome/browser/printing/print_preview_dialog_controller.cc |
| +++ b/chrome/browser/printing/print_preview_dialog_controller.cc |
| @@ -11,6 +11,7 @@ |
| #include <vector> |
| #include "base/auto_reset.h" |
| +#include "base/command_line.h" |
| #include "base/macros.h" |
| #include "base/path_service.h" |
| #include "base/strings/utf_string_conversions.h" |
| @@ -21,12 +22,17 @@ |
| #include "chrome/browser/printing/print_view_manager.h" |
| #include "chrome/browser/task_manager/web_contents_tags.h" |
| #include "chrome/browser/ui/browser.h" |
| +#include "chrome/browser/ui/browser_commands.h" |
| #include "chrome/browser/ui/browser_finder.h" |
| +#include "chrome/browser/ui/browser_list.h" |
| +#include "chrome/browser/ui/browser_navigator.h" |
| #include "chrome/browser/ui/browser_window.h" |
| +#include "chrome/browser/ui/tab_contents/core_tab_helper.h" |
| #include "chrome/browser/ui/webui/chrome_web_contents_handler.h" |
| #include "chrome/browser/ui/webui/constrained_web_dialog_ui.h" |
| #include "chrome/browser/ui/webui/print_preview/print_preview_ui.h" |
| #include "chrome/common/chrome_paths.h" |
| +#include "chrome/common/chrome_switches.h" |
| #include "chrome/common/url_constants.h" |
| #include "components/guest_view/browser/guest_view_base.h" |
| #include "components/web_modal/web_contents_modal_dialog_host.h" |
| @@ -343,6 +349,14 @@ void PrintPreviewDialogController::OnNavEntryCommitted( |
| return; |
| } |
| } |
| +#if BUILDFLAG(ENABLE_PRINT_BROWSER) |
| + // If in PrintBrowser mode, navigation away from the print UI is fine |
| + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
| + bool print_browser_enabled = |
| + command_line->HasSwitch(switches::kEnablePrintBrowser); |
| + if (print_browser_enabled) |
| + return; |
| +#endif |
| NOTREACHED(); |
| return; |
| } |
| @@ -366,13 +380,37 @@ WebContents* PrintPreviewDialogController::CreatePrintPreviewDialog( |
| WebContents* initiator) { |
| base::AutoReset<bool> auto_reset(&is_creating_print_preview_dialog_, true); |
| - // The dialog delegates are deleted when the dialog is closed. |
| - ConstrainedWebDialogDelegate* web_dialog_delegate = |
| - ShowConstrainedWebDialog(initiator->GetBrowserContext(), |
| - new PrintPreviewDialogDelegate(initiator), |
| - initiator); |
| + WebContents* preview_dialog; |
| - WebContents* preview_dialog = web_dialog_delegate->GetWebContents(); |
| +#if BUILDFLAG(ENABLE_PRINT_BROWSER) |
| + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
| + bool print_browser_enabled = |
| + command_line->HasSwitch(switches::kEnablePrintBrowser); |
| + if (!print_browser_enabled) { |
| +#endif |
| + // The dialog delegates are deleted when the dialog is closed. |
| + ConstrainedWebDialogDelegate* web_dialog_delegate = |
| + ShowConstrainedWebDialog(initiator->GetBrowserContext(), |
| + new PrintPreviewDialogDelegate(initiator), |
| + initiator); |
| + |
| + preview_dialog = web_dialog_delegate->GetWebContents(); |
| +#if BUILDFLAG(ENABLE_PRINT_BROWSER) |
| + } else { |
| + // If in PrintBrowser mode, swap |initiator| with a newly-created |
| + // |preview_dialog| and navigate |preview_dialog| to the print UI |
| + Browser* browser = |
| + chrome::FindBrowserWithWindow(initiator->GetTopLevelNativeWindow()); |
| + preview_dialog = |
| + WebContents::Create(WebContents::CreateParams(browser->profile())); |
| + CoreTabHelper::FromWebContents(initiator)->delegate()->SwapTabContents( |
|
rbpotter
2016/12/16 20:05:28
I think you need to ensure the initiator web conte
|
| + initiator, preview_dialog, false, false); |
| + browser->OpenURL(content::OpenURLParams( |
| + GURL(chrome::kChromeUIPrintURL), content::Referrer(), |
| + WindowOpenDisposition::CURRENT_TAB, ui::PAGE_TRANSITION_AUTO_TOPLEVEL, |
| + false)); |
| + } |
| +#endif |
| // Clear the zoom level for the print preview dialog so it isn't affected by |
| // the default zoom level. This also controls the zoom level of the OOP PDF |