summaryrefslogtreecommitdiffstats
path: root/widget/headless/HeadlessLookAndFeel.h
blob: 8b6cf033fddbee20aef894f7e5aa446e78474665 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef mozilla_widget_HeadlessLookAndFeel_h
#define mozilla_widget_HeadlessLookAndFeel_h

#include "nsXPLookAndFeel.h"
#include "nsLookAndFeel.h"

namespace mozilla {
namespace widget {

#if defined(MOZ_WIDGET_GTK)

// Our nsLookAndFeel for Gtk relies on APIs that aren't available in headless
// mode, so for processes that are unable to connect to a display server, we use
// an implementation with hardcoded values.
//
// HeadlessLookAndFeel is used:
//
//   * in the parent process, when full headless mode (MOZ_HEADLESS=1) is
//     enabled
//   * in content processes, when full headless mode or headless content
//     mode (security.sandbox.content.headless) is enabled, unless
//     widget.remote-look-and-feel is also enabled, in which case
//     RemoteLookAndFeel is used instead.
//
// The result of this is that when headless content mode is enabled, content
// processes use values derived from the parent's nsLookAndFeel (i.e., values
// derived from Gtk APIs) while still refraining from making any display server
// connections.

class HeadlessLookAndFeel : public nsXPLookAndFeel {
 public:
  explicit HeadlessLookAndFeel(const LookAndFeelCache* aCache);
  virtual ~HeadlessLookAndFeel();

  void NativeInit() final{};
  virtual nsresult NativeGetInt(IntID aID, int32_t& aResult) override;
  virtual nsresult NativeGetFloat(FloatID aID, float& aResult) override;
  virtual nsresult NativeGetColor(ColorID aID, nscolor& aResult) override;
  virtual bool NativeGetFont(FontID aID, nsString& aFontName,
                             gfxFontStyle& aFontStyle) override;

  virtual void RefreshImpl() override;
  virtual char16_t GetPasswordCharacterImpl() override;
  virtual bool GetEchoPasswordImpl() override;
};

#else

// When possible, we simply reuse the platform's existing nsLookAndFeel
// implementation in headless mode.

typedef nsLookAndFeel HeadlessLookAndFeel;

#endif

}  // namespace widget
}  // namespace mozilla

#endif