| 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" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 using base::android::ConvertJavaStringToUTF16; | 34 using base::android::ConvertJavaStringToUTF16; |
| 35 using base::android::ConvertUTF8ToJavaString; | 35 using base::android::ConvertUTF8ToJavaString; |
| 36 using base::android::ConvertUTF16ToJavaString; | 36 using base::android::ConvertUTF16ToJavaString; |
| 37 | 37 |
| 38 namespace banners { | 38 namespace banners { |
| 39 | 39 |
| 40 AppBannerInfoBarDelegateAndroid::AppBannerInfoBarDelegateAndroid( | 40 AppBannerInfoBarDelegateAndroid::AppBannerInfoBarDelegateAndroid( |
| 41 int event_request_id, | 41 int event_request_id, |
| 42 scoped_refptr<AppBannerDataFetcherAndroid> data_fetcher, | 42 scoped_refptr<AppBannerDataFetcherAndroid> data_fetcher, |
| 43 const base::string16& app_title, | 43 const base::string16& app_title, |
| 44 const GURL& app_icon_url, |
| 44 SkBitmap* app_icon, | 45 SkBitmap* app_icon, |
| 45 const content::Manifest& web_app_data) | 46 const GURL& manifest_url, |
| 47 const content::Manifest& manifest) |
| 46 : data_fetcher_(data_fetcher), | 48 : data_fetcher_(data_fetcher), |
| 47 app_title_(app_title), | 49 app_title_(app_title), |
| 50 app_icon_url_(app_icon_url), |
| 48 app_icon_(app_icon), | 51 app_icon_(app_icon), |
| 49 event_request_id_(event_request_id), | 52 event_request_id_(event_request_id), |
| 50 web_app_data_(web_app_data), | 53 manifest_url_(manifest_url), |
| 54 manifest_(manifest), |
| 51 has_user_interaction_(false) { | 55 has_user_interaction_(false) { |
| 52 DCHECK(!web_app_data.IsEmpty()); | 56 DCHECK(!manifest.IsEmpty()); |
| 53 CreateJavaDelegate(); | 57 CreateJavaDelegate(); |
| 54 } | 58 } |
| 55 | 59 |
| 56 AppBannerInfoBarDelegateAndroid::AppBannerInfoBarDelegateAndroid( | 60 AppBannerInfoBarDelegateAndroid::AppBannerInfoBarDelegateAndroid( |
| 57 int event_request_id, | 61 int event_request_id, |
| 58 const base::string16& app_title, | 62 const base::string16& app_title, |
| 59 SkBitmap* app_icon, | 63 SkBitmap* app_icon, |
| 60 const base::android::ScopedJavaGlobalRef<jobject>& native_app_data, | 64 const base::android::ScopedJavaGlobalRef<jobject>& native_app_data, |
| 61 const std::string& native_app_package, | 65 const std::string& native_app_package, |
| 62 const std::string& referrer) | 66 const std::string& referrer) |
| 63 : app_title_(app_title), | 67 : app_title_(app_title), |
| 64 app_icon_(app_icon), | 68 app_icon_(app_icon), |
| 65 event_request_id_(event_request_id), | 69 event_request_id_(event_request_id), |
| 66 native_app_data_(native_app_data), | 70 native_app_data_(native_app_data), |
| 67 native_app_package_(native_app_package), | 71 native_app_package_(native_app_package), |
| 68 referrer_(referrer), | 72 referrer_(referrer), |
| 69 has_user_interaction_(false) { | 73 has_user_interaction_(false) { |
| 70 DCHECK(!native_app_data_.is_null()); | 74 DCHECK(!native_app_data_.is_null()); |
| 71 CreateJavaDelegate(); | 75 CreateJavaDelegate(); |
| 72 } | 76 } |
| 73 | 77 |
| 74 AppBannerInfoBarDelegateAndroid::~AppBannerInfoBarDelegateAndroid() { | 78 AppBannerInfoBarDelegateAndroid::~AppBannerInfoBarDelegateAndroid() { |
| 75 if (!has_user_interaction_) { | 79 if (!has_user_interaction_) { |
| 76 if (!native_app_data_.is_null()) | 80 if (!native_app_data_.is_null()) |
| 77 TrackUserResponse(USER_RESPONSE_NATIVE_APP_IGNORED); | 81 TrackUserResponse(USER_RESPONSE_NATIVE_APP_IGNORED); |
| 78 else if (!web_app_data_.IsEmpty()) | 82 else if (!manifest_.IsEmpty()) |
| 79 TrackUserResponse(USER_RESPONSE_WEB_APP_IGNORED); | 83 TrackUserResponse(USER_RESPONSE_WEB_APP_IGNORED); |
| 80 } | 84 } |
| 81 | 85 |
| 82 TrackDismissEvent(DISMISS_EVENT_DISMISSED); | 86 TrackDismissEvent(DISMISS_EVENT_DISMISSED); |
| 83 JNIEnv* env = base::android::AttachCurrentThread(); | 87 JNIEnv* env = base::android::AttachCurrentThread(); |
| 84 Java_AppBannerInfoBarDelegateAndroid_destroy(env, | 88 Java_AppBannerInfoBarDelegateAndroid_destroy(env, |
| 85 java_delegate_.obj()); | 89 java_delegate_.obj()); |
| 86 java_delegate_.Reset(); | 90 java_delegate_.Reset(); |
| 87 } | 91 } |
| 88 | 92 |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 | 185 |
| 182 web_contents->GetMainFrame()->Send( | 186 web_contents->GetMainFrame()->Send( |
| 183 new ChromeViewMsg_AppBannerDismissed( | 187 new ChromeViewMsg_AppBannerDismissed( |
| 184 web_contents->GetMainFrame()->GetRoutingID(), | 188 web_contents->GetMainFrame()->GetRoutingID(), |
| 185 event_request_id_)); | 189 event_request_id_)); |
| 186 | 190 |
| 187 if (!native_app_data_.is_null()) { | 191 if (!native_app_data_.is_null()) { |
| 188 TrackUserResponse(USER_RESPONSE_NATIVE_APP_DISMISSED); | 192 TrackUserResponse(USER_RESPONSE_NATIVE_APP_DISMISSED); |
| 189 AppBannerSettingsHelper::RecordBannerDismissEvent( | 193 AppBannerSettingsHelper::RecordBannerDismissEvent( |
| 190 web_contents, native_app_package_, AppBannerSettingsHelper::NATIVE); | 194 web_contents, native_app_package_, AppBannerSettingsHelper::NATIVE); |
| 191 } else if (!web_app_data_.IsEmpty()) { | 195 } else if (!manifest_.IsEmpty()) { |
| 192 TrackUserResponse(USER_RESPONSE_WEB_APP_DISMISSED); | 196 TrackUserResponse(USER_RESPONSE_WEB_APP_DISMISSED); |
| 193 AppBannerSettingsHelper::RecordBannerDismissEvent( | 197 AppBannerSettingsHelper::RecordBannerDismissEvent( |
| 194 web_contents, web_app_data_.start_url.spec(), | 198 web_contents, manifest_.start_url.spec(), |
| 195 AppBannerSettingsHelper::WEB); | 199 AppBannerSettingsHelper::WEB); |
| 196 } | 200 } |
| 197 } | 201 } |
| 198 | 202 |
| 199 base::string16 AppBannerInfoBarDelegateAndroid::GetMessageText() const { | 203 base::string16 AppBannerInfoBarDelegateAndroid::GetMessageText() const { |
| 200 return app_title_; | 204 return app_title_; |
| 201 } | 205 } |
| 202 | 206 |
| 203 int AppBannerInfoBarDelegateAndroid::GetButtons() const { | 207 int AppBannerInfoBarDelegateAndroid::GetButtons() const { |
| 204 return BUTTON_OK; | 208 return BUTTON_OK; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 233 native_app_data_.obj(), | 237 native_app_data_.obj(), |
| 234 jreferrer.obj()); | 238 jreferrer.obj()); |
| 235 | 239 |
| 236 if (was_opened) { | 240 if (was_opened) { |
| 237 TrackDismissEvent(DISMISS_EVENT_APP_OPEN); | 241 TrackDismissEvent(DISMISS_EVENT_APP_OPEN); |
| 238 } else { | 242 } else { |
| 239 TrackInstallEvent(INSTALL_EVENT_NATIVE_APP_INSTALL_TRIGGERED); | 243 TrackInstallEvent(INSTALL_EVENT_NATIVE_APP_INSTALL_TRIGGERED); |
| 240 } | 244 } |
| 241 SendBannerAccepted(web_contents, "play"); | 245 SendBannerAccepted(web_contents, "play"); |
| 242 return was_opened; | 246 return was_opened; |
| 243 } else if (!web_app_data_.IsEmpty()) { | 247 } else if (!manifest_.IsEmpty()) { |
| 244 TrackUserResponse(USER_RESPONSE_WEB_APP_ACCEPTED); | 248 TrackUserResponse(USER_RESPONSE_WEB_APP_ACCEPTED); |
| 245 | 249 |
| 246 AppBannerSettingsHelper::RecordBannerInstallEvent( | 250 AppBannerSettingsHelper::RecordBannerInstallEvent( |
| 247 web_contents, web_app_data_.start_url.spec(), | 251 web_contents, manifest_.start_url.spec(), |
| 248 AppBannerSettingsHelper::WEB); | 252 AppBannerSettingsHelper::WEB); |
| 249 | 253 |
| 250 ShortcutInfo info(GURL::EmptyGURL()); | 254 ShortcutInfo info(GURL::EmptyGURL()); |
| 251 info.UpdateFromManifest(web_app_data_); | 255 info.UpdateFromManifest(manifest_); |
| 256 info.manifest_url = manifest_url_; |
| 257 info.icon_url = app_icon_url_; |
| 252 info.UpdateSource(ShortcutInfo::SOURCE_APP_BANNER); | 258 info.UpdateSource(ShortcutInfo::SOURCE_APP_BANNER); |
| 253 | 259 |
| 254 const std::string& uid = base::GenerateGUID(); | 260 const std::string& uid = base::GenerateGUID(); |
| 255 content::BrowserThread::PostTask( | 261 content::BrowserThread::PostTask( |
| 256 content::BrowserThread::IO, FROM_HERE, | 262 content::BrowserThread::IO, FROM_HERE, |
| 257 base::Bind(&ShortcutHelper::AddShortcutInBackgroundWithSkBitmap, info, | 263 base::Bind(&ShortcutHelper::AddShortcutInBackgroundWithSkBitmap, info, |
| 258 uid, *app_icon_.get(), | 264 uid, *app_icon_.get(), |
| 259 data_fetcher_->FetchWebappSplashScreenImageCallback(uid))); | 265 data_fetcher_->FetchWebappSplashScreenImageCallback(uid))); |
| 260 | 266 |
| 261 SendBannerAccepted(web_contents, "web"); | 267 SendBannerAccepted(web_contents, "web"); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 289 | 295 |
| 290 TrackDismissEvent(DISMISS_EVENT_BANNER_CLICK); | 296 TrackDismissEvent(DISMISS_EVENT_BANNER_CLICK); |
| 291 return true; | 297 return true; |
| 292 } | 298 } |
| 293 | 299 |
| 294 bool RegisterAppBannerInfoBarDelegateAndroid(JNIEnv* env) { | 300 bool RegisterAppBannerInfoBarDelegateAndroid(JNIEnv* env) { |
| 295 return RegisterNativesImpl(env); | 301 return RegisterNativesImpl(env); |
| 296 } | 302 } |
| 297 | 303 |
| 298 } // namespace banners | 304 } // namespace banners |
| OLD | NEW |