blob: a607bf7f6e67705954c18d66ea23857a0d74aa13 [file] [log] [blame]
// Copyright 2017 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.
#ifndef IOS_CHROME_BROWSER_UI_OVERLAYS_OVERLAY_SERVICE_IMPL_H_
#define IOS_CHROME_BROWSER_UI_OVERLAYS_OVERLAY_SERVICE_IMPL_H_
#include "base/observer_list.h"
#import "ios/chrome/browser/ui/browser_list/browser_list_observer.h"
#import "ios/chrome/browser/ui/overlays/overlay_scheduler_observer.h"
#import "ios/chrome/browser/ui/overlays/overlay_service.h"
class BrowserList;
// Concrete subclass of OverlayService.
class OverlayServiceImpl : public BrowserListObserver,
public OverlaySchedulerObserver,
public OverlayService {
public:
// Constructor for an OverlayService that schedules overlays for the Browsers
// in |browser_list|.
OverlayServiceImpl(BrowserList* browser_list);
~OverlayServiceImpl() override;
private:
// The OverlayServiceObservers.
base::ObserverList<OverlayServiceObserver> observers_;
// The BrowserList passed on implementation.
BrowserList* browser_list_;
// BrowserListObserver:
void OnBrowserCreated(BrowserList* browser_list, Browser* browser) override;
void OnBrowserRemoved(BrowserList* browser_list, Browser* browser) override;
// KeyedService:
void Shutdown() override;
// OverlaySchedulerObserver:
void OverlaySchedulerWillShowOverlay(OverlayScheduler* scheduler,
web::WebState* web_state) override;
// OverlayService:
void AddObserver(OverlayServiceObserver* observer) override;
void RemoveObserver(OverlayServiceObserver* observer) override;
void PauseServiceForBrowser(Browser* browser) override;
void ResumeServiceForBrowser(Browser* browser) override;
bool IsPausedForBrowser(Browser* browser) const override;
bool IsBrowserShowingOverlay(Browser* browser) const override;
void ReplaceVisibleOverlay(OverlayCoordinator* overlay_coordinator,
Browser* browser) override;
void CancelOverlays() override;
void ShowOverlayForBrowser(OverlayCoordinator* overlay_coordinator,
BrowserCoordinator* parent_coordiantor,
Browser* browser) override;
void CancelAllOverlaysForBrowser(Browser* browser) override;
void ShowOverlayForWebState(OverlayCoordinator* overlay_coordinator,
web::WebState* web_state) override;
void SetWebStateParentCoordinator(BrowserCoordinator* parent_coordinator,
web::WebState* web_state) override;
void CancelAllOverlaysForWebState(web::WebState* web_state) override;
// Sets up or tears down the OverlayQueueManager and OverlayScheduler for
// |browser|.
void StartServiceForBrowser(Browser* browser);
void StopServiceForBrowser(Browser* browser);
DISALLOW_COPY_AND_ASSIGN(OverlayServiceImpl);
};
#endif // IOS_CHROME_BROWSER_UI_OVERLAYS_OVERLAY_SERVICE_IMPL_H_