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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_ANDROID_BANNERS_APP_BANNER_MANAGER_ANDROID_H_ 5 #ifndef CHROME_BROWSER_ANDROID_BANNERS_APP_BANNER_MANAGER_ANDROID_H_
6 #define CHROME_BROWSER_ANDROID_BANNERS_APP_BANNER_MANAGER_ANDROID_H_ 6 #define CHROME_BROWSER_ANDROID_BANNERS_APP_BANNER_MANAGER_ANDROID_H_
7 7
8 #include "base/android/jni_android.h" 8 #include "base/android/jni_android.h"
9 #include "base/android/jni_weak_ref.h" 9 #include "base/android/jni_weak_ref.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "base/memory/weak_ptr.h" 11 #include "base/memory/weak_ptr.h"
12 #include "chrome/browser/android/banners/app_banner_data_fetcher_android.h" 12 #include "chrome/browser/android/banners/app_banner_data_fetcher_android.h"
13 #include "chrome/browser/banners/app_banner_debug_log.h" 13 #include "chrome/browser/banners/app_banner_debug_log.h"
14 #include "chrome/browser/banners/app_banner_manager.h" 14 #include "chrome/browser/banners/app_banner_manager.h"
15 #include "content/public/browser/web_contents_user_data.h"
15 16
16 namespace banners { 17 namespace banners {
17 class AppBannerDataFetcherAndroid; 18 class AppBannerDataFetcherAndroid;
18 19
19 // Extends the AppBannerManager to support native Android apps. 20 // Extends the AppBannerManager to support native Android apps.
20 // TODO(dfalcantara): Flip it so the C++ AppBannerManagerAndroid owns the 21 class AppBannerManagerAndroid
21 // Java AppBannerManager, move ownership of the AppBannerManagerAndroid to 22 : public AppBannerManager,
22 // the TabAndroid class, then move functions for retriving info from Java to 23 public content::WebContentsUserData<AppBannerManagerAndroid> {
23 // the AppBannerDataFetcherAndroid.
24 class AppBannerManagerAndroid : public AppBannerManager {
25 public: 24 public:
26 // Registers native methods. 25 explicit AppBannerManagerAndroid(content::WebContents* web_contents);
27 static bool Register(JNIEnv* env);
28
29 AppBannerManagerAndroid(JNIEnv* env, jobject obj);
30 ~AppBannerManagerAndroid() override; 26 ~AppBannerManagerAndroid() override;
31 27
32 // Destroys the AppBannerManagerAndroid. 28 const base::android::ScopedJavaGlobalRef<jobject>& GetJavaBannerManager()
33 void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); 29 const;
34
35 // Observes a new WebContents, if necessary.
36 void ReplaceWebContents(
37 JNIEnv* env,
38 const base::android::JavaParamRef<jobject>& obj,
39 const base::android::JavaParamRef<jobject>& jweb_contents);
40 30
41 // Return whether a BitmapFetcher is active. 31 // Return whether a BitmapFetcher is active.
42 bool IsFetcherActive(JNIEnv* env, 32 bool IsFetcherActive(JNIEnv* env,
43 const base::android::JavaParamRef<jobject>& jobj); 33 const base::android::JavaParamRef<jobject>& jobj);
44 34
45 // Called when the Java-side has retrieved information for the app. 35 // Called when the Java-side has retrieved information for the app.
46 // Returns |false| if an icon fetch couldn't be kicked off. 36 // Returns |false| if an icon fetch couldn't be kicked off.
47 bool OnAppDetailsRetrieved( 37 bool OnAppDetailsRetrieved(
48 JNIEnv* env, 38 JNIEnv* env,
49 const base::android::JavaParamRef<jobject>& obj, 39 const base::android::JavaParamRef<jobject>& obj,
50 const base::android::JavaParamRef<jobject>& japp_data, 40 const base::android::JavaParamRef<jobject>& japp_data,
51 const base::android::JavaParamRef<jstring>& japp_title, 41 const base::android::JavaParamRef<jstring>& japp_title,
52 const base::android::JavaParamRef<jstring>& japp_package, 42 const base::android::JavaParamRef<jstring>& japp_package,
53 const base::android::JavaParamRef<jstring>& jicon_url); 43 const base::android::JavaParamRef<jstring>& jicon_url);
54 44
55 // Requests the app banner. This method is called from the DevTools. 45 void RequestAppBanner(const GURL& validated_url, bool is_debug_mode) override;
56 void RequestAppBanner(JNIEnv* env, 46
57 const base::android::JavaParamRef<jobject>& jobj); 47 // Registers native methods.
48 static bool Register(JNIEnv* env);
58 49
59 protected: 50 protected:
60 AppBannerDataFetcher* CreateAppBannerDataFetcher( 51 AppBannerDataFetcher* CreateAppBannerDataFetcher(
61 base::WeakPtr<AppBannerDataFetcher::Delegate> weak_delegate, 52 base::WeakPtr<AppBannerDataFetcher::Delegate> weak_delegate,
62 bool is_debug_mode) override; 53 bool is_debug_mode) override;
63 54
64 private: 55 private:
56 friend class content::WebContentsUserData<AppBannerManagerAndroid>;
57
65 // AppBannerDataFetcher::Delegate overrides. 58 // AppBannerDataFetcher::Delegate overrides.
66 bool HandleNonWebApp(const std::string& platform, 59 bool HandleNonWebApp(const std::string& platform,
67 const GURL& url, 60 const GURL& url,
68 const std::string& id, 61 const std::string& id,
69 bool is_debug_mode) override; 62 bool is_debug_mode) override;
70 63
64 void CreateJavaBannerManager();
65
66 bool CheckFetcherMatchesContents(bool is_debug_mode);
71 bool CheckPlatformAndId(const std::string& platform, 67 bool CheckPlatformAndId(const std::string& platform,
72 const std::string& id, 68 const std::string& id,
73 bool is_debug_mode); 69 bool is_debug_mode);
74 70
75 bool CheckFetcherMatchesContents(bool is_debug_mode);
76
77 std::string ExtractQueryValueForName(const GURL& url, 71 std::string ExtractQueryValueForName(const GURL& url,
78 const std::string& name); 72 const std::string& name);
79 73
80 // AppBannerManager on the Java side. 74 // AppBannerManager on the Java side.
81 JavaObjectWeakGlobalRef weak_java_banner_view_manager_; 75 base::android::ScopedJavaGlobalRef<jobject> java_banner_manager_;
82 76
83 DISALLOW_COPY_AND_ASSIGN(AppBannerManagerAndroid); 77 DISALLOW_COPY_AND_ASSIGN(AppBannerManagerAndroid);
84 }; // class AppBannerManagerAndroid 78 }; // class AppBannerManagerAndroid
85 79
86 } // namespace banners 80 } // namespace banners
87 81
88 #endif // CHROME_BROWSER_ANDROID_BANNERS_APP_BANNER_MANAGER_ANDROID_H_ 82 #endif // CHROME_BROWSER_ANDROID_BANNERS_APP_BANNER_MANAGER_ANDROID_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698