summaryrefslogtreecommitdiffstats
path: root/content/ppapi_plugin/ppapi_thread.cc
diff options
context:
space:
mode:
authorcbakgly@gmail.com <cbakgly@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-18 23:02:11 +0000
committercbakgly@gmail.com <cbakgly@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-18 23:02:11 +0000
commit2d3593c84ddc00bc7946e0ff2757471ef07762cf (patch)
tree90fcb4406b33a6d1bf32fffb524e59936f8f5b82 /content/ppapi_plugin/ppapi_thread.cc
parentb946b42ebce55a4a149a24f9e7ce92984d8b93a6 (diff)
downloadchromium_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.cc39
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