Home | History | Annotate | Download | only in shell
      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 "ash/shell/shell_delegate_impl.h"
      6 
      7 #include "ash/accessibility_delegate.h"
      8 #include "ash/default_accessibility_delegate.h"
      9 #include "ash/default_user_wallpaper_delegate.h"
     10 #include "ash/gpu_support_stub.h"
     11 #include "ash/media_delegate.h"
     12 #include "ash/new_window_delegate.h"
     13 #include "ash/session/session_state_delegate.h"
     14 #include "ash/shell/context_menu.h"
     15 #include "ash/shell/example_factory.h"
     16 #include "ash/shell/keyboard_controller_proxy_stub.h"
     17 #include "ash/shell/shelf_delegate_impl.h"
     18 #include "ash/shell/toplevel_window.h"
     19 #include "ash/shell_window_ids.h"
     20 #include "ash/system/tray/default_system_tray_delegate.h"
     21 #include "ash/wm/window_state.h"
     22 #include "base/message_loop/message_loop.h"
     23 #include "base/strings/utf_string_conversions.h"
     24 #include "components/user_manager/user_info_impl.h"
     25 #include "ui/app_list/app_list_view_delegate.h"
     26 #include "ui/aura/window.h"
     27 #include "ui/wm/core/input_method_event_filter.h"
     28 
     29 namespace ash {
     30 namespace shell {
     31 namespace {
     32 
     33 class NewWindowDelegateImpl : public NewWindowDelegate {
     34  public:
     35   NewWindowDelegateImpl() {}
     36   virtual ~NewWindowDelegateImpl() {}
     37 
     38   // NewWindowDelegate:
     39   virtual void NewTab() OVERRIDE {}
     40   virtual void NewWindow(bool incognito) OVERRIDE {
     41     ash::shell::ToplevelWindow::CreateParams create_params;
     42     create_params.can_resize = true;
     43     create_params.can_maximize = true;
     44     ash::shell::ToplevelWindow::CreateToplevelWindow(create_params);
     45   }
     46   virtual void OpenFileManager() OVERRIDE {}
     47   virtual void OpenCrosh() OVERRIDE {}
     48   virtual void RestoreTab() OVERRIDE {}
     49   virtual void ShowKeyboardOverlay() OVERRIDE {}
     50   virtual void ShowTaskManager() OVERRIDE {}
     51   virtual void OpenFeedbackPage() OVERRIDE {}
     52 
     53  private:
     54   DISALLOW_COPY_AND_ASSIGN(NewWindowDelegateImpl);
     55 };
     56 
     57 class MediaDelegateImpl : public MediaDelegate {
     58  public:
     59   MediaDelegateImpl() {}
     60   virtual ~MediaDelegateImpl() {}
     61 
     62   // MediaDelegate:
     63   virtual void HandleMediaNextTrack() OVERRIDE {}
     64   virtual void HandleMediaPlayPause() OVERRIDE {}
     65   virtual void HandleMediaPrevTrack() OVERRIDE {}
     66   virtual MediaCaptureState GetMediaCaptureState(
     67       content::BrowserContext* context) OVERRIDE {
     68     return MEDIA_CAPTURE_VIDEO;
     69   }
     70 
     71  private:
     72   DISALLOW_COPY_AND_ASSIGN(MediaDelegateImpl);
     73 };
     74 
     75 class SessionStateDelegateImpl : public SessionStateDelegate {
     76  public:
     77   SessionStateDelegateImpl()
     78       : screen_locked_(false), user_info_(new user_manager::UserInfoImpl()) {}
     79 
     80   virtual ~SessionStateDelegateImpl() {}
     81 
     82   // SessionStateDelegate:
     83   virtual content::BrowserContext* GetBrowserContextByIndex(
     84       MultiProfileIndex index) OVERRIDE {
     85     return Shell::GetInstance()->delegate()->GetActiveBrowserContext();
     86   }
     87   virtual content::BrowserContext* GetBrowserContextForWindow(
     88       aura::Window* window) OVERRIDE {
     89     return Shell::GetInstance()->delegate()->GetActiveBrowserContext();
     90   }
     91   virtual int GetMaximumNumberOfLoggedInUsers() const OVERRIDE { return 3; }
     92   virtual int NumberOfLoggedInUsers() const OVERRIDE {
     93     // ash_shell has 2 users.
     94     return 2;
     95   }
     96   virtual bool IsActiveUserSessionStarted() const OVERRIDE { return true; }
     97   virtual bool CanLockScreen() const OVERRIDE { return true; }
     98   virtual bool IsScreenLocked() const OVERRIDE { return screen_locked_; }
     99   virtual bool ShouldLockScreenBeforeSuspending() const OVERRIDE {
    100     return false;
    101   }
    102   virtual void LockScreen() OVERRIDE {
    103     shell::CreateLockScreen();
    104     screen_locked_ = true;
    105     Shell::GetInstance()->UpdateShelfVisibility();
    106   }
    107   virtual void UnlockScreen() OVERRIDE {
    108     screen_locked_ = false;
    109     Shell::GetInstance()->UpdateShelfVisibility();
    110   }
    111   virtual bool IsUserSessionBlocked() const OVERRIDE {
    112     return !IsActiveUserSessionStarted() || IsScreenLocked();
    113   }
    114   virtual SessionState GetSessionState() const OVERRIDE {
    115     // Assume that if session is not active we're at login.
    116     return IsActiveUserSessionStarted() ? SESSION_STATE_ACTIVE
    117                                         : SESSION_STATE_LOGIN_PRIMARY;
    118   }
    119   virtual const user_manager::UserInfo* GetUserInfo(
    120       MultiProfileIndex index) const OVERRIDE {
    121     return user_info_.get();
    122   }
    123   virtual const user_manager::UserInfo* GetUserInfo(
    124       content::BrowserContext* context) const OVERRIDE {
    125     return user_info_.get();
    126   }
    127   virtual bool ShouldShowAvatar(aura::Window* window) const OVERRIDE {
    128     return !user_info_->GetImage().isNull();
    129   }
    130   virtual void SwitchActiveUser(const std::string& user_id) OVERRIDE {}
    131   virtual void CycleActiveUser(CycleUser cycle_user) OVERRIDE {}
    132   virtual bool IsMultiProfileAllowedByPrimaryUserPolicy() const OVERRIDE {
    133     return true;
    134   }
    135   virtual void AddSessionStateObserver(
    136       ash::SessionStateObserver* observer) OVERRIDE {}
    137   virtual void RemoveSessionStateObserver(
    138       ash::SessionStateObserver* observer) OVERRIDE {}
    139 
    140  private:
    141   bool screen_locked_;
    142 
    143   // A pseudo user info.
    144   scoped_ptr<user_manager::UserInfo> user_info_;
    145 
    146   DISALLOW_COPY_AND_ASSIGN(SessionStateDelegateImpl);
    147 };
    148 
    149 }  // namespace
    150 
    151 ShellDelegateImpl::ShellDelegateImpl()
    152     : watcher_(NULL),
    153       shelf_delegate_(NULL),
    154       browser_context_(NULL) {
    155 }
    156 
    157 ShellDelegateImpl::~ShellDelegateImpl() {
    158 }
    159 
    160 void ShellDelegateImpl::SetWatcher(WindowWatcher* watcher) {
    161   watcher_ = watcher;
    162   if (shelf_delegate_)
    163     shelf_delegate_->set_watcher(watcher);
    164 }
    165 
    166 bool ShellDelegateImpl::IsFirstRunAfterBoot() const {
    167   return false;
    168 }
    169 
    170 bool ShellDelegateImpl::IsIncognitoAllowed() const {
    171   return true;
    172 }
    173 
    174 bool ShellDelegateImpl::IsMultiProfilesEnabled() const {
    175   return false;
    176 }
    177 
    178 bool ShellDelegateImpl::IsRunningInForcedAppMode() const {
    179   return false;
    180 }
    181 
    182 bool ShellDelegateImpl::IsMultiAccountEnabled() const {
    183   return false;
    184 }
    185 
    186 void ShellDelegateImpl::PreInit() {
    187 }
    188 
    189 void ShellDelegateImpl::PreShutdown() {
    190 }
    191 
    192 void ShellDelegateImpl::Exit() {
    193   base::MessageLoopForUI::current()->Quit();
    194 }
    195 
    196 keyboard::KeyboardControllerProxy*
    197     ShellDelegateImpl::CreateKeyboardControllerProxy() {
    198   return new KeyboardControllerProxyStub();
    199 }
    200 
    201 void ShellDelegateImpl::VirtualKeyboardActivated(bool activated) {
    202 }
    203 
    204 void ShellDelegateImpl::AddVirtualKeyboardStateObserver(
    205     VirtualKeyboardStateObserver* observer) {
    206 }
    207 
    208 void ShellDelegateImpl::RemoveVirtualKeyboardStateObserver(
    209     VirtualKeyboardStateObserver* observer) {
    210 }
    211 
    212 content::BrowserContext* ShellDelegateImpl::GetActiveBrowserContext() {
    213   return browser_context_;
    214 }
    215 
    216 app_list::AppListViewDelegate* ShellDelegateImpl::GetAppListViewDelegate() {
    217   if (!app_list_view_delegate_)
    218     app_list_view_delegate_.reset(ash::shell::CreateAppListViewDelegate());
    219   return app_list_view_delegate_.get();
    220 }
    221 
    222 ShelfDelegate* ShellDelegateImpl::CreateShelfDelegate(ShelfModel* model) {
    223   shelf_delegate_ = new ShelfDelegateImpl(watcher_);
    224   return shelf_delegate_;
    225 }
    226 
    227 ash::SystemTrayDelegate* ShellDelegateImpl::CreateSystemTrayDelegate() {
    228   return new DefaultSystemTrayDelegate;
    229 }
    230 
    231 ash::UserWallpaperDelegate* ShellDelegateImpl::CreateUserWallpaperDelegate() {
    232   return new DefaultUserWallpaperDelegate();
    233 }
    234 
    235 ash::SessionStateDelegate* ShellDelegateImpl::CreateSessionStateDelegate() {
    236   return new SessionStateDelegateImpl;
    237 }
    238 
    239 ash::AccessibilityDelegate* ShellDelegateImpl::CreateAccessibilityDelegate() {
    240   return new DefaultAccessibilityDelegate;
    241 }
    242 
    243 ash::NewWindowDelegate* ShellDelegateImpl::CreateNewWindowDelegate() {
    244   return new NewWindowDelegateImpl;
    245 }
    246 
    247 ash::MediaDelegate* ShellDelegateImpl::CreateMediaDelegate() {
    248   return new MediaDelegateImpl;
    249 }
    250 
    251 ui::MenuModel* ShellDelegateImpl::CreateContextMenu(
    252     aura::Window* root,
    253     ash::ShelfItemDelegate* item_delegate,
    254     ash::ShelfItem* item) {
    255   return new ContextMenu(root);
    256 }
    257 
    258 GPUSupport* ShellDelegateImpl::CreateGPUSupport() {
    259   // Real GPU support depends on src/content, so just use a stub.
    260   return new GPUSupportStub;
    261 }
    262 
    263 base::string16 ShellDelegateImpl::GetProductName() const {
    264   return base::string16();
    265 }
    266 
    267 }  // namespace shell
    268 }  // namespace ash
    269