| Index: chrome/browser/android/banners/app_banner_manager.cc
|
| diff --git a/chrome/browser/android/banners/app_banner_manager.cc b/chrome/browser/android/banners/app_banner_manager.cc
|
| index 140901f1bc52878aaeb46edd391b1b5af16a488a..74dfa7924a09b2b698563c184255918417367808 100644
|
| --- a/chrome/browser/android/banners/app_banner_manager.cc
|
| +++ b/chrome/browser/android/banners/app_banner_manager.cc
|
| @@ -99,7 +99,16 @@ bool AppBannerManager::OnButtonClicked() const {
|
| if (!web_contents())
|
| return true;
|
|
|
| - if (!web_app_data_.IsEmpty()) {
|
| + if (!native_app_data_.is_null()) {
|
| + JNIEnv* env = base::android::AttachCurrentThread();
|
| + ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
|
| + if (jobj.is_null())
|
| + return true;
|
| +
|
| + return Java_AppBannerManager_installOrOpenNativeApp(env,
|
| + jobj.obj(),
|
| + native_app_data_.obj());
|
| + } else if (!web_app_data_.IsEmpty()) {
|
| AppBannerSettingsHelper::RecordBannerEvent(
|
| web_contents(), web_contents()->GetURL(),
|
| web_app_data_.start_url.spec(),
|
| @@ -113,6 +122,27 @@ bool AppBannerManager::OnButtonClicked() const {
|
| return true;
|
| }
|
|
|
| +bool AppBannerManager::OnLinkClicked() const {
|
| + if (!web_contents())
|
| + return true;
|
| +
|
| + if (!native_app_data_.is_null()) {
|
| + // Try to show the details for the native app.
|
| + JNIEnv* env = base::android::AttachCurrentThread();
|
| + ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
|
| + if (jobj.is_null())
|
| + return true;
|
| +
|
| + Java_AppBannerManager_showAppDetails(env,
|
| + jobj.obj(),
|
| + native_app_data_.obj());
|
| + return true;
|
| + } else {
|
| + // Nothing should happen if the user is installing a web app.
|
| + return false;
|
| + }
|
| +}
|
| +
|
| base::string16 AppBannerManager::GetTitle() const {
|
| return app_title_;
|
| }
|
| @@ -319,6 +349,53 @@ bool AppBannerManager::OnAppDetailsRetrieved(JNIEnv* env,
|
| return FetchIcon(GURL(image_url));
|
| }
|
|
|
| +void AppBannerManager::OnInstallIntentReturned(JNIEnv* env,
|
| + jobject obj,
|
| + jboolean jis_installing) {
|
| + if (!weak_infobar_ptr_)
|
| + return;
|
| +
|
| + if (jis_installing) {
|
| + AppBannerSettingsHelper::RecordBannerEvent(
|
| + web_contents(),
|
| + web_contents()->GetURL(),
|
| + native_app_package_,
|
| + AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
|
| + base::Time::Now());
|
| + }
|
| +
|
| + UpdateInstallState(env, obj);
|
| +}
|
| +
|
| +void AppBannerManager::OnInstallFinished(JNIEnv* env,
|
| + jobject obj,
|
| + jboolean success) {
|
| + if (!weak_infobar_ptr_)
|
| + return;
|
| +
|
| + if (success) {
|
| + UpdateInstallState(env, obj);
|
| + } else {
|
| + InfoBarService* service = InfoBarService::FromWebContents(web_contents());
|
| + service->RemoveInfoBar(weak_infobar_ptr_);
|
| + }
|
| +}
|
| +
|
| +void AppBannerManager::UpdateInstallState(JNIEnv* env, jobject obj) {
|
| + if (!weak_infobar_ptr_ || native_app_data_.is_null())
|
| + return;
|
| +
|
| + ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
|
| + if (jobj.is_null())
|
| + return;
|
| +
|
| + int newState = Java_AppBannerManager_determineInstallState(
|
| + env,
|
| + jobj.obj(),
|
| + native_app_data_.obj());
|
| + weak_infobar_ptr_->OnInstallStateChanged(newState);
|
| +}
|
| +
|
| bool AppBannerManager::FetchIcon(const GURL& image_url) {
|
| if (!web_contents())
|
| return false;
|
|
|