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 "base/command_line.h"
6#include "base/logging.h"
7#include "base/mac/bundle_locations.h"
8#include "base/path_service.h"
9#include "content/public/common/content_switches.h"
10#include "content/shell/app/webkit_test_platform_support.h"
11
12#include <AppKit/AppKit.h>
13#include <Foundation/Foundation.h>
14
15namespace content {
16
17namespace {
18
19void SetDefaultsToLayoutTestValues(void) {
20  // So we can match the WebKit layout tests, we want to force a bunch of
21  // preferences that control appearance to match.
22  // (We want to do this as early as possible in application startup so
23  // the settings are in before any higher layers could cache values.)
24
25  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
26  // Do not set text-rendering prefs (AppleFontSmoothing,
27  // AppleAntiAliasingThreshold) here: Skia picks the right settings for this
28  // in layout test mode, see FontSkia.cpp in WebKit and
29  // SkFontHost_mac_coretext.cpp in skia.
30  const NSInteger kBlueTintedAppearance = 1;
31  [defaults setInteger:kBlueTintedAppearance
32                forKey:@"AppleAquaColorVariant"];
33  [defaults setObject:@"0.709800 0.835300 1.000000"
34               forKey:@"AppleHighlightColor"];
35  [defaults setObject:@"0.500000 0.500000 0.500000"
36               forKey:@"AppleOtherHighlightColor"];
37  [defaults setObject:[NSArray arrayWithObject:@"en"]
38               forKey:@"AppleLanguages"];
39  [defaults setBool:NO
40             forKey:@"AppleScrollAnimationEnabled"];
41  [defaults setObject:@"Always"
42               forKey:@"AppleShowScrollBars"];
43}
44
45}  // namespace
46
47bool CheckLayoutSystemDeps() {
48  return true;
49}
50
51bool WebKitTestPlatformInitialize() {
52
53  SetDefaultsToLayoutTestValues();
54
55  // Load font files in the resource folder.
56  static const char* const fontFileNames[] = {
57      "AHEM____.TTF", "ChromiumAATTest.ttf"
58  };
59
60  // mainBundle is Content Shell Helper.app.  Go two levels up to find
61  // Content Shell.app. Due to DumpRenderTree injecting the font files into
62  // its direct dependents, it's not easily possible to put the ttf files into
63  // the helper's resource directory instead of the outer bundle's resource
64  // directory.
65  NSString* bundle = [base::mac::FrameworkBundle() bundlePath];
66  bundle = [bundle stringByAppendingPathComponent:@"../.."];
67  NSURL* resources_directory = [[NSBundle bundleWithPath:bundle] resourceURL];
68
69  NSMutableArray* font_urls = [NSMutableArray array];
70  for (unsigned i = 0; i < arraysize(fontFileNames); ++i) {
71    NSURL* font_url = [resources_directory
72        URLByAppendingPathComponent:[NSString
73            stringWithUTF8String:fontFileNames[i]]];
74    [font_urls addObject:[font_url absoluteURL]];
75  }
76
77  CFArrayRef errors = 0;
78  if (!CTFontManagerRegisterFontsForURLs((CFArrayRef)font_urls,
79                                         kCTFontManagerScopeProcess,
80                                         &errors)) {
81    DLOG(FATAL) << "Fail to activate fonts.";
82    CFRelease(errors);
83  }
84
85  // Add <app bundle's parent dir>/plugins to the plugin path so we can load
86  // test plugins.
87  base::FilePath plugins_dir;
88  PathService::Get(base::DIR_EXE, &plugins_dir);
89  plugins_dir = plugins_dir.AppendASCII("../../../plugins");
90  CommandLine& command_line = *CommandLine::ForCurrentProcess();
91  command_line.AppendSwitchPath(switches::kExtraPluginDir, plugins_dir);
92
93  return true;
94}
95
96}  // namespace
97