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

Side by Side Diff: components/cronet/ios/Cronet.mm

Issue 1858483002: Cronet for iOS with C API for GRPC support. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@small
Patch Set: Address comments, bundle libboringssl.a into libcronet.a Created 4 years, 8 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 | « components/cronet/ios/Cronet.h ('k') | components/cronet/ios/cronet_bidirectional_stream.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "components/cronet/ios/Cronet.h"
6
7 #include "base/lazy_instance.h"
8 #include "base/logging.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/memory/scoped_vector.h"
11 #include "base/strings/sys_string_conversions.h"
12 #include "components/cronet/ios/cronet_environment.h"
13 #include "components/cronet/url_request_context_config.h"
14
15 namespace {
16
17 // Currently there is one and only one instance of CronetEnvironment,
18 // which is leaked at the shutdown. We should consider allowing multiple
19 // instances if that makes sense in the future.
20 base::LazyInstance<scoped_ptr<cronet::CronetEnvironment>>::Leaky gChromeNet =
21 LAZY_INSTANCE_INITIALIZER;
22
23 BOOL gHttp2Enabled = YES;
24 BOOL gQuicEnabled = NO;
25 ScopedVector<cronet::URLRequestContextConfig::QuicHint> gQuicHints;
26 NSString* gUserAgent = nil;
27 NSString* gSslKeyLogFileName = nil;
28
29 } // namespace
30
31 @implementation Cronet
32
33 + (void)checkNotStarted {
34 CHECK(gChromeNet == NULL) << "Cronet is already started.";
35 }
36
37 + (void)setHttp2Enabled:(BOOL)http2Enabled {
38 [self checkNotStarted];
39 gHttp2Enabled = http2Enabled;
40 }
41
42 + (void)setQuicEnabled:(BOOL)quicEnabled {
43 [self checkNotStarted];
44 gQuicEnabled = quicEnabled;
45 }
46
47 + (void)addQuicHint:(NSString*)host port:(int)port altPort:(int)altPort {
48 [self checkNotStarted];
49 gQuicHints.push_back(new cronet::URLRequestContextConfig::QuicHint(
50 base::SysNSStringToUTF8(host), port, altPort));
51 }
52
53 + (void)setPartialUserAgent:(NSString*)userAgent {
54 [self checkNotStarted];
55 gUserAgent = userAgent;
56 }
57
58 + (void)setSslKeyLogFileName:(NSString*)sslKeyLogFileName {
59 [self checkNotStarted];
60 gSslKeyLogFileName = sslKeyLogFileName;
61 }
62
63 + (void)startInternal {
64 cronet::CronetEnvironment::Initialize();
65 std::string partialUserAgent = base::SysNSStringToUTF8(gUserAgent);
66 gChromeNet.Get().reset(new cronet::CronetEnvironment(partialUserAgent));
67
68 gChromeNet.Get()->set_http2_enabled(gHttp2Enabled);
69 gChromeNet.Get()->set_quic_enabled(gQuicEnabled);
70 gChromeNet.Get()->set_ssl_key_log_file_name(
71 base::SysNSStringToUTF8(gSslKeyLogFileName));
72 for (const auto& quicHint : gQuicHints) {
73 gChromeNet.Get()->AddQuicHint(quicHint->host, quicHint->port,
74 quicHint->alternate_port);
75 }
76 gChromeNet.Get()->Start();
77 }
78
79 + (void)start {
80 static dispatch_once_t onceToken;
81 dispatch_once(&onceToken, ^{
82 if (![NSThread isMainThread]) {
83 dispatch_sync(dispatch_get_main_queue(), ^(void) {
84 [self startInternal];
85 });
86 } else {
87 [self startInternal];
88 }
89 });
90 }
91
92 + (void)startNetLogToFile:(NSString*)fileName logBytes:(BOOL)logBytes {
93 if (gChromeNet.Get().get() && [fileName length]) {
94 gChromeNet.Get()->StartNetLog([fileName UTF8String], logBytes);
95 }
96 }
97
98 + (void)stopNetLog {
99 if (gChromeNet.Get().get()) {
100 gChromeNet.Get()->StopNetLog();
101 }
102 }
103
104 + (NSString*)getUserAgent {
105 if (!gChromeNet.Get().get()) {
106 return nil;
107 }
108
109 return [NSString stringWithCString:gChromeNet.Get()->user_agent().c_str()
110 encoding:[NSString defaultCStringEncoding]];
111 }
112
113 + (cronet_engine*)getGlobalEngine {
114 DCHECK(gChromeNet.Get().get());
115 if (gChromeNet.Get().get()) {
116 static cronet_engine engine;
117 engine.obj = gChromeNet.Get().get();
118 return &engine;
119 }
120 return nil;
121 }
122
123 @end
OLDNEW
« no previous file with comments | « components/cronet/ios/Cronet.h ('k') | components/cronet/ios/cronet_bidirectional_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698