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 99d9b315c3a1b43ae201d7631b994376cac01e6b..140901f1bc52878aaeb46edd391b1b5af16a488a 100644 |
--- a/chrome/browser/android/banners/app_banner_manager.cc |
+++ b/chrome/browser/android/banners/app_banner_manager.cc |
@@ -78,7 +78,12 @@ void AppBannerManager::Block() const { |
if (!web_contents()) |
return; |
- if (!web_app_data_.IsEmpty()) { |
+ if (!native_app_data_.is_null()) { |
+ AppBannerSettingsHelper::RecordBannerEvent( |
+ web_contents(), web_contents()->GetURL(), |
+ native_app_package_, |
+ AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, base::Time::Now()); |
+ } else if (!web_app_data_.IsEmpty()) { |
AppBannerSettingsHelper::RecordBannerEvent( |
web_contents(), web_contents()->GetURL(), |
web_app_data_.start_url.spec(), |
@@ -132,6 +137,8 @@ void AppBannerManager::DidNavigateMainFrame( |
app_title_ = base::string16(); |
app_icon_.reset(); |
web_app_data_ = content::Manifest(); |
+ native_app_data_.Reset(); |
+ native_app_package_ = std::string(); |
} |
void AppBannerManager::DidFinishLoad( |
@@ -247,7 +254,12 @@ void AppBannerManager::OnFetchComplete(const GURL url, const SkBitmap* bitmap) { |
InfoBarService* service = InfoBarService::FromWebContents(web_contents()); |
weak_infobar_ptr_ = nullptr; |
- if (!web_app_data_.IsEmpty()){ |
+ if (!native_app_data_.is_null()) { |
+ weak_infobar_ptr_ = AppBannerInfoBarDelegate::CreateForNativeApp( |
+ service, |
+ this, |
+ native_app_data_); |
+ } else if (!web_app_data_.IsEmpty()){ |
weak_infobar_ptr_ = AppBannerInfoBarDelegate::CreateForWebApp( |
service, |
this, |
@@ -285,16 +297,25 @@ void AppBannerManager::OnDidRetrieveMetaTagContent( |
ConvertUTF8ToJavaString(env, expected_url.spec())); |
ScopedJavaLocalRef<jstring> jpackage( |
ConvertUTF8ToJavaString(env, tag_content)); |
- Java_AppBannerManager_prepareBanner(env, |
- jobj.obj(), |
- jurl.obj(), |
- jpackage.obj()); |
+ Java_AppBannerManager_fetchAppDetails(env, |
+ jobj.obj(), |
+ jurl.obj(), |
+ jpackage.obj()); |
} |
-bool AppBannerManager::FetchIcon(JNIEnv* env, |
- jobject obj, |
- jstring jimage_url) { |
- std::string image_url = ConvertJavaStringToUTF8(env, jimage_url); |
+bool AppBannerManager::OnAppDetailsRetrieved(JNIEnv* env, |
+ jobject obj, |
+ jobject japp_data, |
+ jstring japp_title, |
+ jstring japp_package, |
+ jstring jicon_url) { |
+ if (validated_url_ != web_contents()->GetURL()) |
+ return false; |
+ |
+ std::string image_url = ConvertJavaStringToUTF8(env, jicon_url); |
+ app_title_ = ConvertJavaStringToUTF16(env, japp_title); |
+ native_app_package_ = ConvertJavaStringToUTF8(env, japp_package); |
+ native_app_data_.Reset(env, japp_data); |
return FetchIcon(GURL(image_url)); |
} |