|  | // Copyright (c) 2012 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 CHROME_BROWSER_UI_VIEWS_CHROME_VIEWS_DELEGATE_H_ | 
|  | #define CHROME_BROWSER_UI_VIEWS_CHROME_VIEWS_DELEGATE_H_ | 
|  |  | 
|  | #include "base/callback.h" | 
|  | #include "base/compiler_specific.h" | 
|  | #include "base/location.h" | 
|  | #include "base/macros.h" | 
|  | #include "build/build_config.h" | 
|  | #include "ui/accessibility/ax_enums.mojom.h" | 
|  | #include "ui/views/views_delegate.h" | 
|  |  | 
|  | class ScopedKeepAlive; | 
|  |  | 
|  | class ChromeViewsDelegate : public views::ViewsDelegate { | 
|  | public: | 
|  | ChromeViewsDelegate(); | 
|  | ~ChromeViewsDelegate() override; | 
|  |  | 
|  | // views::ViewsDelegate: | 
|  | void SaveWindowPlacement(const views::Widget* window, | 
|  | const std::string& window_name, | 
|  | const gfx::Rect& bounds, | 
|  | ui::WindowShowState show_state) override; | 
|  | bool GetSavedWindowPlacement(const views::Widget* widget, | 
|  | const std::string& window_name, | 
|  | gfx::Rect* bounds, | 
|  | ui::WindowShowState* show_state) const override; | 
|  | void NotifyAccessibilityEvent(views::View* view, | 
|  | ax::mojom::Event event_type) override; | 
|  | #if defined(OS_CHROMEOS) | 
|  | ProcessMenuAcceleratorResult ProcessAcceleratorWhileMenuShowing( | 
|  | const ui::Accelerator& accelerator) override; | 
|  | views::NonClientFrameView* CreateDefaultNonClientFrameView( | 
|  | views::Widget* widget) override; | 
|  | #endif | 
|  |  | 
|  | #if defined(OS_WIN) | 
|  | HICON GetDefaultWindowIcon() const override; | 
|  | HICON GetSmallWindowIcon() const override; | 
|  | int GetAppbarAutohideEdges(HMONITOR monitor, | 
|  | const base::Closure& callback) override; | 
|  | #elif defined(OS_LINUX) && !defined(OS_CHROMEOS) | 
|  | gfx::ImageSkia* GetDefaultWindowIcon() const override; | 
|  | bool WindowManagerProvidesTitleBar(bool maximized) override; | 
|  | #endif | 
|  |  | 
|  | void AddRef() override; | 
|  | void ReleaseRef() override; | 
|  | void OnBeforeWidgetInit( | 
|  | views::Widget::InitParams* params, | 
|  | views::internal::NativeWidgetDelegate* delegate) override; | 
|  | ui::ContextFactory* GetContextFactory() override; | 
|  | ui::ContextFactoryPrivate* GetContextFactoryPrivate() override; | 
|  | std::string GetApplicationName() override; | 
|  |  | 
|  | #if defined(OS_MACOSX) | 
|  | bool ShouldMirrorArrowsInRTL() const override; | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | #if defined(OS_WIN) | 
|  | typedef std::map<HMONITOR, int> AppbarAutohideEdgeMap; | 
|  |  | 
|  | // Callback on main thread with the edges. |returned_edges| is the value that | 
|  | // was returned from the call to GetAutohideEdges() that initiated the lookup. | 
|  | void OnGotAppbarAutohideEdges(const base::Closure& callback, | 
|  | HMONITOR monitor, | 
|  | int returned_edges, | 
|  | int edges); | 
|  | #endif | 
|  |  | 
|  | #if defined(OS_CHROMEOS) | 
|  | // Called from GetSavedWindowPlacement() on ChromeOS to adjust the bounds. | 
|  | void AdjustSavedWindowPlacementChromeOS(const views::Widget* widget, | 
|  | gfx::Rect* bounds) const; | 
|  | #endif | 
|  |  | 
|  | // Function to retrieve default opacity value mainly based on platform | 
|  | // and desktop context. | 
|  | views::Widget::InitParams::WindowOpacity GetOpacityForInitParams( | 
|  | const views::Widget::InitParams& params); | 
|  |  | 
|  | views::NativeWidget* CreateNativeWidget( | 
|  | views::Widget::InitParams* params, | 
|  | views::internal::NativeWidgetDelegate* delegate); | 
|  |  | 
|  | // |ChromeViewsDelegate| exposes a |RefCounted|-like interface, but //chrome | 
|  | // uses |ScopedKeepAlive|s to manage lifetime. We manage an internal counter | 
|  | // to do that translation. | 
|  | unsigned int ref_count_ = 0u; | 
|  |  | 
|  | std::unique_ptr<ScopedKeepAlive> keep_alive_; | 
|  |  | 
|  | #if defined(OS_WIN) | 
|  | AppbarAutohideEdgeMap appbar_autohide_edge_map_; | 
|  | // If true we're in the process of notifying a callback from | 
|  | // GetAutohideEdges().start a new query. | 
|  | bool in_autohide_edges_callback_ = false; | 
|  |  | 
|  | base::WeakPtrFactory<ChromeViewsDelegate> weak_factory_{this}; | 
|  | #endif | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(ChromeViewsDelegate); | 
|  | }; | 
|  |  | 
|  | #endif  // CHROME_BROWSER_UI_VIEWS_CHROME_VIEWS_DELEGATE_H_ |