Commit 581b612b authored by Kalvin Lee's avatar Kalvin Lee Committed by Commit Bot

PpdProvider v3: implement ReverseLookup()

This change implements PpdProvider::ReverseLookup(). This change also
corrects a logic error in PpdMetadataManager, in which I overzealously
assumed that callers always supply entries that we _must_ find in the
corresponding metadata (untrue: caller can simply supply gibberish, and
we should fail gracefully).

Bug: chromium:888189
Test: chromeos_unittests --gtest_filter='PpdProviderTest.ReverseLookup'
Test: chromeos_unittests --gtest_filter='PpdMetadataManagerTest.*'
Change-Id: Iebf70a0ad8d60044c031178a27bd3f5c83f32b06
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2357249
Commit-Queue: Kalvin Lee <kdlee@chromium.org>
Reviewed-by: default avatarLuum Habtemariam <luum@chromium.org>
Cr-Commit-Position: refs/heads/master@{#805895}
parent 485aaaa2
......@@ -1058,14 +1058,13 @@ class PpdMetadataManagerImpl : public PpdMetadataManager {
const auto& parsed_reverse_index =
cached_reverse_indices_.at(metadata_name);
// This is likely a bug: we'd expect that this reverse index
// contains the decomposition for |effective_make_and_model|.
// We expect this reverse index shard to contain the decomposition
// for |effective_make_and_model|.
if (!parsed_reverse_index.value.contains(effective_make_and_model)) {
base::SequencedTaskRunnerHandle::Get()->PostTask(
FROM_HERE,
base::BindOnce(std::move(cb),
PpdProvider::CallbackResultCode::INTERNAL_ERROR, "",
""));
PpdProvider::CallbackResultCode::NOT_FOUND, "", ""));
return;
}
......
......@@ -259,7 +259,9 @@ class PpdProviderImpl : public PpdProvider {
return;
}
// TODO(crbug.com/888189): implement this.
// Delegates directly to the PpdMetadataManager.
metadata_manager_->SplitMakeAndModel(effective_make_and_model, kMaxDataAge,
std::move(cb));
}
// This method depends on forward indices, which are not
......@@ -683,7 +685,7 @@ std::string PpdProvider::PpdReferenceToCacheKey(
// static
scoped_refptr<PpdProvider> PpdProvider::Create(
const std::string& browser_locale,
network::mojom::URLLoaderFactory* loader_factory,
LoaderFactoryGetter loader_factory_getter,
scoped_refptr<PpdCache> ppd_cache,
const base::Version& current_version,
const PpdProvider::Options& options) {
......
......@@ -380,6 +380,12 @@ class PpdProviderTest : public ::testing::Test {
})"},
{"metadata_v3/reverse_index-en-19.json",
R"({
"reverseIndex": {
"unused effective make and model": {
"manufacturer": "unused manufacturer",
"model": "unused model"
}
}
})"},
{"ppds_for_metadata_v3/printer_a.ppd", kCupsFilterPpdContents},
{"ppds_for_metadata_v3/printer_b.ppd", kCupsFilter2PpdContents},
......@@ -991,12 +997,12 @@ TEST_F(PpdProviderTest, ResolvePpdLicense) {
EXPECT_EQ("", captured_resolve_ppd_license_[1].license);
}
// Verifies that we can extract the Manufacturer and Model selectison for a
// Verifies that we can extract the Manufacturer and Model selection for a
// given effective make and model.
TEST_F(PpdProviderTest, ReverseLookup) {
auto provider =
CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads,
PropagateLocaleToMetadataManager::kDoNotPropagate});
PropagateLocaleToMetadataManager::kDoPropagate});
StartFakePpdServer();
std::string ref = "printer_a_ref";
provider->ReverseLookup(ref,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment