blob: 973259be07f7b80236ab86525cd77052588689a5 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/printing/printer_xml_parser_impl.h"
#include <memory>
#include <utility>
#include "base/functional/callback.h"
#include "base/values.h"
#include "chrome/services/printing/public/mojom/printer_xml_parser.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "printing/mojom/print.mojom.h"
#include "services/data_decoder/public/cpp/data_decoder.h"
namespace printing {
namespace {
void XmlPrinterCapabilitiesParsed(
PrinterXmlParserImpl::ParseXmlCallback callback,
data_decoder::DataDecoder::ValueOrError value_or_error) {
if (!value_or_error.has_value()) {
std::move(callback).Run(
mojom::PrinterCapabilitiesValueResult::NewResultCode(
mojom::ResultCode::kFailed));
return;
}
std::move(callback).Run(
mojom::PrinterCapabilitiesValueResult::NewCapabilities(
std::move(value_or_error.value())));
}
} // namespace
PrinterXmlParserImpl::PrinterXmlParserImpl() = default;
PrinterXmlParserImpl::~PrinterXmlParserImpl() = default;
void PrinterXmlParserImpl::ParseXmlForPrinterCapabilities(
const std::string& capabilities_xml,
ParseXmlCallback callback) {
if (!decoder_)
decoder_ = std::make_unique<data_decoder::DataDecoder>();
decoder_->ParseXml(
capabilities_xml,
data_decoder::mojom::XmlParser::WhitespaceBehavior::kIgnore,
base::BindOnce(&XmlPrinterCapabilitiesParsed, std::move(callback)));
}
mojo::PendingRemote<mojom::PrinterXmlParser> PrinterXmlParserImpl::GetRemote() {
mojo::PendingRemote<mojom::PrinterXmlParser> pending_remote;
receivers_.Add(this, pending_remote.InitWithNewPipeAndPassReceiver());
return pending_remote;
}
} // namespace printing