https://codereview.chromium.org/2829973002/diff/20001/content/browser/devtools/protocol/page_handler.hFile content/browser/devtools/protocol/page_handler.h (right):
https://codereview.chromium.org/2829973002/diff/20001/content/browser/devtools/protocol/page_handler.h#newcode80content/browser/devtools/protocol/page_handler.h:80: void
PrintToPDF(Maybe<int> dpi,
Not sure how well a DPI setting will be supported. Have you tried it
out?
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_devtools_manager_delegate.ccFile headless/lib/browser/headless_devtools_manager_delegate.cc (right):
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_devtools_manager_delegate.cc#newcode78headless/lib/browser/headless_devtools_manager_delegate.cc:78:
std::unique_ptr<base::DictionaryValue> ParsePrintSettings(
Now that you have written a parser, you probably want unit tests.
Parsers love testing.
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_devtools_manager_delegate.cc#newcode87headless/lib/browser/headless_devtools_manager_delegate.cc:87: if
(settings->scale < 0)
In print preview, the valid range is [10, 200]. However, the constants
are in
chrome/browser/resources/print_preview/data/ticket_items/scaling.js so
it's hard to use that here. You can add your own constants, and then
update both files to cross-ref each other to say when one changes, the
other must change as well.
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_devtools_manager_delegate.cc#newcode92headless/lib/browser/headless_devtools_manager_delegate.cc:92: if
(paper_type == "letter")
Maybe use the same names as
https://developers.google.com/cloud-print/docs/cdd#cdd ? e.g. NA_LETTER,
ISO_A4.
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_devtools_manager_delegate.cc#newcode112headless/lib/browser/headless_devtools_manager_delegate.cc:112: if
(!params->GetDouble("marginTop", &settings->margin_top_in_inch))
Can you try setting this to 20 inches and see what happens? Or maybe top
and bottom cross each other? I'm not sure if you need to do more value
validation here, or if somewhere else already does it.
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_devtools_manager_delegate.cc#newcode123headless/lib/browser/headless_devtools_manager_delegate.cc:123: } else {
Did you leave out PRINTABLE_AREA_MARGINS on purpose?
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_devtools_manager_delegate.cc#newcode138headless/lib/browser/headless_devtools_manager_delegate.cc:138:
base::StringToInt(tokens[0], &range.from);
StringToInt() comes with a 16 line comment about its return value. Do
you care about "non-perfect" conversions?
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_devtools_manager_delegate.cc#newcode278headless/lib/browser/headless_devtools_manager_delegate.cc:278: <<
"Print preview is not enabled. Some print settings may not work.";
Which settings don't work? Is it just headers+footers? I'll give you
PrintWebViewHelper feedback based on this.
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_devtools_manager_delegate.cc#newcode284headless/lib/browser/headless_devtools_manager_delegate.cc:284: auto
response = ParsePrintSettings(command_id, params, &settings);
You may want to write out the type instead of using auto. Unlike:
auto it = stl_map.find();
or
auto foo = base::MakeUnique<Foo>();
ParsePrintSettings() is not well known to most readers and they have no
idea what is being returned.
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_print_manager.ccFile headless/lib/browser/headless_print_manager.cc (right):
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_print_manager.cc#newcode148headless/lib/browser/headless_print_manager.cc:148:
print_settings.set_url(
Do you need to set the page title as well? Sanitize the URL? (See
PrintPreviewHandler::HandleGetPreview())
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_print_manager.cc#newcode194headless/lib/browser/headless_print_manager.cc:194:
print_params_->pages.back() > params.expected_pages_count) {
Is the vector of pages sorted? If the range input is "1-3,9-10,4-6" does
back() return 10 or 6?
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_print_manager.cc#newcode216headless/lib/browser/headless_print_manager.cc:216: number_pages_ =
print_params_->pages.size();
Why do we need to do this?
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_print_manager.cc#newcode267headless/lib/browser/headless_print_manager.cc:267:
print_params_.reset(nullptr);
There's no need to pass nullptr to std::unique_ptr::reset().
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_print_manager.hFile headless/lib/browser/headless_print_manager.h (right):
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_print_manager.h#newcode22headless/lib/browser/headless_print_manager.h:22: struct
HeadlessPrintSettings {
https://google.github.io/styleguide/cppguide.html#Structs_vs._Classeshttps://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_print_manager.h#newcode50headless/lib/browser/headless_print_manager.h:50: double scale;
Mention 1 = 100%?
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/browser/headless_print_manager.h#newcode85headless/lib/browser/headless_print_manager.h:85: HeadlessPrintSettings
settings,
Don't pass by value.
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/headless_content_main_delegate.ccFile headless/lib/headless_content_main_delegate.cc (right):
https://codereview.chromium.org/2829973002/diff/20001/headless/lib/headless_content_main_delegate.cc#newcode252headless/lib/headless_content_main_delegate.cc:252:
dir_module.AppendASCII(FILE_PATH_LITERAL("headless_locales"));
AppendASCII and FILE_PATH_LITERAL should never be used together. The
former always wants to take a regular string, and the latter is trying
to convert the regular string into a wide string on Windows.
I think the fact that the trybots are green means they are probably not
even building this file. Which then brings up the question of why does
this even have checks for defined(OS_WIN).
https://codereview.chromium.org/2829973002/