blob: ee5b46525017fd599dee211dd7c2b28e3ea8fc85 [file] [log] [blame]
// Copyright 2015 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.
#include "build/build_config.h"
#include "chrome/browser/themes/theme_service.h"
#include "chrome/browser/themes/theme_service_factory.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h"
#include "chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h"
#if defined(USE_AURA)
#include "chrome/browser/ui/views/frame/browser_non_client_frame_view_mus.h"
#include "ui/aura/env.h"
#endif
#if defined(OS_WIN)
#include "chrome/browser/ui/views/frame/glass_browser_frame_view.h"
#endif
#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
#include "ui/views/linux_ui/linux_ui.h"
#endif
#if BUILDFLAG(ENABLE_NATIVE_WINDOW_NAV_BUTTONS)
#include "chrome/browser/ui/views/frame/desktop_linux_browser_frame_view.h"
#include "chrome/browser/ui/views/frame/desktop_linux_browser_frame_view_layout.h"
#include "chrome/browser/ui/views/nav_button_provider.h"
#endif
namespace chrome {
BrowserNonClientFrameView* CreateBrowserNonClientFrameView(
BrowserFrame* frame,
BrowserView* browser_view) {
#if defined(USE_AURA)
if (aura::Env::GetInstance()->mode() == aura::Env::Mode::MUS) {
BrowserNonClientFrameViewMus* frame_view =
new BrowserNonClientFrameViewMus(frame, browser_view);
frame_view->Init();
return frame_view;
}
#endif
#if defined(OS_WIN)
if (frame->ShouldUseNativeFrame())
return new GlassBrowserFrameView(frame, browser_view);
#endif
#if BUILDFLAG(ENABLE_NATIVE_WINDOW_NAV_BUTTONS)
std::unique_ptr<views::NavButtonProvider> nav_button_provider;
#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
if (ThemeServiceFactory::GetForProfile(browser_view->browser()->profile())
->UsingSystemTheme() &&
views::LinuxUI::instance()) {
nav_button_provider = views::LinuxUI::instance()->CreateNavButtonProvider();
}
#endif
if (nav_button_provider) {
return new DesktopLinuxBrowserFrameView(
frame, browser_view,
new DesktopLinuxBrowserFrameViewLayout(nav_button_provider.get()),
std::move(nav_button_provider));
}
#endif
return new OpaqueBrowserFrameView(frame, browser_view,
new OpaqueBrowserFrameViewLayout());
}
} // namespace chrome