Commit 93bb4747 authored by Evan Stade's avatar Evan Stade Committed by Chromium LUCI CQ

Move AddToHomescreen code into webapps:: namespace.

This will make the relocation into //components cleaner.

Bug: 1164069
Change-Id: I9cec4b2ea55721cf670c986699a91a5ce59cdf17
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2616727
Commit-Queue: Evan Stade <estade@chromium.org>
Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Cr-Commit-Position: refs/heads/master@{#841520}
parent 0e07b023
......@@ -12,6 +12,7 @@ import androidx.annotation.StringRes;
import androidx.annotation.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.banners.AppBannerManager;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
......@@ -33,6 +34,7 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
* The {@link #showForAppMenu} method is used to show the add-to-homescreen UI when the user
* chooses the "Add to Home screen" option from the app menu.
*/
@JNINamespace("webapps")
public class AddToHomescreenCoordinator {
@VisibleForTesting
Context mActivityContext;
......
......@@ -10,6 +10,7 @@ import android.util.Pair;
import androidx.annotation.StringRes;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.browser.banners.AppData;
import org.chromium.chrome.browser.webapps.AddToHomescreenProperties;
......@@ -28,6 +29,7 @@ import javax.annotation.Nonnull;
* information about the app is available. These methods modify the model that lives on the Java
* side.
*/
@JNINamespace("webapps")
class AddToHomescreenMediator implements AddToHomescreenViewDelegate {
private long mNativeAddToHomescreenMediator;
private PropertyModel mModel;
......
......@@ -15,9 +15,11 @@
#include "chrome/browser/android/webapps/add_to_homescreen_params.h"
#include "chrome/browser/banners/app_banner_manager.h"
namespace webapps {
// static
bool AddToHomescreenCoordinator::ShowForAppBanner(
base::WeakPtr<webapps::AppBannerManager> weak_manager,
base::WeakPtr<AppBannerManager> weak_manager,
std::unique_ptr<AddToHomescreenParams> params,
base::RepeatingCallback<void(AddToHomescreenInstaller::Event,
const AddToHomescreenParams&)>
......@@ -36,3 +38,5 @@ bool AddToHomescreenCoordinator::ShowForAppBanner(
std::move(event_callback));
return true;
}
} // namespace webapps
......@@ -11,11 +11,10 @@
#include "base/memory/weak_ptr.h"
#include "chrome/browser/android/webapps/add_to_homescreen_installer.h"
struct AddToHomescreenParams;
namespace webapps {
struct AddToHomescreenParams;
class AppBannerManager;
}
// AddToHomescreenCoordinator is the C++ counterpart of org.chromium.chrome.
// browser.webapps.addtohomescreen.AddToHomescreenCoordinator in Java.
......@@ -23,7 +22,7 @@ class AddToHomescreenCoordinator {
public:
// Called for showing the add-to-homescreen UI for AppBannerManager.
static bool ShowForAppBanner(
base::WeakPtr<webapps::AppBannerManager> weak_manager,
base::WeakPtr<AppBannerManager> weak_manager,
std::unique_ptr<AddToHomescreenParams> params,
base::RepeatingCallback<void(AddToHomescreenInstaller::Event,
const AddToHomescreenParams&)>
......@@ -35,4 +34,6 @@ class AddToHomescreenCoordinator {
delete;
};
} // namespace webapps
#endif // CHROME_BROWSER_ANDROID_WEBAPPS_ADD_TO_HOMESCREEN_COORDINATOR_H_
......@@ -39,6 +39,8 @@
#include "ui/gfx/favicon_size.h"
#include "url/gurl.h"
namespace webapps {
namespace {
// Looks up the original, online, visible URL of |web_contents|. The current
......@@ -49,23 +51,23 @@ GURL GetShortcutUrl(content::WebContents* web_contents) {
web_contents->GetVisibleURL());
}
webapps::InstallableParams ParamsToPerformManifestAndIconFetch() {
webapps::InstallableParams params;
InstallableParams ParamsToPerformManifestAndIconFetch() {
InstallableParams params;
params.valid_primary_icon = true;
params.prefer_maskable_icon =
webapps::WebappsIconUtils::DoesAndroidSupportMaskableIcons();
WebappsIconUtils::DoesAndroidSupportMaskableIcons();
params.wait_for_worker = true;
return params;
}
webapps::InstallableParams ParamsToPerformInstallableCheck() {
webapps::InstallableParams params;
InstallableParams ParamsToPerformInstallableCheck() {
InstallableParams params;
params.check_eligibility = true;
params.valid_manifest = true;
params.has_worker = true;
params.valid_primary_icon = true;
params.prefer_maskable_icon =
webapps::WebappsIconUtils::DoesAndroidSupportMaskableIcons();
WebappsIconUtils::DoesAndroidSupportMaskableIcons();
params.wait_for_worker = true;
return params;
}
......@@ -82,9 +84,8 @@ void CreateLauncherIconInBackground(
scoped_refptr<base::SequencedTaskRunner> ui_thread_task_runner,
base::OnceCallback<void(const SkBitmap&, bool)> callback) {
bool is_generated = false;
SkBitmap primary_icon =
webapps::WebappsIconUtils::FinalizeLauncherIconInBackground(
icon, maskable, start_url, &is_generated);
SkBitmap primary_icon = WebappsIconUtils::FinalizeLauncherIconInBackground(
icon, maskable, start_url, &is_generated);
ui_thread_task_runner->PostTask(
FROM_HERE,
base::BindOnce(std::move(callback), primary_icon, is_generated));
......@@ -120,8 +121,7 @@ AddToHomescreenDataFetcher::AddToHomescreenDataFetcher(
int data_timeout_ms,
Observer* observer)
: content::WebContentsObserver(web_contents),
installable_manager_(
webapps::InstallableManager::FromWebContents(web_contents)),
installable_manager_(InstallableManager::FromWebContents(web_contents)),
observer_(observer),
shortcut_info_(GetShortcutUrl(web_contents)),
has_maskable_primary_icon_(false),
......@@ -172,7 +172,7 @@ void AddToHomescreenDataFetcher::OnDidGetWebPageMetadata(
chrome::mojom::WebPageMobileCapable::ENABLED_APPLE) {
shortcut_info_.display = blink::mojom::DisplayMode::kStandalone;
shortcut_info_.UpdateSource(
webapps::ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN_STANDALONE);
ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN_STANDALONE);
}
// Record what type of shortcut was added by the user.
......@@ -225,7 +225,7 @@ void AddToHomescreenDataFetcher::OnDataTimedout() {
}
void AddToHomescreenDataFetcher::OnDidGetManifestAndIcons(
const webapps::InstallableData& data) {
const InstallableData& data) {
if (!web_contents())
return;
......@@ -254,9 +254,9 @@ void AddToHomescreenDataFetcher::OnDidGetManifestAndIcons(
// Save the splash screen URL for the later download.
shortcut_info_.ideal_splash_image_size_in_px =
webapps::WebappsIconUtils::GetIdealSplashImageSizeInPx();
WebappsIconUtils::GetIdealSplashImageSizeInPx();
shortcut_info_.minimum_splash_image_size_in_px =
webapps::WebappsIconUtils::GetMinimumSplashImageSizeInPx();
WebappsIconUtils::GetMinimumSplashImageSizeInPx();
shortcut_info_.splash_image_url =
blink::ManifestIconSelector::FindBestMatchingSquareIcon(
data.manifest->icons, shortcut_info_.ideal_splash_image_size_in_px,
......@@ -270,7 +270,7 @@ void AddToHomescreenDataFetcher::OnDidGetManifestAndIcons(
}
void AddToHomescreenDataFetcher::OnDidPerformInstallableCheck(
const webapps::InstallableData& data) {
const InstallableData& data) {
StopTimer();
if (!web_contents())
......@@ -278,8 +278,7 @@ void AddToHomescreenDataFetcher::OnDidPerformInstallableCheck(
bool webapk_compatible =
(data.NoBlockingErrors() && data.valid_manifest && data.has_worker &&
webapps::WebappsUtils::AreWebManifestUrlsWebApkCompatible(
*data.manifest));
WebappsUtils::AreWebManifestUrlsWebApkCompatible(*data.manifest));
observer_->OnUserTitleAvailable(
webapk_compatible ? shortcut_info_.name : shortcut_info_.user_title,
shortcut_info_.url, webapk_compatible);
......@@ -290,8 +289,7 @@ void AddToHomescreenDataFetcher::OnDidPerformInstallableCheck(
// that icon is maskable.
should_use_created_icon_for_launcher = false;
primary_icon_ = raw_primary_icon_;
shortcut_info_.UpdateSource(
webapps::ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN_PWA);
shortcut_info_.UpdateSource(ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN_PWA);
if (!has_maskable_primary_icon_) {
// We can skip creating an icon for the view because the raw icon is
// sufficient when WebAPK-compatible and the icon is non-maskable.
......@@ -323,7 +321,7 @@ void AddToHomescreenDataFetcher::FetchFavicon() {
// Using favicon if its size is not smaller than platform required size,
// otherwise using the largest icon among all available icons.
int threshold_to_get_any_largest_icon =
webapps::WebappsIconUtils::GetIdealHomescreenIconSizeInPx() - 1;
WebappsIconUtils::GetIdealHomescreenIconSizeInPx() - 1;
favicon_service->GetLargestRawFaviconForPageURL(
shortcut_info_.url, icon_types, threshold_to_get_any_largest_icon,
base::BindOnce(&AddToHomescreenDataFetcher::OnFaviconFetched,
......@@ -387,3 +385,5 @@ void AddToHomescreenDataFetcher::OnIconCreated(bool use_for_launcher,
observer_->OnDataAvailable(shortcut_info_, icon_for_view);
}
} // namespace webapps
......@@ -21,9 +21,9 @@ struct FaviconRawBitmapResult;
}
namespace webapps {
class InstallableManager;
struct InstallableData;
} // namespace webapps
// Aysnchronously fetches and processes data needed to create a shortcut for an
// Android Home screen launcher.
......@@ -39,7 +39,7 @@ class AddToHomescreenDataFetcher : public content::WebContentsObserver {
// Called when all the data needed to prompt the user to add to home screen
// is available.
virtual void OnDataAvailable(const webapps::ShortcutInfo& info,
virtual void OnDataAvailable(const ShortcutInfo& info,
const SkBitmap& primary_icon) = 0;
protected:
......@@ -64,7 +64,7 @@ class AddToHomescreenDataFetcher : public content::WebContentsObserver {
// Accessors, etc.
const SkBitmap& primary_icon() const { return primary_icon_; }
webapps::ShortcutInfo& shortcut_info() { return shortcut_info_; }
ShortcutInfo& shortcut_info() { return shortcut_info_; }
bool has_maskable_primary_icon() const { return has_maskable_primary_icon_; }
private:
......@@ -75,10 +75,10 @@ class AddToHomescreenDataFetcher : public content::WebContentsObserver {
void OnDataTimedout();
// Called when InstallableManager finishes looking for a manifest and icon.
void OnDidGetManifestAndIcons(const webapps::InstallableData& data);
void OnDidGetManifestAndIcons(const InstallableData& data);
// Called when InstallableManager finishes checking for installability.
void OnDidPerformInstallableCheck(const webapps::InstallableData& data);
void OnDidPerformInstallableCheck(const InstallableData& data);
// Grabs the favicon for the current URL.
void FetchFavicon();
......@@ -95,13 +95,13 @@ class AddToHomescreenDataFetcher : public content::WebContentsObserver {
const SkBitmap& icon_for_view,
bool is_icon_generated);
webapps::InstallableManager* installable_manager_;
InstallableManager* installable_manager_;
Observer* observer_;
// The icons must only be set on the UI thread for thread safety.
SkBitmap raw_primary_icon_;
SkBitmap primary_icon_;
webapps::ShortcutInfo shortcut_info_;
ShortcutInfo shortcut_info_;
bool has_maskable_primary_icon_;
base::CancelableTaskTracker favicon_task_tracker_;
......@@ -119,4 +119,6 @@ class AddToHomescreenDataFetcher : public content::WebContentsObserver {
delete;
};
} // namespace webapps
#endif // CHROME_BROWSER_ANDROID_WEBAPPS_ADD_TO_HOMESCREEN_DATA_FETCHER_H_
......@@ -78,7 +78,7 @@ class ObserverWaiter : public AddToHomescreenDataFetcher::Observer {
is_webapk_compatible_ = is_webapk_compatible;
}
void OnDataAvailable(const webapps::ShortcutInfo& info,
void OnDataAvailable(const ShortcutInfo& info,
const SkBitmap& primary_icon) override {
// This should only be called once.
EXPECT_FALSE(data_available_);
......
......@@ -13,6 +13,8 @@
#include "chrome/browser/android/webapk/webapk_install_service.h"
#include "content/public/browser/web_contents.h"
namespace webapps {
// static
void AddToHomescreenInstaller::Install(
content::WebContents* web_contents,
......@@ -77,3 +79,5 @@ void AddToHomescreenInstaller::InstallShortcut(
web_contents, *(params.shortcut_info), params.primary_icon,
params.has_maskable_primary_icon);
}
} // namespace webapps
......@@ -12,6 +12,8 @@ namespace content {
class WebContents;
}
namespace webapps {
// Helper class for installing a web app or an Android native app and recording
// related UMA.
class AddToHomescreenInstaller {
......@@ -53,4 +55,6 @@ class AddToHomescreenInstaller {
AddToHomescreenInstaller& operator=(const AddToHomescreenInstaller&) = delete;
};
} // namespace webapps
#endif // CHROME_BROWSER_ANDROID_WEBAPPS_ADD_TO_HOMESCREEN_INSTALLER_H_
......@@ -25,6 +25,8 @@
using base::android::JavaParamRef;
using base::android::ScopedJavaLocalRef;
namespace webapps {
namespace {
// The length of time to allow the add to homescreen data fetcher to run before
......@@ -57,7 +59,7 @@ AddToHomescreenMediator::AddToHomescreenMediator(
}
void AddToHomescreenMediator::StartForAppBanner(
base::WeakPtr<webapps::AppBannerManager> weak_manager,
base::WeakPtr<AppBannerManager> weak_manager,
std::unique_ptr<AddToHomescreenParams> params,
base::RepeatingCallback<void(AddToHomescreenInstaller::Event,
const AddToHomescreenParams&)>
......@@ -169,19 +171,18 @@ void AddToHomescreenMediator::OnUserTitleAvailable(
SetWebAppInfo(user_title, url, is_webapk_compatible);
}
void AddToHomescreenMediator::OnDataAvailable(const webapps::ShortcutInfo& info,
void AddToHomescreenMediator::OnDataAvailable(const ShortcutInfo& info,
const SkBitmap& display_icon) {
params_ = std::make_unique<AddToHomescreenParams>();
params_->app_type =
info.source == webapps::ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN_PWA
? AddToHomescreenParams::AppType::WEBAPK
: AddToHomescreenParams::AppType::SHORTCUT;
params_->shortcut_info = std::make_unique<webapps::ShortcutInfo>(info);
params_->app_type = info.source == ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN_PWA
? AddToHomescreenParams::AppType::WEBAPK
: AddToHomescreenParams::AppType::SHORTCUT;
params_->shortcut_info = std::make_unique<ShortcutInfo>(info);
params_->primary_icon = data_fetcher_->primary_icon();
params_->has_maskable_primary_icon =
data_fetcher_->has_maskable_primary_icon();
params_->install_source = webapps::InstallableMetrics::GetInstallSource(
data_fetcher_->web_contents(), webapps::InstallTrigger::MENU);
params_->install_source = InstallableMetrics::GetInstallSource(
data_fetcher_->web_contents(), InstallTrigger::MENU);
// AddToHomescreenMediator::OnDataAvailable() is called in the code path
// to show A2HS dialog from app menu. In this code path, display_icon is
......@@ -194,17 +195,17 @@ void AddToHomescreenMediator::OnDataAvailable(const webapps::ShortcutInfo& info,
DCHECK_NE(-1, title_id_);
switch (title_id_) {
case webapps::AppBannerSettingsHelper::APP_MENU_OPTION_UNKNOWN: {
case AppBannerSettingsHelper::APP_MENU_OPTION_UNKNOWN: {
entry = is_webapk ? AppTypeToMenuEntry::kUnknownMenuEntryForWebApp
: AppTypeToMenuEntry::kUnknownMenuEntryForShortcut;
break;
}
case webapps::AppBannerSettingsHelper::APP_MENU_OPTION_ADD_TO_HOMESCREEN: {
case AppBannerSettingsHelper::APP_MENU_OPTION_ADD_TO_HOMESCREEN: {
entry = is_webapk ? AppTypeToMenuEntry::kAddToHomeScreenShownForWebApp
: AppTypeToMenuEntry::kAddToHomeScreenShownForShortcut;
break;
}
case webapps::AppBannerSettingsHelper::APP_MENU_OPTION_INSTALL: {
case AppBannerSettingsHelper::APP_MENU_OPTION_INSTALL: {
entry = is_webapk ? AppTypeToMenuEntry::kInstallShownForWebApp
: AppTypeToMenuEntry::kInstallShownForShortcut;
break;
......@@ -229,16 +230,15 @@ void AddToHomescreenMediator::RecordEventForAppMenu(
DCHECK_NE(a2hs_params.app_type, AddToHomescreenParams::AppType::NATIVE);
switch (event) {
case AddToHomescreenInstaller::Event::INSTALL_STARTED:
webapps::AppBannerSettingsHelper::RecordBannerEvent(
AppBannerSettingsHelper::RecordBannerEvent(
web_contents, web_contents->GetVisibleURL(),
a2hs_params.shortcut_info->url.spec(),
webapps::AppBannerSettingsHelper::
APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
base::Time::Now());
break;
case AddToHomescreenInstaller::Event::INSTALL_REQUEST_FINISHED: {
webapps::AppBannerManagerAndroid* app_banner_manager =
webapps::AppBannerManagerAndroid::FromWebContents(web_contents);
AppBannerManagerAndroid* app_banner_manager =
AppBannerManagerAndroid::FromWebContents(web_contents);
// Fire the appinstalled event and do install time logging.
if (app_banner_manager)
app_banner_manager->OnInstall(a2hs_params.shortcut_info->display);
......@@ -258,3 +258,5 @@ content::WebContents* AddToHomescreenMediator::GetWebContents() {
return nullptr;
}
} // namespace webapps
......@@ -23,9 +23,8 @@ class WebContents;
}
namespace webapps {
struct ShortcutInfo;
}
struct ShortcutInfo;
class AddToHomescreenInstaller;
// AddToHomescreenMediator is the C++ counterpart of
......@@ -41,7 +40,7 @@ class AddToHomescreenMediator : public AddToHomescreenDataFetcher::Observer {
const base::android::JavaParamRef<jobject>& java_ref);
void StartForAppBanner(
base::WeakPtr<webapps::AppBannerManager> weak_manager,
base::WeakPtr<AppBannerManager> weak_manager,
std::unique_ptr<AddToHomescreenParams> params,
base::RepeatingCallback<void(AddToHomescreenInstaller::Event,
const AddToHomescreenParams&)>
......@@ -84,7 +83,7 @@ class AddToHomescreenMediator : public AddToHomescreenDataFetcher::Observer {
const GURL& url,
bool is_webapk_compatible) override;
void OnDataAvailable(const webapps::ShortcutInfo& info,
void OnDataAvailable(const ShortcutInfo& info,
const SkBitmap& display_icon) override;
void RecordEventForAppMenu(AddToHomescreenInstaller::Event event,
......@@ -95,7 +94,7 @@ class AddToHomescreenMediator : public AddToHomescreenDataFetcher::Observer {
// Points to the Java reference.
base::android::ScopedJavaGlobalRef<jobject> java_ref_;
base::WeakPtr<webapps::AppBannerManager> weak_app_banner_manager_;
base::WeakPtr<AppBannerManager> weak_app_banner_manager_;
// Fetches data required to add a shortcut.
std::unique_ptr<AddToHomescreenDataFetcher> data_fetcher_;
......@@ -112,4 +111,6 @@ class AddToHomescreenMediator : public AddToHomescreenDataFetcher::Observer {
AddToHomescreenMediator& operator=(const AddToHomescreenMediator&) = delete;
};
} // namespace webapps
#endif // CHROME_BROWSER_ANDROID_WEBAPPS_ADD_TO_HOMESCREEN_MEDIATOR_H_
......@@ -6,5 +6,9 @@
#include "components/webapps/android/shortcut_info.h"
namespace webapps {
AddToHomescreenParams::AddToHomescreenParams() = default;
AddToHomescreenParams::~AddToHomescreenParams() = default;
} // namespace webapps
......@@ -13,8 +13,8 @@
#include "third_party/skia/include/core/SkBitmap.h"
namespace webapps {
struct ShortcutInfo;
}
struct AddToHomescreenParams {
// A Java counterpart will be generated for this enum.
......@@ -29,8 +29,8 @@ struct AddToHomescreenParams {
AppType app_type;
SkBitmap primary_icon;
bool has_maskable_primary_icon = false;
std::unique_ptr<webapps::ShortcutInfo> shortcut_info;
webapps::WebappInstallSource install_source;
std::unique_ptr<ShortcutInfo> shortcut_info;
WebappInstallSource install_source;
std::string native_app_package_name;
base::android::ScopedJavaGlobalRef<jobject> native_app_data;
......@@ -38,4 +38,6 @@ struct AddToHomescreenParams {
~AddToHomescreenParams();
};
} // namespace webapps
#endif // CHROME_BROWSER_ANDROID_WEBAPPS_ADD_TO_HOMESCREEN_PARAMS_H_
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