| Index: third_party/WebKit/LayoutTests/imported/web-platform-tests/html/rendering/replaced-elements/resources/svg-sizing.js
|
| diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/html/rendering/replaced-elements/resources/svg-sizing.js b/third_party/WebKit/LayoutTests/imported/web-platform-tests/html/rendering/replaced-elements/resources/svg-sizing.js
|
| deleted file mode 100644
|
| index f54541e9ea25ee2b114ef58a1757d2ae20fd14a4..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/LayoutTests/imported/web-platform-tests/html/rendering/replaced-elements/resources/svg-sizing.js
|
| +++ /dev/null
|
| @@ -1,418 +0,0 @@
|
| -// Simple implementation of SVG sizing
|
| -
|
| -setup({explicit_done: true});
|
| -
|
| -var SVGSizing = (function() {
|
| - function parseLength(l) {
|
| - var match = /^([-+]?[0-9]+|[-+]?[0-9]*\.[0-9]+)(px|%)?$/.exec(l);
|
| - if (!match)
|
| - return null;
|
| - return new Length(Number(match[1]), match[2] ? match[2] : "px");
|
| - }
|
| -
|
| - function parseViewBox(input) {
|
| - if (!input)
|
| - return null;
|
| -
|
| - var arr = input.split(' ');
|
| - return arr.map(function(a) { return parseInt(a); });
|
| - }
|
| -
|
| - // Only px and % are used
|
| - function convertToPx(input, percentRef) {
|
| - if (input == null)
|
| - return null;
|
| - var length = parseLength(input);
|
| - if (length.amount == 0)
|
| - return 0;
|
| - if (!length.unit)
|
| - length.unit = "px";
|
| - if (length.unit == "%" && percentRef === undefined)
|
| - return null;
|
| - return length.amount * { px: 1,
|
| - "%": percentRef/100}[length.unit];
|
| - }
|
| -
|
| - function Length(amount, unit) {
|
| - this.amount = amount;
|
| - this.unit = unit;
|
| - }
|
| -
|
| - function describe(data) {
|
| - function dumpObject(obj) {
|
| - var r = "";
|
| - for (var property in obj) {
|
| - if (obj.hasOwnProperty(property)) {
|
| - var value = obj[property];
|
| - if (typeof value == 'string')
|
| - value = "'" + value + "'";
|
| - else if (value == null)
|
| - value = "null";
|
| - else if (typeof value == 'object')
|
| - {
|
| - if (value instanceof Array)
|
| - value = "[" + value + "]";
|
| - else
|
| - value = "{" + dumpObject(value) + "}";
|
| - }
|
| -
|
| - if (value != "null")
|
| - r += property + ": " + value + ", ";
|
| - }
|
| - }
|
| - return r;
|
| - }
|
| - var result = dumpObject(data);
|
| - if (result == "")
|
| - return "(initial values)";
|
| - return result;
|
| - }
|
| -
|
| - function mapPresentationalHintLength(testData, cssProperty, attr) {
|
| - if (attr) {
|
| - var l = parseLength(attr);
|
| - if (l)
|
| - testData.style[cssProperty] = l.amount + l.unit;
|
| - }
|
| - }
|
| -
|
| - function computedWidthIsAuto(testData) {
|
| - return !testData.style["width"] || testData.style["width"] == 'auto';
|
| - }
|
| -
|
| - function computedHeightIsAuto(testData) {
|
| - return !testData.style["height"] || testData.style["height"] == 'auto' ||
|
| - (parseLength(testData.style["height"]).unit == '%' &&
|
| - containerComputedHeightIsAuto(testData));
|
| - }
|
| -
|
| - function containerComputedWidthIsAuto(testData) {
|
| - return !testData.config.containerWidthStyle ||
|
| - testData.config.containerWidthStyle == 'auto';
|
| - }
|
| -
|
| - function containerComputedHeightIsAuto(testData) {
|
| - return !testData.config.containerHeightStyle ||
|
| - testData.config.containerHeightStyle == 'auto';
|
| - }
|
| -
|
| - function intrinsicInformation(testData) {
|
| - if (testData.config.placeholder == 'iframe')
|
| - return {};
|
| -
|
| - var w = convertToPx(testData.config.svgWidthAttr) || 0;
|
| - var h = convertToPx(testData.config.svgHeightAttr) || 0;
|
| - var r = 0;
|
| - if (w && h) {
|
| - r = w / h;
|
| - } else {
|
| - var vb = parseViewBox(testData.config.svgViewBoxAttr);
|
| - if (vb) {
|
| - r = vb[2] / vb[3];
|
| - }
|
| - if (r) {
|
| - if (!w && h)
|
| - w = h * r;
|
| - else if (!h && w)
|
| - h = w / r;
|
| - }
|
| - }
|
| - return { width: w, height: h, ratio: r };
|
| - };
|
| -
|
| - function contentAttributeForPlaceholder(testData) {
|
| - if (testData.config.placeholder == 'object')
|
| - return "data";
|
| - else
|
| - return "src";
|
| - }
|
| -
|
| - function TestData(config) {
|
| - this.config = config;
|
| - this.name = describe(config);
|
| - this.style = {};
|
| - if (config.placeholder) {
|
| - mapPresentationalHintLength(this, "width", config.placeholderWidthAttr);
|
| - mapPresentationalHintLength(this, "height", config.placeholderHeightAttr);
|
| - } else {
|
| - if (config.svgWidthStyle)
|
| - this.style["width"] = config.svgWidthStyle;
|
| - else
|
| - mapPresentationalHintLength(this, "width", config.svgWidthAttr);
|
| -
|
| - if (config.svgHeightStyle)
|
| - this.style["height"] = config.svgHeightStyle;
|
| - else
|
| - mapPresentationalHintLength(this, "height", config.svgHeightAttr);
|
| - }
|
| - }
|
| -
|
| - TestData.prototype.computeInlineReplacedSize = function(outerWidth, outerHeight) {
|
| - var intrinsic = intrinsicInformation(this);
|
| - var self = this;
|
| -
|
| - // http://www.w3.org/TR/CSS2/visudet.html#inline-replaced-height
|
| - function calculateUsedHeight() {
|
| - if (computedHeightIsAuto(self)) {
|
| - if (computedWidthIsAuto(self) && intrinsic.height)
|
| - return intrinsic.height;
|
| - if (intrinsic.ratio)
|
| - return calculateUsedWidth() / intrinsic.ratio;
|
| - if (intrinsic.height)
|
| - return intrinsic.height;
|
| - return 150;
|
| - }
|
| -
|
| - return convertToPx(self.style["height"],
|
| - convertToPx(self.config.containerHeightStyle,
|
| - outerHeight));
|
| - }
|
| -
|
| - // http://www.w3.org/TR/CSS2/visudet.html#inline-replaced-width
|
| - function calculateUsedWidth() {
|
| - if (computedWidthIsAuto(self)) {
|
| - if (computedHeightIsAuto(self) && intrinsic.width)
|
| - return intrinsic.width;
|
| - if (!computedHeightIsAuto(self) && intrinsic.ratio)
|
| - return calculateUsedHeight() * intrinsic.ratio;
|
| - if (computedHeightIsAuto(self) && intrinsic.ratio) {
|
| - if (containerComputedWidthIsAuto(self)) {
|
| - // Note: While this is actually undefined in CSS
|
| - // 2.1, use the suggested value by examining the
|
| - // ancestor widths.
|
| - return outerWidth;
|
| - } else {
|
| - return convertToPx(self.config.containerWidthStyle,
|
| - outerWidth);
|
| - }
|
| - }
|
| - if (intrinsic.width)
|
| - return intrinsic.width;
|
| - return 300;
|
| - }
|
| -
|
| - if (containerComputedWidthIsAuto(self))
|
| - return convertToPx(self.style["width"], outerWidth);
|
| - else
|
| - return convertToPx(self.style["width"],
|
| - convertToPx(self.config.containerWidthStyle,
|
| - outerWidth));
|
| - }
|
| - return { width: calculateUsedWidth(),
|
| - height: calculateUsedHeight() };
|
| - };
|
| -
|
| - TestData.prototype.buildContainer = function (placeholder, options) {
|
| - options = options || {};
|
| -
|
| - var container = document.createElement("div");
|
| -
|
| - container.id = "container";
|
| - if (this.config.containerWidthStyle)
|
| - container.style.width = this.config.containerWidthStyle;
|
| -
|
| - if (this.config.containerHeightStyle)
|
| - container.style.height = this.config.containerHeightStyle;
|
| -
|
| - if (options.pretty)
|
| - container.appendChild(document.createTextNode("\n\t\t"));
|
| - container.appendChild(placeholder);
|
| - if (options.pretty)
|
| - container.appendChild(document.createTextNode("\n\t"));
|
| -
|
| - return container;
|
| - };
|
| -
|
| - TestData.prototype.buildSVGOrPlaceholder = function (options) {
|
| - options = options || {};
|
| - var self = this;
|
| -
|
| - if (this.config.placeholder) {
|
| - var generateSVGURI = function(testData, encoder) {
|
| - var res = '<svg xmlns="http://www.w3.org/2000/svg"';
|
| - function addAttr(attr, prop) {
|
| - if (testData.config[prop])
|
| - res += ' ' + attr + '="' + testData.config[prop] + '"';
|
| - }
|
| - addAttr("width", "svgWidthAttr");
|
| - addAttr("height", "svgHeightAttr");
|
| - addAttr("viewBox", "svgViewBoxAttr");
|
| - res += '></svg>';
|
| - return 'data:image/svg+xml' + encoder(res);
|
| - };
|
| - var placeholder = document.createElement(this.config.placeholder);
|
| - if (options.pretty) {
|
| - placeholder.appendChild(document.createTextNode("\n\t\t\t"));
|
| - placeholder.appendChild(
|
| - document.createComment(
|
| - generateSVGURI(this, function(x) { return "," + x; })));
|
| - placeholder.appendChild(document.createTextNode("\n\t\t"));
|
| - }
|
| - placeholder.setAttribute("id", "test");
|
| - if (this.config.placeholderWidthAttr)
|
| - placeholder.setAttribute("width", this.config.placeholderWidthAttr);
|
| - if (this.config.placeholderHeightAttr)
|
| - placeholder.setAttribute("height", this.config.placeholderHeightAttr);
|
| - placeholder.setAttribute(contentAttributeForPlaceholder(this),
|
| - generateSVGURI(this, function(x) {
|
| - return ";base64," + btoa(x);
|
| - }));
|
| - return placeholder;
|
| - } else {
|
| - var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
| - svgElement.setAttribute("id", "test");
|
| - if (self.config.svgWidthStyle)
|
| - svgElement.style.width = self.config.svgWidthStyle;
|
| - if (self.config.svgHeightStyle)
|
| - svgElement.style.height = self.config.svgHeightStyle;
|
| - if (self.config.svgWidthAttr)
|
| - svgElement.setAttribute("width", self.config.svgWidthAttr);
|
| - if (self.config.svgHeightAttr)
|
| - svgElement.setAttribute("height", self.config.svgHeightAttr);
|
| - if (self.config.svgViewBoxAttr)
|
| - svgElement.setAttribute("viewBox", self.config.svgViewBoxAttr);
|
| - return svgElement;
|
| - }
|
| - };
|
| -
|
| - TestData.prototype.buildDemo = function (expectedRect, id) {
|
| - // Non-essential debugging tool
|
| - var self = this;
|
| -
|
| - function buildDemoSerialization() {
|
| - var outerWidth = 800;
|
| - var outerHeight = 600;
|
| -
|
| - var options = { pretty: true };
|
| - var container =
|
| - self.buildContainer(self.buildSVGOrPlaceholder(options), options);
|
| -
|
| - var root = document.createElement("html");
|
| - var style = document.createElement("style");
|
| -
|
| - style.textContent = "\n" +
|
| - "\tbody { margin: 0; font-family: sans-serif }\n" +
|
| - "\tiframe { border: none }\n" +
|
| - "\t#expected {\n" +
|
| - "\t\twidth: " + (expectedRect.width) + "px; height: "
|
| - + (expectedRect.height) + "px;\n" +
|
| - "\t\tborder: 10px solid lime; position: absolute;\n" +
|
| - "\t\tbackground-color: red }\n" +
|
| - "\t#testContainer { position: absolute;\n" +
|
| - "\t\ttop: 10px; left: 10px; width: " + outerWidth + "px;\n" +
|
| - "\t\theight: " + outerHeight + "px }\n" +
|
| - "\t#test { background-color: green }\n" +
|
| - "\t.result { position: absolute; top: 0; right: 0;\n" +
|
| - "\t\tbackground-color: hsla(0,0%, 0%, 0.85); border-radius: 0.5em;\n" +
|
| - "\t\tpadding: 0.5em; border: 0.25em solid black }\n" +
|
| - "\t.pass { color: lime }\n" +
|
| - "\t.fail { color: red }\n";
|
| -
|
| - root.appendChild(document.createTextNode("\n"));
|
| - root.appendChild(style);
|
| - root.appendChild(document.createTextNode("\n"));
|
| -
|
| - var script = document.createElement("script");
|
| - script.textContent = "\n" +
|
| - "onload = function() {\n" +
|
| - "\tvar svgRect =\n" +
|
| - "\t\tdocument.querySelector('#test').getBoundingClientRect();\n" +
|
| - "\tpassed = (svgRect.width == " + expectedRect.width + " && " +
|
| - "svgRect.height == " + expectedRect.height + ");\n" +
|
| - "\tdocument.body.insertAdjacentHTML('beforeEnd',\n" +
|
| - "\t\t'<span class=\"result '+ (passed ? 'pass' : 'fail') " +
|
| - "+ '\">' + (passed ? 'Pass' : 'Fail') + '</span>');\n" +
|
| - "};\n";
|
| -
|
| - root.appendChild(script);
|
| - root.appendChild(document.createTextNode("\n"));
|
| -
|
| - var expectedElement = document.createElement("div");
|
| - expectedElement.id = "expected";
|
| - root.appendChild(expectedElement);
|
| - root.appendChild(document.createTextNode("\n"));
|
| -
|
| - var testContainer = document.createElement("div");
|
| - testContainer.id = "testContainer";
|
| - testContainer.appendChild(document.createTextNode("\n\t"));
|
| - testContainer.appendChild(container);
|
| - testContainer.appendChild(document.createTextNode("\n"));
|
| - root.appendChild(testContainer);
|
| - root.appendChild(document.createTextNode("\n"));
|
| -
|
| - return "<!DOCTYPE html>\n" + root.outerHTML;
|
| - }
|
| -
|
| - function pad(n, width, z) {
|
| - z = z || '0';
|
| - n = n + '';
|
| - return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
|
| - }
|
| -
|
| - function heightToDescription(height) {
|
| - if (!height || height == "auto")
|
| - return "auto";
|
| - if (parseLength(height).unit == '%')
|
| - return "percentage";
|
| - return "fixed";
|
| - }
|
| -
|
| - var demoRoot = document.querySelector('#demo');
|
| - if (demoRoot) {
|
| - var demo = buildDemoSerialization();
|
| - var iframe = document.createElement('iframe');
|
| - iframe.style.width = (Math.max(900, expectedRect.width)) + "px";
|
| - iframe.style.height = (Math.max(400, expectedRect.height)) + "px";
|
| - iframe.src = "data:text/html;charset=utf-8," + encodeURIComponent(demo);
|
| - demoRoot.appendChild(iframe);
|
| - demoRoot.insertAdjacentHTML(
|
| - 'beforeEnd',
|
| - '<p><a href="data:application/octet-stream;charset=utf-8;base64,' +
|
| - btoa(demo) + '" download="svg-in-' + this.config.placeholder + "-" +
|
| - heightToDescription(this.config.placeholderHeightAttr) + "-" + pad(id, 3) +
|
| - '.html">Download</a></p>');
|
| - }
|
| - };
|
| -
|
| - return {
|
| - TestData: TestData,
|
| - doCombinationTest: function(values, func, testSingleId) {
|
| - function computeConfig(id) {
|
| - id--;
|
| - var multiplier = 1;
|
| - var config = {};
|
| - for (var i=0; i<values.length; i++) {
|
| - // Compute offset into current array
|
| - var ii = (Math.floor(id / multiplier)) % values[i][1].length;
|
| - // Set corresponding value
|
| - config[values[i][0]] = values[i][1][ii];
|
| - // Compute new multiplier
|
| - multiplier *= values[i][1].length;
|
| - }
|
| - if (id >= multiplier)
|
| - return null;
|
| - return config;
|
| - }
|
| -
|
| - function cont(id) {
|
| - var config = computeConfig(id);
|
| - if (config && (!testSingleId || testSingleId == id)) {
|
| - var next = function() {func(config, id, cont)};
|
| - // Make sure we don't blow the stack, without too much slowness
|
| - if (id % 20 === 0) {
|
| - setTimeout(next, 0);
|
| - } else {
|
| - next();
|
| - }
|
| - } else {
|
| - done();
|
| - }
|
| - };
|
| -
|
| - if (testSingleId)
|
| - cont(testSingleId);
|
| - else
|
| - cont(1);
|
| - }
|
| - };
|
| -})();
|
|
|