Chromium Code Reviews| Index: chrome/browser/android/logo_bridge.cc |
| diff --git a/chrome/browser/android/logo_bridge.cc b/chrome/browser/android/logo_bridge.cc |
| index 8b24611abf5673c2f5d5822656c2494971bc0b04..68efc5ccd9e6aa372aaa81e2a043d7484bb4be09 100644 |
| --- a/chrome/browser/android/logo_bridge.cc |
| +++ b/chrome/browser/android/logo_bridge.cc |
| @@ -226,10 +226,16 @@ void LogoBridge::GetCurrentLogo(JNIEnv* env, |
| if (doodle_service_) { |
| j_logo_observer_.Reset(j_logo_observer); |
| - // Immediately hand out any current cached config. |
| - DoodleConfigReceived(doodle_service_->config(), /*from_cache=*/true); |
| + bool has_cached_config = doodle_service_->config().has_value(); |
| + if (has_cached_config) { |
| + FetchDoodleImage(doodle_service_->config().value()); |
| + } |
| // Also request a refresh, in case something changed. |
| - doodle_service_->Refresh(); |
| + bool has_triggered_refresh = doodle_service_->Refresh(); |
| + if (!has_cached_config && !has_triggered_refresh) { |
| + // With neither cache hit or refresh, no doodle can be expected soon. |
| + NotifyNoLogoAvailable(/*from_cache=*/true) |
| + } |
| } else { |
| // |observer| is deleted in LogoObserverAndroid::OnObserverRemoved(). |
| LogoObserverAndroid* observer = new LogoObserverAndroid( |
| @@ -251,21 +257,21 @@ void LogoBridge::OnDoodleConfigUpdated( |
| if (j_logo_observer_.is_null()) { |
| return; |
| } |
| - DoodleConfigReceived(maybe_doodle_config, /*from_cache=*/false); |
| + if (!maybe_doodle_config.has_value()) { |
| + NotifyNoLogoAvailable(/*from_cache=*/false) return; |
|
Marc Treib
2017/04/27 11:15:50
Missing a ";" and newline before "return".
fhorschig
2017/04/27 11:49:21
Added.
|
| + } |
| + FetchDoodleImage(maybe_doodle_config.value()); |
| } |
| -void LogoBridge::DoodleConfigReceived( |
| - const base::Optional<doodle::DoodleConfig>& maybe_doodle_config, |
| - bool from_cache) { |
| +void LogoBridge::NotifyNoLogoAvailable(bool from_cache) { |
| + JNIEnv* env = base::android::AttachCurrentThread(); |
| + Java_LogoObserver_onLogoAvailable(env, j_logo_observer_, |
| + ScopedJavaLocalRef<jobject>(), from_cache); |
| +} |
| + |
| +void LogoBridge::FetchDoodleImage(const doodle::DoodleConfig& doodle_config) { |
| DCHECK(!j_logo_observer_.is_null()); |
| - if (!maybe_doodle_config.has_value()) { |
| - JNIEnv* env = base::android::AttachCurrentThread(); |
| - Java_LogoObserver_onLogoAvailable( |
| - env, j_logo_observer_, ScopedJavaLocalRef<jobject>(), from_cache); |
| - return; |
| - } |
| - const doodle::DoodleConfig& doodle_config = maybe_doodle_config.value(); |
| // If there is a CTA image, that means the main image is animated. Show the |
| // non-animated CTA image first, and load the animated one only when the |
| // user requests it. |