Commit 019a1af7 authored by Piotr Caban's avatar Piotr Caban Committed by Alexandre Julliard

mshtml: Added IOmHistory::get_length implementation.

parent 47c6310e
......@@ -264,8 +264,12 @@ static void release_inner_window(HTMLInnerWindow *This)
if(This->screen)
IHTMLScreen_Release(This->screen);
if(This->history)
IOmHistory_Release(This->history);
if(This->history) {
This->history->window = NULL;
IOmHistory_Release(&This->history->IOmHistory_iface);
}
if(This->mon)
IMoniker_Release(This->mon);
......@@ -763,13 +767,13 @@ static HRESULT WINAPI HTMLWindow2_get_history(IHTMLWindow2 *iface, IOmHistory **
if(!window->history) {
HRESULT hres;
hres = create_history(&window->history);
hres = create_history(window, &window->history);
if(FAILED(hres))
return hres;
}
IOmHistory_AddRef(window->history);
*p = window->history;
IOmHistory_AddRef(&window->history->IOmHistory_iface);
*p = &window->history->IOmHistory_iface;
return S_OK;
}
......
......@@ -28,6 +28,7 @@
#include "objsafe.h"
#include "htiframe.h"
#include "tlogstg.h"
#include "shdeprecated.h"
#include "wine/list.h"
#include "wine/unicode.h"
......@@ -339,6 +340,15 @@ struct HTMLLocation {
};
typedef struct {
DispatchEx dispex;
IOmHistory IOmHistory_iface;
LONG ref;
HTMLInnerWindow *window;
} OmHistory;
typedef struct {
HTMLOuterWindow *window;
LONG ref;
} windowref_t;
......@@ -403,7 +413,7 @@ struct HTMLInnerWindow {
HTMLImageElementFactory *image_factory;
HTMLOptionElementFactory *option_factory;
IHTMLScreen *screen;
IOmHistory *history;
OmHistory *history;
IHTMLStorage *session_storage;
unsigned parser_callback_cnt;
......@@ -545,6 +555,8 @@ struct HTMLDocumentObj {
IAdviseSink *view_sink;
IDocObjectService *doc_object_service;
IUnknown *webbrowser;
ITravelLog *travel_log;
IUnknown *browser_service;
DOCHOSTUIINFO hostinfo;
......@@ -738,7 +750,7 @@ HRESULT HTMLImageElementFactory_Create(HTMLInnerWindow*,HTMLImageElementFactory*
HRESULT HTMLLocation_Create(HTMLInnerWindow*,HTMLLocation**) DECLSPEC_HIDDEN;
IOmNavigator *OmNavigator_Create(void) DECLSPEC_HIDDEN;
HRESULT HTMLScreen_Create(IHTMLScreen**) DECLSPEC_HIDDEN;
HRESULT create_history(IOmHistory**) DECLSPEC_HIDDEN;
HRESULT create_history(HTMLInnerWindow*,OmHistory**) DECLSPEC_HIDDEN;
HRESULT create_storage(IHTMLStorage**) DECLSPEC_HIDDEN;
......
......@@ -215,6 +215,7 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite
HTMLDocument *This = impl_from_IOleObject(iface);
IOleCommandTarget *cmdtrg = NULL;
IOleWindow *ole_window;
IBrowserService *browser_service;
BOOL hostui_setup;
VARIANT silent;
HWND hwnd;
......@@ -251,6 +252,16 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite
This->doc_obj->webbrowser = NULL;
}
if(This->doc_obj->browser_service) {
IUnknown_Release(This->doc_obj->browser_service);
This->doc_obj->browser_service = NULL;
}
if(This->doc_obj->travel_log) {
ITravelLog_Release(This->doc_obj->travel_log);
This->doc_obj->travel_log = NULL;
}
memset(&This->doc_obj->hostinfo, 0, sizeof(DOCHOSTUIINFO));
if(!pClientSite)
......@@ -323,6 +334,20 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite
IOleWindow_Release(ole_window);
}
hres = do_query_service((IUnknown*)pClientSite, &IID_IShellBrowser,
&IID_IBrowserService, (void**)&browser_service);
if(SUCCEEDED(hres)) {
ITravelLog *travel_log;
This->doc_obj->browser_service = (IUnknown*)browser_service;
hres = IBrowserService_GetTravelLog(browser_service, &travel_log);
if(SUCCEEDED(hres))
This->doc_obj->travel_log = travel_log;
}else {
browser_service = NULL;
}
hres = IOleClientSite_QueryInterface(pClientSite, &IID_IOleCommandTarget, (void**)&cmdtrg);
if(SUCCEEDED(hres)) {
VARIANT var;
......@@ -332,16 +357,13 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite
if(!hostui_setup) {
IDocObjectService *doc_object_service;
IBrowserService *browser_service;
IWebBrowser2 *wb;
V_VT(&var) = VT_UNKNOWN;
V_UNKNOWN(&var) = (IUnknown*)&This->window->base.IHTMLWindow2_iface;
IOleCommandTarget_Exec(cmdtrg, &CGID_DocHostCmdPriv, DOCHOST_DOCCANNAVIGATE, 0, &var, NULL);
hres = do_query_service((IUnknown*)pClientSite, &IID_IShellBrowser,
&IID_IBrowserService, (void**)&browser_service);
if(SUCCEEDED(hres)) {
if(browser_service) {
hres = IBrowserService_QueryInterface(browser_service,
&IID_IDocObjectService, (void**)&doc_object_service);
if(SUCCEEDED(hres)) {
......@@ -354,7 +376,6 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite
hres = do_query_service((IUnknown*)pClientSite, &IID_IWebBrowserApp, &IID_IWebBrowser2, (void**)&wb);
if(SUCCEEDED(hres))
This->doc_obj->webbrowser = (IUnknown*)wb;
IBrowserService_Release(browser_service);
}
}
}
......
......@@ -44,13 +44,6 @@ typedef struct {
HTMLMimeTypesCollection *mime_types;
} OmNavigator;
typedef struct {
DispatchEx dispex;
IOmHistory IOmHistory_iface;
LONG ref;
} OmHistory;
static inline OmHistory *impl_from_IOmHistory(IOmHistory *iface)
{
return CONTAINING_RECORD(iface, OmHistory, IOmHistory_iface);
......@@ -142,8 +135,17 @@ static HRESULT WINAPI OmHistory_Invoke(IOmHistory *iface, DISPID dispIdMember, R
static HRESULT WINAPI OmHistory_get_length(IOmHistory *iface, short *p)
{
OmHistory *This = impl_from_IOmHistory(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
TRACE("(%p)->(%p)\n", This, p);
if(!This->window || !This->window->base.outer_window->doc_obj
|| !This->window->base.outer_window->doc_obj->travel_log) {
*p = 0;
}else {
*p = ITravelLog_CountEntries(This->window->base.outer_window->doc_obj->travel_log,
This->window->base.outer_window->doc_obj->browser_service);
}
return S_OK;
}
static HRESULT WINAPI OmHistory_back(IOmHistory *iface, VARIANT *pvargdistance)
......@@ -193,7 +195,7 @@ static dispex_static_data_t OmHistory_dispex = {
};
HRESULT create_history(IOmHistory **ret)
HRESULT create_history(HTMLInnerWindow *window, OmHistory **ret)
{
OmHistory *history;
......@@ -205,7 +207,9 @@ HRESULT create_history(IOmHistory **ret)
history->IOmHistory_iface.lpVtbl = &OmHistoryVtbl;
history->ref = 1;
*ret = &history->IOmHistory_iface;
history->window = window;
*ret = history;
return S_OK;
}
......
......@@ -5291,7 +5291,7 @@ static void test_Load(IPersistMoniker *persist, IMoniker *mon)
CHECK_CALLED(Exec_ShellDocView_37);
todo_wine CHECK_CALLED_BROKEN(IsErrorUrl);
}else {
todo_wine CHECK_CALLED(GetTravelLog);
CHECK_CALLED(GetTravelLog);
}
CHECK_CALLED_BROKEN(Exec_ShellDocView_84);
todo_wine CHECK_CALLED(GetPendingUrl);
......@@ -6377,7 +6377,7 @@ static void test_ClientSite(IOleObject *oleobj, DWORD flags)
CHECK_CALLED(Invoke_AMBIENT_USERAGENT);
CLEAR_CALLED(Invoke_AMBIENT_PALETTE); /* not called on IE9 */
CLEAR_CALLED(GetOverrideKeyPath); /* Called by IE9 */
todo_wine CHECK_CALLED(GetTravelLog);
CHECK_CALLED(GetTravelLog);
CHECK_CALLED_BROKEN(Exec_ShellDocView_84);
set_clientsite = TRUE;
......@@ -7706,7 +7706,7 @@ static void test_UIActivate(BOOL do_load, BOOL use_ipsex, BOOL use_ipsw)
CHECK_CALLED(QueryStatus_SETPROGRESSTEXT);
CHECK_CALLED(Exec_SETPROGRESSMAX);
CHECK_CALLED(Exec_SETPROGRESSPOS);
todo_wine CHECK_CALLED(GetTravelLog);
CHECK_CALLED(GetTravelLog);
CHECK_CALLED_BROKEN(Exec_ShellDocView_84);
hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment