blob: c5e7736e4fcd09bba35e81d425bcafa72028ebda [file] [log] [blame]
// Copyright 2025 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/preloading/autocomplete_dictionary_preload_service.h"
#include <vector>
#include "chrome/browser/preloading/prefetch/search_prefetch/field_trial_settings.h"
#include "chrome/browser/profiles/profile.h"
#include "components/omnibox/browser/autocomplete_result.h"
#include "content/public/browser/storage_partition.h"
AutocompleteDictionaryPreloadService::AutocompleteDictionaryPreloadService(
Profile& profile)
: profile_(profile) {}
AutocompleteDictionaryPreloadService::~AutocompleteDictionaryPreloadService() =
default;
void AutocompleteDictionaryPreloadService::MaybePreload(
const AutocompleteResult& result) {
if (!base::FeatureList::IsEnabled(kAutocompleteDictionaryPreload)) {
return;
}
std::vector<GURL> match_destination_urls;
match_destination_urls.reserve(result.size());
for (const AutocompleteMatch& match : result) {
if (match.destination_url.SchemeIsHTTPOrHTTPS()) {
match_destination_urls.emplace_back(match.destination_url);
}
}
if (match_destination_urls.empty()) {
return;
}
// Keep the old handle until `PreloadSharedDictionaryInfoForDocument()` call
// to avoid reloading dictionaries in the network service.
mojo::PendingRemote<network::mojom::PreloadedSharedDictionaryInfoHandle>
old_handle = std::move(preloaded_shared_dictionaries_handle_);
preloaded_shared_dictionaries_handle_.reset();
profile_->GetDefaultStoragePartition()
->GetNetworkContext()
->PreloadSharedDictionaryInfoForDocument(
match_destination_urls, preloaded_shared_dictionaries_handle_
.InitWithNewPipeAndPassReceiver());
preloaded_shared_dictionaries_expiry_timer_.Start(
FROM_HERE, kAutocompletePreloadedDictionaryTimeout.Get(),
base::BindOnce(
&AutocompleteDictionaryPreloadService::DeletePreloadedDictionaries,
base::Unretained(this)));
}
void AutocompleteDictionaryPreloadService::DeletePreloadedDictionaries() {
preloaded_shared_dictionaries_handle_.reset();
}