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

Side by Side Diff: chrome/browser/android/banners/app_banner_manager_android.cc

Issue 2676863002: Update WebApkInstaller to support badge icon in installation. (Closed)
Patch Set: addressing comments Created 3 years, 8 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/banners/app_banner_manager_android.h" 5 #include "chrome/browser/android/banners/app_banner_manager_android.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility>
9 8
10 #include "base/android/jni_android.h" 9 #include "base/android/jni_android.h"
11 #include "base/android/jni_string.h" 10 #include "base/android/jni_string.h"
12 #include "base/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
13 #include "base/strings/utf_string_conversions.h" 12 #include "base/strings/utf_string_conversions.h"
14 #include "chrome/browser/android/banners/app_banner_infobar_delegate_android.h" 13 #include "chrome/browser/android/banners/app_banner_infobar_delegate_android.h"
15 #include "chrome/browser/android/shortcut_helper.h" 14 #include "chrome/browser/android/shortcut_helper.h"
16 #include "chrome/browser/android/webapk/chrome_webapk_host.h" 15 #include "chrome/browser/android/webapk/chrome_webapk_host.h"
17 #include "chrome/browser/android/webapk/webapk_metrics.h" 16 #include "chrome/browser/android/webapk/webapk_metrics.h"
18 #include "chrome/browser/android/webapk/webapk_web_manifest_checker.h" 17 #include "chrome/browser/android/webapk/webapk_web_manifest_checker.h"
19 #include "chrome/browser/banners/app_banner_metrics.h" 18 #include "chrome/browser/banners/app_banner_metrics.h"
20 #include "chrome/browser/banners/app_banner_settings_helper.h" 19 #include "chrome/browser/banners/app_banner_settings_helper.h"
21 #include "chrome/browser/manifest/manifest_icon_downloader.h" 20 #include "chrome/browser/manifest/manifest_icon_downloader.h"
22 #include "chrome/browser/manifest/manifest_icon_selector.h" 21 #include "chrome/browser/manifest/manifest_icon_selector.h"
23 #include "content/public/browser/web_contents.h" 22 #include "content/public/browser/web_contents.h"
24 #include "content/public/common/frame_navigate_params.h" 23 #include "content/public/common/frame_navigate_params.h"
25 #include "jni/AppBannerManager_jni.h" 24 #include "jni/AppBannerManager_jni.h"
26 #include "net/base/url_util.h" 25 #include "net/base/url_util.h"
27 #include "third_party/skia/include/core/SkBitmap.h"
28 26
29 using base::android::ConvertJavaStringToUTF8; 27 using base::android::ConvertJavaStringToUTF8;
30 using base::android::ConvertJavaStringToUTF16; 28 using base::android::ConvertJavaStringToUTF16;
31 using base::android::ConvertUTF8ToJavaString; 29 using base::android::ConvertUTF8ToJavaString;
32 using base::android::JavaParamRef; 30 using base::android::JavaParamRef;
33 using base::android::ScopedJavaLocalRef; 31 using base::android::ScopedJavaLocalRef;
34 32
35 DEFINE_WEB_CONTENTS_USER_DATA_KEY(banners::AppBannerManagerAndroid); 33 DEFINE_WEB_CONTENTS_USER_DATA_KEY(banners::AppBannerManagerAndroid);
36 34
37 namespace { 35 namespace {
38 36
39 std::unique_ptr<ShortcutInfo> CreateShortcutInfo( 37 std::unique_ptr<ShortcutInfo> CreateShortcutInfo(
40 const GURL& manifest_url, 38 const GURL& manifest_url,
41 const content::Manifest& manifest, 39 const content::Manifest& manifest,
42 const GURL& icon_url) { 40 const GURL& primary_icon_url,
41 const GURL& badge_icon_url) {
43 auto shortcut_info = base::MakeUnique<ShortcutInfo>(GURL()); 42 auto shortcut_info = base::MakeUnique<ShortcutInfo>(GURL());
44 if (!manifest.IsEmpty()) { 43 if (!manifest.IsEmpty()) {
45 shortcut_info->UpdateFromManifest(manifest); 44 shortcut_info->UpdateFromManifest(manifest);
46 shortcut_info->manifest_url = manifest_url; 45 shortcut_info->manifest_url = manifest_url;
47 shortcut_info->best_primary_icon_url = icon_url; 46 shortcut_info->best_primary_icon_url = primary_icon_url;
47 shortcut_info->best_badge_icon_url = badge_icon_url;
48 shortcut_info->UpdateSource(ShortcutInfo::SOURCE_APP_BANNER); 48 shortcut_info->UpdateSource(ShortcutInfo::SOURCE_APP_BANNER);
49 } 49 }
50 50
51 shortcut_info->ideal_splash_image_size_in_px = 51 shortcut_info->ideal_splash_image_size_in_px =
52 ShortcutHelper::GetIdealSplashImageSizeInPx(); 52 ShortcutHelper::GetIdealSplashImageSizeInPx();
53 shortcut_info->minimum_splash_image_size_in_px = 53 shortcut_info->minimum_splash_image_size_in_px =
54 ShortcutHelper::GetMinimumSplashImageSizeInPx(); 54 ShortcutHelper::GetMinimumSplashImageSizeInPx();
55 shortcut_info->splash_image_url = ManifestIconSelector::FindBestMatchingIcon( 55 shortcut_info->splash_image_url = ManifestIconSelector::FindBestMatchingIcon(
56 manifest.icons, shortcut_info->ideal_splash_image_size_in_px, 56 manifest.icons, shortcut_info->ideal_splash_image_size_in_px,
57 shortcut_info->minimum_splash_image_size_in_px, 57 shortcut_info->minimum_splash_image_size_in_px,
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 // No native app banner was requested. Continue checking for a web app banner. 203 // No native app banner was requested. Continue checking for a web app banner.
204 AppBannerManager::PerformInstallableCheck(); 204 AppBannerManager::PerformInstallableCheck();
205 } 205 }
206 206
207 void AppBannerManagerAndroid::OnDidPerformInstallableCheck( 207 void AppBannerManagerAndroid::OnDidPerformInstallableCheck(
208 const InstallableData& data) { 208 const InstallableData& data) {
209 if (data.badge_icon && !data.badge_icon->drawsNothing()) { 209 if (data.badge_icon && !data.badge_icon->drawsNothing()) {
210 DCHECK(!data.badge_icon_url.is_empty()); 210 DCHECK(!data.badge_icon_url.is_empty());
211 211
212 badge_icon_url_ = data.badge_icon_url; 212 badge_icon_url_ = data.badge_icon_url;
213 badge_icon_.reset(new SkBitmap(*data.badge_icon)); 213 badge_icon_ = *data.badge_icon;
214 } 214 }
215 215
216 AppBannerManager::OnDidPerformInstallableCheck(data); 216 AppBannerManager::OnDidPerformInstallableCheck(data);
217 } 217 }
218 218
219 void AppBannerManagerAndroid::OnAppIconFetched(const SkBitmap& bitmap) { 219 void AppBannerManagerAndroid::OnAppIconFetched(const SkBitmap& bitmap) {
220 if (bitmap.drawsNothing()) { 220 if (bitmap.drawsNothing()) {
221 ReportStatus(web_contents(), NO_ICON_AVAILABLE); 221 ReportStatus(web_contents(), NO_ICON_AVAILABLE);
222 Stop(); 222 Stop();
223 } 223 }
224 224
225 if (!is_active()) 225 if (!is_active())
226 return; 226 return;
227 227
228 primary_icon_.reset(new SkBitmap(bitmap)); 228 primary_icon_ = bitmap;
229 SendBannerPromptRequest(); 229 SendBannerPromptRequest();
230 } 230 }
231 231
232 void AppBannerManagerAndroid::ResetCurrentPageData() { 232 void AppBannerManagerAndroid::ResetCurrentPageData() {
233 AppBannerManager::ResetCurrentPageData(); 233 AppBannerManager::ResetCurrentPageData();
234 native_app_data_.Reset(); 234 native_app_data_.Reset();
235 native_app_package_ = ""; 235 native_app_package_ = "";
236 } 236 }
237 237
238 void AppBannerManagerAndroid::ShowBanner() { 238 void AppBannerManagerAndroid::ShowBanner() {
239 content::WebContents* contents = web_contents(); 239 content::WebContents* contents = web_contents();
240 DCHECK(contents); 240 DCHECK(contents);
241 241
242 if (native_app_data_.is_null()) { 242 if (native_app_data_.is_null()) {
243 // TODO(zpeng): Add badge to WebAPK installation flow.
244 if (AppBannerInfoBarDelegateAndroid::Create( 243 if (AppBannerInfoBarDelegateAndroid::Create(
245 contents, GetWeakPtr(), app_title_, 244 contents, GetWeakPtr(), app_title_,
246 CreateShortcutInfo(manifest_url_, manifest_, primary_icon_url_), 245 CreateShortcutInfo(manifest_url_, manifest_, primary_icon_url_,
247 std::move(primary_icon_), event_request_id(), 246 badge_icon_url_),
247 primary_icon_, badge_icon_, event_request_id(),
248 webapk::INSTALL_SOURCE_BANNER)) { 248 webapk::INSTALL_SOURCE_BANNER)) {
249 RecordDidShowBanner("AppBanner.WebApp.Shown"); 249 RecordDidShowBanner("AppBanner.WebApp.Shown");
250 TrackDisplayEvent(DISPLAY_EVENT_WEB_APP_BANNER_CREATED); 250 TrackDisplayEvent(DISPLAY_EVENT_WEB_APP_BANNER_CREATED);
251 ReportStatus(contents, SHOWING_WEB_APP_BANNER); 251 ReportStatus(contents, SHOWING_WEB_APP_BANNER);
252 } else { 252 } else {
253 ReportStatus(contents, FAILED_TO_CREATE_BANNER); 253 ReportStatus(contents, FAILED_TO_CREATE_BANNER);
254 } 254 }
255 } else { 255 } else {
256 if (AppBannerInfoBarDelegateAndroid::Create( 256 if (AppBannerInfoBarDelegateAndroid::Create(
257 contents, app_title_, native_app_data_, std::move(primary_icon_), 257 contents, app_title_, native_app_data_, primary_icon_,
258 native_app_package_, referrer_, event_request_id())) { 258 native_app_package_, referrer_, event_request_id())) {
259 RecordDidShowBanner("AppBanner.NativeApp.Shown"); 259 RecordDidShowBanner("AppBanner.NativeApp.Shown");
260 TrackDisplayEvent(DISPLAY_EVENT_NATIVE_APP_BANNER_CREATED); 260 TrackDisplayEvent(DISPLAY_EVENT_NATIVE_APP_BANNER_CREATED);
261 ReportStatus(contents, SHOWING_NATIVE_APP_BANNER); 261 ReportStatus(contents, SHOWING_NATIVE_APP_BANNER);
262 } else { 262 } else {
263 ReportStatus(contents, FAILED_TO_CREATE_BANNER); 263 ReportStatus(contents, FAILED_TO_CREATE_BANNER);
264 } 264 }
265 } 265 }
266 } 266 }
267 267
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 } 367 }
368 368
369 // static 369 // static
370 void SetTotalEngagementToTrigger(JNIEnv* env, 370 void SetTotalEngagementToTrigger(JNIEnv* env,
371 const JavaParamRef<jclass>& clazz, 371 const JavaParamRef<jclass>& clazz,
372 jdouble engagement) { 372 jdouble engagement) {
373 AppBannerSettingsHelper::SetTotalEngagementToTrigger(engagement); 373 AppBannerSettingsHelper::SetTotalEngagementToTrigger(engagement);
374 } 374 }
375 375
376 } // namespace banners 376 } // namespace banners
OLDNEW
« no previous file with comments | « chrome/browser/android/banners/app_banner_manager_android.h ('k') | chrome/browser/android/shortcut_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698