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 { ...@@ -1058,14 +1058,13 @@ class PpdMetadataManagerImpl : public PpdMetadataManager {
const auto& parsed_reverse_index = const auto& parsed_reverse_index =
cached_reverse_indices_.at(metadata_name); cached_reverse_indices_.at(metadata_name);
// This is likely a bug: we'd expect that this reverse index // We expect this reverse index shard to contain the decomposition
// contains the decomposition for |effective_make_and_model|. // for |effective_make_and_model|.
if (!parsed_reverse_index.value.contains(effective_make_and_model)) { if (!parsed_reverse_index.value.contains(effective_make_and_model)) {
base::SequencedTaskRunnerHandle::Get()->PostTask( base::SequencedTaskRunnerHandle::Get()->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(std::move(cb), base::BindOnce(std::move(cb),
PpdProvider::CallbackResultCode::INTERNAL_ERROR, "", PpdProvider::CallbackResultCode::NOT_FOUND, "", ""));
""));
return; return;
} }
......
...@@ -259,7 +259,9 @@ class PpdProviderImpl : public PpdProvider { ...@@ -259,7 +259,9 @@ class PpdProviderImpl : public PpdProvider {
return; 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 // This method depends on forward indices, which are not
...@@ -683,7 +685,7 @@ std::string PpdProvider::PpdReferenceToCacheKey( ...@@ -683,7 +685,7 @@ std::string PpdProvider::PpdReferenceToCacheKey(
// static // static
scoped_refptr<PpdProvider> PpdProvider::Create( scoped_refptr<PpdProvider> PpdProvider::Create(
const std::string& browser_locale, const std::string& browser_locale,
network::mojom::URLLoaderFactory* loader_factory, LoaderFactoryGetter loader_factory_getter,
scoped_refptr<PpdCache> ppd_cache, scoped_refptr<PpdCache> ppd_cache,
const base::Version& current_version, const base::Version& current_version,
const PpdProvider::Options& options) { const PpdProvider::Options& options) {
......
...@@ -380,6 +380,12 @@ class PpdProviderTest : public ::testing::Test { ...@@ -380,6 +380,12 @@ class PpdProviderTest : public ::testing::Test {
})"}, })"},
{"metadata_v3/reverse_index-en-19.json", {"metadata_v3/reverse_index-en-19.json",
R"({ 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_a.ppd", kCupsFilterPpdContents},
{"ppds_for_metadata_v3/printer_b.ppd", kCupsFilter2PpdContents}, {"ppds_for_metadata_v3/printer_b.ppd", kCupsFilter2PpdContents},
...@@ -991,12 +997,12 @@ TEST_F(PpdProviderTest, ResolvePpdLicense) { ...@@ -991,12 +997,12 @@ TEST_F(PpdProviderTest, ResolvePpdLicense) {
EXPECT_EQ("", captured_resolve_ppd_license_[1].license); 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. // given effective make and model.
TEST_F(PpdProviderTest, ReverseLookup) { TEST_F(PpdProviderTest, ReverseLookup) {
auto provider = auto provider =
CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads, CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads,
PropagateLocaleToMetadataManager::kDoNotPropagate}); PropagateLocaleToMetadataManager::kDoPropagate});
StartFakePpdServer(); StartFakePpdServer();
std::string ref = "printer_a_ref"; std::string ref = "printer_a_ref";
provider->ReverseLookup(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