Commit 7ff526a7 authored by hanxi's avatar hanxi Committed by Commit bot

Fix WebApkInstallService::IsInstallInProgress() crash.

The crash happens in a incognito page when a A2HS banner shows for a
WebApp. It is caused since WebApkInstallServiceFactory didn't implemtent
GetBrowserContextToUse() which returns a nullptr as default. In this CL,
the same pointer of the original browser context is returned for the
incognito page, so calling of WebApkInstallerService::Get() can return an
null-empty instance of WebApkInstallerService.

Crash Stacktrace:

Thread 0 CRASHED [SIGSEGV @ 0x0000000c ] MAGIC SIGNATURE THREAD
Stack Quality20%Show frame trust levels
0xd1af55a0	(libmonochrome.so -__tree:878 )	WebApkInstallService::IsInstallInProgress(GURL const&)
0xd1aefe43	(libmonochrome.so -shortcut_helper.cc:273 )	ShortcutHelper::IsWebApkInstalled(content::BrowserContext*, GURL const&, GURL const&)
0xd1a24ea3	(libmonochrome.so -app_banner_manager.cc:244 )	banners::AppBannerManager::PerformInstallableCheck()
0xd1abafd7	(libmonochrome.so -app_banner_manager_android.cc:180 )	banners::AppBannerManagerAndroid::PerformInstallableCheck()
0xd1a25c91	(libmonochrome.so -app_banner_manager.cc:239 )	banners::AppBannerManager::OnDidGetManifest(InstallableData const&)
0xd1a548d5	(libmonochrome.so -callback.h:85 )	InstallableManager::RunCallback(std::__ndk1::pair<InstallableParams, base::Callback<void (InstallableData const&), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> > const&, InstallableStatusCode)
0xd1a54a4d	(libmonochrome.so -installable_manager.cc:246 )	InstallableManager::WorkOnTask()
0xd1a54d55	(libmonochrome.so -installable_manager.cc:288 )	InstallableManager::OnDidGetManifest(GURL const&, content::Manifest const&)

BUG=679826

Review-Url: https://codereview.chromium.org/2620403002
Cr-Commit-Position: refs/heads/master@{#443293}
parent 6d6c1221
......@@ -5,6 +5,7 @@
#include "chrome/browser/android/webapk/webapk_install_service_factory.h"
#include "chrome/browser/android/webapk/webapk_install_service.h"
#include "chrome/browser/profiles/incognito_helpers.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h"
// static
......@@ -30,3 +31,8 @@ KeyedService* WebApkInstallServiceFactory::BuildServiceInstanceFor(
content::BrowserContext* context) const {
return new WebApkInstallService(context);
}
content::BrowserContext* WebApkInstallServiceFactory::GetBrowserContextToUse(
content::BrowserContext* context) const {
return chrome::GetBrowserContextRedirectedInIncognito(context);
}
......@@ -28,6 +28,9 @@ class WebApkInstallServiceFactory : public BrowserContextKeyedServiceFactory {
KeyedService* BuildServiceInstanceFor(
content::BrowserContext* context) const override;
content::BrowserContext* GetBrowserContextToUse(
content::BrowserContext* context) const override;
DISALLOW_COPY_AND_ASSIGN(WebApkInstallServiceFactory);
};
......
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