Index: ash/common/shelf/wm_shelf.cc |
diff --git a/ash/common/shelf/wm_shelf.cc b/ash/common/shelf/wm_shelf.cc |
index de85bfb6121d22ef94a3cb5f7e01d46f52f075cb..d1d09c035f76e2bf5deaca46be21aaedfe8fdd08 100644 |
--- a/ash/common/shelf/wm_shelf.cc |
+++ b/ash/common/shelf/wm_shelf.cc |
@@ -4,6 +4,7 @@ |
#include "ash/common/shelf/wm_shelf.h" |
+#include "ash/common/shelf/shelf_controller.h" |
#include "ash/common/shelf/shelf_delegate.h" |
#include "ash/common/shelf/shelf_item_delegate.h" |
#include "ash/common/shelf/shelf_layout_manager.h" |
@@ -12,6 +13,7 @@ |
#include "ash/common/shelf/shelf_widget.h" |
#include "ash/common/shelf/wm_shelf_observer.h" |
#include "ash/common/shell_window_ids.h" |
+#include "ash/common/system/tray/system_tray_delegate.h" |
#include "ash/common/wm_lookup.h" |
#include "ash/common/wm_root_window_controller.h" |
#include "ash/common/wm_shell.h" |
@@ -26,6 +28,33 @@ WmShelf* WmShelf::ForWindow(WmWindow* window) { |
return window->GetRootWindowController()->GetShelf(); |
} |
+// static |
+bool WmShelf::CanChangeShelfAlignment() { |
+ if (WmShell::Get()->system_tray_delegate()->IsUserSupervised()) |
+ return false; |
+ |
+ LoginStatus login_status = |
+ WmShell::Get()->system_tray_delegate()->GetUserLoginStatus(); |
+ |
+ switch (login_status) { |
+ case LoginStatus::LOCKED: |
+ // Shelf alignment changes can be requested while being locked, but will |
+ // be applied upon unlock. |
+ case LoginStatus::USER: |
+ case LoginStatus::OWNER: |
+ return true; |
+ case LoginStatus::PUBLIC: |
+ case LoginStatus::SUPERVISED: |
+ case LoginStatus::GUEST: |
+ case LoginStatus::KIOSK_APP: |
+ case LoginStatus::NOT_LOGGED_IN: |
+ return false; |
+ } |
+ |
+ NOTREACHED(); |
+ return false; |
+} |
+ |
void WmShelf::CreateShelfWidget(WmWindow* root) { |
DCHECK(!shelf_widget_); |
WmWindow* shelf_container = |
@@ -62,15 +91,13 @@ void WmShelf::InitializeShelf() { |
// When the shelf is created the alignment is unlocked. Chrome will update the |
// alignment later from preferences. |
alignment_ = SHELF_ALIGNMENT_BOTTOM; |
- // NOTE: The delegate may access WmShelf. |
- WmShell::Get()->shelf_delegate()->OnShelfCreated(this); |
+ WmShell::Get()->shelf_controller()->NotifyShelfCreated(this); |
} |
void WmShelf::ShutdownShelf() { |
DCHECK(shelf_view_); |
shelf_locking_manager_.reset(); |
shelf_view_ = nullptr; |
- WmShell::Get()->shelf_delegate()->OnShelfDestroyed(this); |
} |
bool WmShelf::IsShelfInitialized() const { |
@@ -97,8 +124,8 @@ void WmShelf::SetAlignment(ShelfAlignment alignment) { |
alignment_ = alignment; |
// The ShelfWidget notifies the ShelfView of the alignment change. |
shelf_widget_->OnShelfAlignmentChanged(); |
- WmShell::Get()->shelf_delegate()->OnShelfAlignmentChanged(this); |
shelf_layout_manager_->LayoutShelf(); |
+ WmShell::Get()->shelf_controller()->NotifyShelfAlignmentChanged(this); |
WmShell::Get()->NotifyShelfAlignmentChanged(GetWindow()->GetRootWindow()); |
} |
@@ -142,7 +169,7 @@ void WmShelf::SetAutoHideBehavior(ShelfAutoHideBehavior auto_hide_behavior) { |
return; |
auto_hide_behavior_ = auto_hide_behavior; |
- WmShell::Get()->shelf_delegate()->OnShelfAutoHideBehaviorChanged(this); |
+ WmShell::Get()->shelf_controller()->NotifyShelfAutoHideBehaviorChanged(this); |
WmShell::Get()->NotifyShelfAutoHideBehaviorChanged( |
GetWindow()->GetRootWindow()); |
} |