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

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: Nits. 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"
19 #include "chrome/browser/ui/android/infobars/app_banner_infobar_android.h"
16 #include "content/public/browser/browser_thread.h" 20 #include "content/public/browser/browser_thread.h"
17 #include "content/public/browser/web_contents.h" 21 #include "content/public/browser/web_contents.h"
18 #include "content/public/common/origin_util.h" 22 #include "content/public/common/origin_util.h"
19 #include "jni/AddToHomescreenManager_jni.h" 23 #include "jni/AddToHomescreenManager_jni.h"
20 #include "ui/gfx/android/java_bitmap.h" 24 #include "ui/gfx/android/java_bitmap.h"
21 25
22 using base::android::JavaParamRef; 26 using base::android::JavaParamRef;
23 using base::android::ScopedJavaLocalRef; 27 using base::android::ScopedJavaLocalRef;
24 28
25 jlong InitializeAndStart(JNIEnv* env, 29 jlong InitializeAndStart(JNIEnv* env,
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 126
123 AppBannerSettingsHelper::RecordBannerEvent( 127 AppBannerSettingsHelper::RecordBannerEvent(
124 web_contents, web_contents->GetURL(), 128 web_contents, web_contents->GetURL(),
125 data_fetcher_->shortcut_info().url.spec(), 129 data_fetcher_->shortcut_info().url.spec(),
126 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, 130 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
127 base::Time::Now()); 131 base::Time::Now());
128 } 132 }
129 133
130 void AddToHomescreenManager::OnDidDetermineWebApkCompatibility( 134 void AddToHomescreenManager::OnDidDetermineWebApkCompatibility(
131 bool is_webapk_compatible) { 135 bool is_webapk_compatible) {
132 // TODO(pkotwicz): Select whether to use dialog or not based on 136 is_webapk_compatible_ = is_webapk_compatible;
133 // |is_webapk_compatible|. 137 if (!is_webapk_compatible)
134 ShowDialog(); 138 ShowDialog();
135 } 139 }
136 140
137 void AddToHomescreenManager::OnUserTitleAvailable( 141 void AddToHomescreenManager::OnUserTitleAvailable(
138 const base::string16& user_title) { 142 const base::string16& user_title) {
143 if (is_webapk_compatible_)
144 return;
139 JNIEnv* env = base::android::AttachCurrentThread(); 145 JNIEnv* env = base::android::AttachCurrentThread();
140 ScopedJavaLocalRef<jstring> j_user_title = 146 ScopedJavaLocalRef<jstring> j_user_title =
141 base::android::ConvertUTF16ToJavaString(env, user_title); 147 base::android::ConvertUTF16ToJavaString(env, user_title);
142 Java_AddToHomescreenManager_onUserTitleAvailable(env, 148 Java_AddToHomescreenManager_onUserTitleAvailable(env,
143 java_ref_, 149 java_ref_,
144 j_user_title); 150 j_user_title);
145 } 151 }
146 152
147 void AddToHomescreenManager::OnDataAvailable(const ShortcutInfo& info, 153 void AddToHomescreenManager::OnDataAvailable(const ShortcutInfo& info,
148 const SkBitmap& icon) { 154 const SkBitmap& icon) {
155 if (is_webapk_compatible_) {
156 CreateInfoBarForWebAPK(info, icon);
157 return;
158 }
159
149 JNIEnv* env = base::android::AttachCurrentThread(); 160 JNIEnv* env = base::android::AttachCurrentThread();
150 ScopedJavaLocalRef<jobject> java_bitmap; 161 ScopedJavaLocalRef<jobject> java_bitmap;
151 if (icon.getSize()) 162 if (icon.getSize())
152 java_bitmap = gfx::ConvertToJavaBitmap(&icon); 163 java_bitmap = gfx::ConvertToJavaBitmap(&icon);
153 164
154 Java_AddToHomescreenManager_onReadyToAdd(env, java_ref_, java_bitmap); 165 Java_AddToHomescreenManager_onReadyToAdd(env, java_ref_, java_bitmap);
155 166
156 if (add_shortcut_pending_) 167 if (add_shortcut_pending_)
157 AddShortcut(info, icon); 168 AddShortcut(info, icon);
158 } 169 }
159 170
171 void AddToHomescreenManager::CreateInfoBarForWebAPK(const ShortcutInfo& info,
172 const SkBitmap& icon) {
173 std::unique_ptr<banners::AppBannerInfoBarDelegateAndroid> delegate_ptr =
174 base::MakeUnique<banners::AppBannerInfoBarDelegateAndroid>(
175 nullptr, info.user_title, base::MakeUnique<ShortcutInfo>(info),
176 base::MakeUnique<SkBitmap>(icon),
177 -1 /* event_request_id */, true /* is_webapk */);
178
179 std::unique_ptr<infobars::InfoBar> infobar_ptr =
180 base::MakeUnique<AppBannerInfoBarAndroid>(
181 std::move(delegate_ptr), data_fetcher_->shortcut_info().url, true);
182 if (!infobar_ptr.get()) {
183 LOG(ERROR) << "Failed to create infobar to install the WebAPK.";
184 return;
185 }
186
187 content::WebContents* web_contents = data_fetcher_->web_contents();
188 if (!web_contents) {
189 LOG(ERROR) << "Failed to create infobar to install the WebAPK: "
190 << "the associated WebContents is null.";
191 return;
192 }
193
194 banners::AppBannerInfoBarDelegateAndroid* delegate =
195 infobar_ptr.get()->delegate()->AsAppBannerInfoBarDelegateAndroid();
Peter Kasting 2016/09/06 19:31:23 Don't add this function. You don't need it and we
Xi Han 2016/09/07 15:53:17 Thanks for all the suggestions. I will be more car
196
197 InfoBarService::FromWebContents(web_contents)->AddInfoBar(
198 std::move(infobar_ptr));
199 delegate->InstallWebApk(web_contents);
200 }
201
160 SkBitmap AddToHomescreenManager::FinalizeLauncherIconInBackground( 202 SkBitmap AddToHomescreenManager::FinalizeLauncherIconInBackground(
161 const SkBitmap& bitmap, 203 const SkBitmap& bitmap,
162 const GURL& url, 204 const GURL& url,
163 bool* is_generated) { 205 bool* is_generated) {
164 DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread()); 206 DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
165 207
166 return ShortcutHelper::FinalizeLauncherIconInBackground(bitmap, url, 208 return ShortcutHelper::FinalizeLauncherIconInBackground(bitmap, url,
167 is_generated); 209 is_generated);
168 } 210 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698