diff --git chrome/browser/download/download_prefs.cc chrome/browser/download/download_prefs.cc
index 00d1c0fa2b00..45dcadc79fb2 100644
--- chrome/browser/download/download_prefs.cc
+++ chrome/browser/download/download_prefs.cc
@@ -22,6 +22,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
+#include "cef/libcef/features/features.h"
 #include "chrome/browser/download/chrome_download_manager_delegate.h"
 #include "chrome/browser/download/download_core_service_factory.h"
 #include "chrome/browser/download/download_core_service_impl.h"
@@ -53,6 +54,10 @@
 #include "chrome/browser/ui/pdf/adobe_reader_info_win.h"
 #endif
 
+#if BUILDFLAG(ENABLE_CEF)
+#include "cef/libcef/browser/browser_context.h"
+#endif
+
 using content::BrowserContext;
 using content::BrowserThread;
 using content::DownloadManager;
@@ -309,7 +314,11 @@ DownloadPrefs* DownloadPrefs::FromDownloadManager(
 // static
 DownloadPrefs* DownloadPrefs::FromBrowserContext(
     content::BrowserContext* context) {
+#if !BUILDFLAG(ENABLE_CEF)
   return FromDownloadManager(BrowserContext::GetDownloadManager(context));
+#else
+  return CefBrowserContext::GetForContext(context)->GetDownloadPrefs();
+#endif
 }
 
 bool DownloadPrefs::IsFromTrustedSource(const download::DownloadItem& item) {
diff --git chrome/browser/printing/print_preview_dialog_controller.cc chrome/browser/printing/print_preview_dialog_controller.cc
index 84818167bce1..cdbd3f7f6f27 100644
--- chrome/browser/printing/print_preview_dialog_controller.cc
+++ chrome/browser/printing/print_preview_dialog_controller.cc
@@ -16,6 +16,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "build/branding_buildflags.h"
 #include "build/build_config.h"
+#include "cef/libcef/features/features.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/extensions/chrome_extension_web_contents_observer.h"
 #include "chrome/browser/printing/print_view_manager.h"
@@ -451,8 +452,11 @@ WebContents* PrintPreviewDialogController::CreatePrintPreviewDialog(
   content::HostZoomMap::Get(preview_dialog->GetSiteInstance())
       ->SetZoomLevelForHostAndScheme(print_url.scheme(), print_url.host(), 0);
   PrintViewManager::CreateForWebContents(preview_dialog);
+
+#if !BUILDFLAG(ENABLE_CEF)
   extensions::ChromeExtensionWebContentsObserver::CreateForWebContents(
       preview_dialog);
+#endif
 
   // Add an entry to the map.
   preview_dialog_map_[preview_dialog] = initiator;
diff --git chrome/browser/resources/print_preview/ui/destination_dialog.html chrome/browser/resources/print_preview/ui/destination_dialog.html
index 56a6a8d8ee67..5fecf7ad1780 100644
--- chrome/browser/resources/print_preview/ui/destination_dialog.html
+++ chrome/browser/resources/print_preview/ui/destination_dialog.html
@@ -141,9 +141,7 @@
     </print-preview-provisional-destination-resolver>
   </div>
   <div slot="button-container">
-    <cr-button on-click="onOpenSettingsPrintPage_">
-      $i18n{manage}
-    </cr-button>
+    <div></div>
     <cr-button class="cancel-button" on-click="onCancelButtonClick_">
       $i18n{cancel}
     </cr-button>
diff --git chrome/browser/resources/print_preview/ui/destination_select.html chrome/browser/resources/print_preview/ui/destination_select.html
index c93947a7634c..c60cada63ef8 100644
--- chrome/browser/resources/print_preview/ui/destination_select.html
+++ chrome/browser/resources/print_preview/ui/destination_select.html
@@ -31,10 +31,6 @@
           hidden$="[[pdfPrinterDisabled]]">
     $i18n{printToPDF}
   </option>
-  <option value="[[getGoogleDriveDestinationKey_(activeUser)]]"
-      hidden$="[[!driveDestinationReady]]">
-    $i18n{printToGoogleDrive}
-  </option>
   <option value="noDestinations"
           hidden$="[[!noDestinations]]" selected$="[[noDestinations]]">
     $i18n{noDestinationsMessage}
diff --git chrome/browser/ui/webui/constrained_web_dialog_ui.cc chrome/browser/ui/webui/constrained_web_dialog_ui.cc
index b59728f623e3..6fd443962836 100644
--- chrome/browser/ui/webui/constrained_web_dialog_ui.cc
+++ chrome/browser/ui/webui/constrained_web_dialog_ui.cc
@@ -26,6 +26,8 @@
 #include "chrome/browser/extensions/tab_helper.h"
 #endif
 
+#include "cef/libcef/features/features.h"
+
 using content::RenderFrameHost;
 using content::WebContents;
 using content::WebUIMessageHandler;
@@ -55,8 +57,10 @@ class ConstrainedWebDialogDelegateUserData
 ConstrainedWebDialogUI::ConstrainedWebDialogUI(content::WebUI* web_ui)
     : WebUIController(web_ui) {
 #if BUILDFLAG(ENABLE_EXTENSIONS)
+#if !BUILDFLAG(ENABLE_CEF)
   extensions::TabHelper::CreateForWebContents(web_ui->GetWebContents());
 #endif
+#endif
 }
 
 ConstrainedWebDialogUI::~ConstrainedWebDialogUI() {
diff --git chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc
index 394ce8f66012..fe0e14e27fd1 100644
--- chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc
+++ chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc
@@ -178,8 +178,10 @@ PdfPrinterHandler::PdfPrinterHandler(
       sticky_settings_(sticky_settings) {}
 
 PdfPrinterHandler::~PdfPrinterHandler() {
+#if !BUILDFLAG(ENABLE_CEF)
   if (select_file_dialog_.get())
     select_file_dialog_->ListenerDestroyed();
+#endif
 }
 
 void PdfPrinterHandler::Reset() {
@@ -226,12 +228,14 @@ void PdfPrinterHandler::StartPrint(
     return;
   }
 
+#if !BUILDFLAG(ENABLE_CEF)
   if (select_file_dialog_ &&
       select_file_dialog_->IsRunning(
           platform_util::GetTopLevel(preview_web_contents_->GetNativeView()))) {
     // Dialog is already showing.
     return;
   }
+#endif
 
   DCHECK(!print_callback_);
   print_callback_ = std::move(callback);
@@ -370,7 +374,11 @@ void PdfPrinterHandler::SelectFile(const base::FilePath& default_filename,
   // If the directory is empty there is no reason to create it or use the
   // default location.
   if (path.empty()) {
+#if !BUILDFLAG(ENABLE_CEF)
     OnDirectorySelected(default_filename, path);
+#else
+    ShowCefSaveAsDialog(initiator, default_filename, path);
+#endif
     return;
   }
 
@@ -380,8 +388,14 @@ void PdfPrinterHandler::SelectFile(const base::FilePath& default_filename,
   base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&SelectSaveDirectory, path, default_path),
+#if !BUILDFLAG(ENABLE_CEF)
       base::BindOnce(&PdfPrinterHandler::OnDirectorySelected,
                      weak_ptr_factory_.GetWeakPtr(), default_filename));
+#else
+      base::BindOnce(&PdfPrinterHandler::ShowCefSaveAsDialog,
+                     weak_ptr_factory_.GetWeakPtr(), initiator,
+                     default_filename));
+#endif
 }
 
 void PdfPrinterHandler::PostPrintToPdfTask() {
@@ -397,6 +411,7 @@ void PdfPrinterHandler::OnGotUniqueFileName(const base::FilePath& path) {
   FileSelected(path, 0, nullptr);
 }
 
+#if !BUILDFLAG(ENABLE_CEF)
 void PdfPrinterHandler::OnDirectorySelected(const base::FilePath& filename,
                                             const base::FilePath& directory) {
   base::FilePath path = directory.Append(filename);
@@ -421,5 +436,36 @@ void PdfPrinterHandler::OnDirectorySelected(const base::FilePath& filename,
       &file_type_info, 0, base::FilePath::StringType(),
       platform_util::GetTopLevel(preview_web_contents_->GetNativeView()), NULL);
 }
+#else
+void PdfPrinterHandler::ShowCefSaveAsDialog(content::WebContents* initiator,
+                                            const base::FilePath& filename,
+                                            const base::FilePath& directory) {
+  CefRefPtr<CefBrowserHostImpl> cef_browser =
+      CefBrowserHostImpl::GetBrowserForContents(initiator);
+  if (!cef_browser)
+    return;
+
+  base::FilePath path = directory.Append(filename);
+
+  CefFileDialogRunner::FileChooserParams params;
+  params.mode = blink::mojom::FileChooserParams::Mode::kSave;
+  params.default_file_name = path;
+  params.accept_types.push_back(CefString(path.Extension()));
+
+  cef_browser->RunFileChooser(
+      params, base::Bind(&PdfPrinterHandler::SaveAsDialogDismissed,
+                         weak_ptr_factory_.GetWeakPtr()));
+}
+
+void PdfPrinterHandler::SaveAsDialogDismissed(
+    int selected_accept_filter,
+    const std::vector<base::FilePath>& file_paths) {
+  if (file_paths.size() == 1) {
+    FileSelected(file_paths[0], 0, nullptr);
+  } else {
+    FileSelectionCanceled(nullptr);
+  }
+}
+#endif
 
 }  // namespace printing
diff --git chrome/browser/ui/webui/print_preview/pdf_printer_handler.h chrome/browser/ui/webui/print_preview/pdf_printer_handler.h
index 0881b3dd9303..4df6883d4d05 100644
--- chrome/browser/ui/webui/print_preview/pdf_printer_handler.h
+++ chrome/browser/ui/webui/print_preview/pdf_printer_handler.h
@@ -11,9 +11,14 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string16.h"
+#include "cef/libcef/features/features.h"
 #include "chrome/browser/ui/webui/print_preview/printer_handler.h"
 #include "ui/shell_dialogs/select_file_dialog.h"
 
+#if BUILDFLAG(ENABLE_CEF)
+#include "cef/libcef/browser/browser_host_impl.h"
+#endif
+
 namespace base {
 class FilePath;
 class RefCountedMemory;
@@ -76,17 +81,28 @@ class PdfPrinterHandler : public PrinterHandler,
   // The print preview web contents. Protected so unit tests can access it.
   content::WebContents* const preview_web_contents_;
 
+#if !BUILDFLAG(ENABLE_CEF)
   // The underlying dialog object. Protected so unit tests can access it.
   scoped_refptr<ui::SelectFileDialog> select_file_dialog_;
+#endif
 
  private:
   void PostPrintToPdfTask();
   void OnGotUniqueFileName(const base::FilePath& path);
 
+#if !BUILDFLAG(ENABLE_CEF)
   // Prompts the user to save the file. The dialog will default to saving
   // the file with name |filename| in |directory|.
   void OnDirectorySelected(const base::FilePath& filename,
                            const base::FilePath& directory);
+#else
+  void ShowCefSaveAsDialog(content::WebContents* initiator,
+                           const base::FilePath& filename,
+                           const base::FilePath& directory);
+
+  void SaveAsDialogDismissed(int selected_accept_filter,
+                             const std::vector<base::FilePath>& file_paths);
+#endif
 
   Profile* const profile_;
   PrintPreviewStickySettings* const sticky_settings_;
diff --git chrome/browser/ui/webui/print_preview/print_preview_handler.cc chrome/browser/ui/webui/print_preview/print_preview_handler.cc
index 113d34201f90..4a75044c2bb7 100644
--- chrome/browser/ui/webui/print_preview/print_preview_handler.cc
+++ chrome/browser/ui/webui/print_preview/print_preview_handler.cc
@@ -27,6 +27,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/values.h"
 #include "build/build_config.h"
+#include "cef/libcef/features/features.h"
 #include "chrome/browser/app_mode/app_mode_utils.h"
 #include "chrome/browser/bad_message.h"
 #include "chrome/browser/browser_process.h"
@@ -1146,7 +1147,7 @@ void PrintPreviewHandler::SendInitialSettings(
     initial_settings.SetKey(kPolicies, std::move(policies));
 
   if (IsCloudPrintEnabled() &&
-      !base::FeatureList::IsEnabled(features::kCloudPrinterHandler)) {
+      !base::FeatureList::IsEnabled(::features::kCloudPrinterHandler)) {
     initial_settings.SetStringKey(
         kCloudPrintURL, GURL(cloud_devices::GetCloudPrintURL()).spec());
   }
@@ -1403,7 +1404,7 @@ PrinterHandler* PrintPreviewHandler::GetPrinterHandler(
     }
     return extension_printer_handler_.get();
   }
-#if BUILDFLAG(ENABLE_SERVICE_DISCOVERY)
+#if BUILDFLAG(ENABLE_SERVICE_DISCOVERY) && !BUILDFLAG(ENABLE_CEF)
   if (printer_type == PrinterType::kPrivetPrinter) {
     if (!privet_printer_handler_) {
       privet_printer_handler_ =
@@ -1411,6 +1412,9 @@ PrinterHandler* PrintPreviewHandler::GetPrinterHandler(
     }
     return privet_printer_handler_.get();
   }
+#else  // !BUILDFLAG(ENABLE_SERVICE_DISCOVERY)
+  if (printer_type == PrinterType::kPrivetPrinter)
+    return nullptr;
 #endif
   if (printer_type == PrinterType::kPdfPrinter) {
     if (!pdf_printer_handler_) {
@@ -1430,7 +1434,7 @@ PrinterHandler* PrintPreviewHandler::GetPrinterHandler(
   if (printer_type == PrinterType::kCloudPrinter) {
     // This printer handler is currently experimental. Ensure it is never
     // created unless the flag is enabled.
-    CHECK(base::FeatureList::IsEnabled(features::kCloudPrinterHandler));
+    CHECK(base::FeatureList::IsEnabled(::features::kCloudPrinterHandler));
     if (!cloud_printer_handler_)
       cloud_printer_handler_ = PrinterHandler::CreateForCloudPrinters();
     return cloud_printer_handler_.get();
@@ -1493,6 +1497,7 @@ void PrintPreviewHandler::OnPrintResult(const std::string& callback_id,
 }
 
 void PrintPreviewHandler::RegisterForGaiaCookieChanges() {
+#if !BUILDFLAG(ENABLE_CEF)
   DCHECK(!identity_manager_);
   cloud_print_enabled_ =
       !base::Contains(printer_type_deny_list_, kCloudPrinter) &&
@@ -1509,6 +1514,7 @@ void PrintPreviewHandler::RegisterForGaiaCookieChanges() {
 
   identity_manager_ = IdentityManagerFactory::GetForProfile(profile);
   identity_manager_->AddObserver(this);
+#endif
 }
 
 void PrintPreviewHandler::UnregisterForGaiaCookieChanges() {
diff --git chrome/browser/ui/webui/print_preview/print_preview_ui.cc chrome/browser/ui/webui/print_preview/print_preview_ui.cc
index cf3c71f478da..8438a234eb8b 100644
--- chrome/browser/ui/webui/print_preview/print_preview_ui.cc
+++ chrome/browser/ui/webui/print_preview/print_preview_ui.cc
@@ -24,6 +24,7 @@
 #include "base/synchronization/lock.h"
 #include "base/values.h"
 #include "build/build_config.h"
+#include "cef/libcef/features/features.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/browser_process_platform_part.h"
 #include "chrome/browser/printing/background_printing_manager.h"
@@ -76,12 +77,16 @@ namespace printing {
 
 namespace {
 
+#if BUILDFLAG(ENABLE_CEF)
+const char kBasicPrintShortcut[] = "";
+#else
 #if defined(OS_MACOSX)
 // U+0028 U+21E7 U+2318 U+0050 U+0029 in UTF8
 const char kBasicPrintShortcut[] = "\x28\xE2\x8c\xA5\xE2\x8C\x98\x50\x29";
 #elif !defined(OS_CHROMEOS)
 const char kBasicPrintShortcut[] = "(Ctrl+Shift+P)";
 #endif
+#endif
 
 #if !BUILDFLAG(OPTIMIZE_WEBUI)
 constexpr char kGeneratedPath[] =
@@ -332,7 +337,7 @@ void AddPrintPreviewFlags(content::WebUIDataSource* source, Profile* profile) {
   source->AddBoolean("isEnterpriseManaged", enterprise_managed);
 
   bool cloud_printer_handler_enabled =
-      base::FeatureList::IsEnabled(features::kCloudPrinterHandler);
+      base::FeatureList::IsEnabled(::features::kCloudPrinterHandler);
   source->AddBoolean("cloudPrinterHandlerEnabled",
                      cloud_printer_handler_enabled);
 }
