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

Side by Side Diff: chrome/browser/android/webapps/add_to_homescreen_manager.cc

Issue 2290603005: Trigger app banner when add to homescreen is pressed and WebAPKs are enabled. (Closed)
Patch Set: Created 4 years, 3 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 #include "chrome/browser/android/webapps/add_to_homescreen_manager.h" 5 #include "chrome/browser/android/webapps/add_to_homescreen_manager.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h" 8 #include "base/android/jni_string.h"
9 #include "base/guid.h" 9 #include "base/guid.h"
10 #include "base/location.h" 10 #include "base/location.h"
11 #include "base/memory/ptr_util.h"
11 #include "base/strings/string16.h" 12 #include "base/strings/string16.h"
12 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "chrome/browser/android/banners/app_banner_infobar_delegate_android.h"
13 #include "chrome/browser/android/shortcut_helper.h" 15 #include "chrome/browser/android/shortcut_helper.h"
14 #include "chrome/browser/android/webapk/chrome_webapk_host.h" 16 #include "chrome/browser/android/webapk/chrome_webapk_host.h"
15 #include "chrome/browser/banners/app_banner_settings_helper.h" 17 #include "chrome/browser/banners/app_banner_settings_helper.h"
18 #include "chrome/browser/infobars/infobar_service.h"
16 #include "chrome/browser/installable/installable_manager.h" 19 #include "chrome/browser/installable/installable_manager.h"
20 #include "chrome/browser/ui/android/infobars/app_banner_infobar_android.h"
17 #include "content/public/browser/browser_thread.h" 21 #include "content/public/browser/browser_thread.h"
18 #include "content/public/browser/web_contents.h" 22 #include "content/public/browser/web_contents.h"
19 #include "content/public/common/origin_util.h" 23 #include "content/public/common/origin_util.h"
20 #include "jni/AddToHomescreenManager_jni.h" 24 #include "jni/AddToHomescreenManager_jni.h"
21 #include "third_party/skia/include/core/SkBitmap.h" 25 #include "third_party/skia/include/core/SkBitmap.h"
22 #include "ui/gfx/android/java_bitmap.h" 26 #include "ui/gfx/android/java_bitmap.h"
23 27
24 using base::android::JavaParamRef; 28 using base::android::JavaParamRef;
25 using base::android::ScopedJavaLocalRef; 29 using base::android::ScopedJavaLocalRef;
26 30
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 void AddToHomescreenManager::OnGotWebApkCompatibilityData( 109 void AddToHomescreenManager::OnGotWebApkCompatibilityData(
106 content::WebContents* web_contents, 110 content::WebContents* web_contents,
107 const InstallableData& installable_data) { 111 const InstallableData& installable_data) {
108 OnDeterminedWebApkCompatibility(web_contents, 112 OnDeterminedWebApkCompatibility(web_contents,
109 installable_data.is_installable); 113 installable_data.is_installable);
110 } 114 }
111 115
112 void AddToHomescreenManager::OnDeterminedWebApkCompatibility( 116 void AddToHomescreenManager::OnDeterminedWebApkCompatibility(
113 content::WebContents* web_contents, 117 content::WebContents* web_contents,
114 bool is_compatible) { 118 bool is_compatible) {
115 // TODO(pkotwicz): Select whether to use dialog or not based on 119 is_compatible_ = is_compatible;
116 // |is_compatible|. 120 if (!is_compatible)
117 ShowDialog(); 121 ShowDialog();
118 StartFetchingInfoForShortcut(web_contents); 122 StartFetchingInfoForShortcut(web_contents);
119 } 123 }
120 124
121 void AddToHomescreenManager::ShowDialog() { 125 void AddToHomescreenManager::ShowDialog() {
122 JNIEnv* env = base::android::AttachCurrentThread(); 126 JNIEnv* env = base::android::AttachCurrentThread();
123 Java_AddToHomescreenManager_showDialog(env, java_ref_); 127 Java_AddToHomescreenManager_showDialog(env, java_ref_);
124 } 128 }
125 129
126 void AddToHomescreenManager::StartFetchingInfoForShortcut( 130 void AddToHomescreenManager::StartFetchingInfoForShortcut(
127 content::WebContents* web_contents) { 131 content::WebContents* web_contents) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 164
161 AppBannerSettingsHelper::RecordBannerEvent( 165 AppBannerSettingsHelper::RecordBannerEvent(
162 web_contents, web_contents->GetURL(), 166 web_contents, web_contents->GetURL(),
163 data_fetcher_->shortcut_info().url.spec(), 167 data_fetcher_->shortcut_info().url.spec(),
164 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, 168 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
165 base::Time::Now()); 169 base::Time::Now());
166 } 170 }
167 171
168 void AddToHomescreenManager::OnUserTitleAvailable( 172 void AddToHomescreenManager::OnUserTitleAvailable(
169 const base::string16& user_title) { 173 const base::string16& user_title) {
174 if (is_compatible_)
175 return;
170 JNIEnv* env = base::android::AttachCurrentThread(); 176 JNIEnv* env = base::android::AttachCurrentThread();
171 ScopedJavaLocalRef<jstring> j_user_title = 177 ScopedJavaLocalRef<jstring> j_user_title =
172 base::android::ConvertUTF16ToJavaString(env, user_title); 178 base::android::ConvertUTF16ToJavaString(env, user_title);
173 Java_AddToHomescreenManager_onUserTitleAvailable(env, 179 Java_AddToHomescreenManager_onUserTitleAvailable(env,
174 java_ref_, 180 java_ref_,
175 j_user_title); 181 j_user_title);
176 } 182 }
177 183
178 void AddToHomescreenManager::OnDataAvailable(const ShortcutInfo& info, 184 void AddToHomescreenManager::OnDataAvailable(const ShortcutInfo& info,
179 const SkBitmap& icon) { 185 const SkBitmap& icon) {
186 if (is_compatible_) {
187 CreateInfobar(info, icon);
188 return;
189 }
190
180 JNIEnv* env = base::android::AttachCurrentThread(); 191 JNIEnv* env = base::android::AttachCurrentThread();
181 ScopedJavaLocalRef<jobject> java_bitmap; 192 ScopedJavaLocalRef<jobject> java_bitmap;
182 if (icon.getSize()) 193 if (icon.getSize())
183 java_bitmap = gfx::ConvertToJavaBitmap(&icon); 194 java_bitmap = gfx::ConvertToJavaBitmap(&icon);
184 195
185 Java_AddToHomescreenManager_onReadyToAdd(env, java_ref_, java_bitmap); 196 Java_AddToHomescreenManager_onReadyToAdd(env, java_ref_, java_bitmap);
186 197
187 if (add_shortcut_pending_) 198 if (add_shortcut_pending_)
188 AddShortcut(info, icon); 199 AddShortcut(info, icon);
189 } 200 }
190 201
202 void AddToHomescreenManager::CreateInfobar(const ShortcutInfo& info,
203 const SkBitmap& icon) {
204 std::unique_ptr<ShortcutInfo> info_ptr(new ShortcutInfo(info));
205 std::unique_ptr<SkBitmap> icon_ptr(new SkBitmap(icon));
206 std::unique_ptr<banners::AppBannerInfoBarDelegateAndroid> delegate(
207 new banners::AppBannerInfoBarDelegateAndroid(
208 nullptr, info.user_title, info.manifest_url, std::move(info_ptr),
209 info.icon_url, std::move(icon_ptr), -1 /* event_request_id */,
210 true));
211
212 infobars::InfoBar* infobar = new AppBannerInfoBarAndroid(
213 std::move(delegate), data_fetcher_->shortcut_info().url, true);
214 if (infobar) {
gone 2016/08/31 18:12:45 if (!infobar) return; saves you a level of inde
Xi Han 2016/08/31 20:11:48 I will be more careful and use early exist as much
215 content::WebContents* web_contents = data_fetcher_->web_contents();
216 if (!web_contents) {
217 LOG(ERROR) << "Failed to create infobar to install the WebAPK: "
218 << "the associated WebContents is null.";
219 return;
220 }
221 InfoBarService::FromWebContents(web_contents)->AddInfoBar(
222 base::WrapUnique(infobar));
223 static_cast<AppBannerInfoBarAndroid*>(infobar)->InstallWebApk(web_contents);
224 }
225 }
226
191 SkBitmap AddToHomescreenManager::FinalizeLauncherIconInBackground( 227 SkBitmap AddToHomescreenManager::FinalizeLauncherIconInBackground(
192 const SkBitmap& bitmap, 228 const SkBitmap& bitmap,
193 const GURL& url, 229 const GURL& url,
194 bool* is_generated) { 230 bool* is_generated) {
195 DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread()); 231 DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
196 232
197 return ShortcutHelper::FinalizeLauncherIconInBackground(bitmap, url, 233 return ShortcutHelper::FinalizeLauncherIconInBackground(bitmap, url,
198 is_generated); 234 is_generated);
199 } 235 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698