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

Unified Diff: components/cronet/android/url_request_context_adapter.cc

Issue 624443003: Setup ProxyConfigServiceAndroid in Cronet (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Initialize boolean to false Created 6 years, 2 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 | « components/cronet/android/url_request_context_adapter.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/cronet/android/url_request_context_adapter.cc
diff --git a/components/cronet/android/url_request_context_adapter.cc b/components/cronet/android/url_request_context_adapter.cc
index ffd934459d400c98f35a6299fbefd5653e5b50fd..bed6f140c5e423be5c1a9447cb82a7d4e3e74a6b 100644
--- a/components/cronet/android/url_request_context_adapter.cc
+++ b/components/cronet/android/url_request_context_adapter.cc
@@ -8,6 +8,7 @@
#include "base/bind.h"
#include "base/files/file_util.h"
+#include "base/message_loop/message_loop.h"
#include "base/single_thread_task_runner.h"
#include "components/cronet/url_request_context_config.h"
#include "net/base/net_errors.h"
@@ -16,7 +17,6 @@
#include "net/http/http_auth_handler_factory.h"
#include "net/http/http_network_layer.h"
#include "net/http/http_server_properties.h"
-#include "net/proxy/proxy_config_service_fixed.h"
#include "net/proxy/proxy_service.h"
#include "net/ssl/ssl_config_service_defaults.h"
#include "net/url_request/static_http_user_agent_settings.h"
@@ -26,6 +26,10 @@
namespace {
+// MessageLoop on the main thread, which is where objects that receive Java
+// notifications generally live.
+base::MessageLoop* g_main_message_loop = nullptr;
+
class BasicNetworkDelegate : public net::NetworkDelegate {
public:
BasicNetworkDelegate() {}
@@ -127,33 +131,43 @@ void URLRequestContextAdapter::Initialize(
base::Thread::Options options;
options.message_loop_type = base::MessageLoop::TYPE_IO;
network_thread_->StartWithOptions(options);
+ config_ = config.Pass();
+}
+
+void URLRequestContextAdapter::InitRequestContextOnMainThread() {
+ if (!base::MessageLoop::current()) {
+ DCHECK(!g_main_message_loop);
+ g_main_message_loop = new base::MessageLoopForUI();
+ base::MessageLoopForUI::current()->Start();
+ }
+ DCHECK_EQ(g_main_message_loop, base::MessageLoop::current());
+ proxy_config_service_.reset(net::ProxyService::CreateSystemProxyConfigService(
+ GetNetworkTaskRunner(), NULL));
GetNetworkTaskRunner()->PostTask(
FROM_HERE,
- base::Bind(&URLRequestContextAdapter::InitializeURLRequestContext,
- this,
- Passed(&config)));
+ base::Bind(&URLRequestContextAdapter::InitRequestContextOnNetworkThread,
+ this));
}
-void URLRequestContextAdapter::InitializeURLRequestContext(
- scoped_ptr<URLRequestContextConfig> config) {
+void URLRequestContextAdapter::InitRequestContextOnNetworkThread() {
DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
+ DCHECK(config_);
// TODO(mmenke): Add method to have the builder enable SPDY.
net::URLRequestContextBuilder context_builder;
context_builder.set_network_delegate(new BasicNetworkDelegate());
- context_builder.set_proxy_config_service(
- new net::ProxyConfigServiceFixed(net::ProxyConfig()));
- config->ConfigureURLRequestContextBuilder(&context_builder);
+ context_builder.set_proxy_config_service(proxy_config_service_.get());
pauljensen 2015/08/18 12:04:58 Hey, this looks like a double-free? We keep a sco
+ config_->ConfigureURLRequestContextBuilder(&context_builder);
context_.reset(context_builder.Build());
// Currently (circa M39) enabling QUIC requires setting probability threshold.
- if (config->enable_quic) {
+ if (config_->enable_quic) {
context_->http_server_properties()
->SetAlternateProtocolProbabilityThreshold(0.0f);
- for (size_t hint = 0; hint < config->quic_hints.size(); ++hint) {
+ for (size_t hint = 0; hint < config_->quic_hints.size(); ++hint) {
const URLRequestContextConfig::QuicHint& quic_hint =
- *config->quic_hints[hint];
+ *config_->quic_hints[hint];
if (quic_hint.host.empty()) {
LOG(ERROR) << "Empty QUIC hint host: " << quic_hint.host;
continue;
@@ -181,12 +195,8 @@ void URLRequestContextAdapter::InitializeURLRequestContext(
net::AlternateProtocol::QUIC,
1.0f);
}
- is_context_initialized_ = true;
- while (!tasks_waiting_for_context_.empty()) {
- tasks_waiting_for_context_.front().Run();
- tasks_waiting_for_context_.pop();
- }
}
+ config_.reset(NULL);
if (VLOG_IS_ON(2)) {
net_log_observer_.reset(new NetLogObserver());
@@ -194,6 +204,12 @@ void URLRequestContextAdapter::InitializeURLRequestContext(
net::NetLog::LOG_ALL_BUT_BYTES);
}
+ is_context_initialized_ = true;
+ while (!tasks_waiting_for_context_.empty()) {
+ tasks_waiting_for_context_.front().Run();
+ tasks_waiting_for_context_.pop();
+ }
+
delegate_->OnContextInitialized(this);
}
« no previous file with comments | « components/cronet/android/url_request_context_adapter.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698