chrome_browser_main_extra_parts_ash.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
1// Copyright (c) 2012 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#include "chrome/browser/ui/views/ash/chrome_browser_main_extra_parts_ash.h" 6 7#include "ash/root_window_controller.h" 8#include "ash/session_state_delegate.h" 9#include "ash/shell.h" 10#include "base/command_line.h" 11#include "base/lazy_instance.h" 12#include "chrome/browser/chrome_browser_main.h" 13#include "chrome/browser/ui/ash/ash_init.h" 14#include "chrome/browser/ui/ash/ash_util.h" 15#include "chrome/browser/ui/views/ash/tab_scrubber.h" 16#include "chrome/common/chrome_switches.h" 17#include "ui/aura/env.h" 18#include "ui/gfx/screen.h" 19#include "ui/gfx/screen_type_delegate.h" 20#include "ui/keyboard/keyboard.h" 21#include "ui/keyboard/keyboard_controller.h" 22#include "ui/keyboard/keyboard_util.h" 23 24#if defined(OS_CHROMEOS) 25#include "chrome/browser/ui/views/select_file_dialog_extension.h" 26#include "chrome/browser/ui/views/select_file_dialog_extension_factory.h" 27#endif 28 29#if !defined(OS_CHROMEOS) 30#include "ui/shell_dialogs/select_file_dialog.h" 31#include "ui/shell_dialogs/shell_dialogs_delegate.h" 32#endif 33 34#if !defined(OS_CHROMEOS) 35class ScreenTypeDelegateWin : public gfx::ScreenTypeDelegate { 36 public: 37 ScreenTypeDelegateWin() {} 38 virtual gfx::ScreenType GetScreenTypeForNativeView( 39 gfx::NativeView view) OVERRIDE { 40 return chrome::IsNativeViewInAsh(view) ? 41 gfx::SCREEN_TYPE_ALTERNATE : 42 gfx::SCREEN_TYPE_NATIVE; 43 } 44 private: 45 DISALLOW_COPY_AND_ASSIGN(ScreenTypeDelegateWin); 46}; 47 48class ShellDialogsDelegateWin : public ui::ShellDialogsDelegate { 49 public: 50 ShellDialogsDelegateWin() {} 51 virtual bool IsWindowInMetro(gfx::NativeWindow window) OVERRIDE { 52 return chrome::IsNativeViewInAsh(window); 53 } 54 private: 55 DISALLOW_COPY_AND_ASSIGN(ShellDialogsDelegateWin); 56}; 57 58base::LazyInstance<ShellDialogsDelegateWin> g_shell_dialogs_delegate; 59 60#endif 61 62ChromeBrowserMainExtraPartsAsh::ChromeBrowserMainExtraPartsAsh() { 63} 64 65ChromeBrowserMainExtraPartsAsh::~ChromeBrowserMainExtraPartsAsh() { 66} 67 68void ChromeBrowserMainExtraPartsAsh::PreProfileInit() { 69 if (chrome::ShouldOpenAshOnStartup()) { 70 chrome::OpenAsh(); 71 } else { 72#if !defined(OS_CHROMEOS) 73 gfx::Screen::SetScreenTypeDelegate(new ScreenTypeDelegateWin); 74 ui::SelectFileDialog::SetShellDialogsDelegate( 75 g_shell_dialogs_delegate.Pointer()); 76#endif 77 } 78#if defined(OS_CHROMEOS) 79 // For OS_CHROMEOS, virtual keyboard needs to be initialized before profile 80 // initialized. Otherwise, virtual keyboard extension will not load at login 81 // screen. 82 keyboard::InitializeKeyboard(); 83#endif 84 85#if defined(OS_CHROMEOS) 86 ui::SelectFileDialog::SetFactory(new SelectFileDialogExtensionFactory); 87#endif 88} 89 90void ChromeBrowserMainExtraPartsAsh::PostProfileInit() { 91 if (!ash::Shell::HasInstance()) 92 return; 93 94 // Initialize TabScrubber after the Ash Shell has been initialized. 95 TabScrubber::GetInstance(); 96 // Activate virtual keyboard after profile is initialized. It depends on the 97 // default profile. If keyboard usability experiment flag is set, defer the 98 // activation to UpdateWindow() in virtual_keyboard_window_controller.cc. 99 if (!keyboard::IsKeyboardUsabilityExperimentEnabled()) { 100 ash::Shell::GetPrimaryRootWindowController()->ActivateKeyboard( 101 keyboard::KeyboardController::GetInstance()); 102 } 103} 104 105void ChromeBrowserMainExtraPartsAsh::PostMainMessageLoopRun() { 106 chrome::CloseAsh(); 107} 108