diff --git a/test/functional/iframes.js b/test/functional/iframes.js
new file mode 100644
index 0000000..c687fcf
--- /dev/null
+++ b/test/functional/iframes.js
@@ -0,0 +1,82 @@
+"use strict";
+
+const assert = require("assert");
+const utils = require("./lib/utils");
+const testServer = require("./lib/server");
+
+describe("iFrames", function () {
+
+ describe("HTMLIFrameElement.prototype.contentWindow property", function () {
+
+ this.timeout = () => 20000;
+
+ const standardsToBlock = utils.constants.svgBlockRule;
+
+ const testHtml = `
+
+
+ Test Page
+
+
+
+
+ `;
+
+ let testScript = "";
+ testScript += "let iframeWindow = document.getElementsByTagName('iframe')[0].contentWindow;\n";
+ testScript += "return iframeWindow.SVGGraphicsElement.prototype.getBBox === iframeWindow.SVGTransformList.prototype.createSVGTransformFromMatrix;";
+
+ // If access to the child frame's SVGGraphicsElement.prototype.getBBox
+ // implementation is *not* blocked, then trying to call it
+ // will throw, since its being called without a context.
+ it("Can access w/o blocking", function (done) {
+
+ const [server, url] = testServer.start(undefined, testHtml);
+ let driverReference;
+
+ utils.promiseGetDriver()
+ .then(function (driver) {
+ driverReference = driver;
+ return driverReference.get(url);
+ })
+ .then(() => driverReference.executeScript(testScript))
+ .then(function (response) {
+ assert.equal(response, false, "When not blocking, SVGGraphicsElement.prototype.getBBox and SVGTransformList.prototype.createSVGTransformFromMatrix should reference different functions.");
+ driverReference.quit();
+ testServer.stop(server);
+ done();
+ })
+ .catch(function (e) {
+ driverReference.quit();
+ testServer.stop(server);
+ done(e);
+ });
+ });
+
+ it("Can not access when blocking", function (done) {
+
+ const [server, url] = testServer.start(undefined, testHtml);
+ let driverReference;
+
+ utils.promiseGetDriver()
+ .then(function (driver) {
+ driverReference = driver;
+ return driverReference.get(url);
+ })
+ .then(() => utils.promiseSetBlockingRules(driverReference, standardsToBlock))
+ .then(() => driverReference.get(url))
+ .then(() => driverReference.executeScript(testScript))
+ .then(function (response) {
+ assert.equal(response, true, "When blocking, SVGGraphicsElement.prototype.getBBox and SVGTransformList.prototype.createSVGTransformFromMatrix should reference the same proxy object.");
+ driverReference.quit();
+ testServer.stop(server);
+ done();
+ })
+ .catch(function (e) {
+ driverReference.quit();
+ testServer.stop(server);
+ done(e);
+ });
+ });
+ });
+});