123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356 |
- #include "main.h"
- #include "./browserRegistry.h"
- #include "./obj_ombrowser.h"
- #include "./ifc_wasabihelper.h"
- #include "./ifc_skinhelper.h"
- #include "./ifc_skinnedbrowser.h"
- #include "./ifc_ombrowserclass.h"
- #include "./ifc_omconfig.h"
- #include "./ifc_omdebugconfig.h"
- #include "../Plugins/General/gen_ml/colors.h"
- #include <shlwapi.h>
- #include <strsafe.h>
- #define YES L"yes"
- #define NO L"no"
- #define REGVAL_DWORD(__regKey, __valueName, __data) { DWORD __iVal = (__data); RegSetValueExW((__regKey), (__valueName), NULL, REG_DWORD, (LPCBYTE)&__iVal, sizeof(DWORD)); }
- #define REGVAL_STR(__regKey, __valueName, __data, __cbData) RegSetValueExW((__regKey), (__valueName), NULL, REG_SZ, (LPCBYTE)(__data), (__cbData))
- #define REGVAL_ONE(__regKey, __valueName) REGVAL_DWORD(__regKey, __valueName, 1)
- #define REGVAL_ZERO(__regKey, __valueName) REGVAL_DWORD(__regKey, __valueName, 0)
- #define REGVAL_YES(__regKey, __valueName) REGVAL_STR(__regKey, __valueName, YES, sizeof(YES))
- #define REGVAL_NO(__regKey, __valueName) REGVAL_STR(__regKey, __valueName, NO, sizeof(NO))
- #define REGVAL_YESNO(__regKey, __valueName, __condition) ((0 != (__condition)) ? REGVAL_YES(__regKey, __valueName) : REGVAL_NO(__regKey, __valueName))
- #define REGVAL_RGB(__regKey, __valueName, __rgb)\
- { WCHAR szRGB[64] = {0}; COLORREF c = (__rgb);\
- StringCchPrintfW(szRGB, ARRAYSIZE(szRGB), L"%d,%d,%d", GetRValue(c), GetGValue(c), GetBValue(c));\
- INT cbLen = lstrlenW(szRGB) * sizeof(WCHAR);\
- REGVAL_STR(__regKey, __valueName, szRGB, cbLen);}
- OmBrowserRegistry::OmBrowserRegistry(LPCWSTR pszName)
- : ref(1), name(NULL), path(NULL)
- {
- name = Plugin_CopyString(pszName);
- }
- OmBrowserRegistry::~OmBrowserRegistry()
- {
- Plugin_FreeString(name);
- Plugin_FreeString(path);
- }
- HRESULT OmBrowserRegistry::CreateInstance(LPCWSTR pszName, OmBrowserRegistry **instance)
- {
- if (NULL == instance) return E_POINTER;
- *instance = NULL;
- if (NULL == pszName || L'\0' == *pszName)
- pszName = OMBROWSER_NAME;
- *instance = new OmBrowserRegistry(pszName);
- if (NULL == *instance) return E_OUTOFMEMORY;
- return S_OK;
- }
- size_t OmBrowserRegistry::AddRef()
- {
- return InterlockedIncrement((LONG*)&ref);
- }
- size_t OmBrowserRegistry::Release()
- {
- if (0 == ref)
- return ref;
-
- LONG r = InterlockedDecrement((LONG*)&ref);
- if (0 == r)
- delete(this);
-
- return r;
- }
- int OmBrowserRegistry::QueryInterface(GUID interface_guid, void **object)
- {
- if (NULL == object) return E_POINTER;
- if (IsEqualIID(interface_guid, IFC_OmBrowserRegistry))
- *object = static_cast<ifc_ombrowserregistry*>(this);
- else
- {
- *object = NULL;
- return E_NOINTERFACE;
- }
- if (NULL == *object)
- return E_UNEXPECTED;
- AddRef();
- return S_OK;
- }
- HRESULT OmBrowserRegistry::Write()
- {
- HKEY hKey = NULL;
- HKEY hKey2 = NULL;
-
- LONG result;
- DWORD disposition;
-
- if (FAILED(CreateRoot(&hKey, NULL)))
- return E_FAIL;
-
- result = RegCreateKeyExW(hKey, L"Main", NULL, NULL, REG_OPTION_VOLATILE, KEY_SET_VALUE, NULL, &hKey2, &disposition);
- if (ERROR_SUCCESS == result)
- {
- REGVAL_ONE(hKey2, L"AllowWindowReuse");
-
-
- HRESULT hr(S_FALSE);
-
-
- ifc_ombrowserclass *browserClass;
- if (SUCCEEDED(Plugin_GetBrowserClass(name, &browserClass)))
- {
- ifc_omconfig *config;
- if (SUCCEEDED(browserClass->GetConfig(&config)))
- {
- ifc_omdebugconfig *debugConfig;
- if (SUCCEEDED(config->QueryInterface(IFC_OmDebugConfig, (void**)&debugConfig)))
- {
- hr = debugConfig->GetScriptDebuggerEnabled();
- debugConfig->Release();
- }
- config->Release();
- }
- browserClass->Release();
- }
-
- REGVAL_YESNO(hKey2, L"Disable Script Debugger", (S_FALSE == hr));
-
-
- REGVAL_NO(hKey2, L"Check_Associations");
- REGVAL_ZERO(hKey2, L"EnableSearchPane");
- REGVAL_NO(hKey2, L"Friendly http errors");
- REGVAL_NO(hKey2, L"FullScreen");
- REGVAL_NO(hKey2, L"Save_Session_History_On_Exit");
- REGVAL_NO(hKey2, L"Use_DlgBox_Colors");
- REGVAL_YES(hKey2, L"ShowedCheckBrowser");
- REGVAL_STR(hKey2, L"Start Page", L"", sizeof(L""));
- REGVAL_STR(hKey2, L"Default_Page_URL", L"about:blank", sizeof(L"about:blank"));
- REGVAL_STR(hKey2, L"Default_Search_URL", L"about:blank", sizeof(L"about:blank"));
- REGVAL_NO(hKey2, L"Enable Browser Extensions");
- REGVAL_NO(hKey2, L"Error Dlg Details Pane Open");
- REGVAL_NO(hKey2, L"Error Dlg Displayed On Every Error");
- REGVAL_ONE(hKey2, L"NoUpdateCheck");
- REGVAL_NO(hKey2, L"Save_Session_History_On_Exit");
- REGVAL_ONE(hKey2, L"NoJITSetup");
- REGVAL_ONE(hKey2, L"NoWebJITSetup");
- REGVAL_ONE(hKey2, L"RunOnceComplete");
- REGVAL_ONE(hKey2, L"RunOnceHasShown");
- REGVAL_ONE(hKey2, L"SearchMigrated");
-
- RegCloseKey(hKey2);
- }
- result = RegCreateKeyExW(hKey, L"MenuExt", NULL, NULL, REG_OPTION_VOLATILE, KEY_SET_VALUE, NULL, &hKey2, &disposition);
- if (ERROR_SUCCESS == result)
- {
- RegCloseKey(hKey2);
- }
- result = RegCreateKeyExW(hKey, L"New Windows", NULL, NULL, REG_OPTION_VOLATILE, KEY_SET_VALUE, NULL, &hKey2, &disposition);
- if (ERROR_SUCCESS == result)
- {
- REGVAL_ZERO(hKey2, L"PlaySound");
- REGVAL_ONE(hKey2, L"PopupMgr");
- RegCloseKey(hKey2);
- }
- result = RegCreateKeyExW(hKey, L"SearchScopes", NULL, NULL, REG_OPTION_VOLATILE, KEY_SET_VALUE, NULL, &hKey2, &disposition);
- if (ERROR_SUCCESS == result)
- {
- RegCloseKey(hKey2);
- }
- result = RegCreateKeyExW(hKey, L"SearchUrl", NULL, NULL, REG_OPTION_VOLATILE, KEY_SET_VALUE, NULL, &hKey2, &disposition);
- if (ERROR_SUCCESS == result)
- {
- RegCloseKey(hKey2);
- }
- result = RegCreateKeyExW(hKey, L"URLSearchHooks", NULL, NULL, REG_OPTION_VOLATILE, KEY_SET_VALUE, NULL, &hKey2, &disposition);
- if (ERROR_SUCCESS == result)
- {
- RegCloseKey(hKey2);
- }
- HRESULT hr = WriteColors(hKey);
-
- RegCloseKey(hKey);
- return hr;
- }
- HRESULT OmBrowserRegistry::Delete()
- {
- HRESULT hr;
- WCHAR szBuffer[512] = {0};
- hr = GetPath(szBuffer, ARRAYSIZE(szBuffer));
- if (FAILED(hr)) return hr;
- LONG result = SHDeleteKey(HKEY_CURRENT_USER, szBuffer);
- hr = (ERROR_SUCCESS != result) ? E_FAIL : S_OK;
- return hr;
- }
- HRESULT OmBrowserRegistry::UpdateColors()
- {
- HKEY hKey;
-
- HRESULT hr = CreateRoot(&hKey, NULL);
- if (FAILED(hr)) return hr;
-
- hr = WriteColors(hKey);
- RegCloseKey(hKey);
- return hr;
- }
- HRESULT OmBrowserRegistry::GetPath(LPWSTR pszBuffer, INT cchBufferMax)
- {
- if (NULL == pszBuffer)
- return E_POINTER;
- if (NULL == path)
- {
- HRESULT hr = CreatePath(pszBuffer, cchBufferMax);
- if (FAILED(hr)) return hr;
-
- path = Plugin_CopyString(pszBuffer);
- }
- return StringCchPrintfW(pszBuffer, cchBufferMax, path);
- }
- HRESULT OmBrowserRegistry::CreatePath(LPWSTR pszBuffer, INT cchBufferMax)
- {
- if (NULL == pszBuffer) return E_POINTER;
- if (NULL == name || L'\0' == *name) return E_INVALIDARG;
-
- HRESULT hr;
- WCHAR szApp[128] = {0}, szSessionId[128] = {0};
- ifc_wasabihelper *wasabi;
- hr = Plugin_GetWasabiHelper(&wasabi);
- if (SUCCEEDED(hr))
- {
- api_application *app;
- hr = wasabi->GetApplicationApi(&app);
- if (SUCCEEDED(hr))
- {
- if (FAILED(StringCchCopyEx(szApp, ARRAYSIZE(szApp), app->main_getAppName(), NULL, NULL, STRSAFE_IGNORE_NULLS)))
- szApp[0] = L'\0';
-
- UUID uid;
- if (API_APPLICATION_SUCCESS == app->GetSessionID(&uid))
- {
- RPC_WSTR pszUid;
- if (RPC_S_OK == UuidToString(&uid, &pszUid))
- {
- if(FAILED(StringCchCopy(szSessionId, ARRAYSIZE(szSessionId), (LPCWSTR)pszUid)))
- szSessionId[0] = L'\0';
- RpcStringFree(&pszUid);
- }
- }
- app->Release();
- }
- wasabi->Release();
- }
- if (L'\0' == szApp[0])
- hr = StringCchCopy(szApp, ARRAYSIZE(szApp), L"Winamp");
- if (L'\0' == szSessionId[0])
- hr = StringCchPrintf(szSessionId, ARRAYSIZE(szSessionId), L"%u", GetCurrentProcessId());
-
- if (SUCCEEDED(hr))
- hr = StringCchPrintfW(pszBuffer, cchBufferMax, L"Software\\%s\\%s\\%s", szApp, name, szSessionId);
- if (FAILED(hr))
- *pszBuffer = L'\0';
- return hr;
- }
- HRESULT OmBrowserRegistry::CreateRoot(HKEY *hKey, DWORD *pDisposition)
- {
- if (NULL == path)
- {
- WCHAR szBuffer[2048] = {0};
- HRESULT hr = CreatePath(szBuffer, ARRAYSIZE(szBuffer));
- if (FAILED(hr)) return hr;
-
- path = Plugin_CopyString(szBuffer);
- if (NULL == path) return E_OUTOFMEMORY;
- }
- if (NULL == path || L'\0' == *path)
- return E_UNEXPECTED;
- DWORD disposition;
- LONG result = RegCreateKeyExW(HKEY_CURRENT_USER, path, NULL, NULL, REG_OPTION_VOLATILE, KEY_SET_VALUE, NULL, hKey, &disposition);
- if (ERROR_SUCCESS != result)
- {
- return E_FAIL;
- }
- if (NULL != pDisposition)
- *pDisposition = disposition;
- return S_OK;
- }
- HRESULT OmBrowserRegistry::WriteColors(HKEY hKey)
- {
- return S_OK;
- ifc_skinnedbrowser *skinnedBrowser;
- HRESULT hr = Plugin_GetBrowserSkin(&skinnedBrowser);
- if (FAILED(hr)) return E_FAIL;
-
- LONG result;
- DWORD disposition;
- HKEY hKey2 = NULL;
-
- result = RegCreateKeyExW(hKey, L"Settings", NULL, NULL, REG_OPTION_VOLATILE, KEY_SET_VALUE, NULL, &hKey2, &disposition);
- if (ERROR_SUCCESS == result)
- {
- REGVAL_RGB(hKey2, L"Text Color", skinnedBrowser->GetTextColor());
- REGVAL_RGB(hKey2, L"Background Color", skinnedBrowser->GetBackColor());
- REGVAL_RGB(hKey2, L"Anchor Color", skinnedBrowser->GetLinkColor());
- REGVAL_RGB(hKey2, L"Anchor Color Hover", skinnedBrowser->GetHoveredLinkColor());
- REGVAL_YES(hKey2, L"Use Anchor Hover Color");
- REGVAL_RGB(hKey2, L"Anchor Color Visited", skinnedBrowser->GetVisitedLinkColor());
- RegCloseKey(hKey2);
- }
-
- skinnedBrowser->Release();
- return hr;
- }
- #define CBCLASS OmBrowserRegistry
- START_DISPATCH;
- CB(ADDREF, AddRef)
- CB(RELEASE, Release)
- CB(QUERYINTERFACE, QueryInterface)
- CB(API_GETPATH, GetPath)
- CB(API_WRITE, Write)
- CB(API_DELETE, Delete)
- CB(API_UPDATECOLORS, UpdateColors)
- END_DISPATCH;
- #undef CBCLASS
|