15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell/shell_delegate_impl.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ash/accessibility_delegate.h"
81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ash/default_accessibility_delegate.h"
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ash/default_user_wallpaper_delegate.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/gpu_support_stub.h"
110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "ash/media_delegate.h"
121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ash/new_window_delegate.h"
135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "ash/session/session_state_delegate.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shell/context_menu.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell/example_factory.h"
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ash/shell/keyboard_controller_proxy_stub.h"
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ash/shell/shelf_delegate_impl.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell/toplevel_window.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell_window_ids.h"
20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ash/system/tray/default_system_tray_delegate.h"
2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ash/wm/window_state.h"
227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/message_loop/message_loop.h"
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/strings/utf_string_conversions.h"
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/user_manager/user_info_impl.h"
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/app_list/app_list_view_delegate.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/window.h"
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/wm/core/input_method_event_filter.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace shell {
311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace {
321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class NewWindowDelegateImpl : public NewWindowDelegate {
341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public:
351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  NewWindowDelegateImpl() {}
361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual ~NewWindowDelegateImpl() {}
371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // NewWindowDelegate:
391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void NewTab() OVERRIDE {}
401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void NewWindow(bool incognito) OVERRIDE {
411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    ash::shell::ToplevelWindow::CreateParams create_params;
421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    create_params.can_resize = true;
431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    create_params.can_maximize = true;
441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    ash::shell::ToplevelWindow::CreateToplevelWindow(create_params);
451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void OpenFileManager() OVERRIDE {}
471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void OpenCrosh() OVERRIDE {}
481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void RestoreTab() OVERRIDE {}
491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void ShowKeyboardOverlay() OVERRIDE {}
501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void ShowTaskManager() OVERRIDE {}
511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void OpenFeedbackPage() OVERRIDE {}
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) private:
541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(NewWindowDelegateImpl);
551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)};
561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)class MediaDelegateImpl : public MediaDelegate {
580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) public:
590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  MediaDelegateImpl() {}
600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  virtual ~MediaDelegateImpl() {}
610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // MediaDelegate:
630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  virtual void HandleMediaNextTrack() OVERRIDE {}
640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  virtual void HandleMediaPlayPause() OVERRIDE {}
650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  virtual void HandleMediaPrevTrack() OVERRIDE {}
66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual MediaCaptureState GetMediaCaptureState(
67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      content::BrowserContext* context) OVERRIDE {
68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return MEDIA_CAPTURE_VIDEO;
69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) private:
720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MediaDelegateImpl);
730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)};
740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class SessionStateDelegateImpl : public SessionStateDelegate {
76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public:
77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SessionStateDelegateImpl()
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      : screen_locked_(false), user_info_(new user_manager::UserInfoImpl()) {}
79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual ~SessionStateDelegateImpl() {}
81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // SessionStateDelegate:
83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual content::BrowserContext* GetBrowserContextByIndex(
84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      MultiProfileIndex index) OVERRIDE {
85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return Shell::GetInstance()->delegate()->GetActiveBrowserContext();
86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual content::BrowserContext* GetBrowserContextForWindow(
88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      aura::Window* window) OVERRIDE {
89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return Shell::GetInstance()->delegate()->GetActiveBrowserContext();
90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual int GetMaximumNumberOfLoggedInUsers() const OVERRIDE { return 3; }
92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual int NumberOfLoggedInUsers() const OVERRIDE {
93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    // ash_shell has 2 users.
94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return 2;
95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool IsActiveUserSessionStarted() const OVERRIDE { return true; }
97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool CanLockScreen() const OVERRIDE { return true; }
98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool IsScreenLocked() const OVERRIDE { return screen_locked_; }
99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool ShouldLockScreenBeforeSuspending() const OVERRIDE {
100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return false;
101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void LockScreen() OVERRIDE {
103010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    shell::CreateLockScreen();
104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    screen_locked_ = true;
105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    Shell::GetInstance()->UpdateShelfVisibility();
106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void UnlockScreen() OVERRIDE {
108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    screen_locked_ = false;
109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    Shell::GetInstance()->UpdateShelfVisibility();
110010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
111010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool IsUserSessionBlocked() const OVERRIDE {
112010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return !IsActiveUserSessionStarted() || IsScreenLocked();
113010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
114010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual SessionState GetSessionState() const OVERRIDE {
115010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    // Assume that if session is not active we're at login.
116010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return IsActiveUserSessionStarted() ? SESSION_STATE_ACTIVE
117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                        : SESSION_STATE_LOGIN_PRIMARY;
118010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual const user_manager::UserInfo* GetUserInfo(
120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      MultiProfileIndex index) const OVERRIDE {
121010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return user_info_.get();
122010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual const user_manager::UserInfo* GetUserInfo(
124010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      content::BrowserContext* context) const OVERRIDE {
125010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return user_info_.get();
126010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
127010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool ShouldShowAvatar(aura::Window* window) const OVERRIDE {
128010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return !user_info_->GetImage().isNull();
129010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
130010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void SwitchActiveUser(const std::string& user_id) OVERRIDE {}
131010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void CycleActiveUser(CycleUser cycle_user) OVERRIDE {}
1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual bool IsMultiProfileAllowedByPrimaryUserPolicy() const OVERRIDE {
1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    return true;
1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
135010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void AddSessionStateObserver(
136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      ash::SessionStateObserver* observer) OVERRIDE {}
137010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void RemoveSessionStateObserver(
138010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      ash::SessionStateObserver* observer) OVERRIDE {}
139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) private:
141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  bool screen_locked_;
142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // A pseudo user info.
144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<user_manager::UserInfo> user_info_;
145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SessionStateDelegateImpl);
147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)};
148010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}  // namespace
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ShellDelegateImpl::ShellDelegateImpl()
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : watcher_(NULL),
153a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      shelf_delegate_(NULL),
154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      browser_context_(NULL) {
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ShellDelegateImpl::~ShellDelegateImpl() {
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShellDelegateImpl::SetWatcher(WindowWatcher* watcher) {
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  watcher_ = watcher;
162a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (shelf_delegate_)
163a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    shelf_delegate_->set_watcher(watcher);
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool ShellDelegateImpl::IsFirstRunAfterBoot() const {
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return false;
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)bool ShellDelegateImpl::IsIncognitoAllowed() const {
1710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  return true;
1720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
1730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool ShellDelegateImpl::IsMultiProfilesEnabled() const {
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ShellDelegateImpl::IsRunningInForcedAppMode() const {
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return false;
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
182a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool ShellDelegateImpl::IsMultiAccountEnabled() const {
183a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return false;
184a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
185a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ShellDelegateImpl::PreInit() {
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
189effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid ShellDelegateImpl::PreShutdown() {
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShellDelegateImpl::Exit() {
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::MessageLoopForUI::current()->Quit();
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)keyboard::KeyboardControllerProxy*
197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ShellDelegateImpl::CreateKeyboardControllerProxy() {
1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return new KeyboardControllerProxyStub();
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
201c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid ShellDelegateImpl::VirtualKeyboardActivated(bool activated) {
202c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
203c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
204c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid ShellDelegateImpl::AddVirtualKeyboardStateObserver(
205c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    VirtualKeyboardStateObserver* observer) {
206c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
207c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
208c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid ShellDelegateImpl::RemoveVirtualKeyboardStateObserver(
209c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    VirtualKeyboardStateObserver* observer) {
210c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
211c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)content::BrowserContext* ShellDelegateImpl::GetActiveBrowserContext() {
213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return browser_context_;
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciapp_list::AppListViewDelegate* ShellDelegateImpl::GetAppListViewDelegate() {
2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!app_list_view_delegate_)
2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    app_list_view_delegate_.reset(ash::shell::CreateAppListViewDelegate());
2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return app_list_view_delegate_.get();
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
222a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)ShelfDelegate* ShellDelegateImpl::CreateShelfDelegate(ShelfModel* model) {
223a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  shelf_delegate_ = new ShelfDelegateImpl(watcher_);
224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return shelf_delegate_;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ash::SystemTrayDelegate* ShellDelegateImpl::CreateSystemTrayDelegate() {
228d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return new DefaultSystemTrayDelegate;
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ash::UserWallpaperDelegate* ShellDelegateImpl::CreateUserWallpaperDelegate() {
23268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return new DefaultUserWallpaperDelegate();
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ash::SessionStateDelegate* ShellDelegateImpl::CreateSessionStateDelegate() {
236010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return new SessionStateDelegateImpl;
237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)ash::AccessibilityDelegate* ShellDelegateImpl::CreateAccessibilityDelegate() {
240c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  return new DefaultAccessibilityDelegate;
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)ash::NewWindowDelegate* ShellDelegateImpl::CreateNewWindowDelegate() {
2441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return new NewWindowDelegateImpl;
2451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
2461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)ash::MediaDelegate* ShellDelegateImpl::CreateMediaDelegate() {
2480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  return new MediaDelegateImpl;
2490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
2500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ui::MenuModel* ShellDelegateImpl::CreateContextMenu(
2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    aura::Window* root,
2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ash::ShelfItemDelegate* item_delegate,
2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ash::ShelfItem* item) {
2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return new ContextMenu(root);
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GPUSupport* ShellDelegateImpl::CreateGPUSupport() {
2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Real GPU support depends on src/content, so just use a stub.
2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return new GPUSupportStub;
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::string16 ShellDelegateImpl::GetProductName() const {
264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return base::string16();
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace shell
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ash
269