Skip to content

Commit d0aa0f3

Browse files
wanghongjuanrogerwang
authored andcommitted
[test] Add test for issue6099
- Add test for issue nwjs#6099 - This case is failed on failed version 0.24.2, pass on fixed version 0.27.4
1 parent ca6dc28 commit d0aa0f3

File tree

7 files changed

+133
-0
lines changed

7 files changed

+133
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/usr/bin/env python
2+
3+
import SimpleHTTPServer
4+
import SocketServer
5+
import sys
6+
7+
PORT = int(sys.argv[1])
8+
9+
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
10+
11+
httpd = SocketServer.TCPServer(("", PORT), Handler)
12+
13+
print "serving at port", PORT
14+
httpd.serve_forever()
15+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>Cross-Origin iframe test</title>
6+
</head>
7+
<body>
8+
<h1>I am an iframe</h1>
9+
<div id="iframeInfo">Click the refresh button</div>
10+
<button type="button" id="refresh">Refresh</button>
11+
<script src="iframe.js" type="text/javascript" async></script>
12+
</body>
13+
</html>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
(function () {
2+
"use strict";
3+
4+
let refreshBtn = document.getElementById("refresh");
5+
let iframeInfoDiv = document.getElementById("iframeInfo");
6+
7+
refreshBtn.addEventListener("click", function () {
8+
iframeInfoDiv.style.color = "";
9+
try {
10+
iframeInfoDiv.innerText = "Top accessible: " + (!!window.top ? "true" : "false") + "\n" +
11+
"Parent accessible: " + (!!window.parent ? "true" : "false") + "\n" +
12+
"top === parent: " + ((window.parent && window.parent != window) ? "true" : "false");
13+
} catch (err) {
14+
console.error(err);
15+
iframeInfoDiv.style.color = "red";
16+
iframeInfoDiv.innerText = "It failed!\n\n" + err.stack;
17+
}
18+
});
19+
})();
20+
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
(function () {
2+
"use strict";
3+
4+
let refreshBtn = document.getElementById("refresh");
5+
let frameInfoDiv = document.getElementById("frameInfo");
6+
7+
refreshBtn.addEventListener("click", function () {
8+
frameInfoDiv.style.color = "";
9+
try {
10+
let iframeWindow = document.querySelector("iframe").contentWindow;
11+
frameInfoDiv.innerText = "Iframe top accessible: " + (!!iframeWindow.top ? "true" : "false") + "\n" +
12+
"Iframe parent accessible: " + (!!iframeWindow.parent ? "true" : "false") + "\n" +
13+
"Iframe top === Iframe parent: " + ((iframeWindow.parent && iframeWindow.parent != window) ? "true" : "false");
14+
} catch (err) {
15+
console.error(err);
16+
frameInfoDiv.style.color = "red";
17+
frameInfoDiv.innerText = "It failed!\n\n" + err.stack;
18+
}
19+
});
20+
})();
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>Cross-Origin iframe test</title>
6+
</head>
7+
<body>
8+
<h1>I am top frame</h1>
9+
<div id="frameInfo">Click the refresh button</div>
10+
<button type="button" id="refresh">Refresh</button>
11+
<iframe src="http://localhost:{port}/iframe.html" style="display: block; width: 100%; box-sizing: border-box; height: 500px; border: solid gray 1px; border-radius: 8px;"></iframe>
12+
<script src="index.js" type="text/javascript" async></script>
13+
</body>
14+
</html>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"name": "issue6099-AdSense-trouble",
3+
"main": "index.html"
4+
}
5+
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import time
2+
import os
3+
import sys
4+
5+
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
6+
from nw_util import *
7+
8+
from selenium import webdriver
9+
from selenium.webdriver.chrome.options import Options
10+
from selenium.webdriver.common import utils
11+
12+
chrome_options = Options()
13+
testdir = os.path.dirname(os.path.abspath(__file__))
14+
chrome_options.add_argument('nwapp=' + testdir)
15+
16+
os.chdir(testdir)
17+
18+
port = str(utils.free_port())
19+
server = subprocess.Popen(['python', 'http-server.py', port])
20+
21+
tpl = open('index.tpl', 'r')
22+
content = tpl.read().replace('{port}', port)
23+
tpl.close()
24+
25+
html = open('index.html', 'w')
26+
html.write(content)
27+
html.close()
28+
29+
driver = webdriver.Chrome(executable_path=os.environ['CHROMEDRIVER'], chrome_options=chrome_options)
30+
driver.implicitly_wait(2)
31+
try:
32+
print driver.current_url
33+
print 'Click frame button'
34+
driver.find_element_by_id('refresh').click()
35+
output = driver.find_element_by_id('frameInfo').get_attribute('innerHTML')
36+
assert('Iframe top accessible: true' in output)
37+
print 'Switch to iframe'
38+
driver.switch_to_frame(driver.find_element_by_tag_name('iframe'))
39+
print 'Click iframe button'
40+
driver.find_element_by_id('refresh').click()
41+
result = driver.find_element_by_id('iframeInfo').get_attribute('innerHTML')
42+
assert('Top accessible: true' in result)
43+
print 'document.querySelector("iframe").contentWindow.top is works'
44+
finally:
45+
driver.quit()
46+
server.terminate()

0 commit comments

Comments
 (0)