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

Side by Side Diff: ios/net/request_tracker.mm

Issue 2633453004: Remove support for GlobalNetworkClientFactory from RequestTracker. (Closed)
Patch Set: Rebase. Created 3 years, 11 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 unified diff | Download patch
« no previous file with comments | « ios/net/request_tracker.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ios/net/request_tracker.h" 5 #include "ios/net/request_tracker.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #import "ios/net/clients/crn_forwarding_network_client.h" 8 #import "ios/net/clients/crn_forwarding_network_client.h"
9 #import "ios/net/clients/crn_forwarding_network_client_factory.h" 9 #import "ios/net/clients/crn_forwarding_network_client_factory.h"
10 10
11 #if !defined(__has_feature) || !__has_feature(objc_arc) 11 #if !defined(__has_feature) || !__has_feature(objc_arc)
12 #error "This file requires ARC support." 12 #error "This file requires ARC support."
13 #endif 13 #endif
14 14
15 namespace net { 15 namespace net {
16 16
17 namespace { 17 namespace {
18 18
19 // Reference to the single instance of the RequestTrackerFactory. 19 // Reference to the single instance of the RequestTrackerFactory.
20 RequestTracker::RequestTrackerFactory* g_request_tracker_factory = nullptr; 20 RequestTracker::RequestTrackerFactory* g_request_tracker_factory = nullptr;
21 21
22 // Array of network client factories that should be added to any new request
23 // tracker.
24 class GlobalNetworkClientFactories {
25 public:
26 static GlobalNetworkClientFactories* GetInstance() {
27 if (!g_global_network_client_factories)
28 g_global_network_client_factories = new GlobalNetworkClientFactories;
29 return g_global_network_client_factories;
30 }
31
32 // Gets the factories.
33 NSArray* GetFactories() {
34 DCHECK(thread_checker_.CalledOnValidThread());
35 return factories_.get();
36 }
37
38 // Adds a factory.
39 void AddFactory(CRNForwardingNetworkClientFactory* factory) {
40 DCHECK(thread_checker_.CalledOnValidThread());
41 DCHECK_EQ(NSNotFound,
42 static_cast<NSInteger>([factories_ indexOfObject:factory]));
43 DCHECK(!IsSelectorOverriden(factory, @selector(clientHandlingRequest:)));
44 DCHECK(!IsSelectorOverriden(factory,
45 @selector(clientHandlingResponse:request:)));
46 DCHECK(!IsSelectorOverriden(
47 factory, @selector(clientHandlingRedirect:url:response:)));
48 [factories_ addObject:factory];
49 }
50
51 // Returns true if |factory| re-implements |selector|.
52 // Only used for debugging.
53 bool IsSelectorOverriden(CRNForwardingNetworkClientFactory* factory,
54 SEL selector) {
55 return
56 [factory methodForSelector:selector] !=
57 [CRNForwardingNetworkClientFactory instanceMethodForSelector:selector];
58 }
59
60 private:
61 GlobalNetworkClientFactories() : factories_([[NSMutableArray alloc] init]) {}
62
63 base::scoped_nsobject<NSMutableArray> factories_;
64 base::ThreadChecker thread_checker_;
65
66 static GlobalNetworkClientFactories* g_global_network_client_factories;
67 };
68
69 GlobalNetworkClientFactories*
70 GlobalNetworkClientFactories::g_global_network_client_factories = nullptr;
71
72 } // namespace 22 } // namespace
73 23
74 RequestTracker::RequestTrackerFactory::~RequestTrackerFactory() { 24 RequestTracker::RequestTrackerFactory::~RequestTrackerFactory() {
75 } 25 }
76 26
77 // static 27 // static
78 void RequestTracker::SetRequestTrackerFactory(RequestTrackerFactory* factory) { 28 void RequestTracker::SetRequestTrackerFactory(RequestTrackerFactory* factory) {
79 g_request_tracker_factory = factory; 29 g_request_tracker_factory = factory;
80 } 30 }
81 31
(...skipping 19 matching lines...) Expand all
101 NSUInteger idx, 51 NSUInteger idx,
102 BOOL* stop) { 52 BOOL* stop) {
103 return [obj clientClass] == [factory clientClass]; 53 return [obj clientClass] == [factory clientClass];
104 }] == NSNotFound); 54 }] == NSNotFound);
105 [client_factories_ addObject:factory]; 55 [client_factories_ addObject:factory];
106 if ([factory requiresOrdering]) { 56 if ([factory requiresOrdering]) {
107 [client_factories_ sortUsingSelector:@selector(orderRelativeTo:)]; 57 [client_factories_ sortUsingSelector:@selector(orderRelativeTo:)];
108 } 58 }
109 } 59 }
110 60
111 // static
112 void RequestTracker::AddGlobalNetworkClientFactory(
113 CRNForwardingNetworkClientFactory* factory) {
114 GlobalNetworkClientFactories::GetInstance()->AddFactory(factory);
115 }
116
117 RequestTracker::RequestTracker() 61 RequestTracker::RequestTracker()
118 : client_factories_([[NSMutableArray alloc] init]), 62 : client_factories_([[NSMutableArray alloc] init]),
119 initialized_(false), 63 initialized_(false),
120 cache_mode_(CACHE_NORMAL), 64 cache_mode_(CACHE_NORMAL),
121 weak_ptr_factory_(this) { 65 weak_ptr_factory_(this) {
122 // RequestTracker can be created from the main thread and used from another 66 // RequestTracker can be created from the main thread and used from another
123 // thread. 67 // thread.
124 thread_checker_.DetachFromThread(); 68 thread_checker_.DetachFromThread();
125 } 69 }
126 70
127 RequestTracker::~RequestTracker() { 71 RequestTracker::~RequestTracker() {
128 } 72 }
129 73
130 base::WeakPtr<RequestTracker> RequestTracker::GetWeakPtr() { 74 base::WeakPtr<RequestTracker> RequestTracker::GetWeakPtr() {
131 return weak_ptr_factory_.GetWeakPtr(); 75 return weak_ptr_factory_.GetWeakPtr();
132 } 76 }
133 77
134 void RequestTracker::InvalidateWeakPtrs() { 78 void RequestTracker::InvalidateWeakPtrs() {
135 weak_ptr_factory_.InvalidateWeakPtrs(); 79 weak_ptr_factory_.InvalidateWeakPtrs();
136 } 80 }
137 81
138 void RequestTracker::Init() { 82 void RequestTracker::Init() {
139 DCHECK(thread_checker_.CalledOnValidThread()); 83 DCHECK(thread_checker_.CalledOnValidThread());
140 DCHECK(!initialized_); 84 DCHECK(!initialized_);
141 initialized_ = true; 85 initialized_ = true;
142 for (CRNForwardingNetworkClientFactory* factory in
143 GlobalNetworkClientFactories::GetInstance()->GetFactories()) {
144 AddNetworkClientFactory(factory);
145 }
146 }
147
148 // static
149 NSArray* RequestTracker::GlobalClientsHandlingAnyRequest() {
150 NSMutableArray* applicable_clients = [NSMutableArray array];
151 for (CRNForwardingNetworkClientFactory* factory in
152 GlobalNetworkClientFactories::GetInstance()->GetFactories()) {
153 CRNForwardingNetworkClient* client = [factory clientHandlingAnyRequest];
154 if (client)
155 [applicable_clients addObject:client];
156 }
157 return applicable_clients;
158 } 86 }
159 87
160 NSArray* RequestTracker::ClientsHandlingAnyRequest() { 88 NSArray* RequestTracker::ClientsHandlingAnyRequest() {
161 DCHECK(thread_checker_.CalledOnValidThread()); 89 DCHECK(thread_checker_.CalledOnValidThread());
162 DCHECK(initialized_); 90 DCHECK(initialized_);
163 NSMutableArray* applicable_clients = [NSMutableArray array]; 91 NSMutableArray* applicable_clients = [NSMutableArray array];
164 for (CRNForwardingNetworkClientFactory* factory in client_factories_.get()) { 92 for (CRNForwardingNetworkClientFactory* factory in client_factories_.get()) {
165 CRNForwardingNetworkClient* client = [factory clientHandlingAnyRequest]; 93 CRNForwardingNetworkClient* client = [factory clientHandlingAnyRequest];
166 if (client) 94 if (client)
167 [applicable_clients addObject:client]; 95 [applicable_clients addObject:client];
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 DCHECK(thread_checker_.CalledOnValidThread()); 147 DCHECK(thread_checker_.CalledOnValidThread());
220 return cache_mode_; 148 return cache_mode_;
221 } 149 }
222 150
223 void RequestTracker::SetCacheMode(RequestTracker::CacheMode mode) { 151 void RequestTracker::SetCacheMode(RequestTracker::CacheMode mode) {
224 DCHECK(thread_checker_.CalledOnValidThread()); 152 DCHECK(thread_checker_.CalledOnValidThread());
225 cache_mode_ = mode; 153 cache_mode_ = mode;
226 } 154 }
227 155
228 } // namespace net 156 } // namespace net
OLDNEW
« no previous file with comments | « ios/net/request_tracker.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698