Module: wine Branch: master Commit: 31faed571d5a846925b22c08dc488eb42344c41d URL: http://source.winehq.org/git/wine.git/?a=commit;h=31faed571d5a846925b22c08dc...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Mar 11 19:01:45 2014 +0100
mshtml: Adder _parent target support to navigate_anchor.
---
dlls/mshtml/htmlanchor.c | 12 +++++++---- dlls/mshtml/tests/blank.html | 1 + dlls/mshtml/tests/nav_test.html | 42 +++++++++++++++++++++++++++++++++++++++ dlls/mshtml/tests/rsrc.rc | 9 +++++++++ dlls/mshtml/tests/script.c | 1 + 5 files changed, 61 insertions(+), 4 deletions(-)
diff --git a/dlls/mshtml/htmlanchor.c b/dlls/mshtml/htmlanchor.c index 97ef900..f177ff2 100644 --- a/dlls/mshtml/htmlanchor.c +++ b/dlls/mshtml/htmlanchor.c @@ -77,7 +77,7 @@ static HRESULT navigate_anchor(HTMLAnchorElement *This) nsresult nsres; HRESULT hres = E_FAIL;
- static const WCHAR _parentW[] = {'p','a','r','e','n','t',0}; + static const WCHAR _parentW[] = {'_','p','a','r','e','n','t',0}; static const WCHAR _selfW[] = {'_','s','e','l','f',0}; static const WCHAR _topW[] = {'_','t','o','p',0};
@@ -93,9 +93,13 @@ static HRESULT navigate_anchor(HTMLAnchorElement *This) TRACE("target _top\n"); get_top_window(This->element.node.doc->basedoc.window, &window); }else if(!strcmpiW(target, _parentW)) { - FIXME("Navigating to target _parent is not implemented\n"); - nsAString_Finish(&target_str); - return S_OK; + window = This->element.node.doc->basedoc.window; + if(!window->parent) { + WARN("Window has no parent\n"); + nsAString_Finish(&target_str); + return S_OK; + } + window = window->parent; }else { HTMLOuterWindow *top_window;
diff --git a/dlls/mshtml/tests/blank.html b/dlls/mshtml/tests/blank.html new file mode 100644 index 0000000..18ecdcb --- /dev/null +++ b/dlls/mshtml/tests/blank.html @@ -0,0 +1 @@ +<html></html> diff --git a/dlls/mshtml/tests/nav_test.html b/dlls/mshtml/tests/nav_test.html new file mode 100644 index 0000000..d106dfc --- /dev/null +++ b/dlls/mshtml/tests/nav_test.html @@ -0,0 +1,42 @@ +<html> +<head> +<script> +function ok(b,m) { + return external.ok(b, m); +} + +function nav_back_test() { + external.trace("Running _parent navigation tests..."); + + var iframe = document.getElementById("testframe"); + var subframe = iframe.contentWindow.document.createElement("iframe"); + + subframe.onload = function() { + var doc = subframe.contentWindow.document; + doc.body.innerHTML = '<a href="blank2.html" id="aid" target="_parent">test</a>'; + doc.getElementById("aid").click(); + } + + iframe.onload = function() { + var href = iframe.contentWindow.location.href; + ok(/.*blank2.html/.test(href), "Unexpected href " + href); + next_test(); + } + + iframe.contentWindow.document.body.appendChild(subframe); + subframe.src = "blank.html"; +} + +var tests = [ + nav_back_test, + function() { external.reportSuccess(); } +]; + +function next_test() { + window.setTimeout(tests.shift(), 0); +} +</script> +<body onload="next_test()"> +<iframe src="about:blank" id="testframe"></iframe> +</body> +</html> diff --git a/dlls/mshtml/tests/rsrc.rc b/dlls/mshtml/tests/rsrc.rc index 07d816d..d498b82 100644 --- a/dlls/mshtml/tests/rsrc.rc +++ b/dlls/mshtml/tests/rsrc.rc @@ -31,6 +31,15 @@ events.html HTML "events.html" /* @makedep: externscr.js */ externscr.js HTML "externscr.js"
+/* @makedep: nav_test.html */ +nav_test.html HTML "nav_test.html" + +/* @makedep: blank.html */ +blank.html HTML "blank.html" + +/* @makedep: blank.html */ +blank2.html HTML "blank.html" + /* @makedep: test_tlb.tlb */ 1 TYPELIB test_tlb.tlb
diff --git a/dlls/mshtml/tests/script.c b/dlls/mshtml/tests/script.c index ac6b8a2..de0bf65 100644 --- a/dlls/mshtml/tests/script.c +++ b/dlls/mshtml/tests/script.c @@ -2831,6 +2831,7 @@ static void run_js_tests(void) run_js_script("exectest.html"); run_js_script("vbtest.html"); run_js_script("events.html"); + run_js_script("nav_test.html"); }
static BOOL init_registry(BOOL init)