// Copyright (c) 2012 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.

cr.define('tracing', function() {
  /**
   * Uses an embedded iframe to measure provided elements without forcing layout
   * on the main document.
   * @constructor
   * @extends {Object}
   */
  function MeasuringStick() {
    var iframe = document.createElement('iframe');
    iframe.style.cssText = 'width:100%;height:0;border:0;visibility:hidden';
    document.body.appendChild(iframe);
    this._doc = iframe.contentDocument;
    this._window = iframe.contentWindow;
    this._doc.body.style.cssText = 'padding:0;margin:0;overflow:hidden';

    var stylesheets = document.querySelectorAll('link[rel=stylesheet]');
    for (var i = 0; i < stylesheets.length; i++) {
      var stylesheet = stylesheets[i];
      var link = this._doc.createElement('link');
      link.rel = 'stylesheet';
      link.href = stylesheet.href;
      this._doc.head.appendChild(link);
    }
  }

  MeasuringStick.prototype = {
    __proto__: Object.prototype,

    /**
     * Measures the provided element without forcing layout on the main
     * document.
     */
    measure: function(element) {
      this._doc.body.appendChild(element);
      var style = this._window.getComputedStyle(element);
      var width = parseInt(style.width, 10);
      var height = parseInt(style.height, 10);
      this._doc.body.removeChild(element);
      return { width: width, height: height };
    }
  };

  return {
    MeasuringStick: MeasuringStick
  };
});