1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_NATIVE_BROWSER_FRAME_FACTORY_H_
6#define CHROME_BROWSER_UI_VIEWS_FRAME_NATIVE_BROWSER_FRAME_FACTORY_H_
7
8#include "base/basictypes.h"
9#include "chrome/browser/ui/host_desktop.h"
10
11class BrowserFrame;
12class BrowserView;
13class NativeBrowserFrame;
14
15// Factory for creating a NativeBrowserFrame.
16class NativeBrowserFrameFactory {
17 public:
18  // Construct a platform-specific implementation of this interface.
19  static NativeBrowserFrame* CreateNativeBrowserFrame(
20      BrowserFrame* browser_frame,
21      BrowserView* browser_view);
22
23  // Sets the factory. Takes ownership of |new_factory|, deleting existing
24  // factory. Use NULL to go back to default factory.
25  static void Set(NativeBrowserFrameFactory* new_factory);
26
27  // Returns HOST_DESKTOP_TYPE_ASH on Windows when configured to allow browser
28  // windows only in Metro mode, otherwise |desktop_type|.
29  static chrome::HostDesktopType AdjustHostDesktopType(
30      chrome::HostDesktopType desktop_type);
31
32  virtual NativeBrowserFrame* Create(BrowserFrame* browser_frame,
33                                     BrowserView* browser_view);
34
35 protected:
36  NativeBrowserFrameFactory() {}
37  virtual ~NativeBrowserFrameFactory() {}
38
39 private:
40  // For Chrome running on desktop platforms, returns true if the factory should
41  // create an ash browser frame for the provided |browser_view|.
42  static bool ShouldCreateForAshDesktop(BrowserView* browser_view);
43
44  DISALLOW_COPY_AND_ASSIGN(NativeBrowserFrameFactory);
45};
46
47#endif  // CHROME_BROWSER_UI_VIEWS_FRAME_NATIVE_BROWSER_FRAME_FACTORY_H_
48