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; |