| 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..eefd475c523c920456e2a94a7b4812b96cf5a96b 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(), /*from_cache=*/true);
|
| + }
|
| // 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,23 @@ 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;
|
| + }
|
| + FetchDoodleImage(maybe_doodle_config.value(), /*from_cache=*/false);
|
| +}
|
| +
|
| +void LogoBridge::NotifyNoLogoAvailable(bool from_cache) {
|
| + JNIEnv* env = base::android::AttachCurrentThread();
|
| + Java_LogoObserver_onLogoAvailable(env, j_logo_observer_,
|
| + ScopedJavaLocalRef<jobject>(), from_cache);
|
| }
|
|
|
| -void LogoBridge::DoodleConfigReceived(
|
| - const base::Optional<doodle::DoodleConfig>& maybe_doodle_config,
|
| - bool from_cache) {
|
| +void LogoBridge::FetchDoodleImage(const doodle::DoodleConfig& doodle_config,
|
| + bool from_cache) {
|
| 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.
|
|
|