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

Side by Side Diff: ios/clean/chrome/browser/ui/overlay_service/internal/overlay_scheduler.h

Issue 2921833002: [iOS Clean] Created OverlayService.
Patch Set: rebase & Mark's comments 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 #ifndef IOS_CLEAN_CHROME_BROWSER_UI_OVERLAYS_INTERNAL_OVERLAY_SCHEDULER_H_
6 #define IOS_CLEAN_CHROME_BROWSER_UI_OVERLAYS_INTERNAL_OVERLAY_SCHEDULER_H_
7
8 #include <Foundation/Foundation.h>
9 #include <list>
10
11 #import "ios/chrome/browser/web_state_list/web_state_list_observer.h"
12 #import "ios/clean/chrome/browser/ui/overlay_service/internal/overlay_queue_obse rver.h"
13 #import "ios/shared/chrome/browser/ui/browser_list/browser_user_data.h"
14
15 @class BrowserCoordinator;
16 @protocol OverlayPresentationCommands;
17 @protocol TabGridCommands;
18
19 namespace web {
20 class WebState;
21 }
22
23 // An object that manages scheduling when overlays from various OverlayQueues
24 // can be started. If an OverlayQueue requires a WebState's content area to be
25 // visible, this class will update the WebStateLists's active WebState.
26 class OverlayScheduler : public BrowserUserData<OverlayScheduler>,
marq (ping after 24h) 2017/06/23 10:42:01 Unit tests for this class?
27 public OverlayQueueObserver,
28 public WebStateListObserver {
29 public:
30 ~OverlayScheduler() override;
31
32 // Starts or stops observing |browser_|'s WebStateList and OverlayQueues.
33 void StartObservingBrowser();
34 void StopObservingBrowser();
35
36 // Whether a scheduled overlay is currently being shown.
37 bool IsShowingOverlay() const;
38
39 // Replaces the currently visible overlay with |overlay_coordinator|.
40 void ReplaceVisibleOverlay(BrowserCoordinator* overlay_coordinator);
41
42 // Cancels all scheduled overlays and empties overlay queues.
43 void CancelOverlays();
44
45 private:
46 friend class BrowserUserData<OverlayScheduler>;
47 // The Browser for which this object is scheduling overlays.
48 Browser* browser_;
49 // Whether the sheduler is currently observing |browser_|'s WebStateList and
50 // OverlayQueues.
51 bool observing_;
52 // The OverlayQueues that have queued overlays. After an overlay is stopped,
53 // the first queue is popped and the first ovelay in the next queue is
54 // started.
55 std::list<OverlayQueue*> overlay_queues_;
56
57 // Private constructor used by factory method.
58 explicit OverlayScheduler(Browser* browser);
59
60 // OverlayQueueObserver:
61 void OverlayQueueDidAddOverlay(OverlayQueue* queue) override;
62 void OverlayQueueWillReplaceVisibleOverlay(OverlayQueue* queue) override;
63 void OverlayQueueDidStopVisibleOverlay(OverlayQueue* queue) override;
64 void OverlayQueueDidCancelOverlays(OverlayQueue* queue) override;
65
66 // WebStateListObserver:
67 void WebStateInsertedAt(WebStateList* web_state_list,
68 web::WebState* web_state,
69 int index) override;
70 void WebStateDetachedAt(WebStateList* web_state_list,
71 web::WebState* web_state,
72 int index) override;
73
74 // Attempts to show the next queued overlay.
75 void TryToStartNextOverlay();
76 // Starts observing |web_state_list|. Also starts observing the OverlayQueue
77 // for each WebState in the list.
78 void StartObservingWebStateList(WebStateList* web_state_list);
79 // Stops observing |web_state_list| and the OverlayQueues for each WebState in
80 // the list. Also cancels any queues overlays.
81 void StopObservingWebStateList(WebStateList* web_state_list);
82 // Lazily creates an OverlayQueue for |web_state| and starts observing it.
83 void StartObservingQueueForWebState(web::WebState* web_state);
84 // Cancels the overlays in |web_state|'s OverlayQueue and stops observing it.
85 void StopObservingQueueForWebState(web::WebState* web_state);
86 };
87
88 #endif // IOS_CLEAN_CHROME_BROWSER_UI_OVERLAYS_INTERNAL_OVERLAY_SCHEDULER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698