Chromium Code Reviews| Index: chrome/browser/android/shortcut_helper.h |
| diff --git a/chrome/browser/android/shortcut_helper.h b/chrome/browser/android/shortcut_helper.h |
| index bf7911a0cdab7b0d80aca89c940bd6f3f25d6706..7d92415e15898431f9618e07e0c01c844542a69a 100644 |
| --- a/chrome/browser/android/shortcut_helper.h |
| +++ b/chrome/browser/android/shortcut_helper.h |
| @@ -5,17 +5,14 @@ |
| #ifndef CHROME_BROWSER_ANDROID_SHORTCUT_HELPER_H_ |
| #define CHROME_BROWSER_ANDROID_SHORTCUT_HELPER_H_ |
| +#include "base/android/jni_android.h" |
| #include "base/android/jni_weak_ref.h" |
| #include "base/basictypes.h" |
| #include "base/strings/string16.h" |
| #include "base/task/cancelable_task_tracker.h" |
| -#include "chrome/browser/android/tab_android.h" |
| +#include "components/favicon_base/favicon_types.h" |
| #include "content/public/browser/web_contents_observer.h" |
| -namespace favicon_base { |
| -struct FaviconRawBitmapResult; |
| -} // namespace favicon_base |
| - |
| namespace content { |
| class WebContents; |
| } // namespace content |
| @@ -26,15 +23,12 @@ class Message; |
| class GURL; |
| -// Adds a shortcut to the current URL to the Android home screen. |
| -// This proceeds over three phases: |
| -// 1) The renderer is asked to parse out webapp related meta tags with an async |
| -// IPC message. |
| -// 2) The highest-resolution favicon available is retrieved for use as the |
| -// icon on the home screen. |
| -// 3) A JNI call is made to fire an Intent at the Android launcher, which adds |
| -// the shortcut. |
| -class ShortcutBuilder : public content::WebContentsObserver { |
| +// ShortcutHelper is the C++ counterpart of org.chromium.chrome.browser's |
| +// ShortcutHelper in Java. The object is owned by the Java object. It is created |
| +// from there via a JNI (Initialize) call and can be destroyed from Java too |
| +// using TearDown. When the Java implementations calls AddShortcut, it gives up |
| +// the ownership of the object. The instance will then destroy itself when done. |
| +class ShortcutHelper : public content::WebContentsObserver { |
| public: |
| enum ShortcutType { |
| APP_SHORTCUT, |
| @@ -42,16 +36,31 @@ class ShortcutBuilder : public content::WebContentsObserver { |
| BOOKMARK |
| }; |
| - explicit ShortcutBuilder(content::WebContents* web_contents, |
| - const base::string16& title, |
| - int launcher_large_icon_size); |
| - virtual ~ShortcutBuilder() {} |
| + explicit ShortcutHelper(JNIEnv* env, |
|
Bernhard Bauer
2014/09/12 11:30:48
Explicit is only necessary for single-argument con
mlamouri (slow - plz ping)
2014/09/12 11:48:43
Fixed. It used to be one argument. Forgot to updat
|
| + jobject obj, |
| + content::WebContents* web_contents); |
| + |
| + // Initialize the helper by requesting the information about the page to the |
| + // renderer process. The initialization is asynchronous and |
| + // OnDidRetrieveWebappInformation is expected to be called when finished. |
| + void Initialize(); |
| + // Called by the Java counter part to let the object knows that it can destroy |
| + // itself. |
| + void TearDown(JNIEnv* env, jobject obj); |
| + |
| + // IPC message received when the initialization is finished. |
| void OnDidRetrieveWebappInformation(bool success, |
| bool is_mobile_webapp_capable, |
| bool is_apple_mobile_webapp_capable, |
| const GURL& expected_url); |
| + // Adds a shortcut to the current URL to the Android home screen. |
| + void AddShortcut(JNIEnv* env, |
| + jobject obj, |
| + jstring title, |
| + jint launcher_large_icon_size); |
| + |
| void FinishAddingShortcut( |
| const favicon_base::FaviconRawBitmapResult& bitmap_result); |
| @@ -59,37 +68,30 @@ class ShortcutBuilder : public content::WebContentsObserver { |
| virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
| virtual void WebContentsDestroyed() OVERRIDE; |
| - private: |
| - void Destroy(); |
| - |
| - GURL url_; |
| - base::string16 title_; |
| - int launcher_large_icon_size_; |
| - ShortcutType shortcut_type_; |
| - base::CancelableTaskTracker cancelable_task_tracker_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(ShortcutBuilder); |
| -}; |
| - |
| -class ShortcutHelper { |
| - public: |
| - // Adds a shortcut to the current URL to the Android home screen, firing |
| - // background tasks to pull all the data required. |
| - static void AddShortcut(content::WebContents* web_contents, |
| - const base::string16& title, |
| - int launcher_larger_icon_size); |
| - |
| // Adds a shortcut to the launcher. Must be called from a WorkerPool task. |
| static void AddShortcutInBackground( |
| const GURL& url, |
| const base::string16& title, |
| - ShortcutBuilder::ShortcutType shortcut_type, |
| + ShortcutType shortcut_type, |
| const favicon_base::FaviconRawBitmapResult& bitmap_result); |
| // Registers JNI hooks. |
| static bool RegisterShortcutHelper(JNIEnv* env); |
| private: |
| + virtual ~ShortcutHelper(); |
| + |
| + void Destroy(); |
| + |
| + JavaObjectWeakGlobalRef java_ref_; |
| + |
| + GURL url_; |
| + base::string16 title_; |
| + int launcher_large_icon_size_; |
| + ShortcutType shortcut_type_; |
| + favicon_base::FaviconRawBitmapResult icon_; |
| + base::CancelableTaskTracker cancelable_task_tracker_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(ShortcutHelper); |
| }; |