diff options
author | cbakgly@gmail.com <cbakgly@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-18 23:02:11 +0000 |
---|---|---|
committer | cbakgly@gmail.com <cbakgly@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-18 23:02:11 +0000 |
commit | 2d3593c84ddc00bc7946e0ff2757471ef07762cf (patch) | |
tree | 90fcb4406b33a6d1bf32fffb524e59936f8f5b82 /content/ppapi_plugin/ppapi_thread.cc | |
parent | b946b42ebce55a4a149a24f9e7ce92984d8b93a6 (diff) | |
download | chromium_src-2d3593c84ddc00bc7946e0ff2757471ef07762cf.zip chromium_src-2d3593c84ddc00bc7946e0ff2757471ef07762cf.tar.gz chromium_src-2d3593c84ddc00bc7946e0ff2757471ef07762cf.tar.bz2 |
EnumSystemLocalesW() won't do tricks for all the areas covered by EnumSystemLocalesEx() in previous commit
for gslib. Warm up this one also.
R=piman@chromium.org,jschuh@chromium.org,yzshen@chromium.org
BUG=335438
Review URL: https://codereview.chromium.org/170223005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@257798 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/ppapi_plugin/ppapi_thread.cc')
-rw-r--r-- | content/ppapi_plugin/ppapi_thread.cc | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/content/ppapi_plugin/ppapi_thread.cc b/content/ppapi_plugin/ppapi_thread.cc index c8bfd49..ea74313 100644 --- a/content/ppapi_plugin/ppapi_thread.cc +++ b/content/ppapi_plugin/ppapi_thread.cc @@ -58,6 +58,35 @@ extern sandbox::TargetServices* g_target_services; static BOOL CALLBACK EnumLocalesProc(LPTSTR lpLocaleString) { return TRUE; } + +static BOOL CALLBACK EnumLocalesProcEx( + LPWSTR lpLocaleString, + DWORD dwFlags, + LPARAM lParam) { + return TRUE; +} + +// Warm up language subsystems before the sandbox is turned on. +static void WarmupWindowsLocales(const ppapi::PpapiPermissions& permissions) { + ::GetUserDefaultLangID(); + ::GetUserDefaultLCID(); + + if (permissions.HasPermission(ppapi::PERMISSION_FLASH)) { + if (base::win::GetVersion() >= base::win::VERSION_VISTA) { + typedef BOOL (WINAPI *PfnEnumSystemLocalesEx) + (LOCALE_ENUMPROCEX, DWORD, LPARAM, LPVOID); + + HMODULE handle_kern32 = GetModuleHandleW(L"Kernel32.dll"); + PfnEnumSystemLocalesEx enum_sys_locales_ex = + reinterpret_cast<PfnEnumSystemLocalesEx> + (GetProcAddress(handle_kern32, "EnumSystemLocalesEx")); + + enum_sys_locales_ex(EnumLocalesProcEx, LOCALE_WINDOWS, 0, 0); + } else { + EnumSystemLocalesW(EnumLocalesProc, LCID_INSTALLED); + } + } +} #else extern void* g_target_services; #endif @@ -313,15 +342,9 @@ void PpapiThread::OnLoadPlugin(const base::FilePath& path, // Cause advapi32 to load before the sandbox is turned on. unsigned int dummy_rand; rand_s(&dummy_rand); - // Warm up language subsystems before the sandbox is turned on. - ::GetUserDefaultLangID(); - ::GetUserDefaultLCID(); - if (permissions.HasPermission(ppapi::PERMISSION_FLASH)) { - // Warm up system locales. - EnumSystemLocalesW(EnumLocalesProc, LCID_INSTALLED); - } - // Engage the sandbox. + WarmupWindowsLocales(permissions); + g_target_services->LowerToken(); } #endif |