| 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/common/sandbox_win.h" | 5 #include "content/common/sandbox_win.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/base_switches.h" | 9 #include "base/base_switches.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 11 #include "base/debug/profiler.h" | 11 #include "base/debug/profiler.h" |
| 12 #include "base/debug/trace_event.h" | 12 #include "base/debug/trace_event.h" |
| 13 #include "base/files/file_util.h" | 13 #include "base/files/file_util.h" |
| 14 #include "base/hash.h" | 14 #include "base/hash.h" |
| 15 #include "base/metrics/field_trial.h" | 15 #include "base/metrics/field_trial.h" |
| 16 #include "base/path_service.h" | 16 #include "base/path_service.h" |
| 17 #include "base/process/launch.h" | 17 #include "base/process/launch.h" |
| 18 #include "base/strings/string_util.h" | 18 #include "base/strings/string_util.h" |
| 19 #include "base/strings/stringprintf.h" | 19 #include "base/strings/stringprintf.h" |
| 20 #include "base/win/iat_patch_function.h" | 20 #include "base/win/iat_patch_function.h" |
| 21 #include "base/win/registry.h" |
| 21 #include "base/win/scoped_handle.h" | 22 #include "base/win/scoped_handle.h" |
| 22 #include "base/win/scoped_process_information.h" | 23 #include "base/win/scoped_process_information.h" |
| 23 #include "base/win/windows_version.h" | 24 #include "base/win/windows_version.h" |
| 24 #include "content/public/common/content_client.h" | 25 #include "content/public/common/content_client.h" |
| 25 #include "content/public/common/content_switches.h" | 26 #include "content/public/common/content_switches.h" |
| 26 #include "content/public/common/sandbox_init.h" | 27 #include "content/public/common/sandbox_init.h" |
| 27 #include "content/public/common/sandboxed_process_launcher_delegate.h" | 28 #include "content/public/common/sandboxed_process_launcher_delegate.h" |
| 28 #include "sandbox/win/src/process_mitigations.h" | 29 #include "sandbox/win/src/process_mitigations.h" |
| 29 #include "sandbox/win/src/sandbox.h" | 30 #include "sandbox/win/src/sandbox.h" |
| 30 #include "sandbox/win/src/sandbox_nt_util.h" | 31 #include "sandbox/win/src/sandbox_nt_util.h" |
| (...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 596 *base::CommandLine::ForCurrentProcess(); | 597 *base::CommandLine::ForCurrentProcess(); |
| 597 if (command_line.HasSwitch(switches::kDisableDirectWrite)) | 598 if (command_line.HasSwitch(switches::kDisableDirectWrite)) |
| 598 return false; | 599 return false; |
| 599 | 600 |
| 600 #if !defined(NACL_WIN64) | 601 #if !defined(NACL_WIN64) |
| 601 // Can't use GDI on HiDPI. | 602 // Can't use GDI on HiDPI. |
| 602 if (gfx::GetDPIScale() > 1.0f) | 603 if (gfx::GetDPIScale() > 1.0f) |
| 603 return true; | 604 return true; |
| 604 #endif | 605 #endif |
| 605 | 606 |
| 607 // We have logic in renderer_font_platform_win.cc for falling back to safe |
| 608 // font list if machine has more than 1750 fonts installed. Users have |
| 609 // complained about this as safe font list is usually not sufficient. |
| 610 // We now disable direct write (gdi) if we encounter more number |
| 611 // of fonts than a threshold (currently 1750). |
| 612 // Refer: crbug.com/421305 |
| 613 const wchar_t kWindowsFontsRegistryKey[] = |
| 614 L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts"; |
| 615 base::win::RegistryValueIterator reg_iterator(HKEY_LOCAL_MACHINE, |
| 616 kWindowsFontsRegistryKey); |
| 617 const DWORD kMaxAllowedFontsBeforeFallbackToGDI = 1750; |
| 618 if (reg_iterator.ValueCount() >= kMaxAllowedFontsBeforeFallbackToGDI) |
| 619 return false; |
| 620 |
| 606 // Otherwise, check the field trial. | 621 // Otherwise, check the field trial. |
| 607 const std::string group_name = | 622 const std::string group_name = |
| 608 base::FieldTrialList::FindFullName("DirectWrite"); | 623 base::FieldTrialList::FindFullName("DirectWrite"); |
| 609 return group_name != "Disabled"; | 624 return group_name != "Disabled"; |
| 610 } | 625 } |
| 611 | 626 |
| 612 base::ProcessHandle StartSandboxedProcess( | 627 base::ProcessHandle StartSandboxedProcess( |
| 613 SandboxedProcessLauncherDelegate* delegate, | 628 SandboxedProcessLauncherDelegate* delegate, |
| 614 base::CommandLine* cmd_line) { | 629 base::CommandLine* cmd_line) { |
| 615 const base::CommandLine& browser_command_line = | 630 const base::CommandLine& browser_command_line = |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 789 } | 804 } |
| 790 | 805 |
| 791 return false; | 806 return false; |
| 792 } | 807 } |
| 793 | 808 |
| 794 bool BrokerAddTargetPeer(HANDLE peer_process) { | 809 bool BrokerAddTargetPeer(HANDLE peer_process) { |
| 795 return g_broker_services->AddTargetPeer(peer_process) == sandbox::SBOX_ALL_OK; | 810 return g_broker_services->AddTargetPeer(peer_process) == sandbox::SBOX_ALL_OK; |
| 796 } | 811 } |
| 797 | 812 |
| 798 } // namespace content | 813 } // namespace content |
| OLD | NEW |