Index: chrome/browser/resources/tracing/measuring_stick.js |
diff --git a/chrome/browser/resources/tracing/measuring_stick.js b/chrome/browser/resources/tracing/measuring_stick.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..022b43f1379035857d7e5f53677f5248d41a82ad |
--- /dev/null |
+++ b/chrome/browser/resources/tracing/measuring_stick.js |
@@ -0,0 +1,50 @@ |
+// Copyright (c) 2011 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 |
+ }; |
+}); |