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

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

Issue 2124243002: Refactor the Java AppBannerManager to be owned by native code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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 69a2b785195c1e6845f9e5ec31a967fed7883356..d7f67684670207a09adbc29a850857d56c1eb251 100644
--- a/chrome/browser/android/banners/app_banner_manager_android.h
+++ b/chrome/browser/android/banners/app_banner_manager_android.h
@@ -12,31 +12,21 @@
#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.
-// TODO(dfalcantara): Flip it so the C++ AppBannerManagerAndroid owns the
-// Java AppBannerManager, move ownership of the AppBannerManagerAndroid to
-// the TabAndroid class, then move functions for retriving info from Java to
-// the AppBannerDataFetcherAndroid.
-class AppBannerManagerAndroid : public AppBannerManager {
+class AppBannerManagerAndroid
+ : public AppBannerManager,
+ public content::WebContentsUserData<AppBannerManagerAndroid> {
public:
- // Registers native methods.
- static bool Register(JNIEnv* env);
-
- AppBannerManagerAndroid(JNIEnv* env, jobject obj);
+ explicit AppBannerManagerAndroid(content::WebContents* web_contents);
~AppBannerManagerAndroid() override;
- // Destroys the AppBannerManagerAndroid.
- void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
-
- // Observes a new WebContents, if necessary.
- void ReplaceWebContents(
- JNIEnv* env,
- const base::android::JavaParamRef<jobject>& obj,
- const base::android::JavaParamRef<jobject>& jweb_contents);
+ const base::android::ScopedJavaGlobalRef<jobject>& GetJavaBannerManager()
+ const;
// Return whether a BitmapFetcher is active.
bool IsFetcherActive(JNIEnv* env,
@@ -52,9 +42,10 @@ class AppBannerManagerAndroid : public AppBannerManager {
const base::android::JavaParamRef<jstring>& japp_package,
const base::android::JavaParamRef<jstring>& jicon_url);
- // Requests the app banner. This method is called from the DevTools.
- void RequestAppBanner(JNIEnv* env,
- const base::android::JavaParamRef<jobject>& jobj);
+ void RequestAppBanner(const GURL& validated_url, bool is_debug_mode) override;
+
+ // Registers native methods.
+ static bool Register(JNIEnv* env);
protected:
AppBannerDataFetcher* CreateAppBannerDataFetcher(
@@ -62,23 +53,26 @@ class AppBannerManagerAndroid : public AppBannerManager {
bool is_debug_mode) 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;
+ void CreateJavaBannerManager();
+
+ bool CheckFetcherMatchesContents(bool is_debug_mode);
bool CheckPlatformAndId(const std::string& platform,
const std::string& id,
bool is_debug_mode);
- bool CheckFetcherMatchesContents(bool is_debug_mode);
-
std::string ExtractQueryValueForName(const GURL& url,
const std::string& name);
// AppBannerManager on the Java side.
- JavaObjectWeakGlobalRef weak_java_banner_view_manager_;
+ base::android::ScopedJavaGlobalRef<jobject> java_banner_manager_;
DISALLOW_COPY_AND_ASSIGN(AppBannerManagerAndroid);
}; // class AppBannerManagerAndroid

Powered by Google App Engine
This is Rietveld 408576698