mirror of
https://github.com/gotenberg/gotenberg.git
synced 2026-08-16 12:22:17 +01:00
fix(chromium): better native errors handling
This commit is contained in:
@@ -405,6 +405,10 @@ func (b *chromiumBrowser) do(ctx context.Context, logger *zap.Logger, url string
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
errMessage := err.Error()
|
errMessage := err.Error()
|
||||||
|
|
||||||
|
if strings.Contains(errMessage, "Printing failed (-32000)") {
|
||||||
|
return ErrPrintingFailed
|
||||||
|
}
|
||||||
|
|
||||||
if strings.Contains(errMessage, "Show invalid printer settings error (-32000)") || strings.Contains(errMessage, "content area is empty (-32602)") {
|
if strings.Contains(errMessage, "Show invalid printer settings error (-32000)") || strings.Contains(errMessage, "content area is empty (-32602)") {
|
||||||
return ErrInvalidPrinterSettings
|
return ErrInvalidPrinterSettings
|
||||||
}
|
}
|
||||||
@@ -413,6 +417,10 @@ func (b *chromiumBrowser) do(ctx context.Context, logger *zap.Logger, url string
|
|||||||
return ErrPageRangesSyntaxError
|
return ErrPageRangesSyntaxError
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if strings.Contains(errMessage, "Page range exceeds page count (-32000)") {
|
||||||
|
return ErrPageRangesExceedsPageCount
|
||||||
|
}
|
||||||
|
|
||||||
if strings.Contains(errMessage, "rpcc: message too large") {
|
if strings.Contains(errMessage, "rpcc: message too large") {
|
||||||
return ErrRpccMessageTooLarge
|
return ErrRpccMessageTooLarge
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,13 +63,20 @@ var (
|
|||||||
// PdfOptions.OmitBackground is set to true but not PdfOptions.PrintBackground.
|
// PdfOptions.OmitBackground is set to true but not PdfOptions.PrintBackground.
|
||||||
ErrOmitBackgroundWithoutPrintBackground = errors.New("omit background without print background")
|
ErrOmitBackgroundWithoutPrintBackground = errors.New("omit background without print background")
|
||||||
|
|
||||||
|
// ErrPrintingFailed happens if the printing failed for an unknown reason.
|
||||||
|
ErrPrintingFailed = errors.New("printing failed")
|
||||||
|
|
||||||
// ErrInvalidPrinterSettings happens if the PdfOptions have one or more
|
// ErrInvalidPrinterSettings happens if the PdfOptions have one or more
|
||||||
// aberrant values.
|
// aberrant values.
|
||||||
ErrInvalidPrinterSettings = errors.New("invalid printer settings")
|
ErrInvalidPrinterSettings = errors.New("invalid printer settings")
|
||||||
|
|
||||||
// ErrPageRangesSyntaxError happens if the PdfOptions have an invalid page
|
// ErrPageRangesSyntaxError happens if the PdfOptions page
|
||||||
// range.
|
// range syntax is invalid.
|
||||||
ErrPageRangesSyntaxError = errors.New("page ranges syntax error")
|
ErrPageRangesSyntaxError = errors.New("page ranges syntax error")
|
||||||
|
|
||||||
|
// ErrPageRangesExceedsPageCount happens if the PdfOptions have an invalid
|
||||||
|
// page range.
|
||||||
|
ErrPageRangesExceedsPageCount = errors.New("page ranges exceeds page count")
|
||||||
)
|
)
|
||||||
|
|
||||||
// Chromium is a module that provides both an [Api] and routes for converting
|
// Chromium is a module that provides both an [Api] and routes for converting
|
||||||
|
|||||||
@@ -652,6 +652,16 @@ func convertUrl(ctx *api.Context, chromium Api, engine gotenberg.PdfEngine, url
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if errors.Is(err, ErrPrintingFailed) {
|
||||||
|
return api.WrapError(
|
||||||
|
fmt.Errorf("convert to PDF: %w", err),
|
||||||
|
api.NewSentinelHttpError(
|
||||||
|
http.StatusBadRequest,
|
||||||
|
"Chromium failed to print the PDF; this usually happens when the page is too large",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
if errors.Is(err, ErrInvalidPrinterSettings) {
|
if errors.Is(err, ErrInvalidPrinterSettings) {
|
||||||
return api.WrapError(
|
return api.WrapError(
|
||||||
fmt.Errorf("convert to PDF: %w", err),
|
fmt.Errorf("convert to PDF: %w", err),
|
||||||
@@ -662,12 +672,22 @@ func convertUrl(ctx *api.Context, chromium Api, engine gotenberg.PdfEngine, url
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if errors.Is(err, ErrPageRangesExceedsPageCount) {
|
||||||
|
return api.WrapError(
|
||||||
|
fmt.Errorf("convert to PDF: %w", err),
|
||||||
|
api.NewSentinelHttpError(
|
||||||
|
http.StatusBadRequest,
|
||||||
|
fmt.Sprintf("The page ranges '%s' (nativePageRanges) exceeds the page count", options.PageRanges),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
if errors.Is(err, ErrPageRangesSyntaxError) {
|
if errors.Is(err, ErrPageRangesSyntaxError) {
|
||||||
return api.WrapError(
|
return api.WrapError(
|
||||||
fmt.Errorf("convert to PDF: %w", err),
|
fmt.Errorf("convert to PDF: %w", err),
|
||||||
api.NewSentinelHttpError(
|
api.NewSentinelHttpError(
|
||||||
http.StatusBadRequest,
|
http.StatusBadRequest,
|
||||||
fmt.Sprintf("Chromium does not handle the page ranges '%s' (nativePageRanges)", options.PageRanges),
|
fmt.Sprintf("Chromium does not handle the page ranges '%s' (nativePageRanges) syntax", options.PageRanges),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
# 1. JavaScript disabled on some feature.
|
# 1. JavaScript disabled on some feature.
|
||||||
|
|
||||||
@chromium
|
@chromium
|
||||||
@chromium-pdf-html
|
@chromium-convert-html
|
||||||
Feature: /forms/chromium/convert/html
|
Feature: /forms/chromium/convert/html
|
||||||
|
|
||||||
Scenario: POST /forms/chromium/convert/html (Default)
|
Scenario: POST /forms/chromium/convert/html (Default)
|
||||||
@@ -445,7 +445,16 @@ Feature: /forms/chromium/convert/html
|
|||||||
Then the response header "Content-Type" should be "text/plain; charset=UTF-8"
|
Then the response header "Content-Type" should be "text/plain; charset=UTF-8"
|
||||||
Then the response body should match string:
|
Then the response body should match string:
|
||||||
"""
|
"""
|
||||||
Chromium does not handle the page ranges 'foo' (nativePageRanges)
|
Chromium does not handle the page ranges 'foo' (nativePageRanges) syntax
|
||||||
|
"""
|
||||||
|
When I make a "POST" request to Gotenberg at the "/forms/chromium/convert/html" endpoint with the following form data and header(s):
|
||||||
|
| files | testdata/page-1-html/index.html | file |
|
||||||
|
| nativePageRanges | 2-3 | field |
|
||||||
|
Then the response status code should be 400
|
||||||
|
Then the response header "Content-Type" should be "text/plain; charset=UTF-8"
|
||||||
|
Then the response body should match string:
|
||||||
|
"""
|
||||||
|
The page ranges '2-3' (nativePageRanges) exceeds the page count
|
||||||
"""
|
"""
|
||||||
When I make a "POST" request to Gotenberg at the "/forms/chromium/convert/html" endpoint with the following form data and header(s):
|
When I make a "POST" request to Gotenberg at the "/forms/chromium/convert/html" endpoint with the following form data and header(s):
|
||||||
| files | testdata/page-1-html/index.html | file |
|
| files | testdata/page-1-html/index.html | file |
|
||||||
|
|||||||
@@ -524,7 +524,17 @@ Feature: /forms/chromium/convert/markdown
|
|||||||
Then the response header "Content-Type" should be "text/plain; charset=UTF-8"
|
Then the response header "Content-Type" should be "text/plain; charset=UTF-8"
|
||||||
Then the response body should match string:
|
Then the response body should match string:
|
||||||
"""
|
"""
|
||||||
Chromium does not handle the page ranges 'foo' (nativePageRanges)
|
Chromium does not handle the page ranges 'foo' (nativePageRanges) syntax
|
||||||
|
"""
|
||||||
|
When I make a "POST" request to Gotenberg at the "/forms/chromium/convert/markdown" endpoint with the following form data and header(s):
|
||||||
|
| files | testdata/page-1-markdown/index.html | file |
|
||||||
|
| files | testdata/page-1-markdown/page_1.md | file |
|
||||||
|
| nativePageRanges | 2-3 | field |
|
||||||
|
Then the response status code should be 400
|
||||||
|
Then the response header "Content-Type" should be "text/plain; charset=UTF-8"
|
||||||
|
Then the response body should match string:
|
||||||
|
"""
|
||||||
|
The page ranges '2-3' (nativePageRanges) exceeds the page count
|
||||||
"""
|
"""
|
||||||
When I make a "POST" request to Gotenberg at the "/forms/chromium/convert/markdown" endpoint with the following form data and header(s):
|
When I make a "POST" request to Gotenberg at the "/forms/chromium/convert/markdown" endpoint with the following form data and header(s):
|
||||||
| files | testdata/page-1-markdown/index.html | file |
|
| files | testdata/page-1-markdown/index.html | file |
|
||||||
|
|||||||
@@ -522,7 +522,17 @@ Feature: /forms/chromium/convert/url
|
|||||||
Then the response header "Content-Type" should be "text/plain; charset=UTF-8"
|
Then the response header "Content-Type" should be "text/plain; charset=UTF-8"
|
||||||
Then the response body should match string:
|
Then the response body should match string:
|
||||||
"""
|
"""
|
||||||
Chromium does not handle the page ranges 'foo' (nativePageRanges)
|
Chromium does not handle the page ranges 'foo' (nativePageRanges) syntax
|
||||||
|
"""
|
||||||
|
Given I have a static server
|
||||||
|
When I make a "POST" request to Gotenberg at the "/forms/chromium/convert/url" endpoint with the following form data and header(s):
|
||||||
|
| url | http://host.docker.internal:%d/html/testdata/page-1-html/index.html | field |
|
||||||
|
| nativePageRanges | 2-3 | field |
|
||||||
|
Then the response status code should be 400
|
||||||
|
Then the response header "Content-Type" should be "text/plain; charset=UTF-8"
|
||||||
|
Then the response body should match string:
|
||||||
|
"""
|
||||||
|
The page ranges '2-3' (nativePageRanges) exceeds the page count
|
||||||
"""
|
"""
|
||||||
Given I have a static server
|
Given I have a static server
|
||||||
When I make a "POST" request to Gotenberg at the "/forms/chromium/convert/url" endpoint with the following form data and header(s):
|
When I make a "POST" request to Gotenberg at the "/forms/chromium/convert/url" endpoint with the following form data and header(s):
|
||||||
|
|||||||
Reference in New Issue
Block a user