Commit efae3e00 authored by Ella Ge's avatar Ella Ge Committed by Commit Bot

[LargeSplash:2]Make WebAPK install include splash icon image data from hasher

This CL removes badge icon from webapk&shortcut install, including a2hs
and app banner.

For splash icon, we want to fetch it for building the webapk proto, but
don't want to do it together with primary icon, because it'll increase
latency, and we only need the splash icon data after the user has
initiated the install.

For webapks, we are downloading all useful image data when computing
the murmur2 hash, so we can use the the image data from
webapk_icon_hasher, similar to crrev.com/c/2047166 did for the
best shortcut icon.

Bug: 1043271
Change-Id: Ibbe5b80796794b3f1c4b75cd81cdfc32cc61dfff
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2032723Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Reviewed-by: default avatarPeter Kotwicz <pkotwicz@chromium.org>
Commit-Queue: Ella Ge <eirage@chromium.org>
Cr-Commit-Position: refs/heads/master@{#744134}
parent 96e7db66
...@@ -155,14 +155,12 @@ void AddShortcutWithSkBitmap(content::WebContents* web_contents, ...@@ -155,14 +155,12 @@ void AddShortcutWithSkBitmap(content::WebContents* web_contents,
std::unique_ptr<ShortcutInfo> ShortcutHelper::CreateShortcutInfo( std::unique_ptr<ShortcutInfo> ShortcutHelper::CreateShortcutInfo(
const GURL& manifest_url, const GURL& manifest_url,
const blink::Manifest& manifest, const blink::Manifest& manifest,
const GURL& primary_icon_url, const GURL& primary_icon_url) {
const GURL& badge_icon_url) {
auto shortcut_info = std::make_unique<ShortcutInfo>(GURL()); auto shortcut_info = std::make_unique<ShortcutInfo>(GURL());
if (!manifest.IsEmpty()) { if (!manifest.IsEmpty()) {
shortcut_info->UpdateFromManifest(manifest); shortcut_info->UpdateFromManifest(manifest);
shortcut_info->manifest_url = manifest_url; shortcut_info->manifest_url = manifest_url;
shortcut_info->best_primary_icon_url = primary_icon_url; shortcut_info->best_primary_icon_url = primary_icon_url;
shortcut_info->best_badge_icon_url = badge_icon_url;
} }
shortcut_info->ideal_splash_image_size_in_px = GetIdealSplashImageSizeInPx(); shortcut_info->ideal_splash_image_size_in_px = GetIdealSplashImageSizeInPx();
......
...@@ -32,8 +32,7 @@ class ShortcutHelper { ...@@ -32,8 +32,7 @@ class ShortcutHelper {
static std::unique_ptr<ShortcutInfo> CreateShortcutInfo( static std::unique_ptr<ShortcutInfo> CreateShortcutInfo(
const GURL& manifest_url, const GURL& manifest_url,
const blink::Manifest& manifest, const blink::Manifest& manifest,
const GURL& primary_icon_url, const GURL& primary_icon_url);
const GURL& badge_icon_url);
// Adds a shortcut to the launcher using a SkBitmap. The type of shortcut // Adds a shortcut to the launcher using a SkBitmap. The type of shortcut
// added depends on the properties in |info|. // added depends on the properties in |info|.
......
...@@ -103,6 +103,7 @@ message Image { ...@@ -103,6 +103,7 @@ message Image {
enum Usage { enum Usage {
PRIMARY_ICON = 1; PRIMARY_ICON = 1;
BADGE_ICON = 2; BADGE_ICON = 2;
SPLASH_ICON = 3;
} }
// Image's URL. // Image's URL.
......
...@@ -37,7 +37,6 @@ void WebApkInstallService::InstallAsync(content::WebContents* web_contents, ...@@ -37,7 +37,6 @@ void WebApkInstallService::InstallAsync(content::WebContents* web_contents,
const ShortcutInfo& shortcut_info, const ShortcutInfo& shortcut_info,
const SkBitmap& primary_icon, const SkBitmap& primary_icon,
bool is_primary_icon_maskable, bool is_primary_icon_maskable,
const SkBitmap& badge_icon,
WebappInstallSource install_source) { WebappInstallSource install_source) {
if (IsInstallInProgress(shortcut_info.manifest_url)) { if (IsInstallInProgress(shortcut_info.manifest_url)) {
ShortcutHelper::ShowWebApkInstallInProgressToast(); ShortcutHelper::ShowWebApkInstallInProgressToast();
...@@ -56,7 +55,6 @@ void WebApkInstallService::InstallAsync(content::WebContents* web_contents, ...@@ -56,7 +55,6 @@ void WebApkInstallService::InstallAsync(content::WebContents* web_contents,
auto observer = std::make_unique<LifetimeObserver>(web_contents); auto observer = std::make_unique<LifetimeObserver>(web_contents);
WebApkInstaller::InstallAsync( WebApkInstaller::InstallAsync(
browser_context_, shortcut_info, primary_icon, is_primary_icon_maskable, browser_context_, shortcut_info, primary_icon, is_primary_icon_maskable,
badge_icon,
base::Bind(&WebApkInstallService::OnFinishedInstall, base::Bind(&WebApkInstallService::OnFinishedInstall,
weak_ptr_factory_.GetWeakPtr(), base::Passed(&observer), weak_ptr_factory_.GetWeakPtr(), base::Passed(&observer),
shortcut_info, primary_icon, is_primary_icon_maskable)); shortcut_info, primary_icon, is_primary_icon_maskable));
......
...@@ -71,7 +71,6 @@ class WebApkInstallService : public KeyedService { ...@@ -71,7 +71,6 @@ class WebApkInstallService : public KeyedService {
const ShortcutInfo& shortcut_info, const ShortcutInfo& shortcut_info,
const SkBitmap& primary_icon, const SkBitmap& primary_icon,
bool is_primary_icon_maskable, bool is_primary_icon_maskable,
const SkBitmap& badge_icon,
WebappInstallSource install_source); WebappInstallSource install_source);
// Talks to the Chrome WebAPK server to update a WebAPK on the server and to // Talks to the Chrome WebAPK server to update a WebAPK on the server and to
......
...@@ -181,11 +181,14 @@ void SetImageData(webapk::Image* image, const SkBitmap& icon) { ...@@ -181,11 +181,14 @@ void SetImageData(webapk::Image* image, const SkBitmap& icon) {
// Populates webapk::WebApk and returns it. // Populates webapk::WebApk and returns it.
// Must be called on a worker thread because it encodes an SkBitmap. // Must be called on a worker thread because it encodes an SkBitmap.
// The splash icon can be passed either via |icon_url_to_murmur2_hash| or via
// |splash_icon| parameter. |splash_icon| parameter is only used when the
// splash icon URL is unknown.
std::unique_ptr<std::string> BuildProtoInBackground( std::unique_ptr<std::string> BuildProtoInBackground(
const ShortcutInfo& shortcut_info, const ShortcutInfo& shortcut_info,
const SkBitmap& primary_icon, const SkBitmap& primary_icon,
bool is_primary_icon_maskable, bool is_primary_icon_maskable,
const SkBitmap& badge_icon, const SkBitmap& splash_icon,
const std::string& package_name, const std::string& package_name,
const std::string& version, const std::string& version,
std::map<std::string, WebApkIconHasher::Icon> icon_url_to_murmur2_hash, std::map<std::string, WebApkIconHasher::Icon> icon_url_to_murmur2_hash,
...@@ -262,10 +265,11 @@ std::unique_ptr<std::string> BuildProtoInBackground( ...@@ -262,10 +265,11 @@ std::unique_ptr<std::string> BuildProtoInBackground(
best_primary_icon_image->add_purposes(webapk::Image::ANY); best_primary_icon_image->add_purposes(webapk::Image::ANY);
} }
if (!badge_icon.drawsNothing()) { if (!splash_icon.drawsNothing()) {
webapk::Image* best_badge_icon_image = web_app_manifest->add_icons(); webapk::Image* splash_icon_image = web_app_manifest->add_icons();
SetImageData(best_badge_icon_image, badge_icon); SetImageData(splash_icon_image, splash_icon);
best_badge_icon_image->add_usages(webapk::Image::BADGE_ICON); splash_icon_image->add_usages(webapk::Image::SPLASH_ICON);
splash_icon_image->add_purposes(webapk::Image::ANY);
} }
} }
...@@ -285,12 +289,13 @@ std::unique_ptr<std::string> BuildProtoInBackground( ...@@ -285,12 +289,13 @@ std::unique_ptr<std::string> BuildProtoInBackground(
image->add_purposes(webapk::Image::ANY); image->add_purposes(webapk::Image::ANY);
} }
} }
if (icon_url == shortcut_info.best_badge_icon_url.spec()) { if (icon_url == shortcut_info.splash_image_url.spec()) {
if (shortcut_info.best_badge_icon_url != if (shortcut_info.splash_image_url !=
shortcut_info.best_primary_icon_url) { shortcut_info.best_primary_icon_url) {
SetImageData(image, badge_icon); image->set_image_data(it->second.data);
} }
image->add_usages(webapk::Image::BADGE_ICON); image->add_usages(webapk::Image::SPLASH_ICON);
image->add_purposes(webapk::Image::ANY);
} }
} }
...@@ -342,8 +347,10 @@ bool StoreUpdateRequestToFileInBackground( ...@@ -342,8 +347,10 @@ bool StoreUpdateRequestToFileInBackground(
base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
base::BlockingType::MAY_BLOCK); base::BlockingType::MAY_BLOCK);
// TODO(crbug.com/1043271): Passing an empty SkBitmap for now as webapk update
// does not include splash_icon image yet.
std::unique_ptr<std::string> proto = BuildProtoInBackground( std::unique_ptr<std::string> proto = BuildProtoInBackground(
shortcut_info, primary_icon, is_primary_icon_maskable, badge_icon, shortcut_info, primary_icon, is_primary_icon_maskable, SkBitmap(),
package_name, version, std::move(icon_url_to_murmur2_hash), package_name, version, std::move(icon_url_to_murmur2_hash),
is_manifest_stale, update_reason); is_manifest_stale, update_reason);
...@@ -385,12 +392,11 @@ void WebApkInstaller::InstallAsync(content::BrowserContext* context, ...@@ -385,12 +392,11 @@ void WebApkInstaller::InstallAsync(content::BrowserContext* context,
const ShortcutInfo& shortcut_info, const ShortcutInfo& shortcut_info,
const SkBitmap& primary_icon, const SkBitmap& primary_icon,
bool is_primary_icon_maskable, bool is_primary_icon_maskable,
const SkBitmap& badge_icon,
FinishCallback finish_callback) { FinishCallback finish_callback) {
// The installer will delete itself when it is done. // The installer will delete itself when it is done.
WebApkInstaller* installer = new WebApkInstaller(context); WebApkInstaller* installer = new WebApkInstaller(context);
installer->InstallAsync(shortcut_info, primary_icon, is_primary_icon_maskable, installer->InstallAsync(shortcut_info, primary_icon, is_primary_icon_maskable,
badge_icon, std::move(finish_callback)); std::move(finish_callback));
} }
// static // static
...@@ -407,10 +413,9 @@ void WebApkInstaller::InstallAsyncForTesting(WebApkInstaller* installer, ...@@ -407,10 +413,9 @@ void WebApkInstaller::InstallAsyncForTesting(WebApkInstaller* installer,
const ShortcutInfo& shortcut_info, const ShortcutInfo& shortcut_info,
const SkBitmap& primary_icon, const SkBitmap& primary_icon,
bool is_primary_icon_maskable, bool is_primary_icon_maskable,
const SkBitmap& badge_icon,
FinishCallback callback) { FinishCallback callback) {
installer->InstallAsync(shortcut_info, primary_icon, is_primary_icon_maskable, installer->InstallAsync(shortcut_info, primary_icon, is_primary_icon_maskable,
badge_icon, std::move(callback)); std::move(callback));
} }
// static // static
...@@ -437,7 +442,7 @@ void WebApkInstaller::BuildProto( ...@@ -437,7 +442,7 @@ void WebApkInstaller::BuildProto(
const ShortcutInfo& shortcut_info, const ShortcutInfo& shortcut_info,
const SkBitmap& primary_icon, const SkBitmap& primary_icon,
bool is_primary_icon_maskable, bool is_primary_icon_maskable,
const SkBitmap& badge_icon, const SkBitmap& splash_icon,
const std::string& package_name, const std::string& package_name,
const std::string& version, const std::string& version,
std::map<std::string, WebApkIconHasher::Icon> icon_url_to_murmur2_hash, std::map<std::string, WebApkIconHasher::Icon> icon_url_to_murmur2_hash,
...@@ -446,7 +451,7 @@ void WebApkInstaller::BuildProto( ...@@ -446,7 +451,7 @@ void WebApkInstaller::BuildProto(
base::PostTaskAndReplyWithResult( base::PostTaskAndReplyWithResult(
GetBackgroundTaskRunner().get(), FROM_HERE, GetBackgroundTaskRunner().get(), FROM_HERE,
base::BindOnce(&BuildProtoInBackground, shortcut_info, primary_icon, base::BindOnce(&BuildProtoInBackground, shortcut_info, primary_icon,
is_primary_icon_maskable, badge_icon, package_name, is_primary_icon_maskable, splash_icon, package_name,
version, std::move(icon_url_to_murmur2_hash), version, std::move(icon_url_to_murmur2_hash),
is_manifest_stale, WebApkUpdateReason::NONE), is_manifest_stale, WebApkUpdateReason::NONE),
std::move(callback)); std::move(callback));
...@@ -538,13 +543,11 @@ void WebApkInstaller::CreateJavaRef() { ...@@ -538,13 +543,11 @@ void WebApkInstaller::CreateJavaRef() {
void WebApkInstaller::InstallAsync(const ShortcutInfo& shortcut_info, void WebApkInstaller::InstallAsync(const ShortcutInfo& shortcut_info,
const SkBitmap& primary_icon, const SkBitmap& primary_icon,
bool is_primary_icon_maskable, bool is_primary_icon_maskable,
const SkBitmap& badge_icon,
FinishCallback finish_callback) { FinishCallback finish_callback) {
install_duration_timer_.reset(new base::ElapsedTimer()); install_duration_timer_.reset(new base::ElapsedTimer());
install_shortcut_info_.reset(new ShortcutInfo(shortcut_info)); install_shortcut_info_.reset(new ShortcutInfo(shortcut_info));
install_primary_icon_ = primary_icon; install_primary_icon_ = primary_icon;
install_badge_icon_ = badge_icon;
is_primary_icon_maskable_ = is_primary_icon_maskable; is_primary_icon_maskable_ = is_primary_icon_maskable;
short_name_ = shortcut_info.short_name; short_name_ = shortcut_info.short_name;
finish_callback_ = std::move(finish_callback); finish_callback_ = std::move(finish_callback);
...@@ -666,10 +669,10 @@ void WebApkInstaller::OnHaveSufficientSpaceForInstall() { ...@@ -666,10 +669,10 @@ void WebApkInstaller::OnHaveSufficientSpaceForInstall() {
// should be fast because the icon should be in the HTTP cache. // should be fast because the icon should be in the HTTP cache.
std::set<GURL> icons{install_shortcut_info_->best_primary_icon_url}; std::set<GURL> icons{install_shortcut_info_->best_primary_icon_url};
if (!install_shortcut_info_->best_badge_icon_url.is_empty() && if (!install_shortcut_info_->splash_image_url.is_empty() &&
install_shortcut_info_->best_badge_icon_url != install_shortcut_info_->splash_image_url !=
install_shortcut_info_->best_primary_icon_url) { install_shortcut_info_->best_primary_icon_url) {
icons.insert(install_shortcut_info_->best_badge_icon_url); icons.insert(install_shortcut_info_->splash_image_url);
} }
for (const auto& shortcut_icon : for (const auto& shortcut_icon :
...@@ -692,8 +695,10 @@ void WebApkInstaller::OnGotIconMurmur2Hashes( ...@@ -692,8 +695,10 @@ void WebApkInstaller::OnGotIconMurmur2Hashes(
return; return;
} }
// Using empty |splash_icon| here because in this code path (WebApk install),
// we are using the splash icon data from |hashes|.
BuildProto(*install_shortcut_info_, install_primary_icon_, BuildProto(*install_shortcut_info_, install_primary_icon_,
is_primary_icon_maskable_, install_badge_icon_, is_primary_icon_maskable_, SkBitmap() /* splash_icon */,
"" /* package_name */, "" /* version */, std::move(*hashes), "" /* package_name */, "" /* version */, std::move(*hashes),
false /* is_manifest_stale */, false /* is_manifest_stale */,
base::BindOnce(&WebApkInstaller::SendRequest, base::BindOnce(&WebApkInstaller::SendRequest,
......
...@@ -63,7 +63,6 @@ class WebApkInstaller { ...@@ -63,7 +63,6 @@ class WebApkInstaller {
const ShortcutInfo& shortcut_info, const ShortcutInfo& shortcut_info,
const SkBitmap& primary_icon, const SkBitmap& primary_icon,
bool is_primary_icon_maskable, bool is_primary_icon_maskable,
const SkBitmap& badge_icon,
FinishCallback finish_callback); FinishCallback finish_callback);
// Creates a self-owned WebApkInstaller instance and talks to the Chrome // Creates a self-owned WebApkInstaller instance and talks to the Chrome
...@@ -80,7 +79,6 @@ class WebApkInstaller { ...@@ -80,7 +79,6 @@ class WebApkInstaller {
const ShortcutInfo& shortcut_info, const ShortcutInfo& shortcut_info,
const SkBitmap& primary_icon, const SkBitmap& primary_icon,
bool is_primary_icon_maskable, bool is_primary_icon_maskable,
const SkBitmap& badge_icon,
FinishCallback callback); FinishCallback callback);
// Calls the private function |UpdateAsync| for testing. // Calls the private function |UpdateAsync| for testing.
...@@ -111,7 +109,7 @@ class WebApkInstaller { ...@@ -111,7 +109,7 @@ class WebApkInstaller {
const ShortcutInfo& shortcut_info, const ShortcutInfo& shortcut_info,
const SkBitmap& primary_icon, const SkBitmap& primary_icon,
bool is_primary_icon_maskable, bool is_primary_icon_maskable,
const SkBitmap& badge_icon, const SkBitmap& splash_icon,
const std::string& package_name, const std::string& package_name,
const std::string& version, const std::string& version,
std::map<std::string, WebApkIconHasher::Icon> icon_url_to_murmur2_hash, std::map<std::string, WebApkIconHasher::Icon> icon_url_to_murmur2_hash,
...@@ -126,7 +124,7 @@ class WebApkInstaller { ...@@ -126,7 +124,7 @@ class WebApkInstaller {
const ShortcutInfo& shortcut_info, const ShortcutInfo& shortcut_info,
const SkBitmap& primary_icon, const SkBitmap& primary_icon,
bool is_primary_icon_maskable, bool is_primary_icon_maskable,
const SkBitmap& badge_icon, const SkBitmap& splash_icon,
const std::string& package_name, const std::string& package_name,
const std::string& version, const std::string& version,
std::map<std::string, WebApkIconHasher::Icon> icon_url_to_murmur2_hash, std::map<std::string, WebApkIconHasher::Icon> icon_url_to_murmur2_hash,
...@@ -164,7 +162,6 @@ class WebApkInstaller { ...@@ -164,7 +162,6 @@ class WebApkInstaller {
void InstallAsync(const ShortcutInfo& shortcut_info, void InstallAsync(const ShortcutInfo& shortcut_info,
const SkBitmap& primary_icon, const SkBitmap& primary_icon,
bool is_primary_icon_maskable, bool is_primary_icon_maskable,
const SkBitmap& badge_icon,
FinishCallback finish_callback); FinishCallback finish_callback);
// Talks to the Chrome WebAPK server to update a WebAPK on the server and to // Talks to the Chrome WebAPK server to update a WebAPK on the server and to
...@@ -212,7 +209,6 @@ class WebApkInstaller { ...@@ -212,7 +209,6 @@ class WebApkInstaller {
// Data for installs. // Data for installs.
std::unique_ptr<ShortcutInfo> install_shortcut_info_; std::unique_ptr<ShortcutInfo> install_shortcut_info_;
SkBitmap install_primary_icon_; SkBitmap install_primary_icon_;
SkBitmap install_badge_icon_;
bool is_primary_icon_maskable_; bool is_primary_icon_maskable_;
......
...@@ -53,7 +53,6 @@ InstallableParams ParamsToPerformManifestAndIconFetch() { ...@@ -53,7 +53,6 @@ InstallableParams ParamsToPerformManifestAndIconFetch() {
params.valid_primary_icon = true; params.valid_primary_icon = true;
params.prefer_maskable_icon = params.prefer_maskable_icon =
ShortcutHelper::DoesAndroidSupportMaskableIcons(); ShortcutHelper::DoesAndroidSupportMaskableIcons();
params.valid_badge_icon = true;
params.wait_for_worker = true; params.wait_for_worker = true;
return params; return params;
} }
...@@ -254,10 +253,6 @@ void AddToHomescreenDataFetcher::OnDidGetManifestAndIcons( ...@@ -254,10 +253,6 @@ void AddToHomescreenDataFetcher::OnDidGetManifestAndIcons(
data.manifest->icons, shortcut_info_.ideal_splash_image_size_in_px, data.manifest->icons, shortcut_info_.ideal_splash_image_size_in_px,
shortcut_info_.minimum_splash_image_size_in_px, shortcut_info_.minimum_splash_image_size_in_px,
blink::Manifest::ImageResource::Purpose::ANY); blink::Manifest::ImageResource::Purpose::ANY);
if (data.badge_icon) {
shortcut_info_.best_badge_icon_url = data.badge_icon_url;
badge_icon_ = *data.badge_icon;
}
installable_manager_->GetData( installable_manager_->GetData(
ParamsToPerformInstallableCheck(), ParamsToPerformInstallableCheck(),
...@@ -378,5 +373,6 @@ void AddToHomescreenDataFetcher::OnIconCreated(bool use_for_launcher, ...@@ -378,5 +373,6 @@ void AddToHomescreenDataFetcher::OnIconCreated(bool use_for_launcher,
primary_icon_ = icon_for_view; primary_icon_ = icon_for_view;
if (is_icon_generated) if (is_icon_generated)
shortcut_info_.best_primary_icon_url = GURL(); shortcut_info_.best_primary_icon_url = GURL();
observer_->OnDataAvailable(shortcut_info_, icon_for_view, badge_icon_);
observer_->OnDataAvailable(shortcut_info_, icon_for_view);
} }
...@@ -39,8 +39,7 @@ class AddToHomescreenDataFetcher : public content::WebContentsObserver { ...@@ -39,8 +39,7 @@ class AddToHomescreenDataFetcher : public content::WebContentsObserver {
// Called when all the data needed to prompt the user to add to home screen // Called when all the data needed to prompt the user to add to home screen
// is available. // is available.
virtual void OnDataAvailable(const ShortcutInfo& info, virtual void OnDataAvailable(const ShortcutInfo& info,
const SkBitmap& primary_icon, const SkBitmap& primary_icon) = 0;
const SkBitmap& badge_icon) = 0;
protected: protected:
virtual ~Observer() {} virtual ~Observer() {}
...@@ -63,7 +62,6 @@ class AddToHomescreenDataFetcher : public content::WebContentsObserver { ...@@ -63,7 +62,6 @@ class AddToHomescreenDataFetcher : public content::WebContentsObserver {
const WebApplicationInfo& web_app_info); const WebApplicationInfo& web_app_info);
// Accessors, etc. // Accessors, etc.
const SkBitmap& badge_icon() const { return badge_icon_; }
const SkBitmap& primary_icon() const { return primary_icon_; } const SkBitmap& primary_icon() const { return primary_icon_; }
ShortcutInfo& shortcut_info() { return shortcut_info_; } ShortcutInfo& shortcut_info() { return shortcut_info_; }
bool has_maskable_primary_icon() const { return has_maskable_primary_icon_; } bool has_maskable_primary_icon() const { return has_maskable_primary_icon_; }
...@@ -101,7 +99,6 @@ class AddToHomescreenDataFetcher : public content::WebContentsObserver { ...@@ -101,7 +99,6 @@ class AddToHomescreenDataFetcher : public content::WebContentsObserver {
// The icons must only be set on the UI thread for thread safety. // The icons must only be set on the UI thread for thread safety.
SkBitmap raw_primary_icon_; SkBitmap raw_primary_icon_;
SkBitmap badge_icon_;
SkBitmap primary_icon_; SkBitmap primary_icon_;
ShortcutInfo shortcut_info_; ShortcutInfo shortcut_info_;
bool has_maskable_primary_icon_; bool has_maskable_primary_icon_;
......
...@@ -74,8 +74,7 @@ class ObserverWaiter : public AddToHomescreenDataFetcher::Observer { ...@@ -74,8 +74,7 @@ class ObserverWaiter : public AddToHomescreenDataFetcher::Observer {
} }
void OnDataAvailable(const ShortcutInfo& info, void OnDataAvailable(const ShortcutInfo& info,
const SkBitmap& primary_icon, const SkBitmap& primary_icon) override {
const SkBitmap& badge_icon) override {
// This should only be called once. // This should only be called once.
EXPECT_FALSE(data_available_); EXPECT_FALSE(data_available_);
EXPECT_TRUE(title_available_); EXPECT_TRUE(title_available_);
...@@ -162,9 +161,8 @@ class TestInstallableManager : public InstallableManager { ...@@ -162,9 +161,8 @@ class TestInstallableManager : public InstallableManager {
{std::move(errors), GURL(kDefaultManifestUrl), &manifest_, {std::move(errors), GURL(kDefaultManifestUrl), &manifest_,
params.valid_primary_icon ? primary_icon_url_ : GURL(), params.valid_primary_icon ? primary_icon_url_ : GURL(),
params.valid_primary_icon ? primary_icon_.get() : nullptr, params.valid_primary_icon ? primary_icon_.get() : nullptr,
params.prefer_maskable_icon, params.prefer_maskable_icon, GURL() /* splash_icon_url */,
params.valid_badge_icon ? badge_icon_url_ : GURL(), nullptr /* splash_icon */,
params.valid_badge_icon ? badge_icon_.get() : nullptr,
params.valid_manifest ? is_installable : false, params.valid_manifest ? is_installable : false,
params.has_worker ? is_installable : false}); params.has_worker ? is_installable : false});
} }
...@@ -178,10 +176,6 @@ class TestInstallableManager : public InstallableManager { ...@@ -178,10 +176,6 @@ class TestInstallableManager : public InstallableManager {
primary_icon_url_ = manifest_.icons[0].src; primary_icon_url_ = manifest_.icons[0].src;
primary_icon_.reset( primary_icon_.reset(
new SkBitmap(gfx::test::CreateBitmap(kIconSizePx, kIconSizePx))); new SkBitmap(gfx::test::CreateBitmap(kIconSizePx, kIconSizePx)));
badge_icon_url_ = manifest_.icons[0].src;
badge_icon_.reset(
new SkBitmap(gfx::test::CreateBitmap(kIconSizePx, kIconSizePx)));
} }
} }
...@@ -196,9 +190,7 @@ class TestInstallableManager : public InstallableManager { ...@@ -196,9 +190,7 @@ class TestInstallableManager : public InstallableManager {
private: private:
blink::Manifest manifest_; blink::Manifest manifest_;
GURL primary_icon_url_; GURL primary_icon_url_;
GURL badge_icon_url_;
std::unique_ptr<SkBitmap> primary_icon_; std::unique_ptr<SkBitmap> primary_icon_;
std::unique_ptr<SkBitmap> badge_icon_;
bool is_installable_ = true; bool is_installable_ = true;
...@@ -324,8 +316,7 @@ TEST_F(AddToHomescreenDataFetcherTest, NoIconManifest) { ...@@ -324,8 +316,7 @@ TEST_F(AddToHomescreenDataFetcherTest, NoIconManifest) {
CheckHistograms(histograms); CheckHistograms(histograms);
EXPECT_TRUE(fetcher->shortcut_info().best_primary_icon_url.is_empty()); EXPECT_TRUE(fetcher->shortcut_info().best_primary_icon_url.is_empty());
EXPECT_TRUE(fetcher->badge_icon().drawsNothing()); EXPECT_TRUE(fetcher->shortcut_info().splash_image_url.is_empty());
EXPECT_TRUE(fetcher->shortcut_info().best_badge_icon_url.is_empty());
} }
// Check that the AddToHomescreenDataFetcher::Observer methods are called // Check that the AddToHomescreenDataFetcher::Observer methods are called
...@@ -467,9 +458,8 @@ TEST_F(AddToHomescreenDataFetcherTest, InstallableManifest) { ...@@ -467,9 +458,8 @@ TEST_F(AddToHomescreenDataFetcherTest, InstallableManifest) {
EXPECT_EQ(fetcher->shortcut_info().best_primary_icon_url, EXPECT_EQ(fetcher->shortcut_info().best_primary_icon_url,
GURL(kDefaultIconUrl)); GURL(kDefaultIconUrl));
// No badge icon as InstallableManager does not fetch badge icon. // Check that splash icon url has been selected.
EXPECT_TRUE(fetcher->badge_icon().drawsNothing()); EXPECT_EQ(fetcher->shortcut_info().splash_image_url, GURL(kDefaultIconUrl));
EXPECT_TRUE(fetcher->shortcut_info().best_badge_icon_url.is_empty());
CheckHistograms(histograms); CheckHistograms(histograms);
} }
......
...@@ -66,8 +66,7 @@ void AddToHomescreenInstaller::InstallWebApk( ...@@ -66,8 +66,7 @@ void AddToHomescreenInstaller::InstallWebApk(
const AddToHomescreenParams& params) { const AddToHomescreenParams& params) {
WebApkInstallService::Get(web_contents->GetBrowserContext()) WebApkInstallService::Get(web_contents->GetBrowserContext())
->InstallAsync(web_contents, *(params.shortcut_info), params.primary_icon, ->InstallAsync(web_contents, *(params.shortcut_info), params.primary_icon,
params.has_maskable_primary_icon, params.badge_icon, params.has_maskable_primary_icon, params.install_source);
params.install_source);
} }
// static // static
......
...@@ -154,15 +154,13 @@ void AddToHomescreenMediator::OnUserTitleAvailable( ...@@ -154,15 +154,13 @@ void AddToHomescreenMediator::OnUserTitleAvailable(
} }
void AddToHomescreenMediator::OnDataAvailable(const ShortcutInfo& info, void AddToHomescreenMediator::OnDataAvailable(const ShortcutInfo& info,
const SkBitmap& display_icon, const SkBitmap& display_icon) {
const SkBitmap& badge_icon) {
params_ = std::make_unique<AddToHomescreenParams>(); params_ = std::make_unique<AddToHomescreenParams>();
params_->app_type = info.source == ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN_PWA params_->app_type = info.source == ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN_PWA
? AddToHomescreenParams::AppType::WEBAPK ? AddToHomescreenParams::AppType::WEBAPK
: AddToHomescreenParams::AppType::SHORTCUT; : AddToHomescreenParams::AppType::SHORTCUT;
params_->shortcut_info = std::make_unique<ShortcutInfo>(info); params_->shortcut_info = std::make_unique<ShortcutInfo>(info);
params_->primary_icon = data_fetcher_->primary_icon(); params_->primary_icon = data_fetcher_->primary_icon();
params_->badge_icon = badge_icon;
params_->has_maskable_primary_icon = params_->has_maskable_primary_icon =
data_fetcher_->has_maskable_primary_icon(); data_fetcher_->has_maskable_primary_icon();
params_->install_source = InstallableMetrics::GetInstallSource( params_->install_source = InstallableMetrics::GetInstallSource(
......
...@@ -76,8 +76,7 @@ class AddToHomescreenMediator : public AddToHomescreenDataFetcher::Observer { ...@@ -76,8 +76,7 @@ class AddToHomescreenMediator : public AddToHomescreenDataFetcher::Observer {
bool is_webapk_compatible) override; bool is_webapk_compatible) override;
void OnDataAvailable(const ShortcutInfo& info, void OnDataAvailable(const ShortcutInfo& info,
const SkBitmap& display_icon, const SkBitmap& display_icon) override;
const SkBitmap& badge_icon) override;
void RecordEventForAppMenu(AddToHomescreenInstaller::Event event, void RecordEventForAppMenu(AddToHomescreenInstaller::Event event,
const AddToHomescreenParams& a2hs_params); const AddToHomescreenParams& a2hs_params);
......
...@@ -25,7 +25,6 @@ struct AddToHomescreenParams { ...@@ -25,7 +25,6 @@ struct AddToHomescreenParams {
AppType app_type; AppType app_type;
SkBitmap primary_icon; SkBitmap primary_icon;
SkBitmap badge_icon;
bool has_maskable_primary_icon = false; bool has_maskable_primary_icon = false;
std::unique_ptr<ShortcutInfo> shortcut_info; std::unique_ptr<ShortcutInfo> shortcut_info;
WebappInstallSource install_source; WebappInstallSource install_source;
......
...@@ -165,7 +165,6 @@ InstallableParams ...@@ -165,7 +165,6 @@ InstallableParams
AppBannerManagerAndroid::ParamsToPerformInstallableWebAppCheck() { AppBannerManagerAndroid::ParamsToPerformInstallableWebAppCheck() {
InstallableParams params = InstallableParams params =
AppBannerManager::ParamsToPerformInstallableWebAppCheck(); AppBannerManager::ParamsToPerformInstallableWebAppCheck();
params.valid_badge_icon = true;
params.prefer_maskable_icon = params.prefer_maskable_icon =
ShortcutHelper::DoesAndroidSupportMaskableIcons(); ShortcutHelper::DoesAndroidSupportMaskableIcons();
...@@ -187,18 +186,6 @@ void AppBannerManagerAndroid::PerformInstallableWebAppCheck() { ...@@ -187,18 +186,6 @@ void AppBannerManagerAndroid::PerformInstallableWebAppCheck() {
AppBannerManager::PerformInstallableWebAppCheck(); AppBannerManager::PerformInstallableWebAppCheck();
} }
void AppBannerManagerAndroid::OnDidPerformInstallableWebAppCheck(
const InstallableData& data) {
if (data.badge_icon && !data.badge_icon->drawsNothing()) {
DCHECK(!data.badge_icon_url.is_empty());
badge_icon_url_ = data.badge_icon_url;
badge_icon_ = *data.badge_icon;
}
AppBannerManager::OnDidPerformInstallableWebAppCheck(data);
}
void AppBannerManagerAndroid::ResetCurrentPageData() { void AppBannerManagerAndroid::ResetCurrentPageData() {
AppBannerManager::ResetCurrentPageData(); AppBannerManager::ResetCurrentPageData();
native_app_data_.Reset(); native_app_data_.Reset();
...@@ -214,9 +201,8 @@ void AppBannerManagerAndroid::ShowBannerUi(WebappInstallSource install_source) { ...@@ -214,9 +201,8 @@ void AppBannerManagerAndroid::ShowBannerUi(WebappInstallSource install_source) {
if (native_app_data_.is_null()) { if (native_app_data_.is_null()) {
a2hs_params->app_type = AddToHomescreenParams::AppType::WEBAPK; a2hs_params->app_type = AddToHomescreenParams::AppType::WEBAPK;
a2hs_params->shortcut_info = ShortcutHelper::CreateShortcutInfo( a2hs_params->shortcut_info = ShortcutHelper::CreateShortcutInfo(
manifest_url_, manifest_, primary_icon_url_, badge_icon_url_); manifest_url_, manifest_, primary_icon_url_);
a2hs_params->install_source = install_source; a2hs_params->install_source = install_source;
a2hs_params->badge_icon = badge_icon_;
a2hs_params->has_maskable_primary_icon = has_maskable_primary_icon_; a2hs_params->has_maskable_primary_icon = has_maskable_primary_icon_;
} else { } else {
a2hs_params->app_type = AddToHomescreenParams::AppType::NATIVE; a2hs_params->app_type = AddToHomescreenParams::AppType::NATIVE;
......
...@@ -84,8 +84,6 @@ class AppBannerManagerAndroid ...@@ -84,8 +84,6 @@ class AppBannerManagerAndroid
void PerformInstallableChecks() override; void PerformInstallableChecks() override;
InstallableParams ParamsToPerformInstallableWebAppCheck() override; InstallableParams ParamsToPerformInstallableWebAppCheck() override;
void PerformInstallableWebAppCheck() override; void PerformInstallableWebAppCheck() override;
void OnDidPerformInstallableWebAppCheck(
const InstallableData& result) override;
void ResetCurrentPageData() override; void ResetCurrentPageData() override;
void ShowBannerUi(WebappInstallSource install_source) override; void ShowBannerUi(WebappInstallSource install_source) override;
void MaybeShowAmbientBadge() override; void MaybeShowAmbientBadge() override;
...@@ -133,12 +131,6 @@ class AppBannerManagerAndroid ...@@ -133,12 +131,6 @@ class AppBannerManagerAndroid
void RecordEventForAppBanner(AddToHomescreenInstaller::Event event, void RecordEventForAppBanner(AddToHomescreenInstaller::Event event,
const AddToHomescreenParams& a2hs_params); const AddToHomescreenParams& a2hs_params);
// The URL of the badge icon.
GURL badge_icon_url_;
// The badge icon object.
SkBitmap badge_icon_;
// The Java-side AppBannerManager. // The Java-side AppBannerManager.
base::android::ScopedJavaGlobalRef<jobject> java_banner_manager_; base::android::ScopedJavaGlobalRef<jobject> java_banner_manager_;
......
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