Chromium Code Reviews| 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/strings/string16.h" | 12 #include "base/strings/string16.h" |
| 12 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
| 13 #include "chrome/browser/android/shortcut_helper.h" | 14 #include "chrome/browser/android/shortcut_helper.h" |
| 14 #include "chrome/browser/android/shortcut_info.h" | 15 #include "chrome/browser/android/shortcut_info.h" |
| 15 #include "chrome/browser/android/tab_android.h" | 16 #include "chrome/browser/android/tab_android.h" |
| 16 #include "chrome/browser/banners/app_banner_data_fetcher.h" | 17 #include "chrome/browser/banners/app_banner_manager.h" |
| 17 #include "chrome/browser/banners/app_banner_metrics.h" | 18 #include "chrome/browser/banners/app_banner_metrics.h" |
| 18 #include "chrome/browser/banners/app_banner_settings_helper.h" | 19 #include "chrome/browser/banners/app_banner_settings_helper.h" |
| 19 #include "chrome/browser/browser_process.h" | 20 #include "chrome/browser/browser_process.h" |
| 20 #include "chrome/browser/infobars/infobar_service.h" | 21 #include "chrome/browser/infobars/infobar_service.h" |
| 21 #include "chrome/browser/ui/android/infobars/app_banner_infobar_android.h" | 22 #include "chrome/browser/ui/android/infobars/app_banner_infobar_android.h" |
| 22 #include "chrome/common/render_messages.h" | 23 #include "chrome/common/render_messages.h" |
| 23 #include "chrome/grit/generated_resources.h" | 24 #include "chrome/grit/generated_resources.h" |
| 24 #include "components/rappor/rappor_utils.h" | 25 #include "components/rappor/rappor_utils.h" |
| 25 #include "content/public/browser/browser_thread.h" | 26 #include "content/public/browser/browser_thread.h" |
| 26 #include "content/public/browser/render_frame_host.h" | 27 #include "content/public/browser/render_frame_host.h" |
| 27 #include "content/public/browser/web_contents.h" | 28 #include "content/public/browser/web_contents.h" |
| 28 #include "content/public/common/manifest.h" | 29 #include "content/public/common/manifest.h" |
| 29 #include "jni/AppBannerInfoBarDelegateAndroid_jni.h" | 30 #include "jni/AppBannerInfoBarDelegateAndroid_jni.h" |
| 30 #include "ui/gfx/android/java_bitmap.h" | 31 #include "ui/gfx/android/java_bitmap.h" |
| 31 #include "url/gurl.h" | 32 #include "url/gurl.h" |
| 32 | 33 |
| 33 using base::android::ConvertJavaStringToUTF8; | 34 using base::android::ConvertJavaStringToUTF8; |
| 34 using base::android::ConvertJavaStringToUTF16; | 35 using base::android::ConvertJavaStringToUTF16; |
| 35 using base::android::ConvertUTF8ToJavaString; | 36 using base::android::ConvertUTF8ToJavaString; |
| 36 using base::android::ConvertUTF16ToJavaString; | 37 using base::android::ConvertUTF16ToJavaString; |
| 37 | 38 |
| 38 namespace banners { | 39 namespace banners { |
| 39 | 40 |
| 40 AppBannerInfoBarDelegateAndroid::AppBannerInfoBarDelegateAndroid( | 41 AppBannerInfoBarDelegateAndroid::AppBannerInfoBarDelegateAndroid( |
| 41 int event_request_id, | 42 base::WeakPtr<AppBannerManager> weak_manager, |
| 42 scoped_refptr<AppBannerDataFetcherAndroid> data_fetcher, | |
| 43 const base::string16& app_title, | 43 const base::string16& app_title, |
| 44 const GURL& app_icon_url, | |
| 45 SkBitmap* app_icon, | |
| 46 const GURL& manifest_url, | 44 const GURL& manifest_url, |
| 47 const content::Manifest& manifest) | 45 const content::Manifest& manifest, |
| 48 : data_fetcher_(data_fetcher), | 46 const GURL& icon_url, |
| 47 std::unique_ptr<SkBitmap> icon, | |
| 48 int event_request_id) | |
| 49 : weak_manager_(weak_manager), | |
| 49 app_title_(app_title), | 50 app_title_(app_title), |
| 50 app_icon_url_(app_icon_url), | |
| 51 app_icon_(app_icon), | |
| 52 event_request_id_(event_request_id), | |
| 53 manifest_url_(manifest_url), | 51 manifest_url_(manifest_url), |
| 54 manifest_(manifest), | 52 manifest_(manifest), |
| 53 icon_url_(icon_url), | |
| 54 icon_(std::move(icon)), | |
| 55 event_request_id_(event_request_id), | |
| 55 has_user_interaction_(false) { | 56 has_user_interaction_(false) { |
| 56 DCHECK(!manifest.IsEmpty()); | 57 DCHECK(!manifest.IsEmpty()); |
| 57 CreateJavaDelegate(); | 58 CreateJavaDelegate(); |
| 58 } | 59 } |
| 59 | 60 |
| 60 AppBannerInfoBarDelegateAndroid::AppBannerInfoBarDelegateAndroid( | 61 AppBannerInfoBarDelegateAndroid::AppBannerInfoBarDelegateAndroid( |
| 61 int event_request_id, | |
| 62 const base::string16& app_title, | 62 const base::string16& app_title, |
| 63 SkBitmap* app_icon, | |
| 64 const base::android::ScopedJavaGlobalRef<jobject>& native_app_data, | 63 const base::android::ScopedJavaGlobalRef<jobject>& native_app_data, |
| 64 std::unique_ptr<SkBitmap> icon, | |
| 65 const std::string& native_app_package, | 65 const std::string& native_app_package, |
| 66 const std::string& referrer) | 66 const std::string& referrer, |
| 67 int event_request_id) | |
| 67 : app_title_(app_title), | 68 : app_title_(app_title), |
| 68 app_icon_(app_icon), | |
| 69 event_request_id_(event_request_id), | |
| 70 native_app_data_(native_app_data), | 69 native_app_data_(native_app_data), |
| 70 icon_(std::move(icon)), | |
| 71 native_app_package_(native_app_package), | 71 native_app_package_(native_app_package), |
| 72 referrer_(referrer), | 72 referrer_(referrer), |
| 73 event_request_id_(event_request_id), | |
| 73 has_user_interaction_(false) { | 74 has_user_interaction_(false) { |
| 74 DCHECK(!native_app_data_.is_null()); | 75 DCHECK(!native_app_data_.is_null()); |
| 75 CreateJavaDelegate(); | 76 CreateJavaDelegate(); |
| 76 } | 77 } |
| 77 | 78 |
| 78 AppBannerInfoBarDelegateAndroid::~AppBannerInfoBarDelegateAndroid() { | 79 AppBannerInfoBarDelegateAndroid::~AppBannerInfoBarDelegateAndroid() { |
| 79 if (!has_user_interaction_) { | 80 if (!has_user_interaction_) { |
| 80 if (!native_app_data_.is_null()) | 81 if (!native_app_data_.is_null()) |
| 81 TrackUserResponse(USER_RESPONSE_NATIVE_APP_IGNORED); | 82 TrackUserResponse(USER_RESPONSE_NATIVE_APP_IGNORED); |
| 82 else if (!manifest_.IsEmpty()) | 83 else if (!manifest_.IsEmpty()) |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 115 InfoBarService::WebContentsFromInfoBar(infobar()); | 116 InfoBarService::WebContentsFromInfoBar(infobar()); |
| 116 if (!web_contents) | 117 if (!web_contents) |
| 117 return; | 118 return; |
| 118 | 119 |
| 119 if (jis_installing) { | 120 if (jis_installing) { |
| 120 AppBannerSettingsHelper::RecordBannerEvent( | 121 AppBannerSettingsHelper::RecordBannerEvent( |
| 121 web_contents, | 122 web_contents, |
| 122 web_contents->GetURL(), | 123 web_contents->GetURL(), |
| 123 native_app_package_, | 124 native_app_package_, |
| 124 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, | 125 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, |
| 125 AppBannerDataFetcher::GetCurrentTime()); | 126 AppBannerManager::GetCurrentTime()); |
| 126 | 127 |
| 127 TrackInstallEvent(INSTALL_EVENT_NATIVE_APP_INSTALL_STARTED); | 128 TrackInstallEvent(INSTALL_EVENT_NATIVE_APP_INSTALL_STARTED); |
| 128 rappor::SampleDomainAndRegistryFromGURL(g_browser_process->rappor_service(), | 129 rappor::SampleDomainAndRegistryFromGURL(g_browser_process->rappor_service(), |
| 129 "AppBanner.NativeApp.Installed", | 130 "AppBanner.NativeApp.Installed", |
| 130 web_contents->GetURL()); | 131 web_contents->GetURL()); |
| 131 } | 132 } |
| 132 | 133 |
| 133 UpdateInstallState(env, obj); | 134 UpdateInstallState(env, obj); |
| 134 } | 135 } |
| 135 | 136 |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 165 event_request_id_, | 166 event_request_id_, |
| 166 platform)); | 167 platform)); |
| 167 } | 168 } |
| 168 | 169 |
| 169 infobars::InfoBarDelegate::InfoBarIdentifier | 170 infobars::InfoBarDelegate::InfoBarIdentifier |
| 170 AppBannerInfoBarDelegateAndroid::GetIdentifier() const { | 171 AppBannerInfoBarDelegateAndroid::GetIdentifier() const { |
| 171 return APP_BANNER_INFOBAR_DELEGATE_ANDROID; | 172 return APP_BANNER_INFOBAR_DELEGATE_ANDROID; |
| 172 } | 173 } |
| 173 | 174 |
| 174 gfx::Image AppBannerInfoBarDelegateAndroid::GetIcon() const { | 175 gfx::Image AppBannerInfoBarDelegateAndroid::GetIcon() const { |
| 175 return gfx::Image::CreateFrom1xBitmap(*app_icon_.get()); | 176 return gfx::Image::CreateFrom1xBitmap(*icon_.get()); |
| 176 } | 177 } |
| 177 | 178 |
| 178 void AppBannerInfoBarDelegateAndroid::InfoBarDismissed() { | 179 void AppBannerInfoBarDelegateAndroid::InfoBarDismissed() { |
| 179 has_user_interaction_ = true; | 180 has_user_interaction_ = true; |
| 180 | 181 |
| 181 content::WebContents* web_contents = | 182 content::WebContents* web_contents = |
| 182 InfoBarService::WebContentsFromInfoBar(infobar()); | 183 InfoBarService::WebContentsFromInfoBar(infobar()); |
| 183 if (!web_contents) | 184 if (!web_contents) |
| 184 return; | 185 return; |
| 185 | 186 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 247 } else if (!manifest_.IsEmpty()) { | 248 } else if (!manifest_.IsEmpty()) { |
| 248 TrackUserResponse(USER_RESPONSE_WEB_APP_ACCEPTED); | 249 TrackUserResponse(USER_RESPONSE_WEB_APP_ACCEPTED); |
| 249 | 250 |
| 250 AppBannerSettingsHelper::RecordBannerInstallEvent( | 251 AppBannerSettingsHelper::RecordBannerInstallEvent( |
| 251 web_contents, manifest_.start_url.spec(), | 252 web_contents, manifest_.start_url.spec(), |
| 252 AppBannerSettingsHelper::WEB); | 253 AppBannerSettingsHelper::WEB); |
| 253 | 254 |
| 254 ShortcutInfo info(GURL::EmptyGURL()); | 255 ShortcutInfo info(GURL::EmptyGURL()); |
| 255 info.UpdateFromManifest(manifest_); | 256 info.UpdateFromManifest(manifest_); |
| 256 info.manifest_url = manifest_url_; | 257 info.manifest_url = manifest_url_; |
| 257 info.icon_url = app_icon_url_; | 258 info.icon_url = icon_url_; |
| 258 info.UpdateSource(ShortcutInfo::SOURCE_APP_BANNER); | 259 info.UpdateSource(ShortcutInfo::SOURCE_APP_BANNER); |
| 259 | 260 |
| 260 const std::string& uid = base::GenerateGUID(); | 261 const std::string& uid = base::GenerateGUID(); |
| 261 content::BrowserThread::PostTask( | 262 content::BrowserThread::PostTask( |
| 262 content::BrowserThread::IO, FROM_HERE, | 263 content::BrowserThread::IO, FROM_HERE, |
| 263 base::Bind(&ShortcutHelper::AddToLauncherInBackgroundWithSkBitmap, info, | 264 base::Bind(&ShortcutHelper::AddToLauncherInBackgroundWithSkBitmap, info, |
| 264 uid, *app_icon_.get(), | 265 uid, *icon_.get(), |
| 265 data_fetcher_->FetchWebappSplashScreenImageCallback(uid))); | 266 weak_manager_->FetchWebappSplashScreenImageCallback(uid))); |
|
gone
2016/08/03 19:33:08
Don't you need to check if the weak pointer is sti
dominickn
2016/08/04 02:51:07
Done.
| |
| 266 | 267 |
| 267 SendBannerAccepted(web_contents, "web"); | 268 SendBannerAccepted(web_contents, "web"); |
| 268 return true; | 269 return true; |
| 269 } | 270 } |
| 270 | 271 |
| 271 return true; | 272 return true; |
| 272 } | 273 } |
| 273 | 274 |
| 274 bool AppBannerInfoBarDelegateAndroid::LinkClicked( | 275 bool AppBannerInfoBarDelegateAndroid::LinkClicked( |
| 275 WindowOpenDisposition disposition) { | 276 WindowOpenDisposition disposition) { |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 295 | 296 |
| 296 TrackDismissEvent(DISMISS_EVENT_BANNER_CLICK); | 297 TrackDismissEvent(DISMISS_EVENT_BANNER_CLICK); |
| 297 return true; | 298 return true; |
| 298 } | 299 } |
| 299 | 300 |
| 300 bool RegisterAppBannerInfoBarDelegateAndroid(JNIEnv* env) { | 301 bool RegisterAppBannerInfoBarDelegateAndroid(JNIEnv* env) { |
| 301 return RegisterNativesImpl(env); | 302 return RegisterNativesImpl(env); |
| 302 } | 303 } |
| 303 | 304 |
| 304 } // namespace banners | 305 } // namespace banners |
| OLD | NEW |