Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(181)

Side by Side Diff: ios/clean/chrome/browser/ui/overlays/overlay_service_impl.mm

Issue 2921833002: [iOS Clean] Created OverlayService.
Patch Set: Use service pattern Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698