123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- #include "main.h"
- #include "./wasabiHelper.h"
- #include <api/service/waservicefactory.h>
- EXTERN_C const GUID pngLoaderGUID =
- { 0x5e04fb28, 0x53f5, 0x4032, { 0xbd, 0x29, 0x3, 0x2b, 0x87, 0xec, 0x37, 0x25 } };
- WasabiHelper::WasabiHelper(api_service *serviceManager)
- : ref(1), serviceManager(NULL), applicationApi(NULL), configApi(NULL), memoryApi(NULL),
- pngLoader(NULL), languageManager(NULL), securityApi(NULL), threadpoolApi(NULL), languageModule(NULL)
- {
- this->serviceManager = serviceManager;
- }
- WasabiHelper::~WasabiHelper()
- {
- ReleaseWasabiInterface(&applicationApiServiceGuid, applicationApi);
- ReleaseWasabiInterface(&AgaveConfigGUID, configApi);
- ReleaseWasabiInterface(&languageApiGUID, languageManager);
- ReleaseWasabiInterface(&pngLoaderGUID, pngLoader);
- ReleaseWasabiInterface(&memMgrApiServiceGuid, memoryApi);
- ReleaseWasabiInterface(&JSAPI2::api_securityGUID, securityApi);
- ReleaseWasabiInterface(&ThreadPoolGUID, threadpoolApi);
- }
- HRESULT WasabiHelper::CreateInstance(api_service *serviceManager, WasabiHelper **instance)
- {
- if (NULL == instance) return E_POINTER;
- if (NULL == serviceManager) return E_INVALIDARG;
- *instance = new WasabiHelper(serviceManager);
- if (*instance == NULL) return E_OUTOFMEMORY;
- return S_OK;
- }
- size_t WasabiHelper::AddRef()
- {
- return InterlockedIncrement((LONG*)&ref);
- }
- size_t WasabiHelper::Release()
- {
- if (0 == ref)
- return ref;
- LONG r = InterlockedDecrement((LONG*)&ref);
- if (0 == r)
- delete(this);
- return r;
- }
- int WasabiHelper::QueryInterface(GUID interface_guid, void **object)
- {
- if (NULL == object) return E_POINTER;
- if (IsEqualIID(interface_guid, IFC_WasabiHelper))
- *object = static_cast<ifc_wasabihelper*>(this);
- else
- {
- *object = NULL;
- return E_NOINTERFACE;
- }
- if (NULL == *object)
- return E_UNEXPECTED;
- AddRef();
- return S_OK;
- }
- HRESULT WasabiHelper::QueryWasabiInterface(const GUID *iid, void **ppi)
- {
- if (NULL == ppi) return E_POINTER;
- *ppi = NULL;
- if (NULL == iid) return E_INVALIDARG;
- if (NULL == serviceManager) return E_UNEXPECTED;
- waServiceFactory *serviceFactory = serviceManager->service_getServiceByGuid(*iid);
- if (NULL == serviceFactory) return E_NOINTERFACE;
- *ppi = serviceFactory->getInterface();
- if (NULL == *ppi) return E_OUTOFMEMORY;
- return S_OK;
- }
- HRESULT WasabiHelper::ReleaseWasabiInterface(const GUID *iid, void *pi)
- {
- if (NULL == iid || NULL == pi) return E_INVALIDARG;
- if (NULL == serviceManager) return E_UNEXPECTED;
- waServiceFactory *serviceFactory = serviceManager->service_getServiceByGuid(*iid);
- if (NULL == serviceFactory) return E_NOINTERFACE;
- serviceFactory->releaseInterface(pi);
- return S_OK;
- }
- HRESULT WasabiHelper::GetServiceManager(api_service **manager)
- {
- if (NULL == manager) return E_POINTER;
- *manager = serviceManager;
- if (NULL == *manager) return E_UNEXPECTED;
- (*manager)->AddRef();
- return S_OK;
- }
- HRESULT WasabiHelper::GetApplicationApi(api_application **application)
- {
- if (NULL == application) return E_POINTER;
- HRESULT hr = (NULL == applicationApi)? QueryWasabiInterface(&applicationApiServiceGuid, (void**)&applicationApi) : S_OK;
- *application = applicationApi;
- if (NULL != applicationApi)
- applicationApi->AddRef();
- return hr;
- }
- HRESULT WasabiHelper::GetConfigApi(api_config ** config)
- {
- if (NULL == config) return E_POINTER;
- HRESULT hr = (NULL == configApi)? QueryWasabiInterface(&AgaveConfigGUID, (void**)&configApi) : S_OK;
- *config = configApi;
- if (NULL != configApi)
- configApi->AddRef();
- return hr;
- }
- HRESULT WasabiHelper::GetMemoryManager(api_memmgr **memoryManager)
- {
- if (NULL == memoryManager) return E_POINTER;
- HRESULT hr = (NULL == memoryApi)? QueryWasabiInterface(&memMgrApiServiceGuid, (void**)&memoryApi) : S_OK;
- *memoryManager = memoryApi;
- if (NULL != memoryApi)
- memoryApi->AddRef();
- return hr;
- }
- HRESULT WasabiHelper::GetPngLoader(svc_imageLoader **loader)
- {
- if (NULL == loader) return E_POINTER;
- HRESULT hr = (NULL == pngLoader)? QueryWasabiInterface(&pngLoaderGUID, (void**)&pngLoader) : S_OK;
- *loader = pngLoader;
- if (NULL != pngLoader)
- pngLoader->AddRef();
- return hr;
- }
- HRESULT WasabiHelper::InitLanguageSupport()
- {
- if (NULL != languageManager && NULL != languageModule)
- return S_FALSE;
- if(NULL == languageManager)
- {
- languageModule = NULL;
- HRESULT hr = QueryWasabiInterface(&languageApiGUID, (void**)&languageManager);
- if (FAILED(hr))
- return hr;
- }
- if (NULL == languageModule)
- {
- languageModule = languageManager->StartLanguageSupport(Plugin_GetInstance(), omBrowserLangGUID);
- if (NULL == languageModule)
- {
- languageManager->Release();
- languageManager = NULL;
- return E_FAIL;
- }
- }
-
- return S_OK;
- }
- HRESULT WasabiHelper::GetLanguageManager(api_language **language)
- {
- if (NULL == language) return E_POINTER;
- HRESULT hr = InitLanguageSupport();
- if (FAILED(hr)) return hr;
- *language = (SUCCEEDED(hr)) ? languageManager : NULL;
- if (NULL != *language)
- (*language)->AddRef();
- return hr;
- }
- HRESULT WasabiHelper::GetLanguageModule(HINSTANCE *module)
- {
- if (NULL == module) return E_POINTER;
- HRESULT hr = InitLanguageSupport();
- if (FAILED(hr)) return hr;
- *module = languageModule;
- return S_OK;
- }
- HRESULT WasabiHelper::GetSecurityApi(JSAPI2::api_security **security)
- {
- if (NULL == security) return E_POINTER;
- HRESULT hr = (NULL == securityApi)? QueryWasabiInterface(&JSAPI2::api_securityGUID, (void**)&securityApi) : S_OK;
- *security = securityApi;
- if (NULL != securityApi)
- securityApi->AddRef();
- return hr;
- }
- HRESULT WasabiHelper::GetThreadpoolApi(api_threadpool **threadpool)
- {
- if (NULL == threadpool) return E_POINTER;
- HRESULT hr = (NULL == threadpoolApi)? QueryWasabiInterface(&ThreadPoolGUID, (void**)&threadpoolApi) : S_OK;
- *threadpool = threadpoolApi;
- if (NULL != *threadpool)
- threadpoolApi->AddRef();
- return hr;
- }
- #define CBCLASS WasabiHelper
- START_DISPATCH;
- CB(ADDREF, AddRef)
- CB(RELEASE, Release)
- CB(QUERYINTERFACE, QueryInterface)
- CB(API_QUERYWASABIINTERFACE, QueryWasabiInterface)
- CB(API_RELEASEWASABIINTERFACE, ReleaseWasabiInterface)
- CB(API_GETSERVICEMANAGER, GetServiceManager)
- CB(API_GETAPPLICATION, GetApplicationApi)
- CB(API_GETCONFIG, GetConfigApi)
- CB(API_GETMEMORYMANAGER, GetMemoryManager)
- CB(API_GETPNGLOADER, GetPngLoader)
- CB(API_GETLANGUAGEMANAGER, GetLanguageManager)
- CB(API_GETLANGUAGEMODULE, GetLanguageModule)
- CB(API_GETSECURITY, GetSecurityApi)
- CB(API_GETTHREADPOOL, GetThreadpoolApi)
- END_DISPATCH;
- #undef CBCLASS
|