// Copyright 2013 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.

// This file provides common functionality for synthetic gesture actions.
'use strict';

(function() {

  // Returns the bounding rectangle wrt to the top-most document.
  function getBoundingRect(el) {
    var client_rect = el.getBoundingClientRect();
    var bound = { left: client_rect.left,
                  top: client_rect.top,
                  width: client_rect.width,
                  height: client_rect.height };

    var frame = el.ownerDocument.defaultView.frameElement;
    while (frame) {
      var frame_bound = frame.getBoundingClientRect();
      // This computation doesn't account for more complex CSS transforms on the
      // frame (e.g. scaling or rotations).
      bound.left += frame_bound.left;
      bound.top += frame_bound.top;

      frame = frame.ownerDocument.frameElement;
    }
    return bound;
  }

  function getBoundingVisibleRect(el) {
    var rect = getBoundingRect(el);
    if (rect.top < 0) {
      rect.height += rect.top;
      rect.top = 0;
    }
    if (rect.left < 0) {
      rect.width += rect.left;
      rect.left = 0;
    }

    // TODO(ymalik): Remove the fallback path once the visualViewportHeight and
    // visualViewportWidth properties roll into stable.
    var visualViewportHeight = window.innerHeight;
    var visualViewportWidth = window.innerWidth;
    if (chrome.gpuBenchmarking.visualViewportHeight) {
      visualViewportHeight = chrome.gpuBenchmarking.visualViewportHeight();
    }
    if (chrome.gpuBenchmarking.visualViewportWidth) {
      visualViewportWidth = chrome.gpuBenchmarking.visualViewportWidth();
    }
    var outsideHeight = (rect.top + rect.height) - visualViewportHeight;
    var outsideWidth = (rect.left + rect.width) - visualViewportWidth;

    if (outsideHeight > 0) {
      rect.height -= outsideHeight;
    }
    if (outsideWidth > 0) {
      rect.width -= outsideWidth;
    }
    return rect;
  };

  window.__GestureCommon_GetBoundingVisibleRect = getBoundingVisibleRect;
})();
