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))); |
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 17 matching lines...) Expand all Loading... | |
293 tab->GetJavaObject().obj(), | 294 tab->GetJavaObject().obj(), |
294 native_app_data_.obj()); | 295 native_app_data_.obj()); |
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 |
gone
2016/07/23 23:39:22
Extra newline?
dominickn
2016/07/25 00:23:51
Done.
| |
305 | |
304 } // namespace banners | 306 } // namespace banners |
OLD | NEW |