OLD | NEW |
(Empty) | |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #import "ios/clean/chrome/browser/ui/overlays/overlay_service_impl.h" |
| 6 |
| 7 #include "base/logging.h" |
| 8 #import "ios/chrome/browser/web_state_list/web_state_list.h" |
| 9 #import "ios/clean/chrome/browser/ui/overlays/browser_coordinator+overlay_suppor
t.h" |
| 10 #import "ios/clean/chrome/browser/ui/overlays/browser_overlay_queue.h" |
| 11 #import "ios/clean/chrome/browser/ui/overlays/overlay_scheduler.h" |
| 12 #import "ios/clean/chrome/browser/ui/overlays/web_state_overlay_queue.h" |
| 13 #import "ios/shared/chrome/browser/ui/browser_list/browser_list.h" |
| 14 |
| 15 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 16 #error "This file requires ARC support." |
| 17 #endif |
| 18 |
| 19 OverlayServiceImpl::OverlayServiceImpl(BrowserList* browser_list) |
| 20 : browser_list_(browser_list) { |
| 21 DCHECK(browser_list_); |
| 22 for (int i = 0; i < browser_list_->count(); ++i) |
| 23 StartSchedulerForBrowser(browser_list_->GetBrowserAtIndex(i)); |
| 24 browser_list_->AddObserver(this); |
| 25 } |
| 26 |
| 27 void OverlayServiceImpl::OnBrowserCreated(BrowserList* browser_list, |
| 28 Browser* browser) { |
| 29 DCHECK_EQ(browser_list, browser_list_); |
| 30 StartSchedulerForBrowser(browser); |
| 31 } |
| 32 |
| 33 void OverlayServiceImpl::OnBrowserRemoved(BrowserList* browser_list, |
| 34 Browser* browser) { |
| 35 DCHECK_EQ(browser_list, browser_list_); |
| 36 StopSchedulerForBrowser(browser); |
| 37 } |
| 38 |
| 39 void OverlayServiceImpl::Shutdown() { |
| 40 for (int i = 0; i < browser_list_->count(); ++i) |
| 41 StopSchedulerForBrowser(browser_list_->GetBrowserAtIndex(i)); |
| 42 browser_list_->RemoveObserver(this); |
| 43 } |
| 44 |
| 45 bool OverlayServiceImpl::IsBrowserShowingOverlay(Browser* browser) const { |
| 46 if (browser_list_->GetIndexOfBrowser(browser) == BrowserList::kInvalidIndex) |
| 47 return false; |
| 48 OverlayScheduler* scheduler = OverlayScheduler::FromBrowser(browser); |
| 49 return scheduler && scheduler->IsShowingOverlay(); |
| 50 } |
| 51 |
| 52 void OverlayServiceImpl::ReplaceVisibleOverlay( |
| 53 BrowserCoordinator* overlay_coordinator, |
| 54 Browser* browser) { |
| 55 DCHECK(overlay_coordinator); |
| 56 DCHECK(IsBrowserShowingOverlay(browser)); |
| 57 OverlayScheduler::FromBrowser(browser)->ReplaceVisibleOverlay( |
| 58 overlay_coordinator); |
| 59 } |
| 60 |
| 61 void OverlayServiceImpl::ShowOverlayForWebState( |
| 62 BrowserCoordinator* overlay_coordinator, |
| 63 web::WebState* web_state) { |
| 64 DCHECK(overlay_coordinator.supportsOverlaying); |
| 65 WebStateOverlayQueue::FromWebState(web_state)->AddWebStateOverlay( |
| 66 overlay_coordinator); |
| 67 } |
| 68 |
| 69 void OverlayServiceImpl::SetWebStateParentCoordinator( |
| 70 BrowserCoordinator* parent_coordinator, |
| 71 web::WebState* web_state) { |
| 72 WebStateOverlayQueue::FromWebState(web_state)->SetWebStateParentCoordinator( |
| 73 parent_coordinator); |
| 74 } |
| 75 |
| 76 void OverlayServiceImpl::ShowOverlayForBrowser( |
| 77 BrowserCoordinator* overlay_coordinator, |
| 78 BrowserCoordinator* parent_coordiantor, |
| 79 Browser* browser) { |
| 80 DCHECK(overlay_coordinator.supportsOverlaying); |
| 81 BrowserOverlayQueue::FromBrowser(browser)->AddBrowserOverlay( |
| 82 overlay_coordinator, parent_coordiantor); |
| 83 } |
| 84 |
| 85 void OverlayServiceImpl::CancelOverlays() { |
| 86 for (int i = 0; i < browser_list_->count(); ++i) { |
| 87 OverlayScheduler::FromBrowser(browser_list_->GetBrowserAtIndex(i)) |
| 88 ->CancelOverlays(); |
| 89 } |
| 90 } |
| 91 |
| 92 void OverlayServiceImpl::CancelOverlayForWebState(web::WebState* web_state) { |
| 93 WebStateOverlayQueue::FromWebState(web_state)->CancelOverlays(); |
| 94 } |
| 95 |
| 96 void OverlayServiceImpl::StartSchedulerForBrowser(Browser* browser) { |
| 97 OverlayScheduler::CreateForBrowser(browser); |
| 98 } |
| 99 |
| 100 void OverlayServiceImpl::StopSchedulerForBrowser(Browser* browser) { |
| 101 OverlayScheduler::FromBrowser(browser)->StopObservingBrowser(); |
| 102 } |
OLD | NEW |