| Index: ios/clean/chrome/browser/ui/overlays/browser_overlay_queue.mm
|
| diff --git a/ios/clean/chrome/browser/ui/overlays/browser_overlay_queue.mm b/ios/clean/chrome/browser/ui/overlays/browser_overlay_queue.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..76e93547920a2d84c466278bd89bc7f6b93bcef1
|
| --- /dev/null
|
| +++ b/ios/clean/chrome/browser/ui/overlays/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/overlays/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);
|
| +}
|
|
|