| OLD | NEW |
| 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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 const GURL url, | 84 const GURL url, |
| 85 const SkBitmap* icon) { | 85 const SkBitmap* icon) { |
| 86 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 86 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 87 | 87 |
| 88 if (!is_cancelled_) | 88 if (!is_cancelled_) |
| 89 manager_->OnFetchComplete(this, url, icon); | 89 manager_->OnFetchComplete(this, url, icon); |
| 90 | 90 |
| 91 delete this; | 91 delete this; |
| 92 } | 92 } |
| 93 | 93 |
| 94 AppBannerManager::AppBannerManager(JNIEnv* env, jobject obj) | 94 AppBannerManager::AppBannerManager(JNIEnv* env, jobject obj, int icon_size) |
| 95 : fetcher_(nullptr), | 95 : preferred_icon_size_(icon_size), |
| 96 fetcher_(nullptr), |
| 96 weak_java_banner_view_manager_(env, obj), | 97 weak_java_banner_view_manager_(env, obj), |
| 97 weak_factory_(this) { | 98 weak_factory_(this) { |
| 98 } | 99 } |
| 99 | 100 |
| 100 AppBannerManager::~AppBannerManager() { | 101 AppBannerManager::~AppBannerManager() { |
| 101 CancelActiveFetcher(); | 102 CancelActiveFetcher(); |
| 102 } | 103 } |
| 103 | 104 |
| 104 void AppBannerManager::Destroy(JNIEnv* env, jobject obj) { | 105 void AppBannerManager::Destroy(JNIEnv* env, jobject obj) { |
| 105 delete this; | 106 delete this; |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 weak_factory_.GetWeakPtr())); | 173 weak_factory_.GetWeakPtr())); |
| 173 } | 174 } |
| 174 | 175 |
| 175 void AppBannerManager::OnDidCheckHasServiceWorker(bool has_service_worker) { | 176 void AppBannerManager::OnDidCheckHasServiceWorker(bool has_service_worker) { |
| 176 if (has_service_worker) { | 177 if (has_service_worker) { |
| 177 // TODO(benwells): Check triggering parameters. | 178 // TODO(benwells): Check triggering parameters. |
| 178 // Create an infobar to promote the manifest's app. | 179 // Create an infobar to promote the manifest's app. |
| 179 GURL icon_url = | 180 GURL icon_url = |
| 180 ManifestIconSelector::FindBestMatchingIcon( | 181 ManifestIconSelector::FindBestMatchingIcon( |
| 181 web_app_data_.icons, | 182 web_app_data_.icons, |
| 182 GetPreferredIconSize(), | 183 preferred_icon_size_, |
| 183 gfx::Screen::GetScreenFor(web_contents()->GetNativeView())); | 184 gfx::Screen::GetScreenFor(web_contents()->GetNativeView())); |
| 184 if (icon_url.is_empty()) | 185 if (icon_url.is_empty()) |
| 185 return; | 186 return; |
| 186 | 187 |
| 187 FetchIcon(icon_url); | 188 FetchIcon(icon_url); |
| 188 } else { | 189 } else { |
| 189 TrackDisplayEvent(DISPLAY_EVENT_LACKS_SERVICE_WORKER); | 190 TrackDisplayEvent(DISPLAY_EVENT_LACKS_SERVICE_WORKER); |
| 190 } | 191 } |
| 191 } | 192 } |
| 192 | 193 |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 if (jobj.is_null()) | 294 if (jobj.is_null()) |
| 294 return; | 295 return; |
| 295 | 296 |
| 296 ScopedJavaLocalRef<jstring> jurl( | 297 ScopedJavaLocalRef<jstring> jurl( |
| 297 ConvertUTF8ToJavaString(env, expected_url.spec())); | 298 ConvertUTF8ToJavaString(env, expected_url.spec())); |
| 298 ScopedJavaLocalRef<jstring> jpackage( | 299 ScopedJavaLocalRef<jstring> jpackage( |
| 299 ConvertUTF8ToJavaString(env, tag_content)); | 300 ConvertUTF8ToJavaString(env, tag_content)); |
| 300 Java_AppBannerManager_fetchAppDetails(env, | 301 Java_AppBannerManager_fetchAppDetails(env, |
| 301 jobj.obj(), | 302 jobj.obj(), |
| 302 jurl.obj(), | 303 jurl.obj(), |
| 303 jpackage.obj()); | 304 jpackage.obj(), |
| 305 preferred_icon_size_); |
| 304 } | 306 } |
| 305 | 307 |
| 306 bool AppBannerManager::OnAppDetailsRetrieved(JNIEnv* env, | 308 bool AppBannerManager::OnAppDetailsRetrieved(JNIEnv* env, |
| 307 jobject obj, | 309 jobject obj, |
| 308 jobject japp_data, | 310 jobject japp_data, |
| 309 jstring japp_title, | 311 jstring japp_title, |
| 310 jstring japp_package, | 312 jstring japp_package, |
| 311 jstring jicon_url) { | 313 jstring jicon_url) { |
| 312 if (validated_url_ != web_contents()->GetURL()) | 314 if (validated_url_ != web_contents()->GetURL()) |
| 313 return false; | 315 return false; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 335 fetcher_ = new BannerBitmapFetcher(image_url, this); | 337 fetcher_ = new BannerBitmapFetcher(image_url, this); |
| 336 fetcher_->Start( | 338 fetcher_->Start( |
| 337 profile->GetRequestContext(), | 339 profile->GetRequestContext(), |
| 338 std::string(), | 340 std::string(), |
| 339 net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | 341 net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
| 340 net::LOAD_NORMAL); | 342 net::LOAD_NORMAL); |
| 341 app_icon_url_ = image_url; | 343 app_icon_url_ = image_url; |
| 342 return true; | 344 return true; |
| 343 } | 345 } |
| 344 | 346 |
| 345 int AppBannerManager::GetPreferredIconSize() { | |
| 346 JNIEnv* env = base::android::AttachCurrentThread(); | |
| 347 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env); | |
| 348 if (jobj.is_null()) | |
| 349 return 0; | |
| 350 | |
| 351 return Java_AppBannerManager_getPreferredIconSize(env, jobj.obj()); | |
| 352 } | |
| 353 | |
| 354 // static | 347 // static |
| 355 base::Time AppBannerManager::GetCurrentTime() { | 348 base::Time AppBannerManager::GetCurrentTime() { |
| 356 return base::Time::Now() + gTimeDeltaForTesting; | 349 return base::Time::Now() + gTimeDeltaForTesting; |
| 357 } | 350 } |
| 358 | 351 |
| 359 jlong Init(JNIEnv* env, jobject obj) { | 352 jlong Init(JNIEnv* env, jobject obj, jint icon_size) { |
| 360 AppBannerManager* manager = new AppBannerManager(env, obj); | 353 AppBannerManager* manager = new AppBannerManager(env, obj, icon_size); |
| 361 return reinterpret_cast<intptr_t>(manager); | 354 return reinterpret_cast<intptr_t>(manager); |
| 362 } | 355 } |
| 363 | 356 |
| 364 jboolean IsEnabled(JNIEnv* env, jclass clazz) { | 357 jboolean IsEnabled(JNIEnv* env, jclass clazz) { |
| 365 return base::CommandLine::ForCurrentProcess()->HasSwitch( | 358 return base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 366 switches::kEnableAppInstallAlerts); | 359 switches::kEnableAppInstallAlerts); |
| 367 } | 360 } |
| 368 | 361 |
| 369 void SetTimeDeltaForTesting(JNIEnv* env, jclass clazz, jint days) { | 362 void SetTimeDeltaForTesting(JNIEnv* env, jclass clazz, jint days) { |
| 370 gTimeDeltaForTesting = base::TimeDelta::FromDays(days); | 363 gTimeDeltaForTesting = base::TimeDelta::FromDays(days); |
| 371 } | 364 } |
| 372 | 365 |
| 373 // Register native methods | 366 // Register native methods |
| 374 bool RegisterAppBannerManager(JNIEnv* env) { | 367 bool RegisterAppBannerManager(JNIEnv* env) { |
| 375 return RegisterNativesImpl(env); | 368 return RegisterNativesImpl(env); |
| 376 } | 369 } |
| 377 | 370 |
| 378 } // namespace banners | 371 } // namespace banners |
| OLD | NEW |