| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_SHORTCUT_HELPER_H_ | 5 #ifndef CHROME_BROWSER_ANDROID_SHORTCUT_HELPER_H_ |
| 6 #define CHROME_BROWSER_ANDROID_SHORTCUT_HELPER_H_ | 6 #define CHROME_BROWSER_ANDROID_SHORTCUT_HELPER_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/basictypes.h" | 10 #include "base/basictypes.h" |
| 11 #include "base/strings/string16.h" | 11 #include "base/strings/string16.h" |
| 12 #include "base/task/cancelable_task_tracker.h" | 12 #include "base/task/cancelable_task_tracker.h" |
| 13 #include "chrome/common/web_application_info.h" |
| 13 #include "components/favicon_base/favicon_types.h" | 14 #include "components/favicon_base/favicon_types.h" |
| 14 #include "content/public/browser/web_contents_observer.h" | 15 #include "content/public/browser/web_contents_observer.h" |
| 15 | 16 |
| 16 namespace content { | 17 namespace content { |
| 17 class WebContents; | 18 class WebContents; |
| 18 } // namespace content | 19 } // namespace content |
| 19 | 20 |
| 20 namespace IPC { | 21 namespace IPC { |
| 21 class Message; | 22 class Message; |
| 22 } | 23 } |
| 23 | 24 |
| 24 class GURL; | 25 class GURL; |
| 25 | 26 |
| 26 // ShortcutHelper is the C++ counterpart of org.chromium.chrome.browser's | 27 // ShortcutHelper is the C++ counterpart of org.chromium.chrome.browser's |
| 27 // ShortcutHelper in Java. The object is owned by the Java object. It is created | 28 // ShortcutHelper in Java. The object is owned by the Java object. It is created |
| 28 // from there via a JNI (Initialize) call and can be destroyed from Java too | 29 // from there via a JNI (Initialize) call and can be destroyed from Java too |
| 29 // using TearDown. When the Java implementations calls AddShortcut, it gives up | 30 // using TearDown. When the Java implementations calls AddShortcut, it gives up |
| 30 // the ownership of the object. The instance will then destroy itself when done. | 31 // the ownership of the object. The instance will then destroy itself when done. |
| 31 class ShortcutHelper : public content::WebContentsObserver { | 32 class ShortcutHelper : public content::WebContentsObserver { |
| 32 public: | 33 public: |
| 33 enum ShortcutType { | |
| 34 APP_SHORTCUT, | |
| 35 APP_SHORTCUT_APPLE, | |
| 36 BOOKMARK | |
| 37 }; | |
| 38 | |
| 39 ShortcutHelper(JNIEnv* env, | 34 ShortcutHelper(JNIEnv* env, |
| 40 jobject obj, | 35 jobject obj, |
| 41 content::WebContents* web_contents); | 36 content::WebContents* web_contents); |
| 42 | 37 |
| 43 // Initialize the helper by requesting the information about the page to the | 38 // Initialize the helper by requesting the information about the page to the |
| 44 // renderer process. The initialization is asynchronous and | 39 // renderer process. The initialization is asynchronous and |
| 45 // OnDidRetrieveWebappInformation is expected to be called when finished. | 40 // OnDidRetrieveWebappInformation is expected to be called when finished. |
| 46 void Initialize(); | 41 void Initialize(); |
| 47 | 42 |
| 48 // Called by the Java counter part to let the object knows that it can destroy | 43 // Called by the Java counter part to let the object knows that it can destroy |
| 49 // itself. | 44 // itself. |
| 50 void TearDown(JNIEnv* env, jobject obj); | 45 void TearDown(JNIEnv* env, jobject obj); |
| 51 | 46 |
| 52 // IPC message received when the initialization is finished. | 47 // IPC message received when the initialization is finished. |
| 53 void OnDidRetrieveWebappInformation(bool success, | 48 void OnDidGetWebApplicationInfo(const WebApplicationInfo& web_app_info); |
| 54 bool is_mobile_webapp_capable, | |
| 55 bool is_apple_mobile_webapp_capable, | |
| 56 const GURL& expected_url); | |
| 57 | 49 |
| 58 // Adds a shortcut to the current URL to the Android home screen. | 50 // Adds a shortcut to the current URL to the Android home screen. |
| 59 void AddShortcut(JNIEnv* env, | 51 void AddShortcut(JNIEnv* env, |
| 60 jobject obj, | 52 jobject obj, |
| 61 jstring title, | 53 jstring title, |
| 62 jint launcher_large_icon_size); | 54 jint launcher_large_icon_size); |
| 63 | 55 |
| 64 void FinishAddingShortcut( | 56 void FinishAddingShortcut( |
| 65 const favicon_base::FaviconRawBitmapResult& bitmap_result); | 57 const favicon_base::FaviconRawBitmapResult& bitmap_result); |
| 66 | 58 |
| 67 // WebContentsObserver | 59 // WebContentsObserver |
| 68 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; | 60 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
| 69 virtual void WebContentsDestroyed() OVERRIDE; | 61 virtual void WebContentsDestroyed() OVERRIDE; |
| 70 | 62 |
| 71 // Adds a shortcut to the launcher. Must be called from a WorkerPool task. | 63 // Adds a shortcut to the launcher. Must be called from a WorkerPool task. |
| 72 static void AddShortcutInBackground( | 64 static void AddShortcutInBackground( |
| 73 const GURL& url, | 65 const GURL& url, |
| 74 const base::string16& title, | 66 const base::string16& title, |
| 75 ShortcutType shortcut_type, | 67 WebApplicationInfo::MobileCapable mobile_capable, |
| 76 const favicon_base::FaviconRawBitmapResult& bitmap_result); | 68 const favicon_base::FaviconRawBitmapResult& bitmap_result); |
| 77 | 69 |
| 78 // Registers JNI hooks. | 70 // Registers JNI hooks. |
| 79 static bool RegisterShortcutHelper(JNIEnv* env); | 71 static bool RegisterShortcutHelper(JNIEnv* env); |
| 80 | 72 |
| 81 private: | 73 private: |
| 82 virtual ~ShortcutHelper(); | 74 virtual ~ShortcutHelper(); |
| 83 | 75 |
| 84 void Destroy(); | 76 void Destroy(); |
| 85 | 77 |
| 86 JavaObjectWeakGlobalRef java_ref_; | 78 JavaObjectWeakGlobalRef java_ref_; |
| 87 | 79 |
| 88 GURL url_; | 80 GURL url_; |
| 89 base::string16 title_; | 81 base::string16 title_; |
| 90 int launcher_large_icon_size_; | 82 int launcher_large_icon_size_; |
| 91 ShortcutType shortcut_type_; | 83 WebApplicationInfo::MobileCapable web_app_capable_; |
| 92 favicon_base::FaviconRawBitmapResult icon_; | 84 favicon_base::FaviconRawBitmapResult icon_; |
| 93 base::CancelableTaskTracker cancelable_task_tracker_; | 85 base::CancelableTaskTracker cancelable_task_tracker_; |
| 94 | 86 |
| 95 DISALLOW_COPY_AND_ASSIGN(ShortcutHelper); | 87 DISALLOW_COPY_AND_ASSIGN(ShortcutHelper); |
| 96 }; | 88 }; |
| 97 | 89 |
| 98 #endif // CHROME_BROWSER_ANDROID_SHORTCUT_HELPER_H_ | 90 #endif // CHROME_BROWSER_ANDROID_SHORTCUT_HELPER_H_ |
| OLD | NEW |