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 |