Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1486)

Unified Diff: chrome/browser/android/banners/app_banner_manager_android.h

Issue 2156113002: Replace AppBannerDataFetcher with InstallableManager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@banner-refactor
Patch Set: Naming, includes Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/android/banners/app_banner_manager_android.h
diff --git a/chrome/browser/android/banners/app_banner_manager_android.h b/chrome/browser/android/banners/app_banner_manager_android.h
index d7f67684670207a09adbc29a850857d56c1eb251..67b2d126aa45be9c675b06c30d0f11bb521f07ef 100644
--- a/chrome/browser/android/banners/app_banner_manager_android.h
+++ b/chrome/browser/android/banners/app_banner_manager_android.h
@@ -5,19 +5,26 @@
#ifndef CHROME_BROWSER_ANDROID_BANNERS_APP_BANNER_MANAGER_ANDROID_H_
#define CHROME_BROWSER_ANDROID_BANNERS_APP_BANNER_MANAGER_ANDROID_H_
-#include "base/android/jni_android.h"
-#include "base/android/jni_weak_ref.h"
+#include "base/android/scoped_java_ref.h"
+#include "base/callback_forward.h"
#include "base/macros.h"
-#include "base/memory/weak_ptr.h"
-#include "chrome/browser/android/banners/app_banner_data_fetcher_android.h"
-#include "chrome/browser/banners/app_banner_debug_log.h"
#include "chrome/browser/banners/app_banner_manager.h"
#include "content/public/browser/web_contents_user_data.h"
namespace banners {
-class AppBannerDataFetcherAndroid;
// Extends the AppBannerManager to support native Android apps.
+// This class owns a Java-side AppBannerManager which is used to interface with
+// the Java runtime for fetching native app data and installing them when
+// requested.
+// A site requests a native app banner by setting "prefer_related_applications"
+// to true in its manifest, and providing at least one related application for
+// the "play" platform with a Play Store ID.
+// This class uses that information to request the app's metadata, including an
+// icon. If successful, the icon is downloaded and the native app banner shown.
+// Otherwise, if no related applications were detected, or their manifest
+// entries were invalid, this class falls back to trying to verify if a web app
+// banner is suitable.
class AppBannerManagerAndroid
: public AppBannerManager,
public content::WebContentsUserData<AppBannerManagerAndroid> {
@@ -25,12 +32,13 @@ class AppBannerManagerAndroid
explicit AppBannerManagerAndroid(content::WebContents* web_contents);
~AppBannerManagerAndroid() override;
+ // Returns a reference to the Java-side AppBannerManager owned by this object.
const base::android::ScopedJavaGlobalRef<jobject>& GetJavaBannerManager()
const;
- // Return whether a BitmapFetcher is active.
- bool IsFetcherActive(JNIEnv* env,
- const base::android::JavaParamRef<jobject>& jobj);
+ // Returns true if this object is currently active.
+ bool IsActiveForTesting(JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jobj);
// Called when the Java-side has retrieved information for the app.
// Returns |false| if an icon fetch couldn't be kicked off.
@@ -42,40 +50,64 @@ class AppBannerManagerAndroid
const base::android::JavaParamRef<jstring>& japp_package,
const base::android::JavaParamRef<jstring>& jicon_url);
+ // AppBannerManager overrides.
void RequestAppBanner(const GURL& validated_url, bool is_debug_mode) override;
+ // Returns a callback which fetches the splash screen image and stores it in
+ // a WebappDataStorage.
+ base::Closure FetchWebappSplashScreenImageCallback(
+ const std::string& webapp_id) override;
+
// Registers native methods.
static bool Register(JNIEnv* env);
protected:
- AppBannerDataFetcher* CreateAppBannerDataFetcher(
- base::WeakPtr<AppBannerDataFetcher::Delegate> weak_delegate,
- bool is_debug_mode) override;
+ // AppBannerManager overrides.
+ std::string GetAppIdentifier() override;
+ std::string GetBannerType() override;
+ int GetIdealIconSizeInDp() override;
+ int GetMinimumIconSizeInDp() override;
+ bool IsWebAppInstalled(content::BrowserContext* browser_context,
+ const GURL& start_url) override;
+
+ void PerformInstallableCheck() override;
+ void OnAppIconFetched(const SkBitmap& bitmap) override;
+ void ShowBanner() override;
private:
friend class content::WebContentsUserData<AppBannerManagerAndroid>;
- // AppBannerDataFetcher::Delegate overrides.
- bool HandleNonWebApp(const std::string& platform,
- const GURL& url,
- const std::string& id,
- bool is_debug_mode) override;
-
+ // Creates the Java-side AppBannerManager.
void CreateJavaBannerManager();
- bool CheckFetcherMatchesContents(bool is_debug_mode);
+ // Returns true if |platform| and |id| are valid for querying the Play Store.
bool CheckPlatformAndId(const std::string& platform,
- const std::string& id,
- bool is_debug_mode);
+ const std::string& id);
+ // Returns the query value for |name| in |url|, e.g. example.com?name=value.
std::string ExtractQueryValueForName(const GURL& url,
const std::string& name);
- // AppBannerManager on the Java side.
+ // Returns true if |platform|, |url|, and |id| are consistent and can be used
+ // to query the Play Store for a native app. The query may not necessarily
+ // succeed (e.g. |id| doesn't map to anything), but if this method returns
+ // true, only a native app banner may be shown, and the web app banner flow
+ // will not be run.
+ bool CanHandleNonWebApp(const std::string& platform,
+ const GURL& url,
+ const std::string& id);
+
+ // The Java-side AppBannerManager.
base::android::ScopedJavaGlobalRef<jobject> java_banner_manager_;
+ // Java-side object containing data about a native app.
+ base::android::ScopedJavaGlobalRef<jobject> native_app_data_;
+
+ // App package name for a native app banner.
+ std::string native_app_package_;
+
DISALLOW_COPY_AND_ASSIGN(AppBannerManagerAndroid);
-}; // class AppBannerManagerAndroid
+};
} // namespace banners

Powered by Google App Engine
This is Rietveld 408576698