Commit 2820ba5e authored by Ali Juma's avatar Ali Juma Committed by Commit Bot

[iOS] Initialize SafeBrowsingServiceImpl's SharedURLLoaderFactory eariler

This CL initializes SafeBrowsingServiceImpl's
SharedURLLoaderFactory in Initialize(), rather than two
thread hops after Initialize(). This ensures that
GetURLLoaderFactory() has a non-null return value when called
shortly after Initialize().

This fixes crashes that occur when CreateUrlChecker() is called
soon after Initialize(), resulting in the creation of a
RealTimeUrlLookupService that has a null URLLoaderFactory and
crashes when it tries to use it.

Bug: 1114706
Change-Id: I9142c82979954a272f351c14db20246730f720db
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2346862
Commit-Queue: Ali Juma <ajuma@chromium.org>
Reviewed-by: default avatarEugene But <eugenebut@chromium.org>
Cr-Commit-Position: refs/heads/master@{#797066}
parent a806d8e4
......@@ -67,6 +67,17 @@ void SafeBrowsingServiceImpl::Initialize(PrefService* prefs,
network_context_client_.BindNewPipeAndPassReceiver(),
safe_browsing_data_path));
auto url_loader_factory_params =
network::mojom::URLLoaderFactoryParams::New();
url_loader_factory_params->process_id = network::mojom::kBrowserProcessId;
url_loader_factory_params->is_corb_enabled = false;
network_context_client_->CreateURLLoaderFactory(
url_loader_factory_.BindNewPipeAndPassReceiver(),
std::move(url_loader_factory_params));
shared_url_loader_factory_ =
base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
url_loader_factory_.get());
// Watch for changes to the Safe Browsing opt-out preference.
pref_change_registrar_ = std::make_unique<PrefChangeRegistrar>();
pref_change_registrar_->Init(prefs);
......@@ -133,17 +144,7 @@ void SafeBrowsingServiceImpl::ClearCookies(
void SafeBrowsingServiceImpl::SetUpURLLoaderFactory(
mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver) {
DCHECK_CURRENTLY_ON(web::WebThread::UI);
auto url_loader_factory_params =
network::mojom::URLLoaderFactoryParams::New();
url_loader_factory_params->process_id = network::mojom::kBrowserProcessId;
url_loader_factory_params->is_corb_enabled = false;
network_context_client_->CreateURLLoaderFactory(
url_loader_factory_.BindNewPipeAndPassReceiver(),
std::move(url_loader_factory_params));
url_loader_factory_->Clone(std::move(receiver));
shared_url_loader_factory_ =
base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
url_loader_factory_.get());
}
void SafeBrowsingServiceImpl::UpdateSafeBrowsingEnabledState() {
......
......@@ -416,3 +416,27 @@ TEST_F(SafeBrowsingServiceTest, ClearCookies) {
}));
run_loop5.Run();
}
using SafeBrowsingServiceInitializationTest = PlatformTest;
// Verifies that GetURLLoaderFactory() has a non-null return value when called
// immediately after initialization.
TEST_F(SafeBrowsingServiceInitializationTest, GetURLLoaderFactory) {
web::WebTaskEnvironment task_environment;
TestChromeBrowserState::Builder builder;
std::unique_ptr<TestChromeBrowserState> browser_state = builder.Build();
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
scoped_refptr<SafeBrowsingService> safe_browsing_service =
base::MakeRefCounted<SafeBrowsingServiceImpl>();
safe_browsing_service->Initialize(browser_state->GetPrefs(),
temp_dir.GetPath());
EXPECT_TRUE(safe_browsing_service->GetURLLoaderFactory());
safe_browsing_service->ShutDown();
base::RunLoop().RunUntilIdle();
}
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