// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CONTENT_CHILD_FONT_WARMUP_WIN_H_
#define CONTENT_CHILD_FONT_WARMUP_WIN_H_

#include <stddef.h>

#include "base/files/file_path.h"
#include "base/macros.h"
#include "content/common/content_export.h"

class SkFontMgr;
template <typename T> class sk_sp;

namespace content {

class GdiFontPatchData {
 public:
  virtual ~GdiFontPatchData() {}

 protected:
  GdiFontPatchData() {}

 private:
  DISALLOW_COPY_AND_ASSIGN(GdiFontPatchData);
};

// Hook a module's imported GDI font functions to reimplement font enumeration
// and font data retrieval for DLLs which can't be easily modified.
CONTENT_EXPORT GdiFontPatchData* PatchGdiFontEnumeration(
    const base::FilePath& path);

// Testing method to get the number of in-flight emulated GDI handles.
CONTENT_EXPORT size_t GetEmulatedGdiHandleCountForTesting();

// Testing method to reset the table of emulated GDI handles.
CONTENT_EXPORT void ResetEmulatedGdiHandlesForTesting();

// Sets the pre-sandbox warmup font manager directly. This should only be used
// for testing the implementation.
CONTENT_EXPORT void SetPreSandboxWarmupFontMgrForTesting(
    sk_sp<SkFontMgr> fontmgr);

// Directwrite connects to the font cache service to retrieve information about
// fonts installed on the system etc. This works well outside the sandbox and
// within the sandbox as long as the lpc connection maintained by the current
// process with the font cache service remains valid. It appears that there
// are cases when this connection is dropped after which directwrite is unable
// to connect to the font cache service which causes problems with characters
// disappearing.
// Directwrite has fallback code to enumerate fonts if it is unable to connect
// to the font cache service. We need to intercept the following APIs to
// ensure that it does not connect to the font cache service.
// NtALpcConnectPort
// OpenSCManagerW
// OpenServiceW
// StartServiceW
// CloseServiceHandle.
// These are all IAT patched.
CONTENT_EXPORT void PatchServiceManagerCalls();

}  // namespace content

#endif  // CONTENT_CHILD_FONT_WARMUP_WIN_H_
