OLD | NEW |
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h" | 5 #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "build/build_config.h" | 8 #include "build/build_config.h" |
9 #include "chrome/browser/app_mode/app_mode_utils.h" | 9 #include "chrome/browser/app_mode/app_mode_utils.h" |
10 #include "chrome/browser/ui/browser.h" | 10 #include "chrome/browser/ui/browser.h" |
(...skipping 29 matching lines...) Expand all Loading... |
40 | 40 |
41 ExclusiveAccessBubbleType | 41 ExclusiveAccessBubbleType |
42 ExclusiveAccessManager::GetExclusiveAccessExitBubbleType() const { | 42 ExclusiveAccessManager::GetExclusiveAccessExitBubbleType() const { |
43 // In kiosk and exclusive app mode we always want to be fullscreen and do not | 43 // In kiosk and exclusive app mode we always want to be fullscreen and do not |
44 // want to show exit instructions for browser mode fullscreen. | 44 // want to show exit instructions for browser mode fullscreen. |
45 bool app_mode = false; | 45 bool app_mode = false; |
46 #if !defined(OS_MACOSX) // App mode (kiosk) is not available on Mac yet. | 46 #if !defined(OS_MACOSX) // App mode (kiosk) is not available on Mac yet. |
47 app_mode = chrome::IsRunningInAppMode(); | 47 app_mode = chrome::IsRunningInAppMode(); |
48 #endif | 48 #endif |
49 | 49 |
50 if (mouse_lock_controller_.IsMouseLockSilentlyAccepted() && | 50 if (mouse_lock_controller_.IsMouseLockedSilently() && |
51 (!fullscreen_controller_.IsWindowFullscreenForTabOrPending() || | 51 (!fullscreen_controller_.IsWindowFullscreenForTabOrPending() || |
52 fullscreen_controller_.IsUserAcceptedFullscreen())) | 52 fullscreen_controller_.IsTabFullscreen())) |
53 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE; | 53 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE; |
54 | 54 |
55 if (!fullscreen_controller_.IsWindowFullscreenForTabOrPending()) { | 55 if (!fullscreen_controller_.IsWindowFullscreenForTabOrPending()) { |
56 if (mouse_lock_controller_.IsMouseLocked()) | 56 if (mouse_lock_controller_.IsMouseLocked()) |
57 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_MOUSELOCK_EXIT_INSTRUCTION; | 57 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_MOUSELOCK_EXIT_INSTRUCTION; |
58 if (mouse_lock_controller_.IsMouseLockRequested()) | |
59 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_MOUSELOCK_BUTTONS; | |
60 if (fullscreen_controller_.IsExtensionFullscreenOrPending()) | 58 if (fullscreen_controller_.IsExtensionFullscreenOrPending()) |
61 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_EXTENSION_FULLSCREEN_EXIT_INSTRUCTION; | 59 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_EXTENSION_FULLSCREEN_EXIT_INSTRUCTION; |
62 if (fullscreen_controller_.IsControllerInitiatedFullscreen() && !app_mode) | 60 if (fullscreen_controller_.IsControllerInitiatedFullscreen() && !app_mode) |
63 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_BROWSER_FULLSCREEN_EXIT_INSTRUCTION; | 61 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_BROWSER_FULLSCREEN_EXIT_INSTRUCTION; |
64 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE; | 62 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE; |
65 } | 63 } |
66 | 64 |
67 if (fullscreen_controller_.IsUserAcceptedFullscreen()) { | 65 if (fullscreen_controller_.IsTabFullscreen()) { |
68 if (fullscreen_controller_.IsPrivilegedFullscreenForTab()) | 66 if (fullscreen_controller_.IsPrivilegedFullscreenForTab()) |
69 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE; | 67 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE; |
70 if (IsExperimentalKeyboardLockUIEnabled()) | 68 if (IsExperimentalKeyboardLockUIEnabled()) |
71 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_KEYBOARD_LOCK_EXIT_INSTRUCTION; | 69 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_KEYBOARD_LOCK_EXIT_INSTRUCTION; |
72 if (mouse_lock_controller_.IsMouseLocked()) | 70 if (mouse_lock_controller_.IsMouseLocked()) |
73 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_FULLSCREEN_MOUSELOCK_EXIT_INSTRUCTION; | 71 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_FULLSCREEN_MOUSELOCK_EXIT_INSTRUCTION; |
74 if (mouse_lock_controller_.IsMouseLockRequested()) | |
75 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_MOUSELOCK_BUTTONS; | |
76 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_FULLSCREEN_EXIT_INSTRUCTION; | 72 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_FULLSCREEN_EXIT_INSTRUCTION; |
77 } | 73 } |
78 | 74 |
79 if (mouse_lock_controller_.IsMouseLockRequested()) | 75 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_FULLSCREEN_EXIT_INSTRUCTION; |
80 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_FULLSCREEN_MOUSELOCK_BUTTONS; | |
81 return EXCLUSIVE_ACCESS_BUBBLE_TYPE_FULLSCREEN_BUTTONS; | |
82 } | 76 } |
83 | 77 |
84 void ExclusiveAccessManager::UpdateExclusiveAccessExitBubbleContent() { | 78 void ExclusiveAccessManager::UpdateExclusiveAccessExitBubbleContent() { |
85 GURL url = GetExclusiveAccessBubbleURL(); | 79 GURL url = GetExclusiveAccessBubbleURL(); |
86 ExclusiveAccessBubbleType bubble_type = GetExclusiveAccessExitBubbleType(); | 80 ExclusiveAccessBubbleType bubble_type = GetExclusiveAccessExitBubbleType(); |
87 | 81 |
88 // If bubble displays buttons, unlock mouse to allow pressing them. | |
89 if (exclusive_access_bubble::ShowButtonsForType(bubble_type) && | |
90 mouse_lock_controller_.IsMouseLocked()) | |
91 mouse_lock_controller_.UnlockMouse(); | |
92 | |
93 exclusive_access_context_->UpdateExclusiveAccessExitBubbleContent( | 82 exclusive_access_context_->UpdateExclusiveAccessExitBubbleContent( |
94 url, bubble_type); | 83 url, bubble_type); |
95 } | 84 } |
96 | 85 |
97 GURL ExclusiveAccessManager::GetExclusiveAccessBubbleURL() const { | 86 GURL ExclusiveAccessManager::GetExclusiveAccessBubbleURL() const { |
98 GURL result = fullscreen_controller_.GetURLForExclusiveAccessBubble(); | 87 GURL result = fullscreen_controller_.GetURLForExclusiveAccessBubble(); |
99 if (!result.is_valid()) | 88 if (!result.is_valid()) |
100 result = mouse_lock_controller_.GetURLForExclusiveAccessBubble(); | 89 result = mouse_lock_controller_.GetURLForExclusiveAccessBubble(); |
101 return result; | 90 return result; |
102 } | 91 } |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 bool handled = false; | 152 bool handled = false; |
164 handled = fullscreen_controller_.HandleUserPressedEscape(); | 153 handled = fullscreen_controller_.HandleUserPressedEscape(); |
165 handled |= mouse_lock_controller_.HandleUserPressedEscape(); | 154 handled |= mouse_lock_controller_.HandleUserPressedEscape(); |
166 return handled; | 155 return handled; |
167 } | 156 } |
168 | 157 |
169 void ExclusiveAccessManager::OnUserInput() { | 158 void ExclusiveAccessManager::OnUserInput() { |
170 exclusive_access_context_->OnExclusiveAccessUserInput(); | 159 exclusive_access_context_->OnExclusiveAccessUserInput(); |
171 } | 160 } |
172 | 161 |
173 void ExclusiveAccessManager::OnAcceptExclusiveAccessPermission() { | |
174 bool updateBubble = | |
175 mouse_lock_controller_.OnAcceptExclusiveAccessPermission(); | |
176 updateBubble |= fullscreen_controller_.OnAcceptExclusiveAccessPermission(); | |
177 if (updateBubble) | |
178 UpdateExclusiveAccessExitBubbleContent(); | |
179 } | |
180 | |
181 void ExclusiveAccessManager::OnDenyExclusiveAccessPermission() { | |
182 bool updateBubble = mouse_lock_controller_.OnDenyExclusiveAccessPermission(); | |
183 updateBubble |= fullscreen_controller_.OnDenyExclusiveAccessPermission(); | |
184 if (updateBubble) | |
185 UpdateExclusiveAccessExitBubbleContent(); | |
186 } | |
187 | |
188 void ExclusiveAccessManager::ExitExclusiveAccess() { | 162 void ExclusiveAccessManager::ExitExclusiveAccess() { |
189 fullscreen_controller_.ExitExclusiveAccessToPreviousState(); | 163 fullscreen_controller_.ExitExclusiveAccessToPreviousState(); |
190 mouse_lock_controller_.LostMouseLock(); | 164 mouse_lock_controller_.LostMouseLock(); |
191 } | 165 } |
192 | 166 |
193 void ExclusiveAccessManager::RecordBubbleReshownUMA( | 167 void ExclusiveAccessManager::RecordBubbleReshownUMA( |
194 ExclusiveAccessBubbleType type) { | 168 ExclusiveAccessBubbleType type) { |
195 // Figure out whether each of fullscreen, mouselock is in effect. | 169 // Figure out whether each of fullscreen, mouselock is in effect. |
196 bool fullscreen = false; | 170 bool fullscreen = false; |
197 bool mouselock = false; | 171 bool mouselock = false; |
198 switch (type) { | 172 switch (type) { |
199 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE: | 173 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE: |
200 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_MOUSELOCK_BUTTONS: | |
201 // None in effect. | 174 // None in effect. |
202 break; | 175 break; |
203 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_FULLSCREEN_BUTTONS: | |
204 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_FULLSCREEN_EXIT_INSTRUCTION: | 176 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_FULLSCREEN_EXIT_INSTRUCTION: |
205 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_KEYBOARD_LOCK_EXIT_INSTRUCTION: | 177 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_KEYBOARD_LOCK_EXIT_INSTRUCTION: |
206 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_BROWSER_FULLSCREEN_EXIT_INSTRUCTION: | 178 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_BROWSER_FULLSCREEN_EXIT_INSTRUCTION: |
207 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_EXTENSION_FULLSCREEN_EXIT_INSTRUCTION: | 179 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_EXTENSION_FULLSCREEN_EXIT_INSTRUCTION: |
208 // Only fullscreen in effect. | 180 // Only fullscreen in effect. |
209 fullscreen = true; | 181 fullscreen = true; |
210 break; | 182 break; |
211 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_MOUSELOCK_EXIT_INSTRUCTION: | 183 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_MOUSELOCK_EXIT_INSTRUCTION: |
212 // Only mouselock in effect. | 184 // Only mouselock in effect. |
213 mouselock = true; | 185 mouselock = true; |
214 break; | 186 break; |
215 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_FULLSCREEN_MOUSELOCK_BUTTONS: | |
216 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_FULLSCREEN_MOUSELOCK_EXIT_INSTRUCTION: | 187 case EXCLUSIVE_ACCESS_BUBBLE_TYPE_FULLSCREEN_MOUSELOCK_EXIT_INSTRUCTION: |
217 // Both in effect. | 188 // Both in effect. |
218 fullscreen = true; | 189 fullscreen = true; |
219 mouselock = true; | 190 mouselock = true; |
220 break; | 191 break; |
221 } | 192 } |
222 | 193 |
223 if (fullscreen) | 194 if (fullscreen) |
224 fullscreen_controller_.RecordBubbleReshownUMA(); | 195 fullscreen_controller_.RecordBubbleReshownUMA(); |
225 if (mouselock) | 196 if (mouselock) |
226 mouse_lock_controller_.RecordBubbleReshownUMA(); | 197 mouse_lock_controller_.RecordBubbleReshownUMA(); |
227 } | 198 } |
228 | 199 |
229 void ExclusiveAccessManager::HandleUserHeldEscape() { | 200 void ExclusiveAccessManager::HandleUserHeldEscape() { |
230 fullscreen_controller_.HandleUserPressedEscape(); | 201 fullscreen_controller_.HandleUserPressedEscape(); |
231 mouse_lock_controller_.HandleUserPressedEscape(); | 202 mouse_lock_controller_.HandleUserPressedEscape(); |
232 } | 203 } |
OLD | NEW |