#ifndef WEBDRIVER_IE_DOCUMENTHOST_H_
#define WEBDRIVER_IE_DOCUMENTHOST_H_
#include <map>
#include <memory>
#include <string>
#include "LocationInfo.h"
namespace webdriver {
class BrowserCookie;
class CookieManager;
class DocumentHost {
public:
DocumentHost(HWND hwnd, HWND executor_handle);
virtual ~DocumentHost(void);
virtual void GetDocument(const bool force_top_level_document,
IHTMLDocument2** doc) = 0;
virtual void GetDocument(IHTMLDocument2** doc) = 0;
virtual void Close(void) = 0;
virtual bool Wait(const std::string& page_load_strategy) = 0;
virtual bool IsBusy(void) = 0;
virtual HWND GetContentWindowHandle(void) = 0;
virtual HWND GetBrowserWindowHandle(void) = 0;
virtual std::string GetWindowName(void) = 0;
virtual std::string GetTitle(void) = 0;
virtual std::string GetBrowserUrl(void) = 0;
virtual HWND GetActiveDialogWindowHandle(void) = 0;
virtual HWND GetTopLevelWindowHandle(void) = 0;
virtual long GetWidth(void) = 0;
virtual long GetHeight(void) = 0;
virtual void SetWidth(long width) = 0;
virtual void SetHeight(long height) = 0;
virtual int NavigateToUrl(const std::string& url,
std::string* error_message) = 0;
virtual int NavigateBack(void) = 0;
virtual int NavigateForward(void) = 0;
virtual int Refresh(void) = 0;
virtual bool IsValidWindow(void) = 0;
virtual bool IsFullScreen(void) = 0;
virtual bool SetFullScreen(bool is_full_screen) = 0;
void Restore(void);
virtual bool IsProtectedMode(void);
virtual bool IsCrossZoneUrl(std::string url);
virtual void InitiateBrowserReattach(void) = 0;
virtual void ReattachBrowser(IWebBrowser2* browser) = 0;
virtual IWebBrowser2* browser(void) = 0;
std::string GetCurrentUrl(void);
std::string GetPageSource(void);
static int GetDocumentMode(IHTMLDocument2* doc);
static bool IsStandardsMode(IHTMLDocument2* doc);
static bool GetDocumentDimensions(IHTMLDocument2* doc, LocationInfo* info);
int SetFocusedFrameByIndex(const int frame_index);
int SetFocusedFrameByName(const std::string& frame_name);
int SetFocusedFrameByElement(IHTMLElement* frame_element);
void SetFocusedFrameToParent(void);
bool SetFocusToBrowser(void);
bool is_edge_chromium(void) const { return this->is_edge_chromium_; }
void set_is_edge_chromium(const bool value) { this->is_edge_chromium_ = value; }
bool wait_required(void) const { return this->wait_required_; }
void set_wait_required(const bool value) { this->wait_required_ = value; }
bool script_wait_required(void) const { return this->script_wait_required_; }
void set_script_wait_required(const bool value) { this->script_wait_required_ = value; }
HWND script_executor_handle(void) const { return this->script_executor_handle_; }
void set_script_executor_handle(HWND value) { this->script_executor_handle_ = value; }
bool is_closing(void) const { return this->is_closing_; }
bool is_awaiting_new_process(void) const { return this->is_awaiting_new_process_; }
std::string browser_id(void) const { return this->browser_id_; }
HWND window_handle(void) const { return this->window_handle_; }
CookieManager* cookie_manager(void) { return this->cookie_manager_; }
protected:
void PostQuitMessage(void);
HWND FindContentWindowHandle(HWND top_level_window_handle);
void set_window_handle(const HWND window_handle) {
this->window_handle_ = window_handle;
}
HWND executor_handle(void) const { return this->executor_handle_; }
void set_is_closing(const bool value) { this->is_closing_ = value; }
void set_is_awaiting_new_process(const bool value) {
this->is_awaiting_new_process_ = value;
}
IHTMLWindow2* focused_frame_window(void) {
return this->focused_frame_window_;
}
private:
int SetFocusedFrameByIdentifier(VARIANT frame_identifier);
CookieManager* cookie_manager_;
CComPtr<IHTMLWindow2> focused_frame_window_;
HWND window_handle_;
HWND executor_handle_;
HWND script_executor_handle_;
std::string browser_id_;
bool wait_required_;
bool script_wait_required_;
bool is_closing_;
bool is_awaiting_new_process_;
bool is_edge_chromium_;
};
}
#endif