| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ash/first_run/first_run_helper.h" |
| |
| #include <memory> |
| #include <utility> |
| |
| #include "ash/app_list/views/app_list_view.h" |
| #include "ash/first_run/desktop_cleaner.h" |
| #include "ash/root_window_controller.h" |
| #include "ash/session/session_controller.h" |
| #include "ash/shelf/app_list_button.h" |
| #include "ash/shelf/shelf.h" |
| #include "ash/shelf/shelf_widget.h" |
| #include "ash/shell.h" |
| #include "ash/system/status_area_widget.h" |
| #include "ash/system/unified/unified_system_tray.h" |
| #include "base/logging.h" |
| #include "ui/gfx/geometry/rect.h" |
| #include "ui/views/view.h" |
| |
| namespace ash { |
| namespace { |
| |
| } // namespace |
| |
| FirstRunHelper::FirstRunHelper() = default; |
| |
| FirstRunHelper::~FirstRunHelper() = default; |
| |
| void FirstRunHelper::BindRequest(mojom::FirstRunHelperRequest request) { |
| bindings_.AddBinding(this, std::move(request)); |
| } |
| |
| void FirstRunHelper::Start(mojom::FirstRunHelperClientPtr client) { |
| client_ = std::move(client); |
| cleaner_ = std::make_unique<DesktopCleaner>(); |
| Shell::Get()->session_controller()->AddObserver(this); |
| } |
| |
| void FirstRunHelper::Stop() { |
| Shell::Get()->session_controller()->RemoveObserver(this); |
| // Ensure the tray is closed. |
| CloseTrayBubble(); |
| cleaner_.reset(); |
| } |
| |
| void FirstRunHelper::GetAppListButtonBounds(GetAppListButtonBoundsCallback cb) { |
| Shelf* shelf = Shelf::ForWindow(Shell::GetPrimaryRootWindow()); |
| AppListButton* app_button = shelf->shelf_widget()->GetAppListButton(); |
| std::move(cb).Run(app_button->GetBoundsInScreen()); |
| } |
| |
| void FirstRunHelper::OpenTrayBubble(OpenTrayBubbleCallback cb) { |
| UnifiedSystemTray* tray = Shell::Get() |
| ->GetPrimaryRootWindowController() |
| ->GetStatusAreaWidget() |
| ->unified_system_tray(); |
| tray->ShowBubble(false /* show_by_click */); |
| std::move(cb).Run(tray->GetBubbleBoundsInScreen()); |
| } |
| |
| void FirstRunHelper::CloseTrayBubble() { |
| Shell::Get() |
| ->GetPrimaryRootWindowController() |
| ->GetStatusAreaWidget() |
| ->unified_system_tray() |
| ->CloseBubble(); |
| } |
| |
| void FirstRunHelper::OnLockStateChanged(bool locked) { |
| Cancel(); |
| } |
| |
| void FirstRunHelper::OnChromeTerminating() { |
| Cancel(); |
| } |
| |
| void FirstRunHelper::FlushForTesting() { |
| client_.FlushForTesting(); |
| } |
| |
| void FirstRunHelper::Cancel() { |
| if (client_) |
| client_->OnCancelled(); |
| } |
| |
| } // namespace ash |