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

Unified Diff: ios/web/crw_network_activity_indicator_manager.mm

Issue 988383002: Upstream various ios/web utilities and helpers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@web-public-upstreaming
Patch Set: Created 5 years, 9 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/web/crw_network_activity_indicator_manager.mm
diff --git a/ios/web/crw_network_activity_indicator_manager.mm b/ios/web/crw_network_activity_indicator_manager.mm
new file mode 100644
index 0000000000000000000000000000000000000000..ec8e0e39e9f4bd7d6080be885d1656a93faf82a9
--- /dev/null
+++ b/ios/web/crw_network_activity_indicator_manager.mm
@@ -0,0 +1,115 @@
+// Copyright 2014 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/web/crw_network_activity_indicator_manager.h"
+
+#import <UIKit/UIKit.h>
+
+#include "base/logging.h"
+#include "base/mac/scoped_nsobject.h"
+#include "base/threading/thread_checker.h"
+
+@interface CRWNetworkActivityIndicatorManager () {
+ base::scoped_nsobject<NSMutableDictionary> _groupCounts;
+ NSUInteger _totalCount;
+ base::ThreadChecker _threadChecker;
+}
+
+@end
+
+@implementation CRWNetworkActivityIndicatorManager
+
++ (CRWNetworkActivityIndicatorManager*)sharedInstance {
+ static CRWNetworkActivityIndicatorManager* instance =
+ [[CRWNetworkActivityIndicatorManager alloc] init];
+ return instance;
+}
+
+- (id)init {
Eugene But (OOO till 7-30) 2015/03/09 16:17:42 Optional: s/id/instancetype
+ self = [super init];
+ if (self) {
+ _groupCounts.reset([[NSMutableDictionary alloc] init]);
+ _totalCount = 0;
+ }
+ return self;
+}
+
+- (void)startNetworkTaskForGroup:(NSString*)group {
+ [self startNetworkTasks:1 forGroup:group];
+}
+
+- (void)stopNetworkTaskForGroup:(NSString*)group {
+ [self stopNetworkTasks:1 forGroup:group];
+}
+
+- (void)startNetworkTasks:(NSUInteger)numTasks forGroup:(NSString*)group {
+ DCHECK(_threadChecker.CalledOnValidThread());
+ DCHECK(group);
+ DCHECK_GT(numTasks, 0U);
+ NSUInteger count = 0;
+ NSNumber* number = [_groupCounts objectForKey:group];
+ if (number) {
+ count = [number unsignedIntegerValue];
+ DCHECK_GT(count, 0U);
+ }
+ count += numTasks;
+ [_groupCounts setObject:[NSNumber numberWithUnsignedInteger:count]
Eugene But (OOO till 7-30) 2015/03/09 16:17:42 Optional: @(count)
+ forKey:group];
+ _totalCount += numTasks;
+ if (_totalCount == numTasks) {
+ [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
+ }
+}
+
+- (void)stopNetworkTasks:(NSUInteger)numTasks forGroup:(NSString*)group {
+ DCHECK(_threadChecker.CalledOnValidThread());
+ DCHECK(group);
+ DCHECK_GT(numTasks, 0U);
+ NSNumber* number = [_groupCounts objectForKey:group];
+ DCHECK(number);
+ NSUInteger count = [number unsignedIntegerValue];
+ DCHECK(count >= numTasks);
+ count -= numTasks;
+ if (count == 0) {
+ [_groupCounts removeObjectForKey:group];
+ } else {
+ [_groupCounts setObject:[NSNumber numberWithUnsignedInteger:count]
Eugene But (OOO till 7-30) 2015/03/09 16:17:42 Optional: @(count)
+ forKey:group];
+ }
+ _totalCount -= numTasks;
+ if (_totalCount == 0) {
+ [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
+ }
+}
+
+- (NSUInteger)clearNetworkTasksForGroup:(NSString*)group {
+ DCHECK(_threadChecker.CalledOnValidThread());
+ DCHECK(group);
+ NSNumber* number = [_groupCounts objectForKey:group];
+ if (!number) {
+ return 0;
+ }
+ NSUInteger count = [number unsignedIntegerValue];
+ DCHECK_GT(count, 0U);
+ [self stopNetworkTasks:count forGroup:group];
+ return count;
+}
+
+- (NSUInteger)numNetworkTasksForGroup:(NSString*)group {
+ DCHECK(_threadChecker.CalledOnValidThread());
+ DCHECK(group);
+ NSNumber* number = [_groupCounts objectForKey:group];
+ if (!number) {
+ return 0;
+ }
+ return [number unsignedIntegerValue];
+}
+
+- (NSUInteger)numTotalNetworkTasks {
+ DCHECK(_threadChecker.CalledOnValidThread());
+ return _totalCount;
+}
+
Eugene But (OOO till 7-30) 2015/03/09 16:17:42 Optional: extra endline
+
+@end

Powered by Google App Engine
This is Rietveld 408576698