diff -up chromium-99.0.4844.51/printing/backend/cups_helper.cc.el7cups chromium-99.0.4844.51/printing/backend/cups_helper.cc --- chromium-99.0.4844.51/printing/backend/cups_helper.cc.el7cups 2022-02-28 19:05:55.000000000 -0500 +++ chromium-99.0.4844.51/printing/backend/cups_helper.cc 2022-03-05 15:17:45.516887985 -0500 @@ -34,18 +34,6 @@ namespace printing { // This section contains helper code for PPD parsing for semantic capabilities. namespace { -// Function availability can be tested by checking whether its address is not -// nullptr. Weak symbols remove the need for platform specific build flags and -// allow for appropriate CUPS usage on platforms with non-uniform version -// support, namely Linux. -#define WEAK_CUPS_FN(x) extern "C" __attribute__((weak)) decltype(x) x - -WEAK_CUPS_FN(httpConnect2); - -// Timeout for establishing a CUPS connection. It is expected that cupsd is -// able to start and respond on all systems within this duration. -constexpr base::TimeDelta kCupsTimeout = base::Seconds(5); - // CUPS default max copies value (parsed from kCupsMaxCopies PPD attribute). constexpr int32_t kDefaultMaxCopies = 9999; constexpr char kCupsMaxCopies[] = "cupsMaxCopies"; @@ -527,8 +515,7 @@ const int kDefaultIPPServerPort = 631; // Helper wrapper around http_t structure, with connection and cleanup // functionality. HttpConnectionCUPS::HttpConnectionCUPS(const GURL& print_server_url, - http_encryption_t encryption, - bool blocking) + http_encryption_t encryption) : http_(nullptr) { // If we have an empty url, use default print server. if (print_server_url.is_empty()) @@ -538,17 +525,10 @@ HttpConnectionCUPS::HttpConnectionCUPS(c if (port == url::PORT_UNSPECIFIED) port = kDefaultIPPServerPort; - if (httpConnect2) { - http_ = httpConnect2(print_server_url.host().c_str(), port, - /*addrlist=*/nullptr, AF_UNSPEC, encryption, - blocking ? 1 : 0, kCupsTimeout.InMilliseconds(), - /*cancel=*/nullptr); - } else { - // Continue to use deprecated CUPS calls because because older Linux - // distribution such as RHEL/CentOS 7 are shipped with CUPS 1.6. - http_ = - httpConnectEncrypt(print_server_url.host().c_str(), port, encryption); - } + // Continue to use deprecated CUPS calls because because older Linux + // distribution such as RHEL/CentOS 7 are shipped with CUPS 1.6. + http_ = + httpConnectEncrypt(print_server_url.host().c_str(), port, encryption); if (!http_) { LOG(ERROR) << "CP_CUPS: Failed connecting to print server: " @@ -556,8 +536,6 @@ HttpConnectionCUPS::HttpConnectionCUPS(c return; } - if (!httpConnect2) - httpBlocking(http_, blocking ? 1 : 0); } HttpConnectionCUPS::~HttpConnectionCUPS() { @@ -565,6 +543,10 @@ HttpConnectionCUPS::~HttpConnectionCUPS( httpClose(http_); } +void HttpConnectionCUPS::SetBlocking(bool blocking) { + httpBlocking(http_, blocking ? 1 : 0); +} + http_t* HttpConnectionCUPS::http() { return http_; } diff -up chromium-99.0.4844.51/printing/backend/cups_helper.h.el7cups chromium-99.0.4844.51/printing/backend/cups_helper.h --- chromium-99.0.4844.51/printing/backend/cups_helper.h.el7cups 2022-02-28 19:05:55.000000000 -0500 +++ chromium-99.0.4844.51/printing/backend/cups_helper.h 2022-03-05 15:17:45.517887991 -0500 @@ -34,10 +34,11 @@ constexpr cups_ptype_t kDestinationsFilt class COMPONENT_EXPORT(PRINT_BACKEND) HttpConnectionCUPS { public: HttpConnectionCUPS(const GURL& print_server_url, - http_encryption_t encryption, - bool blocking); + http_encryption_t encryption); ~HttpConnectionCUPS(); + void SetBlocking(bool blocking); + http_t* http(); private: diff -up chromium-99.0.4844.51/printing/backend/print_backend_cups.cc.el7cups chromium-99.0.4844.51/printing/backend/print_backend_cups.cc --- chromium-99.0.4844.51/printing/backend/print_backend_cups.cc.el7cups 2022-02-28 19:05:55.000000000 -0500 +++ chromium-99.0.4844.51/printing/backend/print_backend_cups.cc 2022-03-05 15:17:45.517887991 -0500 @@ -146,7 +146,7 @@ mojom::ResultCode PrintBackendCUPS::Enum // not showing as available. Using cupsEnumDests() allows us to do our own // filtering should any duplicates occur. CupsDestsData dests_data = {0, nullptr}; - ipp_status_t last_error = IPP_STATUS_OK; + ipp_status_t last_error = IPP_OK; if (print_server_url_.is_empty()) { VLOG(1) << "CUPS: using cupsEnumDests to enumerate printers"; if (!cupsEnumDests(CUPS_DEST_FLAGS_NONE, kCupsTimeoutMs, @@ -173,7 +173,7 @@ mojom::ResultCode PrintBackendCUPS::Enum // no printer drivers installed. Rely upon CUPS error code to distinguish // between these. DCHECK(!dests_data.dests); - if (last_error != IPP_STATUS_ERROR_NOT_FOUND) { + if (last_error != IPP_NOT_FOUND) { VLOG(1) << "CUPS: Error getting printers from CUPS server" << ", server: " << print_server_url_ << ", error: " << static_cast(last_error) << " - " @@ -336,7 +336,8 @@ int PrintBackendCUPS::GetDests(cups_dest if (print_server_url_.is_empty()) return cupsGetDests2(CUPS_HTTP_DEFAULT, dests); - HttpConnectionCUPS http(print_server_url_, cups_encryption_, blocking_); + HttpConnectionCUPS http(print_server_url_, cups_encryption_); + http.SetBlocking(blocking_); // This call must be made in the same scope as `http` because its destructor // closes the connection. @@ -362,7 +363,8 @@ base::FilePath PrintBackendCUPS::GetPPD( // connection will timeout after 10 seconds of no data period. And it will // return the same way as if data was completely and successfully // downloaded. - HttpConnectionCUPS http(print_server_url_, cups_encryption_, blocking_); + HttpConnectionCUPS http(print_server_url_, cups_encryption_); + http.SetBlocking(blocking_); ppd_file_path = cupsGetPPD2(http.http(), name); // Check if the get full PPD, since non-blocking call may simply return // normally after timeout expired. @@ -398,7 +400,8 @@ PrintBackendCUPS::ScopedDestination Prin // Use default (local) print server. dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, printer_name.c_str(), nullptr); } else { - HttpConnectionCUPS http(print_server_url_, cups_encryption_, blocking_); + HttpConnectionCUPS http(print_server_url_, cups_encryption_); + http.SetBlocking(blocking_); dest = cupsGetNamedDest(http.http(), printer_name.c_str(), nullptr); } return ScopedDestination(dest);