| 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..95780e1e1fdaa176e2ca54d21d21bec4212b2835 100644
|
| --- a/chrome/browser/android/logo_bridge.cc
|
| +++ b/chrome/browser/android/logo_bridge.cc
|
| @@ -226,9 +226,13 @@ 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);
|
| - // Also request a refresh, in case something changed.
|
| + // Hand out any current cached config.
|
| + if (doodle_service_->config().has_value()) {
|
| + FetchDoodleImage(doodle_service_->config().value(), /*from_cache=*/true);
|
| + }
|
| + // Also request a refresh, in case something changed. Depending on whether a
|
| + // newer config was available, either |OnDoodleConfigUpdated| or
|
| + // |OnDoodleConfigRevalidated| are called.
|
| doodle_service_->Refresh();
|
| } else {
|
| // |observer| is deleted in LogoObserverAndroid::OnObserverRemoved().
|
| @@ -246,26 +250,40 @@ void LogoBridge::GetAnimatedLogo(JNIEnv* env,
|
| animated_logo_fetcher_->Start(env, url, j_callback);
|
| }
|
|
|
| +void LogoBridge::OnDoodleConfigRevalidated(bool from_cache) {
|
| + if (j_logo_observer_.is_null()) {
|
| + return;
|
| + }
|
| + // If an existing config got re-validated, there's nothing to do - the UI is
|
| + // already in the correct state. However, we do tell the UI when we validate
|
| + // that there really isn't a Doodle. This is needed for metrics tracking.
|
| + if (!doodle_service_->config().has_value()) {
|
| + NotifyNoLogoAvailable(from_cache);
|
| + }
|
| +}
|
| +
|
| void LogoBridge::OnDoodleConfigUpdated(
|
| const base::Optional<doodle::DoodleConfig>& maybe_doodle_config) {
|
| 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.
|
|
|