| OLD | NEW |
| (Empty) |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "content/shell/app/webkit_test_platform_support.h" | |
| 6 | |
| 7 #include <windows.h> | |
| 8 #include <iostream> | |
| 9 #include <list> | |
| 10 #include <string> | |
| 11 | |
| 12 #include "base/command_line.h" | |
| 13 #include "base/files/file_path.h" | |
| 14 #include "base/files/file_util.h" | |
| 15 #include "base/logging.h" | |
| 16 #include "base/path_service.h" | |
| 17 #include "base/strings/utf_string_conversions.h" | |
| 18 #include "content/shell/common/shell_switches.h" | |
| 19 | |
| 20 #define SIZEOF_STRUCT_WITH_SPECIFIED_LAST_MEMBER(struct_name, member) \ | |
| 21 offsetof(struct_name, member) + \ | |
| 22 (sizeof static_cast<struct_name*>(0)->member) | |
| 23 #define NONCLIENTMETRICS_SIZE_PRE_VISTA \ | |
| 24 SIZEOF_STRUCT_WITH_SPECIFIED_LAST_MEMBER(NONCLIENTMETRICS, lfMessageFont) | |
| 25 | |
| 26 namespace content { | |
| 27 | |
| 28 namespace { | |
| 29 | |
| 30 bool SetupFonts() { | |
| 31 // Load Ahem font. | |
| 32 // AHEM____.TTF is copied to the directory of DumpRenderTree.exe by | |
| 33 // WebKit.gyp. | |
| 34 base::FilePath base_path; | |
| 35 PathService::Get(base::DIR_MODULE, &base_path); | |
| 36 base::FilePath font_path = | |
| 37 base_path.Append(FILE_PATH_LITERAL("/AHEM____.TTF")); | |
| 38 | |
| 39 // We do two registrations: | |
| 40 // 1. For GDI font rendering via ::AddFontMemResourceEx. | |
| 41 // 2. For DirectWrite rendering by appending a command line flag that tells | |
| 42 // the sandbox policy/warmup to grant access to the given path. | |
| 43 | |
| 44 // GDI registration. | |
| 45 std::string font_buffer; | |
| 46 if (!base::ReadFileToString(font_path, &font_buffer)) { | |
| 47 std::cerr << "Failed to load font " << base::WideToUTF8(font_path.value()) | |
| 48 << "\n"; | |
| 49 return false; | |
| 50 } | |
| 51 | |
| 52 DWORD num_fonts = 1; | |
| 53 HANDLE font_handle = | |
| 54 ::AddFontMemResourceEx(const_cast<char*>(font_buffer.c_str()), | |
| 55 font_buffer.length(), | |
| 56 0, | |
| 57 &num_fonts); | |
| 58 if (!font_handle) { | |
| 59 std::cerr << "Failed to register Ahem font\n"; | |
| 60 return false; | |
| 61 } | |
| 62 | |
| 63 // DirectWrite sandbox registration. | |
| 64 CommandLine& command_line = *base::CommandLine::ForCurrentProcess(); | |
| 65 command_line.AppendSwitchASCII(switches::kRegisterFontFiles, | |
| 66 base::WideToUTF8(font_path.value())); | |
| 67 | |
| 68 return true; | |
| 69 } | |
| 70 | |
| 71 } // namespace | |
| 72 | |
| 73 bool CheckLayoutSystemDeps() { | |
| 74 std::list<std::string> errors; | |
| 75 | |
| 76 // This metric will be 17 when font size is "Normal". | |
| 77 // The size of drop-down menus depends on it. | |
| 78 if (::GetSystemMetrics(SM_CXVSCROLL) != 17) | |
| 79 errors.push_back("Must use normal size fonts (96 dpi)."); | |
| 80 | |
| 81 // Check that we're using the default system fonts. | |
| 82 OSVERSIONINFO version_info = {0}; | |
| 83 version_info.dwOSVersionInfoSize = sizeof(version_info); | |
| 84 ::GetVersionEx(&version_info); | |
| 85 bool is_vista_or_later = (version_info.dwMajorVersion >= 6); | |
| 86 NONCLIENTMETRICS metrics = {0}; | |
| 87 metrics.cbSize = is_vista_or_later ? sizeof(NONCLIENTMETRICS) | |
| 88 : NONCLIENTMETRICS_SIZE_PRE_VISTA; | |
| 89 bool success = !!::SystemParametersInfo( | |
| 90 SPI_GETNONCLIENTMETRICS, metrics.cbSize, &metrics, 0); | |
| 91 CHECK(success); | |
| 92 LOGFONTW* system_fonts[] = | |
| 93 {&metrics.lfStatusFont, &metrics.lfMenuFont, &metrics.lfSmCaptionFont}; | |
| 94 const wchar_t* required_font = is_vista_or_later ? L"Segoe UI" : L"Tahoma"; | |
| 95 int required_font_size = is_vista_or_later ? -12 : -11; | |
| 96 for (size_t i = 0; i < arraysize(system_fonts); ++i) { | |
| 97 if (system_fonts[i]->lfHeight != required_font_size || | |
| 98 wcscmp(required_font, system_fonts[i]->lfFaceName)) { | |
| 99 errors.push_back(is_vista_or_later | |
| 100 ? "Must use either the Aero or Basic theme." | |
| 101 : "Must use the default XP theme (Luna)."); | |
| 102 break; | |
| 103 } | |
| 104 } | |
| 105 | |
| 106 for (std::list<std::string>::iterator it = errors.begin(); it != errors.end(); | |
| 107 ++it) { | |
| 108 std::cerr << *it << "\n"; | |
| 109 } | |
| 110 return errors.empty(); | |
| 111 } | |
| 112 | |
| 113 bool WebKitTestPlatformInitialize() { | |
| 114 return SetupFonts(); | |
| 115 } | |
| 116 | |
| 117 } // namespace content | |
| OLD | NEW |