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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: ios/clean/chrome/browser/ui/overlay_service/internal/overlay_scheduler.h
diff --git a/ios/clean/chrome/browser/ui/overlay_service/internal/overlay_scheduler.h b/ios/clean/chrome/browser/ui/overlay_service/internal/overlay_scheduler.h
new file mode 100644
index 0000000000000000000000000000000000000000..7d4571bc56808d428184d2d93c77f53ebc79eb88
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/overlay_service/internal/overlay_scheduler.h
@@ -0,0 +1,88 @@
+// 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_CLEAN_CHROME_BROWSER_UI_OVERLAYS_INTERNAL_OVERLAY_SCHEDULER_H_
+#define IOS_CLEAN_CHROME_BROWSER_UI_OVERLAYS_INTERNAL_OVERLAY_SCHEDULER_H_
+
+#include <Foundation/Foundation.h>
+#include <list>
+
+#import "ios/chrome/browser/web_state_list/web_state_list_observer.h"
+#import "ios/clean/chrome/browser/ui/overlay_service/internal/overlay_queue_observer.h"
+#import "ios/shared/chrome/browser/ui/browser_list/browser_user_data.h"
+
+@class BrowserCoordinator;
+@protocol OverlayPresentationCommands;
+@protocol TabGridCommands;
+
+namespace web {
+class WebState;
+}
+
+// An object that manages scheduling when overlays from various OverlayQueues
+// can be started. If an OverlayQueue requires a WebState's content area to be
+// visible, this class will update the WebStateLists's active WebState.
+class OverlayScheduler : public BrowserUserData<OverlayScheduler>,
marq (ping after 24h) 2017/06/23 10:42:01 Unit tests for this class?
+ public OverlayQueueObserver,
+ public WebStateListObserver {
+ public:
+ ~OverlayScheduler() override;
+
+ // Starts or stops observing |browser_|'s WebStateList and OverlayQueues.
+ void StartObservingBrowser();
+ void StopObservingBrowser();
+
+ // Whether a scheduled overlay is currently being shown.
+ bool IsShowingOverlay() const;
+
+ // Replaces the currently visible overlay with |overlay_coordinator|.
+ void ReplaceVisibleOverlay(BrowserCoordinator* overlay_coordinator);
+
+ // Cancels all scheduled overlays and empties overlay queues.
+ void CancelOverlays();
+
+ private:
+ friend class BrowserUserData<OverlayScheduler>;
+ // The Browser for which this object is scheduling overlays.
+ Browser* browser_;
+ // Whether the sheduler is currently observing |browser_|'s WebStateList and
+ // OverlayQueues.
+ bool observing_;
+ // The OverlayQueues that have queued overlays. After an overlay is stopped,
+ // the first queue is popped and the first ovelay in the next queue is
+ // started.
+ std::list<OverlayQueue*> overlay_queues_;
+
+ // Private constructor used by factory method.
+ explicit OverlayScheduler(Browser* browser);
+
+ // OverlayQueueObserver:
+ void OverlayQueueDidAddOverlay(OverlayQueue* queue) override;
+ void OverlayQueueWillReplaceVisibleOverlay(OverlayQueue* queue) override;
+ void OverlayQueueDidStopVisibleOverlay(OverlayQueue* queue) override;
+ void OverlayQueueDidCancelOverlays(OverlayQueue* queue) override;
+
+ // WebStateListObserver:
+ void WebStateInsertedAt(WebStateList* web_state_list,
+ web::WebState* web_state,
+ int index) override;
+ void WebStateDetachedAt(WebStateList* web_state_list,
+ web::WebState* web_state,
+ int index) override;
+
+ // Attempts to show the next queued overlay.
+ void TryToStartNextOverlay();
+ // Starts observing |web_state_list|. Also starts observing the OverlayQueue
+ // for each WebState in the list.
+ void StartObservingWebStateList(WebStateList* web_state_list);
+ // Stops observing |web_state_list| and the OverlayQueues for each WebState in
+ // the list. Also cancels any queues overlays.
+ void StopObservingWebStateList(WebStateList* web_state_list);
+ // Lazily creates an OverlayQueue for |web_state| and starts observing it.
+ void StartObservingQueueForWebState(web::WebState* web_state);
+ // Cancels the overlays in |web_state|'s OverlayQueue and stops observing it.
+ void StopObservingQueueForWebState(web::WebState* web_state);
+};
+
+#endif // IOS_CLEAN_CHROME_BROWSER_UI_OVERLAYS_INTERNAL_OVERLAY_SCHEDULER_H_

Powered by Google App Engine
This is Rietveld 408576698