Chromium Code Reviews| 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/logo_bridge.h" | 5 #include "chrome/browser/android/logo_bridge.h" |
| 6 | 6 |
| 7 #include <jni.h> | 7 #include <jni.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include "base/android/jni_android.h" | 10 #include "base/android/jni_android.h" |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 219 void LogoBridge::Destroy(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 219 void LogoBridge::Destroy(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
| 220 delete this; | 220 delete this; |
| 221 } | 221 } |
| 222 | 222 |
| 223 void LogoBridge::GetCurrentLogo(JNIEnv* env, | 223 void LogoBridge::GetCurrentLogo(JNIEnv* env, |
| 224 const JavaParamRef<jobject>& obj, | 224 const JavaParamRef<jobject>& obj, |
| 225 const JavaParamRef<jobject>& j_logo_observer) { | 225 const JavaParamRef<jobject>& j_logo_observer) { |
| 226 if (doodle_service_) { | 226 if (doodle_service_) { |
| 227 j_logo_observer_.Reset(j_logo_observer); | 227 j_logo_observer_.Reset(j_logo_observer); |
| 228 | 228 |
| 229 // Immediately hand out any current cached config. | 229 // Immediately hand out any current cached config. |
|
Marc Treib
2017/04/27 15:22:55
nit: I'd remove the "Immediately", since it has al
fhorschig
2017/04/28 08:20:07
Done.
| |
| 230 DoodleConfigReceived(doodle_service_->config(), /*from_cache=*/true); | 230 if (doodle_service_->config().has_value()) { |
| 231 // Also request a refresh, in case something changed. | 231 FetchDoodleImage(doodle_service_->config().value(), /*from_cache=*/true); |
| 232 } | |
| 233 // Also request a refresh, in case something changed. Depending on whether a | |
| 234 // newer config was available, either |OnDoodleConfigUpdated| or | |
| 235 // |OnDoodleConfigRevalidated| are called. | |
| 232 doodle_service_->Refresh(); | 236 doodle_service_->Refresh(); |
| 233 } else { | 237 } else { |
| 234 // |observer| is deleted in LogoObserverAndroid::OnObserverRemoved(). | 238 // |observer| is deleted in LogoObserverAndroid::OnObserverRemoved(). |
| 235 LogoObserverAndroid* observer = new LogoObserverAndroid( | 239 LogoObserverAndroid* observer = new LogoObserverAndroid( |
| 236 weak_ptr_factory_.GetWeakPtr(), env, j_logo_observer); | 240 weak_ptr_factory_.GetWeakPtr(), env, j_logo_observer); |
| 237 logo_service_->GetLogo(observer); | 241 logo_service_->GetLogo(observer); |
| 238 } | 242 } |
| 239 } | 243 } |
| 240 | 244 |
| 241 void LogoBridge::GetAnimatedLogo(JNIEnv* env, | 245 void LogoBridge::GetAnimatedLogo(JNIEnv* env, |
| 242 const JavaParamRef<jobject>& obj, | 246 const JavaParamRef<jobject>& obj, |
| 243 const JavaParamRef<jobject>& j_callback, | 247 const JavaParamRef<jobject>& j_callback, |
| 244 const JavaParamRef<jstring>& j_url) { | 248 const JavaParamRef<jstring>& j_url) { |
| 245 GURL url = GURL(ConvertJavaStringToUTF8(env, j_url)); | 249 GURL url = GURL(ConvertJavaStringToUTF8(env, j_url)); |
| 246 animated_logo_fetcher_->Start(env, url, j_callback); | 250 animated_logo_fetcher_->Start(env, url, j_callback); |
| 247 } | 251 } |
| 248 | 252 |
| 253 void LogoBridge::OnDoodleConfigRevalidated(bool from_cache) { | |
| 254 if (j_logo_observer_.is_null()) { | |
| 255 return; | |
| 256 } | |
| 257 // If an existing config got re-validated, there's nothing to do - the UI is | |
| 258 // already in the correct state. However, we do tell the UI when we validate | |
| 259 // that there really isn't a Doodle. This is needed for metrics tracking. | |
| 260 if (!doodle_service_->config().has_value()) { | |
| 261 NotifyNoLogoAvailable(from_cache); | |
| 262 } | |
| 263 } | |
| 264 | |
| 249 void LogoBridge::OnDoodleConfigUpdated( | 265 void LogoBridge::OnDoodleConfigUpdated( |
| 250 const base::Optional<doodle::DoodleConfig>& maybe_doodle_config) { | 266 const base::Optional<doodle::DoodleConfig>& maybe_doodle_config) { |
| 251 if (j_logo_observer_.is_null()) { | 267 if (j_logo_observer_.is_null()) { |
| 252 return; | 268 return; |
| 253 } | 269 } |
| 254 DoodleConfigReceived(maybe_doodle_config, /*from_cache=*/false); | 270 if (!maybe_doodle_config.has_value()) { |
| 271 NotifyNoLogoAvailable(/*from_cache=*/false); | |
| 272 return; | |
| 273 } | |
| 274 FetchDoodleImage(maybe_doodle_config.value(), /*from_cache=*/false); | |
| 255 } | 275 } |
| 256 | 276 |
| 257 void LogoBridge::DoodleConfigReceived( | 277 void LogoBridge::NotifyNoLogoAvailable(bool from_cache) { |
| 258 const base::Optional<doodle::DoodleConfig>& maybe_doodle_config, | 278 JNIEnv* env = base::android::AttachCurrentThread(); |
| 259 bool from_cache) { | 279 Java_LogoObserver_onLogoAvailable(env, j_logo_observer_, |
| 280 ScopedJavaLocalRef<jobject>(), from_cache); | |
| 281 } | |
| 282 | |
| 283 void LogoBridge::FetchDoodleImage(const doodle::DoodleConfig& doodle_config, | |
| 284 bool from_cache) { | |
| 260 DCHECK(!j_logo_observer_.is_null()); | 285 DCHECK(!j_logo_observer_.is_null()); |
| 261 | 286 |
| 262 if (!maybe_doodle_config.has_value()) { | |
| 263 JNIEnv* env = base::android::AttachCurrentThread(); | |
| 264 Java_LogoObserver_onLogoAvailable( | |
| 265 env, j_logo_observer_, ScopedJavaLocalRef<jobject>(), from_cache); | |
| 266 return; | |
| 267 } | |
| 268 const doodle::DoodleConfig& doodle_config = maybe_doodle_config.value(); | |
| 269 // If there is a CTA image, that means the main image is animated. Show the | 287 // If there is a CTA image, that means the main image is animated. Show the |
| 270 // non-animated CTA image first, and load the animated one only when the | 288 // non-animated CTA image first, and load the animated one only when the |
| 271 // user requests it. | 289 // user requests it. |
| 272 bool has_cta = doodle_config.large_cta_image.has_value(); | 290 bool has_cta = doodle_config.large_cta_image.has_value(); |
| 273 const GURL& image_url = has_cta ? doodle_config.large_cta_image->url | 291 const GURL& image_url = has_cta ? doodle_config.large_cta_image->url |
| 274 : doodle_config.large_image.url; | 292 : doodle_config.large_image.url; |
| 275 const GURL& animated_image_url = | 293 const GURL& animated_image_url = |
| 276 has_cta ? doodle_config.large_image.url : GURL::EmptyGURL(); | 294 has_cta ? doodle_config.large_image.url : GURL::EmptyGURL(); |
| 277 // TODO(treib): For interactive doodles, use |fullpage_interactive_url| | 295 // TODO(treib): For interactive doodles, use |fullpage_interactive_url| |
| 278 // instead of |target_url|? | 296 // instead of |target_url|? |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 308 ScopedJavaLocalRef<jobject> j_logo = MakeJavaLogo( | 326 ScopedJavaLocalRef<jobject> j_logo = MakeJavaLogo( |
| 309 env, image.ToSkBitmap(), on_click_url, alt_text, animated_image_url); | 327 env, image.ToSkBitmap(), on_click_url, alt_text, animated_image_url); |
| 310 Java_LogoObserver_onLogoAvailable(env, j_logo_observer_, j_logo, | 328 Java_LogoObserver_onLogoAvailable(env, j_logo_observer_, j_logo, |
| 311 config_from_cache); | 329 config_from_cache); |
| 312 } | 330 } |
| 313 | 331 |
| 314 // static | 332 // static |
| 315 bool RegisterLogoBridge(JNIEnv* env) { | 333 bool RegisterLogoBridge(JNIEnv* env) { |
| 316 return RegisterNativesImpl(env); | 334 return RegisterNativesImpl(env); |
| 317 } | 335 } |
| OLD | NEW |