Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / aura / chrome_browser_main_extra_parts_aura.cc
index dba4955..3658a52 100644 (file)
 #include "ui/gfx/screen.h"
 #include "ui/views/widget/native_widget_aura.h"
 
-#if defined(OS_LINUX)
+#if defined(USE_X11) && !defined(OS_CHROMEOS)
+#include "base/prefs/pref_service.h"
+#include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/libgtk2ui/gtk2_ui.h"
+#include "chrome/common/pref_names.h"
+#include "ui/aura/window.h"
+#include "ui/native_theme/native_theme_aura.h"
 #include "ui/views/linux_ui/linux_ui.h"
-#else
 #endif
 
 #if defined(USE_ASH)
 
 namespace {
 
+#if defined(USE_X11) && !defined(OS_CHROMEOS)
+ui::NativeTheme* GetNativeThemeForWindow(aura::Window* window) {
+  if (!window)
+    return NULL;
+
+  Profile* profile = NULL;
+  if (window->type() == ui::wm::WINDOW_TYPE_NORMAL ||
+      window->type() == ui::wm::WINDOW_TYPE_POPUP) {
+    profile = reinterpret_cast<Profile*>(
+        window->GetNativeWindowProperty(Profile::kProfileKey));
+  }
+
+  if (profile && !profile->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme))
+    return ui::NativeThemeAura::instance();
+
+  return NULL;
+}
+#endif
+
 #if !defined(OS_CHROMEOS) && defined(USE_ASH)
 // Returns the desktop this process was initially launched in.
 chrome::HostDesktopType GetInitialDesktop() {
@@ -61,21 +84,23 @@ ChromeBrowserMainExtraPartsAura::~ChromeBrowserMainExtraPartsAura() {
 }
 
 void ChromeBrowserMainExtraPartsAura::PreEarlyInitialization() {
-#if !defined(USE_ASH) && defined(OS_LINUX) && defined(USE_X11)
+#if defined(USE_X11) && !defined(OS_CHROMEOS)
   // TODO(erg): Refactor this into a dlopen call when we add a GTK3 port.
-  views::LinuxUI::SetInstance(BuildGtk2UI());
+  views::LinuxUI* gtk2_ui = BuildGtk2UI();
+  gtk2_ui->SetNativeThemeOverride(base::Bind(&GetNativeThemeForWindow));
+  views::LinuxUI::SetInstance(gtk2_ui);
 #endif
 }
 
 void ChromeBrowserMainExtraPartsAura::ToolkitInitialized() {
 #if !defined(OS_CHROMEOS)
 #if defined(USE_ASH)
-  aura::Env::CreateInstance();
+  CHECK(aura::Env::GetInstance());
   active_desktop_monitor_.reset(new ActiveDesktopMonitor(GetInitialDesktop()));
 #endif
 #endif
 
-#if !defined(USE_ASH) && defined(OS_LINUX) && defined(USE_X11)
+#if defined(USE_X11) && !defined(OS_CHROMEOS)
   views::LinuxUI::instance()->Initialize();
 #endif
 }