summaryrefslogtreecommitdiffstats
path: root/headless/lib/browser/headless_screen.h
diff options
context:
space:
mode:
authorskyostil <skyostil@chromium.org>2016-02-26 12:53:33 -0800
committerCommit bot <commit-bot@chromium.org>2016-02-26 20:59:19 +0000
commitfe11616891b5f57ea977c24efdf7946ed2cbf5f7 (patch)
tree2001cd7ae73c6b716ab8782ae86e578ef7e306df /headless/lib/browser/headless_screen.h
parent88eedb7f8965e0134502f1f471f6d9f8fc82a940 (diff)
downloadchromium_src-fe11616891b5f57ea977c24efdf7946ed2cbf5f7.zip
chromium_src-fe11616891b5f57ea977c24efdf7946ed2cbf5f7.tar.gz
chromium_src-fe11616891b5f57ea977c24efdf7946ed2cbf5f7.tar.bz2
headless: Initial headless embedder API implementation
This patch introduces the initial headless embedder API implementation. It allows the embedder to initialize a headless browsing environment and to navigate to a URL. We also add a headless shell application to demonstrate the use of the embedder API. Adapted from a patch by Alexander Timin <altimin@chromium.org> BUG=546953 Review URL: https://codereview.chromium.org/1674263002 Cr-Commit-Position: refs/heads/master@{#377973}
Diffstat (limited to 'headless/lib/browser/headless_screen.h')
-rw-r--r--headless/lib/browser/headless_screen.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/headless/lib/browser/headless_screen.h b/headless/lib/browser/headless_screen.h
new file mode 100644
index 0000000..c6b6b3b
--- /dev/null
+++ b/headless/lib/browser/headless_screen.h
@@ -0,0 +1,76 @@
+// Copyright 2016 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 HEADLESS_LIB_BROWSER_HEADLESS_SCREEN_H_
+#define HEADLESS_LIB_BROWSER_HEADLESS_SCREEN_H_
+
+#include "base/compiler_specific.h"
+#include "base/macros.h"
+#include "ui/aura/window_observer.h"
+#include "ui/gfx/display.h"
+#include "ui/gfx/screen.h"
+
+namespace gfx {
+class Insets;
+class Rect;
+class Transform;
+}
+
+namespace aura {
+class Window;
+class WindowTreeHost;
+}
+
+namespace headless {
+
+class HeadlessScreen : public gfx::Screen, public aura::WindowObserver {
+ public:
+ // Creates a gfx::Screen of the specified size. If no size is specified, then
+ // creates a 800x600 screen. |size| is in physical pixels.
+ static HeadlessScreen* Create(const gfx::Size& size);
+ ~HeadlessScreen() override;
+
+ aura::WindowTreeHost* CreateHostForPrimaryDisplay();
+
+ void SetDeviceScaleFactor(float device_scale_fator);
+ void SetDisplayRotation(gfx::Display::Rotation rotation);
+ void SetUIScale(float ui_scale);
+ void SetWorkAreaInsets(const gfx::Insets& insets);
+
+ protected:
+ gfx::Transform GetRotationTransform() const;
+ gfx::Transform GetUIScaleTransform() const;
+
+ // WindowObserver overrides:
+ void OnWindowBoundsChanged(aura::Window* window,
+ const gfx::Rect& old_bounds,
+ const gfx::Rect& new_bounds) override;
+ void OnWindowDestroying(aura::Window* window) override;
+
+ // gfx::Screen overrides:
+ gfx::Point GetCursorScreenPoint() override;
+ gfx::NativeWindow GetWindowUnderCursor() override;
+ gfx::NativeWindow GetWindowAtScreenPoint(const gfx::Point& point) override;
+ int GetNumDisplays() const override;
+ std::vector<gfx::Display> GetAllDisplays() const override;
+ gfx::Display GetDisplayNearestWindow(gfx::NativeView view) const override;
+ gfx::Display GetDisplayNearestPoint(const gfx::Point& point) const override;
+ gfx::Display GetDisplayMatching(const gfx::Rect& match_rect) const override;
+ gfx::Display GetPrimaryDisplay() const override;
+ void AddObserver(gfx::DisplayObserver* observer) override;
+ void RemoveObserver(gfx::DisplayObserver* observer) override;
+
+ private:
+ explicit HeadlessScreen(const gfx::Rect& screen_bounds);
+
+ aura::WindowTreeHost* host_;
+ gfx::Display display_;
+ float ui_scale_;
+
+ DISALLOW_COPY_AND_ASSIGN(HeadlessScreen);
+};
+
+} // namespace headless
+
+#endif // HEADLESS_LIB_BROWSER_HEADLESS_SCREEN_H_