diff options
author | skyostil <skyostil@chromium.org> | 2016-02-26 12:53:33 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-26 20:59:19 +0000 |
commit | fe11616891b5f57ea977c24efdf7946ed2cbf5f7 (patch) | |
tree | 2001cd7ae73c6b716ab8782ae86e578ef7e306df /headless/lib/browser/headless_screen.h | |
parent | 88eedb7f8965e0134502f1f471f6d9f8fc82a940 (diff) | |
download | chromium_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.h | 76 |
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_ |