Commit 3d31864d authored by John Abd-El-Malek's avatar John Abd-El-Malek Committed by Commit Bot

Ensure that ContentBrowserClient::GetNetLog can be called on the IO thread.

This is already the case for chrome & content_shell, but wasn't for android_webview or headless.

This is split off from https://chromium-review.googlesource.com/c/chromium/src/+/826303 which needs this behavior.

Bug: 769401
Change-Id: I9777d85de6206ba932a83d6b48516acdf5de1671
Reviewed-on: https://chromium-review.googlesource.com/836069Reviewed-by: default avatarEric Seckler <eseckler@chromium.org>
Reviewed-by: default avatarRichard Coles <torne@chromium.org>
Commit-Queue: John Abd-El-Malek <jam@chromium.org>
Cr-Commit-Position: refs/heads/master@{#525332}
parent 1b430073
......@@ -148,7 +148,7 @@ AwBrowserContext* AwBrowserContext::FromWebContents(
return static_cast<AwBrowserContext*>(web_contents->GetBrowserContext());
}
void AwBrowserContext::PreMainMessageLoopRun() {
void AwBrowserContext::PreMainMessageLoopRun(net::NetLog* net_log) {
FilePath cache_path;
PathService::Get(base::DIR_CACHE, &cache_path);
cache_path =
......@@ -158,8 +158,9 @@ void AwBrowserContext::PreMainMessageLoopRun() {
InitUserPrefService();
url_request_context_getter_ = new AwURLRequestContextGetter(
cache_path, CreateProxyConfigService(), user_pref_service_.get());
url_request_context_getter_ =
new AwURLRequestContextGetter(cache_path, CreateProxyConfigService(),
user_pref_service_.get(), net_log);
scoped_refptr<base::SequencedTaskRunner> db_task_runner =
base::CreateSequencedTaskRunnerWithTraits(
......
......@@ -32,6 +32,10 @@ class SSLHostStateDelegate;
class WebContents;
}
namespace net {
class NetLog;
}
namespace policy {
class URLBlacklistManager;
class BrowserPolicyConnectorBase;
......@@ -76,7 +80,7 @@ class AwBrowserContext : public content::BrowserContext,
content::WebContents* web_contents);
// Maps to BrowserMainParts::PreMainMessageLoopRun.
void PreMainMessageLoopRun();
void PreMainMessageLoopRun(net::NetLog* net_log);
// These methods map to Add methods in visitedlink::VisitedLinkMaster.
void AddVisitedURLs(const std::vector<GURL>& urls);
......
......@@ -120,7 +120,8 @@ int AwBrowserMainParts::PreCreateThreads() {
}
void AwBrowserMainParts::PreMainMessageLoopRun() {
browser_client_->InitBrowserContext()->PreMainMessageLoopRun();
browser_client_->InitBrowserContext()->PreMainMessageLoopRun(
browser_client_->GetNetLog());
content::RenderFrameHost::AllowInjectingJavaScriptForAndroidWebView();
......
......@@ -62,6 +62,7 @@
#include "content/public/common/url_loader_throttle.h"
#include "content/public/common/web_preferences.h"
#include "net/android/network_library.h"
#include "net/log/net_log.h"
#include "net/ssl/ssl_cert_request_info.h"
#include "net/ssl/ssl_info.h"
#include "services/service_manager/public/cpp/binder_registry.h"
......@@ -191,7 +192,7 @@ AwBrowserContext* AwContentBrowserClient::GetAwBrowserContext() {
return AwBrowserContext::GetDefault();
}
AwContentBrowserClient::AwContentBrowserClient() {
AwContentBrowserClient::AwContentBrowserClient() : net_log_(new net::NetLog()) {
frame_interfaces_.AddInterface(
base::Bind(&autofill::ContentAutofillDriverFactory::BindAutofillDriver));
// Although WebView does not support password manager feature, renderer code
......@@ -436,7 +437,7 @@ void AwContentBrowserClient::ResourceDispatcherHostCreated() {
}
net::NetLog* AwContentBrowserClient::GetNetLog() {
return browser_context_->GetAwURLRequestContext()->GetNetLog();
return net_log_.get();
}
base::FilePath AwContentBrowserClient::GetDefaultDownloadDirectory() {
......
......@@ -19,6 +19,10 @@ namespace content {
class RenderFrameHost;
}
namespace net {
class NetLog;
}
namespace safe_browsing {
class UrlCheckerDelegate;
}
......@@ -160,6 +164,8 @@ class AwContentBrowserClient : public content::ContentBrowserClient {
private:
safe_browsing::UrlCheckerDelegate* GetSafeBrowsingUrlCheckerDelegate();
std::unique_ptr<net::NetLog> net_log_;
// Android WebView currently has a single global (non-off-the-record) browser
// context.
std::unique_ptr<AwBrowserContext> browser_context_;
......
......@@ -49,7 +49,6 @@
#include "net/http/http_network_session.h"
#include "net/http/http_stream_factory.h"
#include "net/log/file_net_log_observer.h"
#include "net/log/net_log.h"
#include "net/log/net_log_capture_mode.h"
#include "net/log/net_log_util.h"
#include "net/net_features.h"
......@@ -180,9 +179,10 @@ std::unique_ptr<net::URLRequestJobFactory> CreateJobFactory(
AwURLRequestContextGetter::AwURLRequestContextGetter(
const base::FilePath& cache_path,
std::unique_ptr<net::ProxyConfigService> config_service,
PrefService* user_pref_service)
PrefService* user_pref_service,
net::NetLog* net_log)
: cache_path_(cache_path),
net_log_(new net::NetLog()),
net_log_(net_log),
proxy_config_service_(std::move(config_service)),
http_user_agent_settings_(new AwHttpUserAgentSettings()) {
// CreateSystemProxyConfigService for Android must be called on main thread.
......@@ -243,7 +243,7 @@ AwURLRequestContextGetter::AwURLRequestContextGetter(
file_net_log_observer_ = net::FileNetLogObserver::CreateUnbounded(
net_log_path, std::move(constants_dict));
file_net_log_observer_->StartObserving(net_log_.get(),
file_net_log_observer_->StartObserving(net_log_,
net::NetLogCaptureMode::Default());
}
}
......@@ -290,9 +290,9 @@ void AwURLRequestContextGetter::InitializeURLRequestContext() {
builder.set_proxy_service(net::ProxyService::CreateFixed(proxy));
} else {
builder.set_proxy_service(net::ProxyService::CreateWithoutProxyResolver(
std::move(proxy_config_service_), net_log_.get()));
std::move(proxy_config_service_), net_log_));
}
builder.set_net_log(net_log_.get());
builder.set_net_log(net_log_);
builder.SetCookieAndChannelIdStores(std::make_unique<AwCookieStoreWrapper>(),
std::move(channel_id_service));
......@@ -350,10 +350,6 @@ void AwURLRequestContextGetter::SetHandlersAndInterceptors(
request_interceptors_.swap(request_interceptors);
}
net::NetLog* AwURLRequestContextGetter::GetNetLog() {
return net_log_.get();
}
// static
void AwURLRequestContextGetter::set_check_cleartext_permitted(bool permitted) {
#if DCHECK_IS_ON()
......
......@@ -38,17 +38,14 @@ class AwURLRequestContextGetter : public net::URLRequestContextGetter {
AwURLRequestContextGetter(
const base::FilePath& cache_path,
std::unique_ptr<net::ProxyConfigService> config_service,
PrefService* pref_service);
PrefService* pref_service,
net::NetLog* net_log);
// net::URLRequestContextGetter implementation.
net::URLRequestContext* GetURLRequestContext() override;
scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner()
const override;
// NetLog is thread-safe, so clients can call this method from arbitrary
// threads (UI and IO).
net::NetLog* GetNetLog();
static void set_check_cleartext_permitted(bool permitted);
private:
......@@ -78,7 +75,7 @@ class AwURLRequestContextGetter : public net::URLRequestContextGetter {
const base::FilePath cache_path_;
std::unique_ptr<net::NetLog> net_log_;
net::NetLog* net_log_;
std::unique_ptr<net::ProxyConfigService> proxy_config_service_;
std::unique_ptr<net::URLRequestJobFactory> job_factory_;
std::unique_ptr<net::HttpUserAgentSettings> http_user_agent_settings_;
......
......@@ -621,7 +621,7 @@ class CONTENT_EXPORT ContentBrowserClient {
virtual SpeechRecognitionManagerDelegate*
CreateSpeechRecognitionManagerDelegate();
// Getters for common objects.
// Getter for the net logging object. This can be called on any thread.
virtual net::NetLog* GetNetLog();
// Called by WebContents to override the WebKit preferences that are used by
......
......@@ -280,7 +280,7 @@ net::URLRequestContextGetter* HeadlessBrowserContextImpl::CreateRequestContext(
content::BrowserThread::IO),
protocol_handlers, context_options_->TakeProtocolHandlers(),
std::move(request_interceptors), context_options_.get(),
browser_->browser_main_parts()->net_log(), this));
browser_->net_log(), this));
resource_context_->set_url_request_context_getter(url_request_context_getter);
return url_request_context_getter.get();
}
......
......@@ -20,6 +20,7 @@
#include "headless/app/headless_shell_switches.h"
#include "headless/lib/browser/headless_browser_context_impl.h"
#include "headless/lib/browser/headless_browser_main_parts.h"
#include "headless/lib/browser/headless_net_log.h"
#include "headless/lib/browser/headless_web_contents_impl.h"
#include "headless/lib/headless_content_main_delegate.h"
#include "headless/public/internal/headless_devtools_client_impl.h"
......@@ -138,6 +139,18 @@ void HeadlessBrowserImpl::set_browser_main_parts(
browser_main_parts_ = browser_main_parts;
}
void HeadlessBrowserImpl::PreMainMessageLoopRun() {
const base::CommandLine* command_line =
base::CommandLine::ForCurrentProcess();
if (command_line->HasSwitch(::switches::kLogNetLog)) {
base::FilePath log_path =
command_line->GetSwitchValuePath(::switches::kLogNetLog);
net_log_.reset(new HeadlessNetLog(log_path));
} else {
net_log_.reset(new net::NetLog());
}
}
void HeadlessBrowserImpl::RunOnStartCallback() {
#if defined(USE_NSS_CERTS)
content::BrowserThread::PostTask(
......
......@@ -20,6 +20,10 @@
#include "headless/public/headless_export.h"
#include "headless/public/util/moveable_auto_lock.h"
namespace net {
class NetLog;
} // namespace net
namespace ui {
class Compositor;
} // namespace ui
......@@ -65,9 +69,11 @@ class HEADLESS_EXPORT HeadlessBrowserImpl : public HeadlessBrowser,
void set_browser_main_parts(HeadlessBrowserMainParts* browser_main_parts);
HeadlessBrowserMainParts* browser_main_parts() const;
void PreMainMessageLoopRun();
void RunOnStartCallback();
HeadlessBrowser::Options* options() { return &options_; }
net::NetLog* net_log() const { return net_log_.get(); }
HeadlessBrowserContext* CreateBrowserContext(
HeadlessBrowserContext::Builder* builder);
......@@ -98,6 +104,7 @@ class HEADLESS_EXPORT HeadlessBrowserImpl : public HeadlessBrowser,
protected:
base::Callback<void(HeadlessBrowser*)> on_start_callback_;
HeadlessBrowser::Options options_;
std::unique_ptr<net::NetLog> net_log_;
HeadlessBrowserMainParts* browser_main_parts_; // Not owned.
mutable base::Lock browser_contexts_lock_; // Protects |browser_contexts_|
......
......@@ -4,12 +4,9 @@
#include "headless/lib/browser/headless_browser_main_parts.h"
#include "base/command_line.h"
#include "content/public/common/content_switches.h"
#include "headless/lib/browser/headless_browser_context_impl.h"
#include "headless/lib/browser/headless_browser_impl.h"
#include "headless/lib/browser/headless_devtools.h"
#include "headless/lib/browser/headless_net_log.h"
#include "headless/lib/browser/headless_screen.h"
namespace headless {
......@@ -21,15 +18,7 @@ HeadlessBrowserMainParts::HeadlessBrowserMainParts(HeadlessBrowserImpl* browser)
HeadlessBrowserMainParts::~HeadlessBrowserMainParts() = default;
void HeadlessBrowserMainParts::PreMainMessageLoopRun() {
const base::CommandLine* command_line =
base::CommandLine::ForCurrentProcess();
if (command_line->HasSwitch(switches::kLogNetLog)) {
base::FilePath log_path =
command_line->GetSwitchValuePath(switches::kLogNetLog);
net_log_.reset(new HeadlessNetLog(log_path));
} else {
net_log_.reset(new net::NetLog());
}
browser_->PreMainMessageLoopRun();
if (browser_->options()->DevtoolsServerEnabled()) {
StartLocalDevToolsHttpHandler(browser_->options());
......
......@@ -11,10 +11,6 @@
#include "content/public/browser/browser_main_parts.h"
#include "headless/public/headless_browser.h"
namespace net {
class NetLog;
} // namespace net
namespace headless {
class HeadlessBrowserImpl;
......@@ -31,13 +27,10 @@ class HeadlessBrowserMainParts : public content::BrowserMainParts {
void PreMainMessageLoopStart() override;
#endif
net::NetLog* net_log() const { return net_log_.get(); }
private:
HeadlessBrowserImpl* browser_; // Not owned.
bool devtools_http_handler_started_;
std::unique_ptr<net::NetLog> net_log_;
DISALLOW_COPY_AND_ASSIGN(HeadlessBrowserMainParts);
};
......
......@@ -319,7 +319,7 @@ void HeadlessContentBrowserClient::ResourceDispatcherHostCreated() {
}
net::NetLog* HeadlessContentBrowserClient::GetNetLog() {
return browser_->browser_main_parts()->net_log();
return browser_->net_log();
}
bool HeadlessContentBrowserClient::AllowGetCookie(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment