#include "content/public/browser/back_forward_transition_animation_manager.h"
#include "base/auto_reset.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/common/content_client.h"
#include "content/public/common/content_features.h"
#include "third_party/blink/public/common/features_generated.h"
#include "ui/gfx/animation/animation.h"
#if BUILDFLAG(IS_ANDROID)
#include "content/browser/renderer_host/navigation_transitions/navigation_transition_config.h"
#include "ui/base/l10n/l10n_util_android.h"
#endif
namespace content {
bool BackForwardTransitionAnimationManager::
ShouldAnimateBackForwardTransitions() {
return content::GetContentClient()
->browser()
->ShouldAnimateBackForwardTransitions();
}
base::AutoReset<int>
BackForwardTransitionAnimationManager::SetMinRequiredPhysicalRamMbForTesting(
int mb) {
#if BUILDFLAG(IS_ANDROID)
return NavigationTransitionConfig::SetMinRequiredPhysicalRamMbForTesting(mb);
#else
return base::AutoReset<int>(nullptr, 0);
#endif
}
bool BackForwardTransitionAnimationManager::ShouldAnimateNavigationTransition(
NavigationDirection navigation_direction,
ui::BackGestureEventSwipeEdge edge) {
#if BUILDFLAG(IS_ANDROID)
if (!ShouldAnimateBackForwardTransitions()) {
return false;
}
if (gfx::Animation::PrefersReducedMotion()) {
return false;
}
ui::BackGestureEventSwipeEdge semantic_back_edge =
l10n_util::ShouldMirrorBackForwardGestures()
? ui::BackGestureEventSwipeEdge::RIGHT
: ui::BackGestureEventSwipeEdge::LEFT;
bool is_back = navigation_direction == NavigationDirection::kBackward;
bool from_semantic_back_edge = edge == semantic_back_edge;
CHECK(is_back || !from_semantic_back_edge);
if (is_back != from_semantic_back_edge) {
return false;
}
return true;
#else
return false;
#endif
}
}