// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "third_party/blink/renderer/core/frame/resize_viewport_anchor.h"

#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/local_frame_view.h"
#include "third_party/blink/renderer/core/frame/root_frame_viewport.h"
#include "third_party/blink/renderer/core/frame/visual_viewport.h"
#include "third_party/blink/renderer/core/page/page.h"
#include "third_party/blink/renderer/platform/geometry/double_rect.h"
#include "third_party/blink/renderer/platform/geometry/float_size.h"

namespace blink {

void ResizeViewportAnchor::ResizeFrameView(const IntSize& size) {
  LocalFrameView* frame_view = RootFrameView();
  if (!frame_view)
    return;

  ScrollableArea* root_viewport = frame_view->GetScrollableArea();
  ScrollOffset offset = root_viewport->GetScrollOffset();

  frame_view->Resize(size);
  if (scope_count_ > 0)
    drift_ += root_viewport->GetScrollOffset() - offset;
}

void ResizeViewportAnchor::EndScope() {
  if (--scope_count_ > 0)
    return;

  LocalFrameView* frame_view = RootFrameView();
  if (!frame_view)
    return;

  ScrollOffset visual_viewport_in_document =
      frame_view->GetScrollableArea()->GetScrollOffset() - drift_;

  // TODO(bokan): Don't use RootFrameViewport::setScrollPosition since it
  // assumes we can just set a sub-pixel precision offset on the LocalFrameView.
  // While we "can" do this, the offset that will be shipped to CC will be the
  // truncated number and this class is used to handle TopControl movement
  // which needs the two threads to match exactly pixel-for-pixel. We can
  // replace this with RFV::setScrollPosition once Blink is sub-pixel scroll
  // offset aware. crbug.com/414283.
  DCHECK(frame_view->GetRootFrameViewport());
  frame_view->GetRootFrameViewport()->RestoreToAnchor(
      visual_viewport_in_document);

  drift_ = ScrollOffset();
}

LocalFrameView* ResizeViewportAnchor::RootFrameView() {
  if (Frame* frame = page_->MainFrame()) {
    if (LocalFrame* local_frame = DynamicTo<LocalFrame>(frame))
      return local_frame->View();
  }
  return nullptr;
}

}  // namespace blink
