Merge remote-tracking branch 'upstream/master'

# Conflicts:
#	atom/browser/api/atom_api_web_contents.cc
#	chromium_src/chrome/browser/printing/print_job_worker.cc
#	chromium_src/chrome/browser/printing/print_job_worker.h
#	chromium_src/chrome/browser/printing/print_view_manager_base.cc
#	chromium_src/chrome/browser/printing/print_view_manager_base.h
#	chromium_src/chrome/browser/printing/printer_query.cc
#	chromium_src/chrome/common/print_messages.cc
#	chromium_src/chrome/renderer/printing/print_web_view_helper.cc
This commit is contained in:
renaesop 2017-02-07 09:30:36 +08:00
commit 26135b412b
168 changed files with 1632 additions and 1755 deletions

View file

@ -32,7 +32,7 @@
using media::KeySystemProperties;
using media::SupportedCodecs;
#if defined(ENABLE_PEPPER_CDMS)
#if BUILDFLAG(ENABLE_PEPPER_CDMS)
static const char kExternalClearKeyPepperType[] =
"application/x-ppapi-clearkey-cdm";
@ -264,15 +264,15 @@ static void AddPepperBasedWidevine(
#endif // defined(OS_CHROMEOS)
}
#endif // defined(WIDEVINE_CDM_AVAILABLE)
#endif // defined(ENABLE_PEPPER_CDMS)
#endif // BUILDFLAG(ENABLE_PEPPER_CDMS)
void AddChromeKeySystems(
std::vector<std::unique_ptr<KeySystemProperties>>* key_systems_properties) {
#if defined(ENABLE_PEPPER_CDMS)
#if BUILDFLAG(ENABLE_PEPPER_CDMS)
AddExternalClearKey(key_systems_properties);
#if defined(WIDEVINE_CDM_AVAILABLE)
AddPepperBasedWidevine(key_systems_properties);
#endif // defined(WIDEVINE_CDM_AVAILABLE)
#endif // defined(ENABLE_PEPPER_CDMS)
#endif // BUILDFLAG(ENABLE_PEPPER_CDMS)
}

View file

@ -4,6 +4,7 @@
#include "chrome/renderer/printing/print_web_view_helper.h"
#include <algorithm>
#include <string>
#include "base/auto_reset.h"
@ -334,7 +335,7 @@ blink::WebLocalFrame* FrameReference::GetFrame() {
if (view_ == NULL || frame_ == NULL)
return NULL;
for (blink::WebFrame* frame = view_->mainFrame(); frame != NULL;
frame = frame->traverseNext(false)) {
frame = frame->traverseNext()) {
if (frame == frame_)
return frame_;
}
@ -353,19 +354,8 @@ float PrintWebViewHelper::RenderPageContent(blink::WebFrame* frame,
double scale_factor,
blink::WebCanvas* canvas) {
SkAutoCanvasRestore auto_restore(canvas, true);
if (content_area != canvas_area) {
canvas->translate((content_area.x() - canvas_area.x()) / scale_factor,
(content_area.y() - canvas_area.y()) / scale_factor);
SkRect clip_rect(
SkRect::MakeXYWH(content_area.origin().x() / scale_factor,
content_area.origin().y() / scale_factor,
content_area.size().width() / scale_factor,
content_area.size().height() / scale_factor));
SkIRect clip_int_rect;
clip_rect.roundOut(&clip_int_rect);
SkRegion clip_region(clip_int_rect);
canvas->setClipRegion(clip_region);
}
canvas->translate((content_area.x() - canvas_area.x()) / scale_factor,
(content_area.y() - canvas_area.y()) / scale_factor);
return frame->printPage(page_number, canvas);
}
@ -413,7 +403,7 @@ class PrepareFrameAndViewForPrint : public blink::WebViewClient,
bool allowsBrokenNullLayerTreeView() const override;
// blink::WebFrameClient:
blink::WebFrame* createChildFrame(
blink::WebLocalFrame* createChildFrame(
blink::WebLocalFrame* parent,
blink::WebTreeScopeType scope,
const blink::WebString& name,
@ -491,10 +481,16 @@ void PrepareFrameAndViewForPrint::ResizeForPrinting() {
if (!frame())
return;
// Backup size and offset if it's a local frame.
blink::WebView* web_view = frame_.view();
// Backup size and offset.
if (blink::WebFrame* web_frame = web_view->mainFrame())
prev_scroll_offset_ = web_frame->scrollOffset();
if (blink::WebFrame* web_frame = web_view->mainFrame()) {
if (web_frame->isWebLocalFrame())
prev_scroll_offset_ = web_frame->scrollOffset();
}
prev_view_size_ = web_view->size();
web_view->resize(print_layout_size);
@ -562,14 +558,14 @@ void PrepareFrameAndViewForPrint::didStopLoading() {
weak_ptr_factory_.GetWeakPtr()));
}
blink::WebFrame* PrepareFrameAndViewForPrint::createChildFrame(
blink::WebLocalFrame* PrepareFrameAndViewForPrint::createChildFrame(
blink::WebLocalFrame* parent,
blink::WebTreeScopeType scope,
const blink::WebString& name,
const blink::WebString& unique_name,
blink::WebSandboxFlags sandbox_flags,
const blink::WebFrameOwnerProperties& frame_owner_properties) {
blink::WebFrame* frame = blink::WebLocalFrame::create(scope, this);
blink::WebLocalFrame* frame = blink::WebLocalFrame::create(scope, this);
parent->appendChild(frame);
return frame;
}
@ -579,10 +575,13 @@ void PrepareFrameAndViewForPrint::CallOnReady() {
}
void PrepareFrameAndViewForPrint::RestoreSize() {
if (frame()) {
blink::WebView* web_view = frame_.GetFrame()->view();
web_view->resize(prev_view_size_);
if (blink::WebFrame* web_frame = web_view->mainFrame())
if (!frame())
return;
blink::WebView* web_view = frame_.GetFrame()->view();
web_view->resize(prev_view_size_);
if (blink::WebFrame* web_frame = web_view->mainFrame()) {
if (web_frame->isWebLocalFrame())
web_frame->setScrollOffset(prev_scroll_offset_);
}
}
@ -609,9 +608,9 @@ void PrepareFrameAndViewForPrint::FinishPrinting() {
on_ready_.Reset();
}
PrintWebViewHelper::PrintWebViewHelper(content::RenderView* render_view)
: content::RenderViewObserver(render_view),
content::RenderViewObserverTracker<PrintWebViewHelper>(render_view),
PrintWebViewHelper::PrintWebViewHelper(content::RenderFrame* render_frame)
: content::RenderFrameObserver(render_frame),
content::RenderFrameObserverTracker<PrintWebViewHelper>(render_frame),
reset_prep_frame_view_(false),
is_print_ready_metafile_sent_(false),
ignore_css_margins_(false),
@ -628,10 +627,8 @@ PrintWebViewHelper::PrintWebViewHelper(content::RenderView* render_view)
PrintWebViewHelper::~PrintWebViewHelper() {}
// Prints |frame| which called window.print().
void PrintWebViewHelper::PrintPage(blink::WebLocalFrame* frame,
bool user_initiated) {
DCHECK(frame);
Print(frame, blink::WebNode());
void PrintWebViewHelper::ScriptedPrint(bool user_initiated) {
Print(render_frame()->GetWebFrame(), blink::WebNode());
}
bool PrintWebViewHelper::OnMessageReceived(const IPC::Message& message) {
@ -666,8 +663,7 @@ void PrintWebViewHelper::OnPrintPages(bool silent, bool print_background,
if (ipc_nesting_level_> 1)
return;
blink::WebLocalFrame* frame =
render_view()->GetMainRenderFrame()->GetWebFrame();
blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
Print(frame, blink::WebNode(), silent, print_background, device_name);
}
#endif // !DISABLE_BASIC_PRINTING
@ -708,8 +704,7 @@ void PrintWebViewHelper::OnPrintPreview(const base::DictionaryValue& settings) {
if (ipc_nesting_level_ > 1)
return;
blink::WebLocalFrame* frame =
render_view()->GetMainRenderFrame()->GetWebFrame();
blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
print_preview_context_.InitWithFrame(frame);
if (!print_preview_context_.source_frame()) {
@ -746,7 +741,7 @@ void PrintWebViewHelper::PrepareFrameForPreviewDocument() {
print_params, print_preview_context_.source_frame(),
print_preview_context_.source_node(), ignore_css_margins_));
prep_frame_view_->CopySelectionIfNeeded(
render_view()->GetWebkitPreferences(),
render_frame()->GetWebkitPreferences(),
base::Bind(&PrintWebViewHelper::OnFramePreparedForPreviewDocument,
base::Unretained(this)));
}
@ -1030,8 +1025,7 @@ bool PrintWebViewHelper::InitPrintSettings(bool fit_to_paper_size,
}
bool PrintWebViewHelper::CalculateNumberOfPages(blink::WebLocalFrame* frame,
const blink::WebNode& node,
int* number_of_pages,
const blink::WebNode& node, int* number_of_pages,
const base::string16& device_name) {
DCHECK(frame);
bool fit_to_paper_size = !(PrintingNodeOrPdfFrame(frame, node));
@ -1101,16 +1095,16 @@ bool PrintWebViewHelper::UpdatePrintSettings(
SetPrintPagesParams(settings);
if (!PrintMsg_Print_Params_IsValid(settings.params)) {
if (!print_for_preview_)
print_preview_context_.set_error(PREVIEW_ERROR_INVALID_PRINTER_SETTINGS);
return false;
}
if (PrintMsg_Print_Params_IsValid(settings.params))
return true;
return true;
if (print_for_preview_)
Send(new PrintHostMsg_ShowInvalidPrinterSettingsError(routing_id()));
else
print_preview_context_.set_error(PREVIEW_ERROR_INVALID_PRINTER_SETTINGS);
return false;
}
bool PrintWebViewHelper::GetPrintSettingsFromUser(blink::WebLocalFrame* frame,
const blink::WebNode& node,
int expected_pages_count) {
@ -1151,7 +1145,7 @@ bool PrintWebViewHelper::RenderPagesForPrint(blink::WebLocalFrame* frame,
DCHECK(!print_pages_params_->params.selection_only ||
print_pages_params_->pages.empty());
prep_frame_view_->CopySelectionIfNeeded(
render_view()->GetWebkitPreferences(),
render_frame()->GetWebkitPreferences(),
base::Bind(&PrintWebViewHelper::OnFramePreparedForPrintPages,
base::Unretained(this)));
return true;
@ -1184,6 +1178,8 @@ bool PrintWebViewHelper::CopyMetafileDataToSharedMem(
void PrintWebViewHelper::SetPrintPagesParams(
const PrintMsg_PrintPages_Params& settings) {
print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings));
Send(new PrintHostMsg_DidGetDocumentCookie(routing_id(),
settings.params.document_cookie));
}
bool PrintWebViewHelper::PreviewPageRendered(int page_number,

View file

@ -13,10 +13,11 @@
#include "base/memory/shared_memory.h"
#include "base/memory/weak_ptr.h"
#include "base/time/time.h"
#include "content/public/renderer/render_view_observer.h"
#include "content/public/renderer/render_view_observer_tracker.h"
#include "content/public/renderer/render_frame_observer.h"
#include "content/public/renderer/render_frame_observer_tracker.h"
#include "printing/pdf_metafile_skia.h"
#include "third_party/WebKit/public/platform/WebCanvas.h"
#include "third_party/WebKit/public/web/WebLocalFrame.h"
#include "third_party/WebKit/public/web/WebNode.h"
#include "third_party/WebKit/public/web/WebPrintParams.h"
#include "ui/gfx/geometry/size.h"
@ -63,10 +64,10 @@ class FrameReference {
// We plan on making print asynchronous and that will require copying the DOM
// of the document and creating a new WebView with the contents.
class PrintWebViewHelper
: public content::RenderViewObserver,
public content::RenderViewObserverTracker<PrintWebViewHelper> {
: public content::RenderFrameObserver,
public content::RenderFrameObserverTracker<PrintWebViewHelper> {
public:
explicit PrintWebViewHelper(content::RenderView* render_view);
explicit PrintWebViewHelper(content::RenderFrame* render_frame);
virtual ~PrintWebViewHelper();
void PrintNode(const blink::WebNode& node);
@ -91,10 +92,10 @@ class PrintWebViewHelper
PREVIEW_ERROR_LAST_ENUM // Always last.
};
// RenderViewObserver implementation.
// RenderFrameObserver implementation.
bool OnMessageReceived(const IPC::Message& message) override;
void PrintPage(blink::WebLocalFrame* frame, bool user_initiated) override;
void OnDestruct() override;
void ScriptedPrint(bool user_initiated) override;
// Message handlers ---------------------------------------------------------
#if !defined(DISABLE_BASIC_PRINTING)