| Index: ios/shared/chrome/browser/tabs/web_state_list_fast_enumeration_helper.mm
|
| diff --git a/ios/shared/chrome/browser/tabs/web_state_list_fast_enumeration_helper.mm b/ios/shared/chrome/browser/tabs/web_state_list_fast_enumeration_helper.mm
|
| deleted file mode 100644
|
| index e1fd571c23e51be1959e9064e068d3b0571d38b2..0000000000000000000000000000000000000000
|
| --- a/ios/shared/chrome/browser/tabs/web_state_list_fast_enumeration_helper.mm
|
| +++ /dev/null
|
| @@ -1,147 +0,0 @@
|
| -// 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/shared/chrome/browser/tabs/web_state_list_fast_enumeration_helper.h"
|
| -
|
| -#include <algorithm>
|
| -#include <cstdint>
|
| -#include <memory>
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/memory/ptr_util.h"
|
| -#import "ios/shared/chrome/browser/tabs/web_state_list.h"
|
| -#import "ios/shared/chrome/browser/tabs/web_state_list_observer_bridge.h"
|
| -
|
| -#if !defined(__has_feature) || !__has_feature(objc_arc)
|
| -#error "This file requires ARC support."
|
| -#endif
|
| -
|
| -#pragma mark - WebStateListFastEnumerationHelperObserver
|
| -
|
| -// Observer for WebStateListFastEnumerationHelper that will increment the
|
| -// mutation counter provided in the constructor every time the WebStateList
|
| -// it is tracking is modified.
|
| -@interface WebStateListFastEnumerationHelperObserver
|
| - : NSObject<WebStateListObserving>
|
| -
|
| -// Initializes the observer with a pointer to the mutation counter to increment
|
| -// when the WebStateList is mutated.
|
| -- (instancetype)initWithMutationCounter:(unsigned long*)mutationCounter
|
| - NS_DESIGNATED_INITIALIZER;
|
| -
|
| -- (instancetype)init NS_UNAVAILABLE;
|
| -
|
| -@end
|
| -
|
| -@implementation WebStateListFastEnumerationHelperObserver {
|
| - // Pointer to the mutation counter to increment when the WebStateList is
|
| - // mutated.
|
| - unsigned long* _mutationCounter;
|
| -}
|
| -
|
| -- (instancetype)initWithMutationCounter:(unsigned long*)mutationCounter {
|
| - DCHECK(mutationCounter);
|
| - if ((self = [super init]))
|
| - _mutationCounter = mutationCounter;
|
| - return self;
|
| -}
|
| -
|
| -#pragma mark WebStateListObserving
|
| -
|
| -- (void)webStateList:(WebStateList*)webStateList
|
| - didInsertWebState:(web::WebState*)webState
|
| - atIndex:(int)index {
|
| - ++*_mutationCounter;
|
| -}
|
| -
|
| -- (void)webStateList:(WebStateList*)webStateList
|
| - didMoveWebState:(web::WebState*)webState
|
| - fromIndex:(int)fromIndex
|
| - toIndex:(int)toIndex {
|
| - ++*_mutationCounter;
|
| -}
|
| -
|
| -- (void)webStateList:(WebStateList*)webStateList
|
| - didReplaceWebState:(web::WebState*)oldWebState
|
| - byWebState:(web::WebState*)newWebState
|
| - atIndex:(int)index {
|
| - ++*_mutationCounter;
|
| -}
|
| -
|
| -- (void)webStateList:(WebStateList*)webStateList
|
| - didDetachWebState:(web::WebState*)webState
|
| - atIndex:(int)index {
|
| - ++*_mutationCounter;
|
| -}
|
| -
|
| -@end
|
| -
|
| -#pragma mark - WebStateListFastEnumerationHelper
|
| -
|
| -@implementation WebStateListFastEnumerationHelper {
|
| - // The wrapped WebStateList.
|
| - WebStateList* _webStateList;
|
| -
|
| - // Helper that returns Objective-C proxies for WebState objects.
|
| - id<WebStateProxyFactory> _proxyFactory;
|
| -
|
| - // WebStateListObserverBridge forwarding the events of WebStateList to self.
|
| - std::unique_ptr<WebStateListObserverBridge> _observerBridge;
|
| -
|
| - // Counter incremented each time the WebStateList is mutated.
|
| - unsigned long _mutationCounter;
|
| -}
|
| -
|
| -- (instancetype)initWithWebStateList:(WebStateList*)webStateList
|
| - proxyFactory:(id<WebStateProxyFactory>)proxyFactory {
|
| - DCHECK(webStateList);
|
| - DCHECK(proxyFactory);
|
| - if ((self = [super init])) {
|
| - _webStateList = webStateList;
|
| - _proxyFactory = proxyFactory;
|
| - _observerBridge = base::MakeUnique<WebStateListObserverBridge>(
|
| - [[WebStateListFastEnumerationHelperObserver alloc]
|
| - initWithMutationCounter:&_mutationCounter]);
|
| - _webStateList->AddObserver(_observerBridge.get());
|
| - }
|
| - return self;
|
| -}
|
| -
|
| -- (void)dealloc {
|
| - _webStateList->RemoveObserver(_observerBridge.get());
|
| -}
|
| -
|
| -#pragma mark NSFastEnumeration
|
| -
|
| -- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState*)state
|
| - objects:(id __unsafe_unretained*)buffer
|
| - count:(NSUInteger)len {
|
| - // The number of objects already returned is stored in |state->state|. For
|
| - // the first iteration, the counter will be zero and the rest of the state
|
| - // structure need to be initialised.
|
| - DCHECK_LE(state->state, static_cast<unsigned long>(INT_MAX));
|
| - const int offset = state->state;
|
| - if (offset == 0)
|
| - state->mutationsPtr = &_mutationCounter;
|
| -
|
| - if (len > static_cast<unsigned long>(INT_MAX))
|
| - len = static_cast<unsigned long>(INT_MAX);
|
| -
|
| - DCHECK_LE(offset, _webStateList->count());
|
| - const int count =
|
| - std::min(static_cast<int>(len), _webStateList->count() - offset);
|
| -
|
| - for (int index = 0; index < count; ++index) {
|
| - web::WebState* webState = _webStateList->GetWebStateAt(offset + index);
|
| - __autoreleasing id wrapper = [_proxyFactory proxyForWebState:webState];
|
| - buffer[index] = wrapper;
|
| - }
|
| -
|
| - state->state += count;
|
| - state->itemsPtr = buffer;
|
| -
|
| - return static_cast<NSUInteger>(count);
|
| -}
|
| -
|
| -@end
|
|
|