Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/ppapi_plugin/ppapi_thread.h" | 5 #include "content/ppapi_plugin/ppapi_thread.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/cpu.h" | 10 #include "base/cpu.h" |
| 11 #include "base/debug/crash_logging.h" | 11 #include "base/debug/crash_logging.h" |
| 12 #include "base/files/file_util.h" | 12 #include "base/files/file_util.h" |
| 13 #include "base/lazy_instance.h" | |
| 13 #include "base/logging.h" | 14 #include "base/logging.h" |
| 14 #include "base/memory/discardable_memory_allocator.h" | 15 #include "base/memory/discardable_memory_allocator.h" |
| 15 #include "base/metrics/histogram.h" | 16 #include "base/metrics/histogram.h" |
| 16 #include "base/metrics/sparse_histogram.h" | 17 #include "base/metrics/sparse_histogram.h" |
| 17 #include "base/rand_util.h" | 18 #include "base/rand_util.h" |
| 18 #include "base/strings/stringprintf.h" | 19 #include "base/strings/stringprintf.h" |
| 19 #include "base/strings/utf_string_conversions.h" | 20 #include "base/strings/utf_string_conversions.h" |
| 20 #include "base/threading/platform_thread.h" | 21 #include "base/threading/platform_thread.h" |
| 21 #include "base/time/time.h" | 22 #include "base/time/time.h" |
| 22 #include "base/trace_event/trace_event.h" | 23 #include "base/trace_event/trace_event.h" |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 90 | 91 |
| 91 enum_sys_locales_ex(EnumLocalesProcEx, LOCALE_WINDOWS, 0, 0); | 92 enum_sys_locales_ex(EnumLocalesProcEx, LOCALE_WINDOWS, 0, 0); |
| 92 } else { | 93 } else { |
| 93 EnumSystemLocalesW(EnumLocalesProc, LCID_INSTALLED); | 94 EnumSystemLocalesW(EnumLocalesProc, LCID_INSTALLED); |
| 94 } | 95 } |
| 95 } | 96 } |
| 96 } | 97 } |
| 97 | 98 |
| 98 #endif | 99 #endif |
| 99 | 100 |
| 101 typedef decltype(GetProcessMitigationPolicy)* GetProcessMitigationPolicyType; | |
| 102 | |
| 103 // Get win32k lockdown policy using a lazy instance so it's only initialized | |
|
palmer
2015/09/15 21:43:43
This is copied and pasted from another CL, right?
forshaw
2015/09/15 21:59:32
I'd love to. Initially I had it in base but wfh@ r
| |
| 104 // once and is thread-safe. | |
| 105 class LazyIsWin32kLockdownEnabled { | |
| 106 public: | |
| 107 LazyIsWin32kLockdownEnabled() : value_(IsWin32kLockdownEnabled()) {} | |
| 108 | |
| 109 ~LazyIsWin32kLockdownEnabled() {} | |
| 110 | |
| 111 bool value() { return value_; } | |
| 112 | |
| 113 private: | |
| 114 static bool IsWin32kLockdownEnabled() { | |
| 115 GetProcessMitigationPolicyType get_process_mitigation_policy_func = | |
| 116 reinterpret_cast<GetProcessMitigationPolicyType>(GetProcAddress( | |
| 117 GetModuleHandle(L"kernel32.dll"), "GetProcessMitigationPolicy")); | |
| 118 | |
| 119 if (!get_process_mitigation_policy_func) | |
| 120 return false; | |
| 121 | |
| 122 PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY policy = {0}; | |
| 123 if (get_process_mitigation_policy_func(GetCurrentProcess(), | |
| 124 ProcessSystemCallDisablePolicy, | |
| 125 &policy, sizeof(policy))) | |
| 126 return policy.DisallowWin32kSystemCalls != 0; | |
| 127 | |
| 128 return false; | |
| 129 } | |
| 130 | |
| 131 const bool value_; | |
| 132 | |
| 133 DISALLOW_COPY_AND_ASSIGN(LazyIsWin32kLockdownEnabled); | |
| 134 }; | |
| 135 | |
| 100 namespace content { | 136 namespace content { |
| 101 | 137 |
| 138 bool IsWin32kLockdownEnabled() { | |
| 139 static base::LazyInstance<LazyIsWin32kLockdownEnabled> win32k_lockdown = | |
| 140 LAZY_INSTANCE_INITIALIZER; | |
| 141 return win32k_lockdown.Get().value(); | |
| 142 } | |
| 143 | |
| 102 typedef int32_t (*InitializeBrokerFunc) | 144 typedef int32_t (*InitializeBrokerFunc) |
| 103 (PP_ConnectInstance_Func* connect_instance_func); | 145 (PP_ConnectInstance_Func* connect_instance_func); |
| 104 | 146 |
| 105 PpapiThread::PpapiThread(const base::CommandLine& command_line, bool is_broker) | 147 PpapiThread::PpapiThread(const base::CommandLine& command_line, bool is_broker) |
| 106 : is_broker_(is_broker), | 148 : is_broker_(is_broker), |
| 107 plugin_globals_(GetIOTaskRunner()), | 149 plugin_globals_(GetIOTaskRunner()), |
| 108 connect_instance_func_(NULL), | 150 connect_instance_func_(NULL), |
| 109 local_pp_module_(base::RandInt(0, std::numeric_limits<PP_Module>::max())), | 151 local_pp_module_(base::RandInt(0, std::numeric_limits<PP_Module>::max())), |
| 110 next_plugin_dispatcher_id_(1) { | 152 next_plugin_dispatcher_id_(1) { |
| 111 plugin_globals_.SetPluginProxyDelegate(this); | 153 plugin_globals_.SetPluginProxyDelegate(this); |
| (...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 602 GetHistogramName(is_broker_, "LoadTime", path), | 644 GetHistogramName(is_broker_, "LoadTime", path), |
| 603 base::TimeDelta::FromMilliseconds(1), | 645 base::TimeDelta::FromMilliseconds(1), |
| 604 base::TimeDelta::FromSeconds(10), | 646 base::TimeDelta::FromSeconds(10), |
| 605 50, | 647 50, |
| 606 base::HistogramBase::kUmaTargetedHistogramFlag); | 648 base::HistogramBase::kUmaTargetedHistogramFlag); |
| 607 | 649 |
| 608 histogram->AddTime(load_time); | 650 histogram->AddTime(load_time); |
| 609 } | 651 } |
| 610 | 652 |
| 611 } // namespace content | 653 } // namespace content |
| OLD | NEW |