Expose Print API to webContents and webView.
Also move the print implementation from window to webContents.
This commit is contained in:
parent
57580e00f9
commit
47eac062f6
11 changed files with 62 additions and 65 deletions
|
@ -18,6 +18,7 @@
|
||||||
#include "base/strings/string_util.h"
|
#include "base/strings/string_util.h"
|
||||||
#include "base/strings/utf_string_conversions.h"
|
#include "base/strings/utf_string_conversions.h"
|
||||||
#include "brightray/browser/inspectable_web_contents.h"
|
#include "brightray/browser/inspectable_web_contents.h"
|
||||||
|
#include "chrome/browser/printing/print_view_manager_basic.h"
|
||||||
#include "chrome/browser/printing/print_preview_message_handler.h"
|
#include "chrome/browser/printing/print_preview_message_handler.h"
|
||||||
#include "content/public/browser/favicon_status.h"
|
#include "content/public/browser/favicon_status.h"
|
||||||
#include "content/public/browser/guest_host.h"
|
#include "content/public/browser/guest_host.h"
|
||||||
|
@ -41,6 +42,15 @@
|
||||||
|
|
||||||
#include "atom/common/node_includes.h"
|
#include "atom/common/node_includes.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
struct PrintSettings {
|
||||||
|
bool silent;
|
||||||
|
bool print_background;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
namespace mate {
|
namespace mate {
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
|
@ -65,6 +75,19 @@ struct Converter<atom::api::SetSizeParams> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct Converter<PrintSettings> {
|
||||||
|
static bool FromV8(v8::Isolate* isolate, v8::Local<v8::Value> val,
|
||||||
|
PrintSettings* out) {
|
||||||
|
mate::Dictionary dict;
|
||||||
|
if (!ConvertFromV8(isolate, val, &dict))
|
||||||
|
return false;
|
||||||
|
dict.Get("silent", &(out->silent));
|
||||||
|
dict.Get("printBackground", &(out->print_background));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace mate
|
} // namespace mate
|
||||||
|
|
||||||
|
|
||||||
|
@ -581,8 +604,6 @@ void WebContents::UnregisterServiceWorker(
|
||||||
callback);
|
callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
<<<<<<< HEAD
|
|
||||||
void WebContents::SetAudioMuted(bool muted) {
|
void WebContents::SetAudioMuted(bool muted) {
|
||||||
web_contents()->SetAudioMuted(muted);
|
web_contents()->SetAudioMuted(muted);
|
||||||
}
|
}
|
||||||
|
@ -591,6 +612,17 @@ bool WebContents::IsAudioMuted() {
|
||||||
return web_contents()->IsAudioMuted();
|
return web_contents()->IsAudioMuted();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebContents::Print(mate::Arguments* args) {
|
||||||
|
PrintSettings settings = { false, false };
|
||||||
|
if (args->Length() == 1 && !args->GetNext(&settings)) {
|
||||||
|
args->ThrowError();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
printing::PrintViewManagerBasic::FromWebContents(web_contents())->
|
||||||
|
PrintNow(settings.silent, settings.print_background);
|
||||||
|
}
|
||||||
|
|
||||||
void WebContents::PrintToPDF(const base::DictionaryValue& setting,
|
void WebContents::PrintToPDF(const base::DictionaryValue& setting,
|
||||||
const PrintToPDFCallback& callback) {
|
const PrintToPDFCallback& callback) {
|
||||||
printing::PrintPreviewMessageHandler::FromWebContents(web_contents())->
|
printing::PrintPreviewMessageHandler::FromWebContents(web_contents())->
|
||||||
|
@ -769,6 +801,7 @@ mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
|
||||||
.SetMethod("unregisterServiceWorker",
|
.SetMethod("unregisterServiceWorker",
|
||||||
&WebContents::UnregisterServiceWorker)
|
&WebContents::UnregisterServiceWorker)
|
||||||
.SetMethod("inspectServiceWorker", &WebContents::InspectServiceWorker)
|
.SetMethod("inspectServiceWorker", &WebContents::InspectServiceWorker)
|
||||||
|
.SetMethod("print", &WebContents::Print)
|
||||||
.SetMethod("_printToPDF", &WebContents::PrintToPDF)
|
.SetMethod("_printToPDF", &WebContents::PrintToPDF)
|
||||||
.Build());
|
.Build());
|
||||||
|
|
||||||
|
|
|
@ -93,6 +93,7 @@ class WebContents : public mate::EventEmitter,
|
||||||
void UnregisterServiceWorker(const base::Callback<void(bool)>&);
|
void UnregisterServiceWorker(const base::Callback<void(bool)>&);
|
||||||
void SetAudioMuted(bool muted);
|
void SetAudioMuted(bool muted);
|
||||||
bool IsAudioMuted();
|
bool IsAudioMuted();
|
||||||
|
void Print(mate::Arguments* args);
|
||||||
|
|
||||||
// Print current page as PDF.
|
// Print current page as PDF.
|
||||||
void PrintToPDF(const base::DictionaryValue& setting,
|
void PrintToPDF(const base::DictionaryValue& setting,
|
||||||
|
|
|
@ -20,32 +20,6 @@
|
||||||
|
|
||||||
#include "atom/common/node_includes.h"
|
#include "atom/common/node_includes.h"
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
struct PrintSettings {
|
|
||||||
bool silent;
|
|
||||||
bool print_background;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
namespace mate {
|
|
||||||
|
|
||||||
template<>
|
|
||||||
struct Converter<PrintSettings> {
|
|
||||||
static bool FromV8(v8::Isolate* isolate, v8::Local<v8::Value> val,
|
|
||||||
PrintSettings* out) {
|
|
||||||
mate::Dictionary dict;
|
|
||||||
if (!ConvertFromV8(isolate, val, &dict))
|
|
||||||
return false;
|
|
||||||
dict.Get("silent", &(out->silent));
|
|
||||||
dict.Get("printBackground", &(out->print_background));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace mate
|
|
||||||
|
|
||||||
namespace atom {
|
namespace atom {
|
||||||
|
|
||||||
namespace api {
|
namespace api {
|
||||||
|
@ -420,16 +394,6 @@ void Window::CapturePage(mate::Arguments* args) {
|
||||||
rect, base::Bind(&OnCapturePageDone, args->isolate(), callback));
|
rect, base::Bind(&OnCapturePageDone, args->isolate(), callback));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window::Print(mate::Arguments* args) {
|
|
||||||
PrintSettings settings = { false, false };
|
|
||||||
if (args->Length() == 1 && !args->GetNext(&settings)) {
|
|
||||||
args->ThrowError();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
window_->Print(settings.silent, settings.print_background);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Window::SetProgressBar(double progress) {
|
void Window::SetProgressBar(double progress) {
|
||||||
window_->SetProgressBar(progress);
|
window_->SetProgressBar(progress);
|
||||||
}
|
}
|
||||||
|
@ -541,7 +505,6 @@ void Window::BuildPrototype(v8::Isolate* isolate,
|
||||||
.SetMethod("blurWebView", &Window::BlurWebView)
|
.SetMethod("blurWebView", &Window::BlurWebView)
|
||||||
.SetMethod("isWebViewFocused", &Window::IsWebViewFocused)
|
.SetMethod("isWebViewFocused", &Window::IsWebViewFocused)
|
||||||
.SetMethod("capturePage", &Window::CapturePage)
|
.SetMethod("capturePage", &Window::CapturePage)
|
||||||
.SetMethod("print", &Window::Print)
|
|
||||||
.SetMethod("setProgressBar", &Window::SetProgressBar)
|
.SetMethod("setProgressBar", &Window::SetProgressBar)
|
||||||
.SetMethod("setOverlayIcon", &Window::SetOverlayIcon)
|
.SetMethod("setOverlayIcon", &Window::SetOverlayIcon)
|
||||||
.SetMethod("_setMenu", &Window::SetMenu)
|
.SetMethod("_setMenu", &Window::SetMenu)
|
||||||
|
|
|
@ -131,7 +131,6 @@ class Window : public mate::EventEmitter,
|
||||||
void SetDocumentEdited(bool edited);
|
void SetDocumentEdited(bool edited);
|
||||||
bool IsDocumentEdited();
|
bool IsDocumentEdited();
|
||||||
void CapturePage(mate::Arguments* args);
|
void CapturePage(mate::Arguments* args);
|
||||||
void Print(mate::Arguments* args);
|
|
||||||
void SetProgressBar(double progress);
|
void SetProgressBar(double progress);
|
||||||
void SetOverlayIcon(const gfx::Image& overlay,
|
void SetOverlayIcon(const gfx::Image& overlay,
|
||||||
const std::string& description);
|
const std::string& description);
|
||||||
|
|
|
@ -83,5 +83,6 @@ BrowserWindow::isDevToolsOpened = -> @webContents.isDevToolsOpened()
|
||||||
BrowserWindow::toggleDevTools = -> @webContents.toggleDevTools()
|
BrowserWindow::toggleDevTools = -> @webContents.toggleDevTools()
|
||||||
BrowserWindow::inspectElement = -> @webContents.inspectElement.apply @webContents, arguments
|
BrowserWindow::inspectElement = -> @webContents.inspectElement.apply @webContents, arguments
|
||||||
BrowserWindow::inspectServiceWorker = -> @webContents.inspectServiceWorker()
|
BrowserWindow::inspectServiceWorker = -> @webContents.inspectServiceWorker()
|
||||||
|
BrowserWindow::print = -> @webContents.print.apply @webContents, arguments
|
||||||
|
|
||||||
module.exports = BrowserWindow
|
module.exports = BrowserWindow
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include "atom/browser/web_dialog_helper.h"
|
#include "atom/browser/web_dialog_helper.h"
|
||||||
#include "base/files/file_util.h"
|
#include "base/files/file_util.h"
|
||||||
#include "chrome/browser/printing/print_preview_message_handler.h"
|
#include "chrome/browser/printing/print_preview_message_handler.h"
|
||||||
|
#include "chrome/browser/printing/print_view_manager_basic.h"
|
||||||
#include "chrome/browser/ui/browser_dialogs.h"
|
#include "chrome/browser/ui/browser_dialogs.h"
|
||||||
#include "content/public/browser/child_process_security_policy.h"
|
#include "content/public/browser/child_process_security_policy.h"
|
||||||
#include "content/public/browser/render_process_host.h"
|
#include "content/public/browser/render_process_host.h"
|
||||||
|
@ -103,6 +104,7 @@ void CommonWebContentsDelegate::InitWithWebContents(
|
||||||
owner_window_ = owner_window;
|
owner_window_ = owner_window;
|
||||||
web_contents->SetDelegate(this);
|
web_contents->SetDelegate(this);
|
||||||
|
|
||||||
|
printing::PrintViewManagerBasic::CreateForWebContents(web_contents);
|
||||||
printing::PrintPreviewMessageHandler::CreateForWebContents(web_contents);
|
printing::PrintPreviewMessageHandler::CreateForWebContents(web_contents);
|
||||||
|
|
||||||
// Create InspectableWebContents.
|
// Create InspectableWebContents.
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
#include "base/strings/utf_string_conversions.h"
|
#include "base/strings/utf_string_conversions.h"
|
||||||
#include "brightray/browser/inspectable_web_contents.h"
|
#include "brightray/browser/inspectable_web_contents.h"
|
||||||
#include "brightray/browser/inspectable_web_contents_view.h"
|
#include "brightray/browser/inspectable_web_contents_view.h"
|
||||||
#include "chrome/browser/printing/print_view_manager_basic.h"
|
|
||||||
#include "content/browser/renderer_host/render_widget_host_impl.h"
|
#include "content/browser/renderer_host/render_widget_host_impl.h"
|
||||||
#include "content/public/browser/navigation_entry.h"
|
#include "content/public/browser/navigation_entry.h"
|
||||||
#include "content/public/browser/notification_details.h"
|
#include "content/public/browser/notification_details.h"
|
||||||
|
@ -96,8 +95,6 @@ NativeWindow::NativeWindow(content::WebContents* web_contents,
|
||||||
has_dialog_attached_(false),
|
has_dialog_attached_(false),
|
||||||
zoom_factor_(1.0),
|
zoom_factor_(1.0),
|
||||||
weak_factory_(this) {
|
weak_factory_(this) {
|
||||||
printing::PrintViewManagerBasic::CreateForWebContents(web_contents);
|
|
||||||
|
|
||||||
InitWithWebContents(web_contents, this);
|
InitWithWebContents(web_contents, this);
|
||||||
|
|
||||||
options.Get(switches::kFrame, &has_frame_);
|
options.Get(switches::kFrame, &has_frame_);
|
||||||
|
@ -257,11 +254,6 @@ bool NativeWindow::IsDocumentEdited() {
|
||||||
void NativeWindow::SetMenu(ui::MenuModel* menu) {
|
void NativeWindow::SetMenu(ui::MenuModel* menu) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void NativeWindow::Print(bool silent, bool print_background) {
|
|
||||||
printing::PrintViewManagerBasic::FromWebContents(GetWebContents())->
|
|
||||||
PrintNow(silent, print_background);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NativeWindow::ShowDefinitionForSelection() {
|
void NativeWindow::ShowDefinitionForSelection() {
|
||||||
NOTIMPLEMENTED();
|
NOTIMPLEMENTED();
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,9 +154,6 @@ class NativeWindow : public CommonWebContentsDelegate,
|
||||||
virtual void CapturePage(const gfx::Rect& rect,
|
virtual void CapturePage(const gfx::Rect& rect,
|
||||||
const CapturePageCallback& callback);
|
const CapturePageCallback& callback);
|
||||||
|
|
||||||
// Print current page.
|
|
||||||
virtual void Print(bool silent, bool print_background);
|
|
||||||
|
|
||||||
// Show popup dictionary.
|
// Show popup dictionary.
|
||||||
virtual void ShowDefinitionForSelection();
|
virtual void ShowDefinitionForSelection();
|
||||||
|
|
||||||
|
|
|
@ -291,6 +291,7 @@ registerWebViewElement = ->
|
||||||
"send"
|
"send"
|
||||||
"getId"
|
"getId"
|
||||||
"inspectServiceWorker"
|
"inspectServiceWorker"
|
||||||
|
"print"
|
||||||
"printToPDF"
|
"printToPDF"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -556,20 +556,7 @@ process.
|
||||||
|
|
||||||
### BrowserWindow.print([options])
|
### BrowserWindow.print([options])
|
||||||
|
|
||||||
* `options` Object
|
Same with `webContents.print([options])`
|
||||||
* `silent` Boolean - Don't ask user for print settings, defaults to `false`
|
|
||||||
* `printBackground` Boolean - Also prints the background color and image of
|
|
||||||
the web page, defaults to `false`.
|
|
||||||
|
|
||||||
Prints window's web page. When `silent` is set to `false`, Electron will pick
|
|
||||||
up system's default printer and default settings for printing.
|
|
||||||
|
|
||||||
Calling `window.print()` in web page is equivalent to call
|
|
||||||
`BrowserWindow.print({silent: false, printBackground: false})`.
|
|
||||||
|
|
||||||
**Note:** On Windows, the print API relies on `pdf.dll`. If your application
|
|
||||||
doesn't need print feature, you can safely remove `pdf.dll` in saving binary
|
|
||||||
size.
|
|
||||||
|
|
||||||
### BrowserWindow.loadUrl(url, [options])
|
### BrowserWindow.loadUrl(url, [options])
|
||||||
|
|
||||||
|
@ -950,6 +937,23 @@ Unregisters any serviceworker if present and returns boolean as
|
||||||
response to `callback` when the JS promise is fullfilled or false
|
response to `callback` when the JS promise is fullfilled or false
|
||||||
when the JS promise is rejected.
|
when the JS promise is rejected.
|
||||||
|
|
||||||
|
### WebContents.print([options])
|
||||||
|
|
||||||
|
* `options` Object
|
||||||
|
* `silent` Boolean - Don't ask user for print settings, defaults to `false`
|
||||||
|
* `printBackground` Boolean - Also prints the background color and image of
|
||||||
|
the web page, defaults to `false`.
|
||||||
|
|
||||||
|
Prints window's web page. When `silent` is set to `false`, Electron will pick
|
||||||
|
up system's default printer and default settings for printing.
|
||||||
|
|
||||||
|
Calling `window.print()` in web page is equivalent to call
|
||||||
|
`WebContents.print({silent: false, printBackground: false})`.
|
||||||
|
|
||||||
|
**Note:** On Windows, the print API relies on `pdf.dll`. If your application
|
||||||
|
doesn't need print feature, you can safely remove `pdf.dll` in saving binary
|
||||||
|
size.
|
||||||
|
|
||||||
### WebContents.printToPDF(options, callback)
|
### WebContents.printToPDF(options, callback)
|
||||||
|
|
||||||
* `options` Object
|
* `options` Object
|
||||||
|
|
|
@ -308,6 +308,10 @@ Executes editing command `replace` in page.
|
||||||
|
|
||||||
Executes editing command `replaceMisspelling` in page.
|
Executes editing command `replaceMisspelling` in page.
|
||||||
|
|
||||||
|
### `<webview>.print([options])`
|
||||||
|
|
||||||
|
Prints webview's web page. Same with `webContents.print([options])`.
|
||||||
|
|
||||||
### `<webview>`.send(channel[, args...])
|
### `<webview>`.send(channel[, args...])
|
||||||
|
|
||||||
* `channel` String
|
* `channel` String
|
||||||
|
|
Loading…
Reference in a new issue