Index: ios/clean/chrome/browser/ui/overlay_service/internal/browser_overlay_queue.mm |
diff --git a/ios/clean/chrome/browser/ui/overlay_service/internal/browser_overlay_queue.mm b/ios/clean/chrome/browser/ui/overlay_service/internal/browser_overlay_queue.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..50429372a38ae60da6f420a3de0d00843dae1a94 |
--- /dev/null |
+++ b/ios/clean/chrome/browser/ui/overlay_service/internal/browser_overlay_queue.mm |
@@ -0,0 +1,52 @@ |
+// 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. |
+ |
+#import "ios/clean/chrome/browser/ui/overlay_service/internal/browser_overlay_queue.h" |
+ |
+#include "base/logging.h" |
+#import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator.h" |
+ |
+#if !defined(__has_feature) || !__has_feature(objc_arc) |
+#error "This file requires ARC support." |
+#endif |
+ |
+DEFINE_BROWSER_USER_DATA_KEY(BrowserOverlayQueue); |
+ |
+BrowserOverlayQueue::BrowserOverlayQueue(Browser* browser) |
+ : overlay_parents_([[NSMutableArray alloc] init]) {} |
+ |
+BrowserOverlayQueue::~BrowserOverlayQueue() {} |
+ |
+void BrowserOverlayQueue::StartNextOverlay() { |
+ DCHECK(HasQueuedOverlays()); |
+ DCHECK_EQ(GetCount(), [overlay_parents_ count]); |
+ DCHECK(!IsShowingOverlay()); |
+ [GetFirstOverlay() startOverlayingCoordinator:[overlay_parents_ firstObject]]; |
+ OverlayWasStarted(); |
+} |
+ |
+void BrowserOverlayQueue::ReplaceVisibleOverlay( |
+ BrowserCoordinator* overlay_coordinator) { |
+ DCHECK(IsShowingOverlay()); |
+ // Prepend the current overlay's parent to |overlay_parents_| so that the |
+ // replacement overlay can also use that as its parents. |
+ [overlay_parents_ addObject:[overlay_parents_ firstObject]]; |
+ OverlayQueue::ReplaceVisibleOverlay(overlay_coordinator); |
+} |
+ |
+void BrowserOverlayQueue::OverlayWasStopped( |
+ BrowserCoordinator* overlay_coordinator) { |
+ DCHECK_EQ(GetFirstOverlay(), overlay_coordinator); |
+ [overlay_parents_ removeObjectAtIndex:0]; |
+ OverlayQueue::OverlayWasStopped(overlay_coordinator); |
+} |
+ |
+void BrowserOverlayQueue::AddBrowserOverlay( |
+ BrowserCoordinator* overlay_coordinator, |
+ BrowserCoordinator* overlay_parent) { |
+ DCHECK(overlay_coordinator); |
+ DCHECK(overlay_parent); |
+ [overlay_parents_ addObject:overlay_parent]; |
+ OverlayQueue::AddOverlay(overlay_coordinator); |
+} |