Jacek Caban : mshtml: Adder _parent target support to navigate_anchor.

Alexandre Julliard julliard at winehq.org
Tue Mar 11 14:45:41 CDT 2014


Module: wine
Branch: master
Commit: 31faed571d5a846925b22c08dc488eb42344c41d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=31faed571d5a846925b22c08dc488eb42344c41d

Author: Jacek Caban <jacek at 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)




More information about the wine-cvs mailing list