From aef9b15ca1fbe48781d29404cac38ccb2ac62106 Mon Sep 17 00:00:00 2001
From: Thomas Mullaly <thomas.mullaly@gmail.com>
Date: Fri, 16 Jul 2010 11:46:35 -0400
Subject: [PATCH] urlmon: Implemented IUri_GetDomain.

---
 dlls/urlmon/tests/uri.c | 186 ++++++++++++++++++++--------------------
 dlls/urlmon/uri.c       |  37 ++++++--
 2 files changed, 121 insertions(+), 102 deletions(-)

diff --git a/dlls/urlmon/tests/uri.c b/dlls/urlmon/tests/uri.c
index 49fb941a6ea..b87b9a30159 100644
--- a/dlls/urlmon/tests/uri.c
+++ b/dlls/urlmon/tests/uri.c
@@ -97,7 +97,7 @@ static const uri_properties uri_tests[] = {
             {"http://www.winehq.org/",S_OK,TRUE},                       /* ABSOLUTE_URI */
             {"www.winehq.org",S_OK,FALSE},                              /* AUTHORITY */
             {"http://www.winehq.org/",S_OK,TRUE},                       /* DISPLAY_URI */
-            {"winehq.org",S_OK,TRUE},                                   /* DOMAIN */
+            {"winehq.org",S_OK,FALSE},                                  /* DOMAIN */
             {"",S_FALSE,TRUE},                                          /* EXTENSION */
             {"",S_FALSE,TRUE},                                          /* FRAGMENT */
             {"www.winehq.org",S_OK,FALSE},                              /* HOST */
@@ -126,7 +126,7 @@ static const uri_properties uri_tests[] = {
             {"http://winehq.org/tests",S_OK,TRUE},
             {"winehq.org",S_OK,FALSE},
             {"http://winehq.org/tests",S_OK,TRUE},
-            {"winehq.org",S_OK,TRUE},
+            {"winehq.org",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"winehq.org",S_OK,FALSE},
@@ -155,7 +155,7 @@ static const uri_properties uri_tests[] = {
             {"http://www.winehq.org/?query=x&return=y",S_OK,TRUE},
             {"www.winehq.org",S_OK,FALSE},
             {"http://www.winehq.org/?query=x&return=y",S_OK,TRUE},
-            {"winehq.org",S_OK,TRUE},
+            {"winehq.org",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"www.winehq.org",S_OK,FALSE},
@@ -184,7 +184,7 @@ static const uri_properties uri_tests[] = {
             {"http://usEr%3Ainfo@example.com/path/a/Forbidden'%3C%7C%3E%20Characters",S_OK,TRUE},
             {"usEr%3Ainfo@example.com",S_OK,FALSE},
             {"http://example.com/path/a/Forbidden'%3C%7C%3E%20Characters",S_OK,TRUE},
-            {"example.com",S_OK,TRUE},
+            {"example.com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"example.com",S_OK,FALSE},
@@ -214,7 +214,7 @@ static const uri_properties uri_tests[] = {
             {"ftp://winepass:wine@ftp.winehq.org:9999/dir/foo%20bar.txt",S_OK,TRUE},
             {"winepass:wine@ftp.winehq.org:9999",S_OK,FALSE},
             {"ftp://ftp.winehq.org:9999/dir/foo%20bar.txt",S_OK,TRUE},
-            {"winehq.org",S_OK,TRUE},
+            {"winehq.org",S_OK,FALSE},
             {".txt",S_OK,TRUE},
             {"",S_FALSE,TRUE},
             {"ftp.winehq.org",S_OK,FALSE},
@@ -242,7 +242,7 @@ static const uri_properties uri_tests[] = {
             {"file:///c:/tests/foo%2520bar.mp3",S_OK,TRUE},
             {"",S_FALSE,FALSE},
             {"file:///c:/tests/foo%2520bar.mp3",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {".mp3",S_OK,TRUE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,FALSE},
@@ -270,7 +270,7 @@ static const uri_properties uri_tests[] = {
             {"file:///tests/test%20file.README.txt",S_OK,TRUE},
             {"",S_FALSE,FALSE},
             {"file:///tests/test%20file.README.txt",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {".txt",S_OK,TRUE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,FALSE},
@@ -298,7 +298,7 @@ static const uri_properties uri_tests[] = {
             {"urn:nothing:should:happen here",S_OK,TRUE},
             {"",S_FALSE,FALSE},
             {"urn:nothing:should:happen here",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,FALSE},
@@ -327,7 +327,7 @@ static const uri_properties uri_tests[] = {
             {"http://127.0.0.1/test%20dir/test.txt",S_OK,TRUE},
             {"127.0.0.1",S_OK,FALSE},
             {"http://127.0.0.1/test%20dir/test.txt",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {".txt",S_OK,TRUE},
             {"",S_FALSE,TRUE},
             {"127.0.0.1",S_OK,FALSE},
@@ -356,7 +356,7 @@ static const uri_properties uri_tests[] = {
             {"http://[fedc:ba98:7654:3210:fedc:ba98:7654:3210]/",S_OK,TRUE},
             {"[fedc:ba98:7654:3210:fedc:ba98:7654:3210]",S_OK,FALSE},
             {"http://[fedc:ba98:7654:3210:fedc:ba98:7654:3210]/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"fedc:ba98:7654:3210:fedc:ba98:7654:3210",S_OK,FALSE},
@@ -385,7 +385,7 @@ static const uri_properties uri_tests[] = {
             {"ftp://[::13.1.68.3]/",S_OK,TRUE},
             {"[::13.1.68.3]",S_OK,FALSE},
             {"ftp://[::13.1.68.3]/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"::13.1.68.3",S_OK,FALSE},
@@ -414,7 +414,7 @@ static const uri_properties uri_tests[] = {
             {"http://[fedc:ba98::3210]/",S_OK,TRUE},
             {"[fedc:ba98::3210]",S_OK,FALSE},
             {"http://[fedc:ba98::3210]/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"fedc:ba98::3210",S_OK,FALSE},
@@ -443,7 +443,7 @@ static const uri_properties uri_tests[] = {
             {"1234://www.winehq.org/",S_OK,TRUE},
             {"www.winehq.org",S_OK,FALSE},
             {"1234://www.winehq.org/",S_OK,TRUE},
-            {"winehq.org",S_OK,TRUE},
+            {"winehq.org",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"www.winehq.org",S_OK,FALSE},
@@ -472,7 +472,7 @@ static const uri_properties uri_tests[] = {
             {"file:///C:/test/test.mp3",S_OK,TRUE},
             {"",S_FALSE,FALSE},
             {"file:///C:/test/test.mp3",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {".mp3",S_OK,TRUE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,FALSE},
@@ -502,7 +502,7 @@ static const uri_properties uri_tests[] = {
             {"file://server/test.mp3",S_OK,TRUE},
             {"server",S_OK,FALSE},
             {"file://server/test.mp3",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {".mp3",S_OK,TRUE},
             {"",S_FALSE,TRUE},
             {"server",S_OK,FALSE},
@@ -531,7 +531,7 @@ static const uri_properties uri_tests[] = {
             {"*:www.winehq.org/test",S_OK,TRUE},
             {"www.winehq.org",S_OK,FALSE},
             {"*:www.winehq.org/test",S_OK,TRUE},
-            {"winehq.org",S_OK,TRUE},
+            {"winehq.org",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"www.winehq.org",S_OK,FALSE},
@@ -561,7 +561,7 @@ static const uri_properties uri_tests[] = {
             {"*:www.winehq.org/test",S_OK,TRUE},
             {"www.winehq.org",S_OK,FALSE},
             {"*:www.winehq.org/test",S_OK,TRUE},
-            {"winehq.org",S_OK,TRUE},
+            {"winehq.org",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"www.winehq.org",S_OK,FALSE},
@@ -589,7 +589,7 @@ static const uri_properties uri_tests[] = {
             {"/../some dir/test.ext",S_OK,TRUE},
             {"",S_FALSE,FALSE},
             {"/../some dir/test.ext",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {".ext",S_OK,TRUE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,FALSE},
@@ -617,7 +617,7 @@ static const uri_properties uri_tests[] = {
             {"*://implicit/wildcard/uri%20scheme",S_OK,TRUE},
             {"",S_OK,FALSE},
             {"*://implicit/wildcard/uri%20scheme",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"",S_OK,FALSE},
@@ -647,7 +647,7 @@ static const uri_properties uri_tests[] = {
             {"zip:/.//google.com",S_OK,TRUE},
             {"",S_FALSE,FALSE},
             {"zip:/.//google.com",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {".com",S_OK,TRUE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,FALSE},
@@ -678,7 +678,7 @@ static const uri_properties uri_tests[] = {
             {"ftp://user:pass:word@winehq.org/",S_OK,TRUE},
             {"user:pass:word@winehq.org",S_OK,FALSE},
             {"ftp://winehq.org/",S_OK,TRUE},
-            {"winehq.org",S_OK,TRUE},
+            {"winehq.org",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"winehq.org",S_OK,FALSE},
@@ -709,7 +709,7 @@ static const uri_properties uri_tests[] = {
             {"ftp://wINe:PASS@ftp.google.com/",S_OK,TRUE},
             {"wINe:PASS@ftp.google.com",S_OK,FALSE},
             {"ftp://ftp.google.com/",S_OK,TRUE},
-            {"google.com",S_OK,TRUE},
+            {"google.com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"ftp.google.com",S_OK,FALSE},
@@ -740,7 +740,7 @@ static const uri_properties uri_tests[] = {
             {"ftp://w%5D%5Be:PA%7B%7D@ftp.google.com/",S_OK,TRUE},
             {"w%5D%5Be:PA%7B%7D@ftp.google.com",S_OK,FALSE},
             {"ftp://ftp.google.com/",S_OK,TRUE},
-            {"google.com",S_OK,TRUE},
+            {"google.com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"ftp.google.com",S_OK,FALSE},
@@ -771,7 +771,7 @@ static const uri_properties uri_tests[] = {
             {"ftp://empty:@ftp.google.com/",S_OK,TRUE},
             {"empty:@ftp.google.com",S_OK,FALSE},
             {"ftp://ftp.google.com/",S_OK,TRUE},
-            {"google.com",S_OK,TRUE},
+            {"google.com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"ftp.google.com",S_OK,FALSE},
@@ -802,7 +802,7 @@ static const uri_properties uri_tests[] = {
             {"ftp://%22%20%22weird@ftp.google.com/",S_OK,TRUE},
             {"%22%20%22weird@ftp.google.com",S_OK,FALSE},
             {"ftp://ftp.google.com/",S_OK,TRUE},
-            {"google.com",S_OK,TRUE},
+            {"google.com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"ftp.google.com",S_OK,FALSE},
@@ -833,7 +833,7 @@ static const uri_properties uri_tests[] = {
             {"ftp://\" \"weird@ftp.google.com/",S_OK,TRUE},
             {"\" \"weird@ftp.google.com",S_OK,FALSE},
             {"ftp://ftp.google.com/",S_OK,TRUE},
-            {"google.com",S_OK,TRUE},
+            {"google.com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"ftp.google.com",S_OK,FALSE},
@@ -863,7 +863,7 @@ static const uri_properties uri_tests[] = {
             {"zip://%xy:word@winehq.org/",S_OK,TRUE},
             {"%xy:word@winehq.org",S_OK,FALSE},
             {"zip://%xy:word@winehq.org/",S_OK,TRUE},
-            {"winehq.org",S_OK,TRUE},
+            {"winehq.org",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"winehq.org",S_OK,FALSE},
@@ -895,7 +895,7 @@ static const uri_properties uri_tests[] = {
             {"zip://%2E:%52%53ord@winehq.org/",S_OK,TRUE},
             {"%2E:%52%53ord@winehq.org",S_OK,FALSE},
             {"zip://%2E:%52%53ord@winehq.org/",S_OK,TRUE},
-            {"winehq.org",S_OK,TRUE},
+            {"winehq.org",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"winehq.org",S_OK,FALSE},
@@ -925,7 +925,7 @@ static const uri_properties uri_tests[] = {
             {"ftp://[](),'test':word@winehq.org/",S_OK,TRUE},
             {"[](),'test':word@winehq.org",S_OK,FALSE},
             {"ftp://winehq.org/",S_OK,TRUE},
-            {"winehq.org",S_OK,TRUE},
+            {"winehq.org",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"winehq.org",S_OK,FALSE},
@@ -954,7 +954,7 @@ static const uri_properties uri_tests[] = {
             {"ftp://test/?:word@winehq.org/",S_OK,TRUE},
             {"test",S_OK,FALSE},
             {"ftp://test/?:word@winehq.org/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"test",S_OK,FALSE},
@@ -983,7 +983,7 @@ static const uri_properties uri_tests[] = {
             {"ftp://test/#:word@winehq.org/",S_OK,TRUE},
             {"test",S_OK,FALSE},
             {"ftp://test/#:word@winehq.org/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"#:word@winehq.org/",S_OK,TRUE},
             {"test",S_OK,FALSE},
@@ -1013,7 +1013,7 @@ static const uri_properties uri_tests[] = {
             {"zip://test\\:word@winehq.org/",S_OK,TRUE},
             {"test\\:word@winehq.org",S_OK,FALSE},
             {"zip://test\\:word@winehq.org/",S_OK,TRUE},
-            {"winehq.org",S_OK,TRUE},
+            {"winehq.org",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"winehq.org",S_OK,FALSE},
@@ -1043,7 +1043,7 @@ static const uri_properties uri_tests[] = {
             {"http://127.0.0.100/",S_OK,TRUE},
             {"127.0.0.100",S_OK,FALSE},
             {"http://127.0.0.100/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"127.0.0.100",S_OK,FALSE},
@@ -1073,7 +1073,7 @@ static const uri_properties uri_tests[] = {
             {"http://127.0.0.0/",S_OK,TRUE},
             {"127.0.0.0",S_OK,FALSE},
             {"http://127.0.0.0/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"127.0.0.0",S_OK,FALSE},
@@ -1103,7 +1103,7 @@ static const uri_properties uri_tests[] = {
             {"http://0.1.226.64/",S_OK,TRUE},
             {"0.1.226.64",S_OK,FALSE},
             {"http://0.1.226.64/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"0.1.226.64",S_OK,FALSE},
@@ -1133,7 +1133,7 @@ static const uri_properties uri_tests[] = {
             {"http://255.255.255.255/",S_OK,TRUE},
             {"255.255.255.255",S_OK,FALSE},
             {"http://255.255.255.255/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"255.255.255.255",S_OK,FALSE},
@@ -1163,7 +1163,7 @@ static const uri_properties uri_tests[] = {
             {"http://4294967296/",S_OK,TRUE},
             {"4294967296",S_OK,FALSE},
             {"http://4294967296/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"4294967296",S_OK,FALSE},
@@ -1193,7 +1193,7 @@ static const uri_properties uri_tests[] = {
             {"1234://4294967295/",S_OK,TRUE},
             {"4294967295",S_OK,FALSE},
             {"1234://4294967295/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"4294967295",S_OK,FALSE},
@@ -1223,7 +1223,7 @@ static const uri_properties uri_tests[] = {
             {"1234://127.001/",S_OK,TRUE},
             {"127.001",S_OK,FALSE},
             {"1234://127.001/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"127.001",S_OK,FALSE},
@@ -1252,7 +1252,7 @@ static const uri_properties uri_tests[] = {
             {"http://[fedc:ba98::3210]/",S_OK,TRUE},
             {"[fedc:ba98::3210]",S_OK,FALSE},
             {"http://[fedc:ba98::3210]/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"fedc:ba98::3210",S_OK,FALSE},
@@ -1281,7 +1281,7 @@ static const uri_properties uri_tests[] = {
             {"http://[::]/",S_OK,TRUE},
             {"[::]",S_OK,FALSE},
             {"http://[::]/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"::",S_OK,FALSE},
@@ -1310,7 +1310,7 @@ static const uri_properties uri_tests[] = {
             {"http://[fedc:ba98::]/",S_OK,TRUE},
             {"[fedc:ba98::]",S_OK,FALSE},
             {"http://[fedc:ba98::]/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"fedc:ba98::",S_OK,FALSE},
@@ -1340,7 +1340,7 @@ static const uri_properties uri_tests[] = {
             {"http://[1:0:3:4:5:6:7:8]/",S_OK,TRUE},
             {"[1:0:3:4:5:6:7:8]",S_OK,FALSE},
             {"http://[1:0:3:4:5:6:7:8]/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"1:0:3:4:5:6:7:8",S_OK,FALSE},
@@ -1369,7 +1369,7 @@ static const uri_properties uri_tests[] = {
             {"http://[v2.34]/",S_OK,TRUE},
             {"[v2.34]",S_OK,FALSE},
             {"http://[v2.34]/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"[v2.34]",S_OK,FALSE},
@@ -1399,7 +1399,7 @@ static const uri_properties uri_tests[] = {
             {"http://[xyz:12345.com/test",S_OK,TRUE},
             {"[xyz:12345.com",S_OK,FALSE},
             {"http://[xyz:12345.com/test",S_OK,TRUE},
-            {"[xyz:12345.com",S_OK,TRUE},
+            {"[xyz:12345.com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"[xyz:12345.com",S_OK,FALSE},
@@ -1431,7 +1431,7 @@ static const uri_properties uri_tests[] = {
             {"ftp://www.[works].com/",S_OK,TRUE},
             {"www.[works].com",S_OK,FALSE},
             {"ftp://www.[works].com/",S_OK,TRUE},
-            {"[works].com",S_OK,TRUE},
+            {"[works].com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"www.[works].com",S_OK,FALSE},
@@ -1461,7 +1461,7 @@ static const uri_properties uri_tests[] = {
             {"http://www.google.com]:12345/",S_OK,TRUE},
             {"www.google.com]:12345",S_OK,FALSE},
             {"http://www.google.com]:12345/",S_OK,TRUE},
-            {"google.com]",S_OK,TRUE},
+            {"google.com]",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"www.google.com]",S_OK,FALSE},
@@ -1491,7 +1491,7 @@ static const uri_properties uri_tests[] = {
             {"zip://w%XXw%GEw.google.com/",S_OK,TRUE},
             {"w%XXw%GEw.google.com",S_OK,FALSE},
             {"zip://w%XXw%GEw.google.com/",S_OK,TRUE},
-            {"google.com",S_OK,TRUE},
+            {"google.com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"w%XXw%GEw.google.com",S_OK,FALSE},
@@ -1521,7 +1521,7 @@ static const uri_properties uri_tests[] = {
             {"zip://GOOGLE.com/",S_OK,TRUE},
             {"GOOGLE.com",S_OK,FALSE},
             {"zip://GOOGLE.com/",S_OK,TRUE},
-            {"GOOGLE.com",S_OK,TRUE},
+            {"GOOGLE.com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"GOOGLE.com",S_OK,FALSE},
@@ -1551,7 +1551,7 @@ static const uri_properties uri_tests[] = {
             {"http://www.google.com/",S_OK,TRUE},
             {"www.google.com",S_OK,FALSE},
             {"http://www.google.com/",S_OK,TRUE},
-            {"google.com",S_OK,TRUE},
+            {"google.com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"www.google.com",S_OK,FALSE},
@@ -1583,7 +1583,7 @@ static const uri_properties uri_tests[] = {
             {"http://www.%7cgoogle%7c.com/",S_OK,TRUE},
             {"www.%7cgoogle%7c.com",S_OK,FALSE},
             {"http://www.%7cgoogle%7c.com/",S_OK,TRUE},
-            {"%7cgoogle%7c.com",S_OK,TRUE},
+            {"%7cgoogle%7c.com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"www.%7cgoogle%7c.com",S_OK,FALSE},
@@ -1613,7 +1613,7 @@ static const uri_properties uri_tests[] = {
             {"http://[1:2:3:4:5:6::]/",S_OK,TRUE},
             {"[1:2:3:4:5:6::]",S_OK,FALSE},
             {"http://[1:2:3:4:5:6::]/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"1:2:3:4:5:6::",S_OK,FALSE},
@@ -1643,7 +1643,7 @@ static const uri_properties uri_tests[] = {
             {"http://[::1.2.3.0]/",S_OK,TRUE},
             {"[::1.2.3.0]",S_OK,FALSE},
             {"http://[::1.2.3.0]/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"::1.2.3.0",S_OK,FALSE},
@@ -1673,7 +1673,7 @@ static const uri_properties uri_tests[] = {
             {"zip://[0001:0:000:0004:0005:0006:001.002.003.000]/",S_OK,TRUE},
             {"[0001:0:000:0004:0005:0006:001.002.003.000]",S_OK,FALSE},
             {"zip://[0001:0:000:0004:0005:0006:001.002.003.000]/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"0001:0:000:0004:0005:0006:001.002.003.000",S_OK,FALSE},
@@ -1703,7 +1703,7 @@ static const uri_properties uri_tests[] = {
             {"http://[ffff::c0de:6f20]/",S_OK,TRUE},
             {"[ffff::c0de:6f20]",S_OK,FALSE},
             {"http://[ffff::c0de:6f20]/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"ffff::c0de:6f20",S_OK,FALSE},
@@ -1733,7 +1733,7 @@ static const uri_properties uri_tests[] = {
             {"http://google.com:65535/",S_OK,TRUE},
             {"google.com:65535",S_OK,FALSE},
             {"http://google.com:65535/",S_OK,TRUE},
-            {"google.com",S_OK,TRUE},
+            {"google.com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"google.com",S_OK,FALSE},
@@ -1762,7 +1762,7 @@ static const uri_properties uri_tests[] = {
             {"zip://google.com:65536/",S_OK,TRUE},
             {"google.com:65536",S_OK,FALSE},
             {"zip://google.com:65536/",S_OK,TRUE},
-            {"google.com:65536",S_OK,TRUE},
+            {"google.com:65536",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"google.com:65536",S_OK,FALSE},
@@ -1791,7 +1791,7 @@ static const uri_properties uri_tests[] = {
             {"zip://google.com:65536:25/",S_OK,TRUE},
             {"google.com:65536:25",S_OK,FALSE},
             {"zip://google.com:65536:25/",S_OK,TRUE},
-            {"google.com:65536:25",S_OK,TRUE},
+            {"google.com:65536:25",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"google.com:65536:25",S_OK,FALSE},
@@ -1820,7 +1820,7 @@ static const uri_properties uri_tests[] = {
             {"zip://[::ffff]:abcd/",S_OK,TRUE},
             {"[::ffff]:abcd",S_OK,FALSE},
             {"zip://[::ffff]:abcd/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"[::ffff]:abcd",S_OK,FALSE},
@@ -1849,7 +1849,7 @@ static const uri_properties uri_tests[] = {
             {"zip://127.0.0.1:abcd/",S_OK,TRUE},
             {"127.0.0.1:abcd",S_OK,FALSE},
             {"zip://127.0.0.1:abcd/",S_OK,TRUE},
-            {"0.1:abcd",S_OK,TRUE},
+            {"0.1:abcd",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"127.0.0.1:abcd",S_OK,FALSE},
@@ -1878,7 +1878,7 @@ static const uri_properties uri_tests[] = {
             {"http://google.com:00035",S_OK,TRUE},
             {"google.com:00035",S_OK,FALSE},
             {"http://google.com:00035",S_OK,TRUE,"http://google.com:35"},
-            {"google.com",S_OK,TRUE},
+            {"google.com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"google.com",S_OK,FALSE},
@@ -1907,7 +1907,7 @@ static const uri_properties uri_tests[] = {
             {"http://google.com:80",S_OK,TRUE},
             {"google.com:80",S_OK,FALSE},
             {"http://google.com:80",S_OK,TRUE},
-            {"google.com",S_OK,TRUE},
+            {"google.com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"google.com",S_OK,FALSE},
@@ -1936,7 +1936,7 @@ static const uri_properties uri_tests[] = {
             {"http://google.com.uk/",S_OK,TRUE},
             {"google.com.uk",S_OK,FALSE},
             {"http://google.com.uk/",S_OK,TRUE},
-            {"google.com.uk",S_OK,TRUE},
+            {"google.com.uk",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"google.com.uk",S_OK,FALSE},
@@ -1965,7 +1965,7 @@ static const uri_properties uri_tests[] = {
             {"http://google.com.com/",S_OK,TRUE},
             {"google.com.com",S_OK,FALSE},
             {"http://google.com.com/",S_OK,TRUE},
-            {"com.com",S_OK,TRUE},
+            {"com.com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"google.com.com",S_OK,FALSE},
@@ -1994,7 +1994,7 @@ static const uri_properties uri_tests[] = {
             {"http://google.uk.1/",S_OK,TRUE},
             {"google.uk.1",S_OK,FALSE},
             {"http://google.uk.1/",S_OK,TRUE},
-            {"google.uk.1",S_OK,TRUE},
+            {"google.uk.1",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"google.uk.1",S_OK,FALSE},
@@ -2024,7 +2024,7 @@ static const uri_properties uri_tests[] = {
             {"http://google.foo.uk/",S_OK,TRUE},
             {"google.foo.uk",S_OK,FALSE},
             {"http://google.foo.uk/",S_OK,TRUE},
-            {"foo.uk",S_OK,TRUE},
+            {"foo.uk",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"google.foo.uk",S_OK,FALSE},
@@ -2053,7 +2053,7 @@ static const uri_properties uri_tests[] = {
             {"http://.com/",S_OK,TRUE},
             {".com",S_OK,FALSE},
             {"http://.com/",S_OK,TRUE},
-            {".com",S_OK,TRUE},
+            {".com",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {".com",S_OK,FALSE},
@@ -2082,7 +2082,7 @@ static const uri_properties uri_tests[] = {
             {"http://.uk/",S_OK,TRUE},
             {".uk",S_OK,FALSE},
             {"http://.uk/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {".uk",S_OK,FALSE},
@@ -2111,7 +2111,7 @@ static const uri_properties uri_tests[] = {
             {"http://www.co.google.com.[]/",S_OK,TRUE},
             {"www.co.google.com.[]",S_OK,FALSE},
             {"http://www.co.google.com.[]/",S_OK,TRUE},
-            {"google.com.[]",S_OK,TRUE},
+            {"google.com.[]",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"www.co.google.com.[]",S_OK,FALSE},
@@ -2140,7 +2140,7 @@ static const uri_properties uri_tests[] = {
             {"http://co.uk/",S_OK,TRUE},
             {"co.uk",S_OK,FALSE},
             {"http://co.uk/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"co.uk",S_OK,FALSE},
@@ -2169,7 +2169,7 @@ static const uri_properties uri_tests[] = {
             {"http://www.co.google.us.test/",S_OK,TRUE},
             {"www.co.google.us.test",S_OK,FALSE},
             {"http://www.co.google.us.test/",S_OK,TRUE},
-            {"us.test",S_OK,TRUE},
+            {"us.test",S_OK,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"www.co.google.us.test",S_OK,FALSE},
@@ -2198,7 +2198,7 @@ static const uri_properties uri_tests[] = {
             {"http://gov.uk/",S_OK,TRUE},
             {"gov.uk",S_OK,FALSE},
             {"http://gov.uk/",S_OK,TRUE},
-            {"",S_FALSE,TRUE},
+            {"",S_FALSE,FALSE},
             {"",S_FALSE,TRUE},
             {"",S_FALSE,TRUE},
             {"gov.uk",S_OK,FALSE},
@@ -2678,27 +2678,6 @@ static void test_IUri_GetStrProperties(void) {
             SysFreeString(received);
             received = NULL;
 
-            /* GetDomain() tests. */
-            prop = test.str_props[Uri_PROPERTY_DOMAIN];
-            hr = IUri_GetDomain(uri, &received);
-            if(prop.todo) {
-                todo_wine {
-                    ok(hr == prop.expected, "Error: GetDomain returned 0x%08x, expected 0x%08x on uri_tests[%d].\n",
-                            hr, prop.expected, i);
-                }
-                todo_wine {
-                    ok(!strcmp_aw(prop.value, received), "Error: Expected %s but got %s on uri_tests[%d].\n",
-                            prop.value, wine_dbgstr_w(received), i);
-                }
-            } else {
-                ok(hr == prop.expected, "Error: GetDomain returned 0x%08x, expected 0x%08x on uri_tests[%d].\n",
-                        hr, prop.expected, i);
-                ok(!strcmp_aw(prop.value, received), "Error: Expected %s but got %s on uri_tests[%d].\n",
-                        prop.value, wine_dbgstr_w(received), i);
-            }
-            SysFreeString(received);
-            received = NULL;
-
             /* GetExtension() tests. */
             prop = test.str_props[Uri_PROPERTY_EXTENSION];
             hr = IUri_GetExtension(uri, &received);
@@ -2784,6 +2763,27 @@ static void test_IUri_GetStrProperties(void) {
             SysFreeString(received);
             received = NULL;
 
+            /* GetDomain() tests. */
+            prop = test.str_props[Uri_PROPERTY_DOMAIN];
+            hr = IUri_GetDomain(uri, &received);
+            if(prop.todo) {
+                todo_wine {
+                    ok(hr == prop.expected, "Error: GetDomain returned 0x%08x, expected 0x%08x on uri_tests[%d].\n",
+                            hr, prop.expected, i);
+                }
+                todo_wine {
+                    ok(!strcmp_aw(prop.value, received), "Error: Expected %s but got %s on uri_tests[%d].\n",
+                            prop.value, wine_dbgstr_w(received), i);
+                }
+            } else {
+                ok(hr == prop.expected, "Error: GetDomain returned 0x%08x, expected 0x%08x on uri_tests[%d].\n",
+                        hr, prop.expected, i);
+                ok(!strcmp_aw(prop.value, received), "Error: Expected %s but got %s on uri_tests[%d].\n",
+                        prop.value, wine_dbgstr_w(received), i);
+            }
+            SysFreeString(received);
+            received = NULL;
+
             /* GetHost() tests. */
             prop = test.str_props[Uri_PROPERTY_HOST];
             hr = IUri_GetHost(uri, &received);
diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c
index fc9ebfe899d..20d8bb18636 100644
--- a/dlls/urlmon/uri.c
+++ b/dlls/urlmon/uri.c
@@ -351,8 +351,8 @@ static const WCHAR *str_last_of(const WCHAR *str, const WCHAR *end, WCHAR ch) {
  * a valid domain name it will assign 'domain_start' the offset
  * into 'host' where the domain name starts.
  *
- * It's implied that if a domain name is found that it goes
- * from [host+domain_start, host+host_len).
+ * It's implied that if a domain name its range is implied to be
+ * [host+domain_start, host+host_len).
  */
 static void find_domain_name(const WCHAR *host, DWORD host_len,
                              INT *domain_start) {
@@ -2023,6 +2023,7 @@ static BOOL canonicalize_ipv6address(const parse_data *data, Uri *uri,
 static BOOL canonicalize_host(const parse_data *data, Uri *uri, DWORD flags, BOOL computeOnly) {
     uri->host_start = -1;
     uri->host_len = 0;
+    uri->domain_offset = -1;
 
     if(data->host) {
         switch(data->host_type) {
@@ -2189,6 +2190,7 @@ static BOOL canonicalize_hierpart(const parse_data *data, Uri *uri, DWORD flags,
         uri->has_port = FALSE;
         uri->authority_start = -1;
         uri->authority_len = 0;
+        uri->domain_offset = -1;
     }
 
     return TRUE;
@@ -2397,6 +2399,20 @@ static HRESULT WINAPI Uri_GetPropertyBSTR(IUri *iface, Uri_PROPERTY uriProp, BST
             hres = S_FALSE;
         }
 
+        if(!(*pbstrProperty))
+            hres = E_OUTOFMEMORY;
+
+        break;
+    case Uri_PROPERTY_DOMAIN:
+        if(This->domain_offset > -1) {
+            *pbstrProperty = SysAllocStringLen(This->canon_uri+This->host_start+This->domain_offset,
+                                               This->host_len-This->domain_offset);
+            hres = S_OK;
+        } else {
+            *pbstrProperty = SysAllocStringLen(NULL, 0);
+            hres = S_FALSE;
+        }
+
         if(!(*pbstrProperty))
             hres = E_OUTOFMEMORY;
 
@@ -2520,6 +2536,14 @@ static HRESULT WINAPI Uri_GetPropertyLength(IUri *iface, Uri_PROPERTY uriProp, D
         *pcchProperty = This->authority_len;
         hres = (This->authority_start > -1) ? S_OK : S_FALSE;
         break;
+    case Uri_PROPERTY_DOMAIN:
+        if(This->domain_offset > -1)
+            *pcchProperty = This->host_len - This->domain_offset;
+        else
+            *pcchProperty = 0;
+
+        hres = (This->domain_offset > -1) ? S_OK : S_FALSE;
+        break;
     case Uri_PROPERTY_HOST:
         *pcchProperty = This->host_len;
 
@@ -2650,13 +2674,8 @@ static HRESULT WINAPI Uri_GetDisplayUri(IUri *iface, BSTR *pstrDisplayUri)
 
 static HRESULT WINAPI Uri_GetDomain(IUri *iface, BSTR *pstrDomain)
 {
-    Uri *This = URI_THIS(iface);
-    FIXME("(%p)->(%p)\n", This, pstrDomain);
-
-    if(!pstrDomain)
-        return E_POINTER;
-
-    return E_NOTIMPL;
+    TRACE("(%p)->(%p)\n", iface, pstrDomain);
+    return Uri_GetPropertyBSTR(iface, Uri_PROPERTY_DOMAIN, pstrDomain, 0);
 }
 
 static HRESULT WINAPI Uri_GetExtension(IUri *iface, BSTR *pstrExtension)
-- 
GitLab