| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ios/chrome/browser/ui/omnibox/test_fake_suggestions_service.h" |
| |
| #import "components/search_engines/template_url_service.h" |
| #import "ios/chrome/browser/autocomplete/remote_suggestions_service_factory.h" |
| #import "ios/chrome/browser/search_engines/template_url_service_factory.h" |
| #import "ios/chrome/browser/ui/omnibox/fake_suggestions_database.h" |
| #import "services/network/public/cpp/resource_request.h" |
| #import "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" |
| #import "services/network/test/test_url_loader_factory.h" |
| |
| TestFakeSuggestionsService::TestFakeSuggestionsService() = default; |
| |
| TestFakeSuggestionsService::~TestFakeSuggestionsService() = default; |
| |
| // static |
| TestFakeSuggestionsService* TestFakeSuggestionsService::GetInstance() { |
| static base::NoDestructor<TestFakeSuggestionsService> instance; |
| return instance.get(); |
| } |
| |
| void TestFakeSuggestionsService::SetUp( |
| RemoteSuggestionsService* remote_suggestions_service, |
| TemplateURLService* template_url_service, |
| const base::FilePath& file_path) { |
| remote_suggestions_service_observation_.Observe(remote_suggestions_service); |
| |
| test_url_loader_factory_ = std::make_unique<network::TestURLLoaderFactory>(); |
| scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory = |
| base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( |
| test_url_loader_factory_.get()); |
| remote_suggestions_service->set_url_loader_factory_for_testing( |
| shared_url_loader_factory); |
| |
| fake_suggestions_database_ = |
| std::make_unique<FakeSuggestionsDatabase>(template_url_service); |
| fake_suggestions_database_->LoadSuggestionsFromFile(file_path); |
| } |
| |
| void TestFakeSuggestionsService::TearDown( |
| RemoteSuggestionsService* remote_suggestions_service, |
| network::mojom::URLLoaderFactory* url_loader_factory) { |
| scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory = |
| base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( |
| url_loader_factory); |
| |
| remote_suggestions_service->set_url_loader_factory_for_testing( |
| shared_url_loader_factory); |
| |
| remote_suggestions_service_observation_.Reset(); |
| test_url_loader_factory_.reset(); |
| fake_suggestions_database_.reset(); |
| } |
| |
| void TestFakeSuggestionsService::OnSuggestRequestStarting( |
| const base::UnguessableToken& request_id, |
| const network::ResourceRequest* request) { |
| DCHECK(fake_suggestions_database_); |
| DCHECK(test_url_loader_factory_); |
| |
| if (fake_suggestions_database_->HasFakeSuggestions(request->url)) { |
| std::string fake_suggestions = |
| fake_suggestions_database_->GetFakeSuggestions(request->url); |
| test_url_loader_factory_->AddResponse(request->url.spec(), fake_suggestions, |
| net::HTTP_OK); |
| } |
| } |