[printing] Filter non-job attributes from CUPS printer options
crrev.com/782198 enabled passing of printer options to job settings, but
that caused trouble for some users when non-job attributes were being
passed as well. Those extraneous attributes are passed by CUPS, so they
should be filtered.
Bug: 1156941
Change-Id: I5d2729974813a8b1f7f7b9f1d34c4d4b7e749cdc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3137654
Commit-Queue: Lei Zhang <[email protected]>
Reviewed-by: Lei Zhang <[email protected]>
Reviewed-by: Sean Kau <[email protected]>
Cr-Commit-Position: refs/heads/main@{#918253}
diff --git a/printing/print_settings_conversion.cc b/printing/print_settings_conversion.cc
index ee2aaea..49b11a3 100644
--- a/printing/print_settings_conversion.cc
+++ b/printing/print_settings_conversion.cc
@@ -12,7 +12,10 @@
#include <string>
#include <utility>
+#include "base/containers/contains.h"
+#include "base/containers/fixed_flat_set.h"
#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_piece.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "base/values.h"
@@ -221,8 +224,13 @@
const base::Value* advanced_settings =
job_settings.FindDictKey(kSettingAdvancedSettings);
if (advanced_settings) {
- for (const auto item : advanced_settings->DictItems())
- settings->advanced_settings().emplace(item.first, item.second.Clone());
+ for (const auto item : advanced_settings->DictItems()) {
+ static constexpr auto kNonJobAttributes =
+ base::MakeFixedFlatSet<base::StringPiece>(
+ {"printer-info", "printer-make-and-model", "system_driverinfo"});
+ if (!base::Contains(kNonJobAttributes, item.first))
+ settings->advanced_settings().emplace(item.first, item.second.Clone());
+ }
}
#endif // defined(OS_CHROMEOS) || (defined(OS_LINUX) && defined(USE_CUPS))