OLD | NEW |
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_infobar_delegate_android.h" | 5 #include "chrome/browser/android/banners/app_banner_infobar_delegate_android.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/memory/ptr_util.h" |
12 #include "chrome/browser/android/shortcut_helper.h" | 12 #include "chrome/browser/android/shortcut_helper.h" |
13 #include "chrome/browser/android/shortcut_info.h" | 13 #include "chrome/browser/android/shortcut_info.h" |
14 #include "chrome/browser/android/tab_android.h" | 14 #include "chrome/browser/android/tab_android.h" |
15 #include "chrome/browser/android/webapk/chrome_webapk_host.h" | 15 #include "chrome/browser/android/webapk/chrome_webapk_host.h" |
16 #include "chrome/browser/android/webapk/webapk_installer.h" | |
17 #include "chrome/browser/banners/app_banner_manager.h" | 16 #include "chrome/browser/banners/app_banner_manager.h" |
18 #include "chrome/browser/banners/app_banner_metrics.h" | 17 #include "chrome/browser/banners/app_banner_metrics.h" |
19 #include "chrome/browser/banners/app_banner_settings_helper.h" | 18 #include "chrome/browser/banners/app_banner_settings_helper.h" |
20 #include "chrome/browser/browser_process.h" | 19 #include "chrome/browser/browser_process.h" |
21 #include "chrome/browser/infobars/infobar_service.h" | 20 #include "chrome/browser/infobars/infobar_service.h" |
22 #include "chrome/browser/ui/android/infobars/app_banner_infobar_android.h" | 21 #include "chrome/browser/ui/android/infobars/app_banner_infobar_android.h" |
23 #include "components/rappor/public/rappor_utils.h" | 22 #include "components/rappor/public/rappor_utils.h" |
24 #include "components/rappor/rappor_service_impl.h" | 23 #include "components/rappor/rappor_service_impl.h" |
25 #include "content/public/browser/web_contents.h" | 24 #include "content/public/browser/web_contents.h" |
26 #include "content/public/common/manifest.h" | 25 #include "content/public/common/manifest.h" |
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
344 AppBannerSettingsHelper::RecordBannerEvent( | 343 AppBannerSettingsHelper::RecordBannerEvent( |
345 web_contents, web_contents->GetLastCommittedURL(), | 344 web_contents, web_contents->GetLastCommittedURL(), |
346 shortcut_info_->url.spec(), | 345 shortcut_info_->url.spec(), |
347 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, | 346 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, |
348 AppBannerManager::GetCurrentTime()); | 347 AppBannerManager::GetCurrentTime()); |
349 } | 348 } |
350 | 349 |
351 Java_AppBannerInfoBarDelegateAndroid_setWebApkInstallingState( | 350 Java_AppBannerInfoBarDelegateAndroid_setWebApkInstallingState( |
352 env, java_delegate_, true); | 351 env, java_delegate_, true); |
353 UpdateInstallState(env, nullptr); | 352 UpdateInstallState(env, nullptr); |
354 WebApkInstaller::FinishCallback callback = | 353 WebApkInstallService::FinishCallback callback = |
355 base::Bind(&AppBannerInfoBarDelegateAndroid::OnWebApkInstallFinished, | 354 base::Bind(&AppBannerInfoBarDelegateAndroid::OnWebApkInstallFinished, |
356 weak_ptr_factory_.GetWeakPtr()); | 355 weak_ptr_factory_.GetWeakPtr()); |
357 ShortcutHelper::InstallWebApkWithSkBitmap(web_contents->GetBrowserContext(), | 356 ShortcutHelper::InstallWebApkWithSkBitmap(web_contents->GetBrowserContext(), |
358 *shortcut_info_, | 357 *shortcut_info_, |
359 *icon_.get(), callback); | 358 *icon_.get(), callback); |
360 SendBannerAccepted(); | 359 SendBannerAccepted(); |
361 | 360 |
362 // Prevent the infobar from disappearing, because the infobar will show | 361 // Prevent the infobar from disappearing, because the infobar will show |
363 // "Adding" during the installation process. | 362 // "Adding" during the installation process. |
364 return false; | 363 return false; |
365 } | 364 } |
366 | 365 |
367 bool AppBannerInfoBarDelegateAndroid::TriggeredFromBanner() const { | 366 bool AppBannerInfoBarDelegateAndroid::TriggeredFromBanner() const { |
368 return !is_webapk_ || webapk_install_source_ == webapk::INSTALL_SOURCE_BANNER; | 367 return !is_webapk_ || webapk_install_source_ == webapk::INSTALL_SOURCE_BANNER; |
369 } | 368 } |
370 | 369 |
371 void AppBannerInfoBarDelegateAndroid::SendBannerAccepted() { | 370 void AppBannerInfoBarDelegateAndroid::SendBannerAccepted() { |
372 if (weak_manager_ && TriggeredFromBanner()) { | 371 if (weak_manager_ && TriggeredFromBanner()) { |
373 weak_manager_->SendBannerAccepted(event_request_id_); | 372 weak_manager_->SendBannerAccepted(event_request_id_); |
374 // TODO(mgiuca): Send the appinstalled event for WebAPKs (but just removing | 373 // TODO(mgiuca): Send the appinstalled event for WebAPKs (but just removing |
375 // this check won't be sufficient). | 374 // this check won't be sufficient). |
376 if (!is_webapk_) | 375 if (!is_webapk_) |
377 weak_manager_->OnInstall(); | 376 weak_manager_->OnInstall(); |
378 } | 377 } |
379 } | 378 } |
380 | 379 |
381 void AppBannerInfoBarDelegateAndroid::OnWebApkInstallFinished( | 380 void AppBannerInfoBarDelegateAndroid::OnWebApkInstallFinished( |
382 bool success, | 381 bool success, |
383 const std::string& webapk_package_name) { | 382 const WebApkInstallService::FinishCallbackData& data) { |
384 JNIEnv* env = base::android::AttachCurrentThread(); | 383 JNIEnv* env = base::android::AttachCurrentThread(); |
385 if (!success) { | 384 if (!success) { |
386 DVLOG(1) << "The WebAPK installation failed."; | 385 DVLOG(1) << "The WebAPK installation failed."; |
387 Java_AppBannerInfoBarDelegateAndroid_showWebApkInstallFailureToast(env); | 386 Java_AppBannerInfoBarDelegateAndroid_showWebApkInstallFailureToast(env); |
388 webapk::TrackInstallEvent(webapk::INSTALL_FAILED); | 387 webapk::TrackInstallEvent(webapk::INSTALL_FAILED); |
389 if (infobar()) | 388 if (infobar()) |
390 infobar()->RemoveSelf(); | 389 infobar()->RemoveSelf(); |
391 return; | 390 return; |
392 } | 391 } |
393 | 392 |
394 UpdateStateForInstalledWebAPK(webapk_package_name); | 393 UpdateStateForInstalledWebAPK(data.webapk_package_name); |
395 webapk::TrackInstallEvent(webapk::INSTALL_COMPLETED); | 394 webapk::TrackInstallEvent(webapk::INSTALL_COMPLETED); |
396 } | 395 } |
397 | 396 |
398 void AppBannerInfoBarDelegateAndroid::TrackWebApkInstallationDismissEvents( | 397 void AppBannerInfoBarDelegateAndroid::TrackWebApkInstallationDismissEvents( |
399 InstallState install_state) { | 398 InstallState install_state) { |
400 if (install_state == INSTALL_NOT_STARTED) { | 399 if (install_state == INSTALL_NOT_STARTED) { |
401 webapk::TrackInstallEvent(webapk::INFOBAR_DISMISSED_BEFORE_INSTALLATION); | 400 webapk::TrackInstallEvent(webapk::INFOBAR_DISMISSED_BEFORE_INSTALLATION); |
402 } else if (install_state == INSTALLING) { | 401 } else if (install_state == INSTALLING) { |
403 webapk::TrackInstallEvent(webapk::INFOBAR_DISMISSED_DURING_INSTALLATION); | 402 webapk::TrackInstallEvent(webapk::INFOBAR_DISMISSED_DURING_INSTALLATION); |
404 } else if (install_state == INSTALLED) { | 403 } else if (install_state == INSTALLED) { |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
471 | 470 |
472 TrackDismissEvent(DISMISS_EVENT_BANNER_CLICK); | 471 TrackDismissEvent(DISMISS_EVENT_BANNER_CLICK); |
473 return true; | 472 return true; |
474 } | 473 } |
475 | 474 |
476 bool RegisterAppBannerInfoBarDelegateAndroid(JNIEnv* env) { | 475 bool RegisterAppBannerInfoBarDelegateAndroid(JNIEnv* env) { |
477 return RegisterNativesImpl(env); | 476 return RegisterNativesImpl(env); |
478 } | 477 } |
479 | 478 |
480 } // namespace banners | 479 } // namespace banners |
OLD | NEW |