Chromium Code Reviews| Index: chrome/browser/android/webapps/add_to_homescreen_manager.cc |
| diff --git a/chrome/browser/android/webapps/add_to_homescreen_manager.cc b/chrome/browser/android/webapps/add_to_homescreen_manager.cc |
| index 3a12112402710a0d24e4708b9e6d850ddc4df50d..e52e9a3b83af6d2cd8dae85390b1e1369a0e1d01 100644 |
| --- a/chrome/browser/android/webapps/add_to_homescreen_manager.cc |
| +++ b/chrome/browser/android/webapps/add_to_homescreen_manager.cc |
| @@ -8,12 +8,16 @@ |
| #include "base/android/jni_string.h" |
| #include "base/guid.h" |
| #include "base/location.h" |
| +#include "base/memory/ptr_util.h" |
| #include "base/strings/string16.h" |
| #include "base/strings/utf_string_conversions.h" |
| +#include "chrome/browser/android/banners/app_banner_infobar_delegate_android.h" |
| #include "chrome/browser/android/shortcut_helper.h" |
| #include "chrome/browser/android/webapk/chrome_webapk_host.h" |
| #include "chrome/browser/banners/app_banner_settings_helper.h" |
| +#include "chrome/browser/infobars/infobar_service.h" |
| #include "chrome/browser/installable/installable_manager.h" |
| +#include "chrome/browser/ui/android/infobars/app_banner_infobar_android.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/common/origin_util.h" |
| @@ -149,13 +153,15 @@ void AddToHomescreenManager::RecordAddToHomescreen() { |
| void AddToHomescreenManager::OnDidDetermineWebApkCompatibility( |
| bool is_webapk_compatible) { |
| - // TODO(pkotwicz): Select whether to use dialog or not based on |
| - // |is_webapk_compatible|. |
| - ShowDialog(); |
| + is_webapk_compatible_ = is_webapk_compatible; |
| + if (!is_webapk_compatible) |
| + ShowDialog(); |
| } |
| void AddToHomescreenManager::OnUserTitleAvailable( |
| const base::string16& user_title) { |
| + if (is_webapk_compatible_) |
| + return; |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| ScopedJavaLocalRef<jstring> j_user_title = |
| base::android::ConvertUTF16ToJavaString(env, user_title); |
| @@ -166,6 +172,11 @@ void AddToHomescreenManager::OnUserTitleAvailable( |
| void AddToHomescreenManager::OnDataAvailable(const ShortcutInfo& info, |
| const SkBitmap& icon) { |
| + if (is_webapk_compatible_) { |
| + CreateInfoBarForWebAPK(info, icon); |
| + return; |
| + } |
| + |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| ScopedJavaLocalRef<jobject> java_bitmap; |
| if (icon.getSize()) |
| @@ -177,6 +188,38 @@ void AddToHomescreenManager::OnDataAvailable(const ShortcutInfo& info, |
| AddShortcut(info, icon); |
| } |
| +void AddToHomescreenManager::CreateInfoBarForWebAPK(const ShortcutInfo& info, |
| + const SkBitmap& icon) { |
| + std::unique_ptr<banners::AppBannerInfoBarDelegateAndroid> delegate_ptr = |
| + base::MakeUnique<banners::AppBannerInfoBarDelegateAndroid>( |
| + nullptr, info.user_title, info.manifest_url, |
| + base::MakeUnique<ShortcutInfo>(info), info.icon_url, |
| + base::MakeUnique<SkBitmap>(icon), |
| + -1 /* event_request_id */, true); |
|
dominickn
2016/09/02 01:00:58
Minor nit: add /* is_webapk */ after true inside t
Xi Han
2016/09/02 13:58:23
Done.
|
| + |
| + std::unique_ptr<infobars::InfoBar> infobar_ptr = |
| + base::MakeUnique<AppBannerInfoBarAndroid>( |
| + std::move(delegate_ptr), data_fetcher_->shortcut_info().url, true); |
| + if (!infobar_ptr.get()) { |
| + LOG(ERROR) << "Failed to create infobar to install the WebAPK."; |
| + return; |
| + } |
| + |
| + content::WebContents* web_contents = data_fetcher_->web_contents(); |
| + if (!web_contents) { |
| + LOG(ERROR) << "Failed to create infobar to install the WebAPK: " |
| + << "the associated WebContents is null."; |
| + return; |
| + } |
| + |
| + banners::AppBannerInfoBarDelegateAndroid* delegate = |
|
dominickn
2016/09/02 01:00:58
Minor nit: move this line below 216 so you fetch t
Xi Han
2016/09/02 13:58:23
You can't get the delegate pointer once the std::m
dominickn
2016/09/02 14:30:48
Acknowledged - I'm blind and didn't see the std::m
|
| + infobar_ptr.get()->delegate()->AsAppBannerInfoBarDelegateAndroid(); |
| + |
| + InfoBarService::FromWebContents(web_contents)->AddInfoBar( |
| + std::move(infobar_ptr)); |
| + delegate->InstallWebApk(web_contents); |
| +} |
| + |
| SkBitmap AddToHomescreenManager::FinalizeLauncherIconInBackground( |
| const SkBitmap& bitmap, |
| const GURL& url, |