ieframe: Strip 'file://' from file URLs in BEFORENAVIGATE2 callbacks.
This commit is contained in:
parent
136b738b50
commit
8eb70459a1
|
@ -566,6 +566,8 @@ static void on_before_navigate2(DocHost *This, LPCWSTR url, SAFEARRAY *post_data
|
||||||
VARIANT var_url, var_flags, var_frame_name, var_post_data, var_post_data2, var_headers;
|
VARIANT var_url, var_flags, var_frame_name, var_post_data, var_post_data2, var_headers;
|
||||||
DISPPARAMS dispparams;
|
DISPPARAMS dispparams;
|
||||||
VARIANTARG params[7];
|
VARIANTARG params[7];
|
||||||
|
WCHAR file_path[MAX_PATH];
|
||||||
|
DWORD file_path_len = sizeof(file_path) / sizeof(*file_path);
|
||||||
|
|
||||||
dispparams.cArgs = 7;
|
dispparams.cArgs = 7;
|
||||||
dispparams.cNamedArgs = 0;
|
dispparams.cNamedArgs = 0;
|
||||||
|
@ -607,7 +609,10 @@ static void on_before_navigate2(DocHost *This, LPCWSTR url, SAFEARRAY *post_data
|
||||||
V_VT(params+5) = (VT_BYREF|VT_VARIANT);
|
V_VT(params+5) = (VT_BYREF|VT_VARIANT);
|
||||||
V_VARIANTREF(params+5) = &var_url;
|
V_VARIANTREF(params+5) = &var_url;
|
||||||
V_VT(&var_url) = VT_BSTR;
|
V_VT(&var_url) = VT_BSTR;
|
||||||
V_BSTR(&var_url) = SysAllocString(url);
|
if(PathCreateFromUrlW(url, file_path, &file_path_len, 0) == S_OK)
|
||||||
|
V_BSTR(&var_url) = SysAllocString(file_path);
|
||||||
|
else
|
||||||
|
V_BSTR(&var_url) = SysAllocString(url);
|
||||||
|
|
||||||
V_VT(params+6) = (VT_DISPATCH);
|
V_VT(params+6) = (VT_DISPATCH);
|
||||||
V_DISPATCH(params+6) = (IDispatch*)This->wb;
|
V_DISPATCH(params+6) = (IDispatch*)This->wb;
|
||||||
|
|
|
@ -2542,6 +2542,7 @@ static void test_ConnectionPoint(IWebBrowser2 *unk, BOOL init)
|
||||||
static void test_Navigate2(IWebBrowser2 *webbrowser, const char *nav_url)
|
static void test_Navigate2(IWebBrowser2 *webbrowser, const char *nav_url)
|
||||||
{
|
{
|
||||||
VARIANT url;
|
VARIANT url;
|
||||||
|
BOOL is_file;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
test_LocationURL(webbrowser, is_first_load ? "" : current_url);
|
test_LocationURL(webbrowser, is_first_load ? "" : current_url);
|
||||||
|
@ -2551,6 +2552,9 @@ static void test_Navigate2(IWebBrowser2 *webbrowser, const char *nav_url)
|
||||||
V_VT(&url) = VT_BSTR;
|
V_VT(&url) = VT_BSTR;
|
||||||
V_BSTR(&url) = a2bstr(current_url = nav_url);
|
V_BSTR(&url) = a2bstr(current_url = nav_url);
|
||||||
|
|
||||||
|
if((is_file = !strncasecmp(nav_url, "file://", 7)))
|
||||||
|
current_url = nav_url + 7;
|
||||||
|
|
||||||
if(is_first_load) {
|
if(is_first_load) {
|
||||||
SET_EXPECT(Invoke_AMBIENT_USERMODE);
|
SET_EXPECT(Invoke_AMBIENT_USERMODE);
|
||||||
SET_EXPECT(Invoke_PROPERTYCHANGE);
|
SET_EXPECT(Invoke_PROPERTYCHANGE);
|
||||||
|
@ -2578,6 +2582,7 @@ static void test_Navigate2(IWebBrowser2 *webbrowser, const char *nav_url)
|
||||||
SET_EXPECT(Invoke_COMMANDSTATECHANGE);
|
SET_EXPECT(Invoke_COMMANDSTATECHANGE);
|
||||||
SET_EXPECT(EnableModeless_TRUE);
|
SET_EXPECT(EnableModeless_TRUE);
|
||||||
if (!use_container_olecmd) SET_EXPECT(Invoke_DOWNLOADCOMPLETE);
|
if (!use_container_olecmd) SET_EXPECT(Invoke_DOWNLOADCOMPLETE);
|
||||||
|
if (is_file) SET_EXPECT(Invoke_PROGRESSCHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
hres = IWebBrowser2_Navigate2(webbrowser, &url, NULL, NULL, NULL, NULL);
|
hres = IWebBrowser2_Navigate2(webbrowser, &url, NULL, NULL, NULL, NULL);
|
||||||
|
@ -2609,6 +2614,7 @@ static void test_Navigate2(IWebBrowser2 *webbrowser, const char *nav_url)
|
||||||
todo_wine CHECK_CALLED(Invoke_COMMANDSTATECHANGE);
|
todo_wine CHECK_CALLED(Invoke_COMMANDSTATECHANGE);
|
||||||
if (use_container_olecmd) todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_0);
|
if (use_container_olecmd) todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_0);
|
||||||
CHECK_CALLED(EnableModeless_TRUE);
|
CHECK_CALLED(EnableModeless_TRUE);
|
||||||
|
if (is_file) todo_wine CHECK_CALLED(Invoke_PROGRESSCHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
VariantClear(&url);
|
VariantClear(&url);
|
||||||
|
@ -3511,6 +3517,48 @@ static BOOL is_ie_hardened(void)
|
||||||
return ie_harden != 0;
|
return ie_harden != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_FileProtocol(void)
|
||||||
|
{
|
||||||
|
IWebBrowser2 *webbrowser;
|
||||||
|
HANDLE file;
|
||||||
|
ULONG ref;
|
||||||
|
char file_path[MAX_PATH];
|
||||||
|
char file_url[MAX_PATH] = "File://";
|
||||||
|
|
||||||
|
static const char test_file[] = "wine_test.html";
|
||||||
|
|
||||||
|
GetTempPathA(MAX_PATH, file_path);
|
||||||
|
strcat(file_path, test_file);
|
||||||
|
GetLongPathNameA(file_path, file_path, sizeof(file_path));
|
||||||
|
strcat(file_url, file_path);
|
||||||
|
|
||||||
|
webbrowser = create_webbrowser();
|
||||||
|
if(!webbrowser)
|
||||||
|
return;
|
||||||
|
|
||||||
|
init_test(webbrowser, 0);
|
||||||
|
|
||||||
|
file = CreateFileA(file_path, GENERIC_WRITE, 0, NULL,
|
||||||
|
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
|
if(file == INVALID_HANDLE_VALUE && GetLastError() != ERROR_FILE_EXISTS){
|
||||||
|
ok(0, "CreateFile failed\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
CloseHandle(file);
|
||||||
|
|
||||||
|
test_ConnectionPoint(webbrowser, TRUE);
|
||||||
|
test_ClientSite(webbrowser, &ClientSite, TRUE);
|
||||||
|
test_DoVerb(webbrowser);
|
||||||
|
test_Navigate2(webbrowser, file_url);
|
||||||
|
test_ClientSite(webbrowser, NULL, TRUE);
|
||||||
|
|
||||||
|
ref = IWebBrowser2_Release(webbrowser);
|
||||||
|
ok(ref == 0, "ref=%u, expected 0\n", ref);
|
||||||
|
|
||||||
|
if(file != INVALID_HANDLE_VALUE)
|
||||||
|
DeleteFileA(file_path);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(webbrowser)
|
START_TEST(webbrowser)
|
||||||
{
|
{
|
||||||
OleInitialize(NULL);
|
OleInitialize(NULL);
|
||||||
|
@ -3536,6 +3584,7 @@ START_TEST(webbrowser)
|
||||||
test_WebBrowser_slim_container();
|
test_WebBrowser_slim_container();
|
||||||
trace("Testing WebBrowserV1...\n");
|
trace("Testing WebBrowserV1...\n");
|
||||||
test_WebBrowserV1();
|
test_WebBrowserV1();
|
||||||
|
test_FileProtocol();
|
||||||
|
|
||||||
OleUninitialize();
|
OleUninitialize();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue