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

Unified Diff: ios/net/request_tracker.mm

Issue 2630763002: Revert of Remove support for GlobalNetworkClientFactory from RequestTracker. (Closed)
Patch Set: 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ios/net/request_tracker.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/net/request_tracker.mm
diff --git a/ios/net/request_tracker.mm b/ios/net/request_tracker.mm
index 85dce7ffdf4d4dcc33eabfe457e70581d2b7e733..f72921a3398e92988483bf9f9db81e6f9474b4ca 100644
--- a/ios/net/request_tracker.mm
+++ b/ios/net/request_tracker.mm
@@ -18,6 +18,56 @@
// Reference to the single instance of the RequestTrackerFactory.
RequestTracker::RequestTrackerFactory* g_request_tracker_factory = nullptr;
+
+// Array of network client factories that should be added to any new request
+// tracker.
+class GlobalNetworkClientFactories {
+ public:
+ static GlobalNetworkClientFactories* GetInstance() {
+ if (!g_global_network_client_factories)
+ g_global_network_client_factories = new GlobalNetworkClientFactories;
+ return g_global_network_client_factories;
+ }
+
+ // Gets the factories.
+ NSArray* GetFactories() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ return factories_.get();
+ }
+
+ // Adds a factory.
+ void AddFactory(CRNForwardingNetworkClientFactory* factory) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK_EQ(NSNotFound,
+ static_cast<NSInteger>([factories_ indexOfObject:factory]));
+ DCHECK(!IsSelectorOverriden(factory, @selector(clientHandlingRequest:)));
+ DCHECK(!IsSelectorOverriden(factory,
+ @selector(clientHandlingResponse:request:)));
+ DCHECK(!IsSelectorOverriden(
+ factory, @selector(clientHandlingRedirect:url:response:)));
+ [factories_ addObject:factory];
+ }
+
+ // Returns true if |factory| re-implements |selector|.
+ // Only used for debugging.
+ bool IsSelectorOverriden(CRNForwardingNetworkClientFactory* factory,
+ SEL selector) {
+ return
+ [factory methodForSelector:selector] !=
+ [CRNForwardingNetworkClientFactory instanceMethodForSelector:selector];
+ }
+
+ private:
+ GlobalNetworkClientFactories() : factories_([[NSMutableArray alloc] init]) {}
+
+ base::scoped_nsobject<NSMutableArray> factories_;
+ base::ThreadChecker thread_checker_;
+
+ static GlobalNetworkClientFactories* g_global_network_client_factories;
+};
+
+GlobalNetworkClientFactories*
+ GlobalNetworkClientFactories::g_global_network_client_factories = nullptr;
} // namespace
@@ -58,6 +108,12 @@
}
}
+// static
+void RequestTracker::AddGlobalNetworkClientFactory(
+ CRNForwardingNetworkClientFactory* factory) {
+ GlobalNetworkClientFactories::GetInstance()->AddFactory(factory);
+}
+
RequestTracker::RequestTracker()
: client_factories_([[NSMutableArray alloc] init]),
initialized_(false),
@@ -83,6 +139,22 @@
DCHECK(thread_checker_.CalledOnValidThread());
DCHECK(!initialized_);
initialized_ = true;
+ for (CRNForwardingNetworkClientFactory* factory in
+ GlobalNetworkClientFactories::GetInstance()->GetFactories()) {
+ AddNetworkClientFactory(factory);
+ }
+}
+
+// static
+NSArray* RequestTracker::GlobalClientsHandlingAnyRequest() {
+ NSMutableArray* applicable_clients = [NSMutableArray array];
+ for (CRNForwardingNetworkClientFactory* factory in
+ GlobalNetworkClientFactories::GetInstance()->GetFactories()) {
+ CRNForwardingNetworkClient* client = [factory clientHandlingAnyRequest];
+ if (client)
+ [applicable_clients addObject:client];
+ }
+ return applicable_clients;
}
NSArray* RequestTracker::ClientsHandlingAnyRequest() {
« 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