123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385 |
- #include <precomp.h>
- #include "xuibrowser.h"
- const wchar_t browserXuiObjectStr[] = L"Browser"; // This is the xml tag
- char browserXuiSvcName[] = "Browser xui object"; // this is the name of the xuiservice
- XMLParamPair ScriptBrowserWnd::params[] = {
- {BROWSER_SETMAINMB, L"MAINMB"},
- {BROWSER_SETSCROLLBARS, L"SCROLLBARS"},
- {BROWSER_SETTARGETNAME, L"TARGETNAME"},
- {BROWSER_SETURL, L"URL"},
- };
- ScriptBrowserWnd::ScriptBrowserWnd()
- {
- getScriptObject()->vcpu_setInterface(browserGuid, (void *)static_cast<ScriptBrowserWnd *>(this));
- getScriptObject()->vcpu_setClassName(L"Browser"); // this is the script class name
- getScriptObject()->vcpu_setController(browserController);
- myxuihandle = newXuiHandle();
- CreateXMLParameters(myxuihandle);
- }
- void ScriptBrowserWnd::CreateXMLParameters(int master_handle)
- {
- //SCRIPTBROWSERWND_PARENT::CreateXMLParameters(master_handle);
- int numParams = sizeof(params) / sizeof(params[0]);
- hintNumberOfParams(myxuihandle, numParams);
- for (int i = 0;i < numParams;i++)
- addParam(myxuihandle, params[i], XUI_ATTRIBUTE_IMPLIED);
- }
- ScriptBrowserWnd::~ScriptBrowserWnd()
- {
- if (WASABI_API_MAKI->maki_getObjectAtom(MAIN_BROWSER_ATOM_NAME) == getScriptObject())
- WASABI_API_MAKI->maki_setObjectAtom(MAIN_BROWSER_ATOM_NAME, NULL);
- }
- int ScriptBrowserWnd::setXuiParam(int xuihandle, int xmlattributeid, const wchar_t *xmlattributename, const wchar_t *value)
- {
- if (xuihandle != myxuihandle)
- return SCRIPTBROWSERWND_PARENT::setXuiParam(xuihandle, xmlattributeid, xmlattributename, value);
- switch (xmlattributeid)
- {
- case BROWSER_SETURL:
- setUrl(value);
- break;
- case BROWSER_SETMAINMB:
- setMainMB(WTOI(value));
- break;
- case BROWSER_SETTARGETNAME:
- setTargetName(value);
- break;
- case BROWSER_SETSCROLLBARS:
- setScrollbarsFlag(translateScrollbarFlag(value));
- break;
- default:
- return 0;
- }
- return 1;
- }
- int ScriptBrowserWnd::translateScrollbarFlag(const wchar_t *scrollbarflag)
- {
- if (WCSCASEEQLSAFE(scrollbarflag, L"auto")) return MiniBrowser::BROWSER_SCROLLBARS_AUTO;
- if (WCSCASEEQLSAFE(scrollbarflag, L"never")) return MiniBrowser::BROWSER_SCROLLBARS_NEVER;
- if (WCSCASEEQLSAFE(scrollbarflag, L"always")) return MiniBrowser::BROWSER_SCROLLBARS_ALWAYS;
- if (WCSCASEEQLSAFE(scrollbarflag, L"default")) return MiniBrowser::BROWSER_SCROLLBARS_DEFAULT; // as specified by HTML content
- return MiniBrowser::BROWSER_SCROLLBARS_AUTO;
- }
- void ScriptBrowserWnd::onSetVisible(int v)
- {
- SCRIPTBROWSERWND_PARENT::onSetVisible(v);
- if (v && !defurl.isempty() && _wcsicmp(defurl, getCurrentUrl() ? getCurrentUrl() : L""))
- navigateUrl(defurl);
- }
- void ScriptBrowserWnd::setMainMB(int m)
- {
- if (m)
- WASABI_API_MAKI->maki_setObjectAtom(MAIN_BROWSER_ATOM_NAME, getScriptObject());
- else
- if (WASABI_API_MAKI->maki_getObjectAtom(MAIN_BROWSER_ATOM_NAME) == getScriptObject())
- WASABI_API_MAKI->maki_setObjectAtom(MAIN_BROWSER_ATOM_NAME, NULL);
- }
- void ScriptBrowserWnd::setUrl(const wchar_t *url)
- {
- defurl = url;
- if (isVisible())
- {
- if (!defurl.isempty())
- navigateUrl(defurl);
- }
- }
- void ScriptBrowserWnd::setCancelIEErrorPage(bool cancel)
- {
- MiniBrowser *browser = getBrowser();
- if (browser) browser->minibrowser_setCancelIEErrorPage(cancel);
- }
- void ScriptBrowserWnd::Scrape()
- {
- MiniBrowser *browser = getBrowser();
- if (browser) browser->minibrowser_scrape();
- }
- void ScriptBrowserWnd::getDocumentTitle(wchar_t *str, size_t len)
- {
- MiniBrowser *browser = getBrowser();
- if (browser)
- browser->minibrowser_getDocumentTitle(str, len);
- else
- str[0]=0;
- }
- int ScriptBrowserWnd::navigateUrl(const wchar_t *url)
- {
- defurl = url;
- return SCRIPTBROWSERWND_PARENT::navigateUrl(url);
- }
- int ScriptBrowserWnd::onBeforeNavigate(const wchar_t *url, int flags, const wchar_t *frame)
- {
- if (SCRIPTBROWSERWND_PARENT::onBeforeNavigate(url, flags, frame)) return 1;
- scriptVar v = BrowserScriptController::browser_onBeforeNavigate(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_STRING(url), MAKE_SCRIPT_INT(flags), MAKE_SCRIPT_STRING(frame));
- if (v.type != SCRIPT_VOID)
- return GET_SCRIPT_BOOLEAN(v);
- return 0;
- }
- void ScriptBrowserWnd::onDocumentComplete(const wchar_t *url)
- {
- SCRIPTBROWSERWND_PARENT::onDocumentComplete(url);
- if (url)
- BrowserScriptController::browser_onDocumentComplete(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_STRING(url));
- }
- void ScriptBrowserWnd::onDocumentReady(const wchar_t *url)
- {
- SCRIPTBROWSERWND_PARENT::onDocumentComplete(url);
- if (url)
- BrowserScriptController::browser_onDocumentReady(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_STRING(url));
- }
- void ScriptBrowserWnd::onNavigateError(const wchar_t *url, int status)
- {
- SCRIPTBROWSERWND_PARENT::onNavigateError(url, status);
- BrowserScriptController::browser_onNavigateError(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_STRING(url), MAKE_SCRIPT_INT(status));
- }
- void ScriptBrowserWnd::onMediaLink(const wchar_t *url)
- {
- SCRIPTBROWSERWND_PARENT::onMediaLink(url);
- if (url)
- BrowserScriptController::browser_onMediaLink(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_STRING(url));
- }
- const wchar_t * ScriptBrowserWnd::messageToMaki(wchar_t* str1, wchar_t* str2, int intval1, int intval2, int intval3)
- {
- const wchar_t* ret = SCRIPTBROWSERWND_PARENT::messageToMaki(str1, str2, intval1, intval2, intval3);
- if (ret) return ret;
- scriptVar v = BrowserScriptController::browser_messageToMaki(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_STRING(str1), MAKE_SCRIPT_STRING(str2), MAKE_SCRIPT_INT(intval1), MAKE_SCRIPT_INT(intval2), MAKE_SCRIPT_INT(intval3));
- if (v.type == SCRIPT_STRING)
- return v.data.sdata;
- return 0;
- }
- const wchar_t * ScriptBrowserWnd::messageToJS(const wchar_t* str1, const wchar_t* str2, int i1, int i2, int i3)
- {
- MiniBrowser *browser = getBrowser();
- if (browser) return browser->minibrowser_messageToJS(str1, str2, i1, i2, i3);
- return 0;
- }
- // -----------------------------------------------------------------------
- // Script Object
- BrowserScriptController _browserController;
- BrowserScriptController *browserController = &_browserController;
- // -- Functions table -------------------------------------
- function_descriptor_struct BrowserScriptController::exportedFunction[] = {
- {L"gotoUrl", 1, (void*)BrowserScriptController::browser_navigateUrl },
- {L"navigateUrl", 1, (void*)BrowserScriptController::browser_navigateUrl },
- {L"back", 0, (void*)BrowserScriptController::browser_back },
- {L"forward", 0, (void*)BrowserScriptController::browser_forward },
- {L"home", 0, (void*)BrowserScriptController::browser_home},
- {L"stop", 0, (void*)BrowserScriptController::browser_stop},
- {L"refresh", 0, (void*)BrowserScriptController::browser_refresh},
- {L"scrape", 0, (void*)BrowserScriptController::browser_scrape},
- {L"setTargetName", 1, (void*)BrowserScriptController::browser_setTargetName},
- {L"onBeforeNavigate", 3, (void*)BrowserScriptController::browser_onBeforeNavigate},
- {L"onDocumentComplete", 1, (void*)BrowserScriptController::browser_onDocumentComplete},
- {L"onDocumentReady", 1, (void*)BrowserScriptController::browser_onDocumentReady},
- {L"onNavigateError", 2, (void*)BrowserScriptController::browser_onNavigateError},
- {L"onMediaLink", 1, (void*)BrowserScriptController::browser_onMediaLink},
- {L"getDocumentTitle", 0, (void*)BrowserScriptController::browser_getDocumentTitle},
- {L"setCancelIEErrorPage",1, (void*)BrowserScriptController::browser_setCancelIEErrorPage},
- {L"messageToMaki", 5, (void*)BrowserScriptController::browser_messageToMaki},
- {L"messageToJS", 5, (void*)BrowserScriptController::browser_messageToJS},
- };
- ScriptObject *BrowserScriptController::instantiate()
- {
- ScriptBrowserWnd *sb = new ScriptBrowserWnd;
- ASSERT(sb != NULL);
- return sb->getScriptObject();
- }
- void BrowserScriptController::destroy(ScriptObject *o)
- {
- ScriptBrowserWnd *sb = static_cast<ScriptBrowserWnd *>(o->vcpu_getInterface(browserGuid));
- ASSERT(sb != NULL);
- delete sb;
- }
- void *BrowserScriptController::encapsulate(ScriptObject *o)
- {
- return NULL; // no encapsulation for browsers yet
- }
- void BrowserScriptController::deencapsulate(void *o)
- {}
- int BrowserScriptController::getNumFunctions()
- {
- return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
- }
- const function_descriptor_struct *BrowserScriptController::getExportedFunctions()
- {
- return exportedFunction;
- }
- scriptVar BrowserScriptController::browser_navigateUrl(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar url)
- {
- SCRIPT_FUNCTION_INIT
- ASSERT(url.type == SCRIPT_STRING);
- ScriptBrowserWnd *sb = static_cast<ScriptBrowserWnd*>(o->vcpu_getInterface(browserGuid));
- if (sb) sb->navigateUrl(url.data.sdata);
- RETURN_SCRIPT_VOID;
- }
- scriptVar BrowserScriptController::browser_back(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- ScriptBrowserWnd *sb = static_cast<ScriptBrowserWnd*>(o->vcpu_getInterface(browserGuid));
- if (sb) sb->back();
- RETURN_SCRIPT_VOID;
- }
- scriptVar BrowserScriptController::browser_forward(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- ScriptBrowserWnd *sb = static_cast<ScriptBrowserWnd*>(o->vcpu_getInterface(browserGuid));
- if (sb) sb->forward();
- RETURN_SCRIPT_VOID;
- }
- scriptVar BrowserScriptController::browser_home(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- ScriptBrowserWnd *sb = static_cast<ScriptBrowserWnd*>(o->vcpu_getInterface(browserGuid));
- if (sb) sb->home();
- RETURN_SCRIPT_VOID;
- }
- scriptVar BrowserScriptController::browser_refresh(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- ScriptBrowserWnd *sb = static_cast<ScriptBrowserWnd*>(o->vcpu_getInterface(browserGuid));
- if (sb) sb->refresh();
- RETURN_SCRIPT_VOID;
- }
- scriptVar BrowserScriptController::browser_stop(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- ScriptBrowserWnd *sb = static_cast<ScriptBrowserWnd*>(o->vcpu_getInterface(browserGuid));
- if (sb) sb->stop();
- RETURN_SCRIPT_VOID;
- }
- scriptVar BrowserScriptController::browser_scrape(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- ScriptBrowserWnd *sb = static_cast<ScriptBrowserWnd*>(o->vcpu_getInterface(browserGuid));
- if (sb) sb->Scrape();
- RETURN_SCRIPT_VOID;
- }
- scriptVar BrowserScriptController::browser_setCancelIEErrorPage(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar cancel)
- {
- SCRIPT_FUNCTION_INIT
- ScriptBrowserWnd *sb = static_cast<ScriptBrowserWnd*>(o->vcpu_getInterface(browserGuid));
- if (sb) sb->setCancelIEErrorPage(!!cancel.data.idata);
- RETURN_SCRIPT_VOID;
- }
- scriptVar BrowserScriptController::browser_setTargetName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar name)
- {
- SCRIPT_FUNCTION_INIT
- ScriptBrowserWnd *sb = static_cast<ScriptBrowserWnd*>(o->vcpu_getInterface(browserGuid));
- if (sb)
- sb->setTargetName(GET_SCRIPT_STRING(name));
- RETURN_SCRIPT_VOID;
- }
- scriptVar BrowserScriptController::browser_onBeforeNavigate(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar url, scriptVar flags, scriptVar framename)
- {
- SCRIPT_FUNCTION_INIT
- PROCESS_HOOKS3(o, browserController, url, flags, framename);
- SCRIPT_FUNCTION_CHECKABORTEVENT;
- SCRIPT_EXEC_EVENT3(o, url, flags, framename);
- }
- scriptVar BrowserScriptController::browser_messageToMaki(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar str1, scriptVar str2, scriptVar i1, scriptVar i2, scriptVar i3)
- {
- SCRIPT_FUNCTION_INIT
- PROCESS_HOOKS5(o, browserController, str1, str2, i1, i2, i3);
- SCRIPT_FUNCTION_CHECKABORTEVENT;
- SCRIPT_EXEC_EVENT5(o, str1, str2, i1, i2, i3);
- }
- scriptVar BrowserScriptController::browser_messageToJS(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar str1, scriptVar str2, scriptVar i1, scriptVar i2, scriptVar i3)
- {
- SCRIPT_FUNCTION_INIT
- ScriptBrowserWnd *sb = static_cast<ScriptBrowserWnd*>(o->vcpu_getInterface(browserGuid));
- if (sb)
- {
- const wchar_t * ret = sb->messageToJS(str1.data.sdata, str2.data.sdata, i1.data.idata, i2.data.idata, i3.data.idata);
- if (ret)
- return MAKE_SCRIPT_STRING(ret);
- }
- return MAKE_SCRIPT_STRING(L"");
- }
- scriptVar BrowserScriptController::browser_onDocumentComplete(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar url)
- {
- SCRIPT_FUNCTION_INIT
- PROCESS_HOOKS1(o, browserController, url);
- SCRIPT_FUNCTION_CHECKABORTEVENT;
- SCRIPT_EXEC_EVENT1(o, url);
- }
- scriptVar BrowserScriptController::browser_onDocumentReady(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar url)
- {
- SCRIPT_FUNCTION_INIT
- PROCESS_HOOKS1(o, browserController, url);
- SCRIPT_FUNCTION_CHECKABORTEVENT;
- SCRIPT_EXEC_EVENT1(o, url);
- }
- scriptVar BrowserScriptController::browser_onNavigateError(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar url, scriptVar status)
- {
- SCRIPT_FUNCTION_INIT
- PROCESS_HOOKS2(o, browserController, url, status);
- SCRIPT_FUNCTION_CHECKABORTEVENT;
- SCRIPT_EXEC_EVENT2(o, url, status);
- }
- scriptVar BrowserScriptController::browser_onMediaLink(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar url)
- {
- SCRIPT_FUNCTION_INIT
- PROCESS_HOOKS1(o, browserController, url);
- SCRIPT_FUNCTION_CHECKABORTEVENT;
- SCRIPT_EXEC_EVENT1(o, url);
- }
- static wchar_t docTitle[1024];
- /*string*/ scriptVar BrowserScriptController::browser_getDocumentTitle(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
- SCRIPT_FUNCTION_INIT
- ScriptBrowserWnd *sb = static_cast<ScriptBrowserWnd*>(o->vcpu_getInterface(browserGuid));
- docTitle[0]=0;
- if (sb) sb->getDocumentTitle(docTitle, 1024);
- return MAKE_SCRIPT_STRING(docTitle);
- }
|