Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1190)

Side by Side Diff: chrome/browser/android/banners/app_banner_infobar_delegate_android.cc

Issue 2156113002: Replace AppBannerDataFetcher with InstallableManager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@banner-refactor
Patch Set: Rebase Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698