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

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

Issue 896243004: Start piping Android app promos through AppBannerInfoBars (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing nits Created 5 years, 10 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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_manager.h" 5 #include "chrome/browser/android/banners/app_banner_manager.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/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 std::string package_name = ConvertJavaStringToUTF8(env, jpackage); 71 std::string package_name = ConvertJavaStringToUTF8(env, jpackage);
72 AppBannerSettingsHelper::RecordBannerEvent( 72 AppBannerSettingsHelper::RecordBannerEvent(
73 web_contents(), url, package_name, 73 web_contents(), url, package_name,
74 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, base::Time::Now()); 74 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, base::Time::Now());
75 } 75 }
76 76
77 void AppBannerManager::Block() const { 77 void AppBannerManager::Block() const {
78 if (!web_contents()) 78 if (!web_contents())
79 return; 79 return;
80 80
81 if (!web_app_data_.IsEmpty()) { 81 if (!native_app_data_.is_null()) {
82 AppBannerSettingsHelper::RecordBannerEvent(
83 web_contents(), web_contents()->GetURL(),
84 native_app_package_,
85 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, base::Time::Now());
86 } else if (!web_app_data_.IsEmpty()) {
82 AppBannerSettingsHelper::RecordBannerEvent( 87 AppBannerSettingsHelper::RecordBannerEvent(
83 web_contents(), web_contents()->GetURL(), 88 web_contents(), web_contents()->GetURL(),
84 web_app_data_.start_url.spec(), 89 web_app_data_.start_url.spec(),
85 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, base::Time::Now()); 90 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, base::Time::Now());
86 } 91 }
87 } 92 }
88 93
89 void AppBannerManager::OnInfoBarDestroyed() { 94 void AppBannerManager::OnInfoBarDestroyed() {
90 weak_infobar_ptr_ = nullptr; 95 weak_infobar_ptr_ = nullptr;
91 } 96 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 } 130 }
126 131
127 void AppBannerManager::DidNavigateMainFrame( 132 void AppBannerManager::DidNavigateMainFrame(
128 const content::LoadCommittedDetails& details, 133 const content::LoadCommittedDetails& details,
129 const content::FrameNavigateParams& params) { 134 const content::FrameNavigateParams& params) {
130 // Clear current state. 135 // Clear current state.
131 fetcher_.reset(); 136 fetcher_.reset();
132 app_title_ = base::string16(); 137 app_title_ = base::string16();
133 app_icon_.reset(); 138 app_icon_.reset();
134 web_app_data_ = content::Manifest(); 139 web_app_data_ = content::Manifest();
140 native_app_data_.Reset();
141 native_app_package_ = std::string();
135 } 142 }
136 143
137 void AppBannerManager::DidFinishLoad( 144 void AppBannerManager::DidFinishLoad(
138 content::RenderFrameHost* render_frame_host, 145 content::RenderFrameHost* render_frame_host,
139 const GURL& validated_url) { 146 const GURL& validated_url) {
140 if (render_frame_host->GetParent()) 147 if (render_frame_host->GetParent())
141 return; 148 return;
142 validated_url_ = validated_url; 149 validated_url_ = validated_url;
143 150
144 // See if the page has a manifest. Using Unretained(this) here is safe as the 151 // See if the page has a manifest. Using Unretained(this) here is safe as the
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 247
241 JNIEnv* env = base::android::AttachCurrentThread(); 248 JNIEnv* env = base::android::AttachCurrentThread();
242 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env); 249 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
243 if (jobj.is_null()) 250 if (jobj.is_null())
244 return; 251 return;
245 252
246 app_icon_.reset(new SkBitmap(*bitmap)); 253 app_icon_.reset(new SkBitmap(*bitmap));
247 InfoBarService* service = InfoBarService::FromWebContents(web_contents()); 254 InfoBarService* service = InfoBarService::FromWebContents(web_contents());
248 255
249 weak_infobar_ptr_ = nullptr; 256 weak_infobar_ptr_ = nullptr;
250 if (!web_app_data_.IsEmpty()){ 257 if (!native_app_data_.is_null()) {
258 weak_infobar_ptr_ = AppBannerInfoBarDelegate::CreateForNativeApp(
259 service,
260 this,
261 native_app_data_);
262 } else if (!web_app_data_.IsEmpty()){
251 weak_infobar_ptr_ = AppBannerInfoBarDelegate::CreateForWebApp( 263 weak_infobar_ptr_ = AppBannerInfoBarDelegate::CreateForWebApp(
252 service, 264 service,
253 this, 265 this,
254 web_app_data_.start_url); 266 web_app_data_.start_url);
255 } 267 }
256 268
257 if (weak_infobar_ptr_ != nullptr) 269 if (weak_infobar_ptr_ != nullptr)
258 banners::TrackDisplayEvent(DISPLAY_CREATED); 270 banners::TrackDisplayEvent(DISPLAY_CREATED);
259 } 271 }
260 272
(...skipping 17 matching lines...) Expand all
278 // Send the info to the Java side to get info about the app. 290 // Send the info to the Java side to get info about the app.
279 JNIEnv* env = base::android::AttachCurrentThread(); 291 JNIEnv* env = base::android::AttachCurrentThread();
280 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env); 292 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
281 if (jobj.is_null()) 293 if (jobj.is_null())
282 return; 294 return;
283 295
284 ScopedJavaLocalRef<jstring> jurl( 296 ScopedJavaLocalRef<jstring> jurl(
285 ConvertUTF8ToJavaString(env, expected_url.spec())); 297 ConvertUTF8ToJavaString(env, expected_url.spec()));
286 ScopedJavaLocalRef<jstring> jpackage( 298 ScopedJavaLocalRef<jstring> jpackage(
287 ConvertUTF8ToJavaString(env, tag_content)); 299 ConvertUTF8ToJavaString(env, tag_content));
288 Java_AppBannerManager_prepareBanner(env, 300 Java_AppBannerManager_fetchAppDetails(env,
289 jobj.obj(), 301 jobj.obj(),
290 jurl.obj(), 302 jurl.obj(),
291 jpackage.obj()); 303 jpackage.obj());
292 } 304 }
293 305
294 bool AppBannerManager::FetchIcon(JNIEnv* env, 306 bool AppBannerManager::OnAppDetailsRetrieved(JNIEnv* env,
295 jobject obj, 307 jobject obj,
296 jstring jimage_url) { 308 jobject japp_data,
297 std::string image_url = ConvertJavaStringToUTF8(env, jimage_url); 309 jstring japp_title,
310 jstring japp_package,
311 jstring jicon_url) {
312 if (validated_url_ != web_contents()->GetURL())
313 return false;
314
315 std::string image_url = ConvertJavaStringToUTF8(env, jicon_url);
316 app_title_ = ConvertJavaStringToUTF16(env, japp_title);
317 native_app_package_ = ConvertJavaStringToUTF8(env, japp_package);
318 native_app_data_.Reset(env, japp_data);
298 return FetchIcon(GURL(image_url)); 319 return FetchIcon(GURL(image_url));
299 } 320 }
300 321
301 bool AppBannerManager::FetchIcon(const GURL& image_url) { 322 bool AppBannerManager::FetchIcon(const GURL& image_url) {
302 if (!web_contents()) 323 if (!web_contents())
303 return false; 324 return false;
304 325
305 // Begin asynchronously fetching the app icon. 326 // Begin asynchronously fetching the app icon.
306 Profile* profile = 327 Profile* profile =
307 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); 328 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 return base::CommandLine::ForCurrentProcess()->HasSwitch( 376 return base::CommandLine::ForCurrentProcess()->HasSwitch(
356 switches::kEnableAppInstallAlerts); 377 switches::kEnableAppInstallAlerts);
357 } 378 }
358 379
359 // Register native methods 380 // Register native methods
360 bool RegisterAppBannerManager(JNIEnv* env) { 381 bool RegisterAppBannerManager(JNIEnv* env) {
361 return RegisterNativesImpl(env); 382 return RegisterNativesImpl(env);
362 } 383 }
363 384
364 } // namespace banners 385 } // namespace banners
OLDNEW
« no previous file with comments | « chrome/browser/android/banners/app_banner_manager.h ('k') | chrome/browser/ui/android/infobars/app_banner_infobar.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698