1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file.
4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/cronet/url_request_context_config.h"
6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "net/url_request/url_request_context_builder.h"
8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace cronet {
10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define DEFINE_CONTEXT_CONFIG(x) const char REQUEST_CONTEXT_CONFIG_##x[] = #x;
12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/cronet/url_request_context_config_list.h"
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#undef DEFINE_CONTEXT_CONFIG
14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciURLRequestContextConfig::QuicHint::QuicHint() {
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciURLRequestContextConfig::QuicHint::~QuicHint() {
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// static
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid URLRequestContextConfig::QuicHint::RegisterJSONConverter(
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    base::JSONValueConverter<URLRequestContextConfig::QuicHint>* converter) {
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  converter->RegisterStringField(REQUEST_CONTEXT_CONFIG_QUIC_HINT_HOST,
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 &URLRequestContextConfig::QuicHint::host);
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  converter->RegisterIntField(
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      REQUEST_CONTEXT_CONFIG_QUIC_HINT_PORT,
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      &URLRequestContextConfig::QuicHint::port);
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  converter->RegisterIntField(
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      REQUEST_CONTEXT_CONFIG_QUIC_HINT_ALT_PORT,
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      &URLRequestContextConfig::QuicHint::alternate_port);
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)URLRequestContextConfig::URLRequestContextConfig() {
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)URLRequestContextConfig::~URLRequestContextConfig() {
38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void URLRequestContextConfig::ConfigureURLRequestContextBuilder(
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    net::URLRequestContextBuilder* context_builder) {
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string config_cache;
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (http_cache != REQUEST_CONTEXT_CONFIG_HTTP_CACHE_DISABLED) {
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    net::URLRequestContextBuilder::HttpCacheParams cache_params;
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    if (http_cache == REQUEST_CONTEXT_CONFIG_HTTP_CACHE_DISK &&
46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        !storage_path.empty()) {
47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      cache_params.type = net::URLRequestContextBuilder::HttpCacheParams::DISK;
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      cache_params.path = base::FilePath(storage_path);
49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    } else {
50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      cache_params.type =
51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)          net::URLRequestContextBuilder::HttpCacheParams::IN_MEMORY;
52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    }
53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    cache_params.max_size = http_cache_max_size;
54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    context_builder->EnableHttpCache(cache_params);
55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  } else {
56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    context_builder->DisableHttpCache();
57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  context_builder->SetSpdyAndQuicEnabled(enable_spdy, enable_quic);
60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // TODO(mef): Use |config| to set cookies.
61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// static
64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void URLRequestContextConfig::RegisterJSONConverter(
65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    base::JSONValueConverter<URLRequestContextConfig>* converter) {
66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  converter->RegisterBoolField(REQUEST_CONTEXT_CONFIG_ENABLE_QUIC,
67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                               &URLRequestContextConfig::enable_quic);
68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  converter->RegisterBoolField(REQUEST_CONTEXT_CONFIG_ENABLE_SPDY,
69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                               &URLRequestContextConfig::enable_spdy);
70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  converter->RegisterStringField(REQUEST_CONTEXT_CONFIG_HTTP_CACHE,
71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                 &URLRequestContextConfig::http_cache);
72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  converter->RegisterIntField(REQUEST_CONTEXT_CONFIG_HTTP_CACHE_MAX_SIZE,
73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                              &URLRequestContextConfig::http_cache_max_size);
74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  converter->RegisterStringField(REQUEST_CONTEXT_CONFIG_STORAGE_PATH,
75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                 &URLRequestContextConfig::storage_path);
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  converter->RegisterRepeatedMessage(REQUEST_CONTEXT_CONFIG_QUIC_HINTS,
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                     &URLRequestContextConfig::quic_hints);
78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}  // namespace cronet
81