| Index: components/safe_browsing/browser/safe_browsing_url_request_context_getter.cc
|
| diff --git a/components/safe_browsing/browser/safe_browsing_url_request_context_getter.cc b/components/safe_browsing/browser/safe_browsing_url_request_context_getter.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..513698fde868225b527c93597c60dda992d9b3a3
|
| --- /dev/null
|
| +++ b/components/safe_browsing/browser/safe_browsing_url_request_context_getter.cc
|
| @@ -0,0 +1,134 @@
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "components/safe_browsing/browser/safe_browsing_url_request_context_getter.h"
|
| +
|
| +#include "base/single_thread_task_runner.h"
|
| +#include "base/task_scheduler/post_task.h"
|
| +#include "components/safe_browsing/common/safebrowsing_constants.h"
|
| +#include "content/public/browser/browser_thread.h"
|
| +#include "content/public/browser/cookie_store_factory.h"
|
| +#include "net/cookies/cookie_store.h"
|
| +#include "net/extras/sqlite/sqlite_channel_id_store.h"
|
| +#include "net/http/http_network_layer.h"
|
| +#include "net/http/http_transaction_factory.h"
|
| +#include "net/ssl/channel_id_service.h"
|
| +#include "net/ssl/default_channel_id_store.h"
|
| +#include "net/url_request/url_request_context.h"
|
| +
|
| +using content::BrowserThread;
|
| +
|
| +namespace safe_browsing {
|
| +
|
| +SafeBrowsingURLRequestContextGetter::SafeBrowsingURLRequestContextGetter(
|
| + scoped_refptr<net::URLRequestContextGetter> system_context_getter,
|
| + const base::FilePath& user_data_dir)
|
| + : shut_down_(false),
|
| + user_data_dir_(user_data_dir),
|
| + system_context_getter_(system_context_getter),
|
| + network_task_runner_(
|
| + BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)) {
|
| + DCHECK(!user_data_dir.empty());
|
| +}
|
| +
|
| +net::URLRequestContext*
|
| +SafeBrowsingURLRequestContextGetter::GetURLRequestContext() {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| +
|
| + // Check if the service has been shut down.
|
| + if (shut_down_)
|
| + return nullptr;
|
| +
|
| + if (!safe_browsing_request_context_) {
|
| + safe_browsing_request_context_.reset(new net::URLRequestContext());
|
| + // May be NULL in unit tests.
|
| + if (system_context_getter_) {
|
| + safe_browsing_request_context_->CopyFrom(
|
| + system_context_getter_->GetURLRequestContext());
|
| + }
|
| + scoped_refptr<base::SequencedTaskRunner> background_task_runner =
|
| + base::CreateSequencedTaskRunnerWithTraits(
|
| + {base::MayBlock(), base::TaskPriority::BACKGROUND,
|
| + base::TaskShutdownBehavior::BLOCK_SHUTDOWN});
|
| + // Set up the ChannelIDService
|
| + scoped_refptr<net::SQLiteChannelIDStore> channel_id_db =
|
| + new net::SQLiteChannelIDStore(ChannelIDFilePath(),
|
| + background_task_runner);
|
| + channel_id_service_.reset(new net::ChannelIDService(
|
| + new net::DefaultChannelIDStore(channel_id_db.get())));
|
| +
|
| + // Set up the CookieStore
|
| + content::CookieStoreConfig cookie_config(
|
| + CookieFilePath(), content::CookieStoreConfig::EPHEMERAL_SESSION_COOKIES,
|
| + nullptr, nullptr);
|
| + cookie_config.channel_id_service = channel_id_service_.get();
|
| + cookie_config.background_task_runner = background_task_runner;
|
| + safe_browsing_cookie_store_ = content::CreateCookieStore(cookie_config);
|
| + safe_browsing_request_context_->set_cookie_store(
|
| + safe_browsing_cookie_store_.get());
|
| +
|
| + safe_browsing_request_context_->set_channel_id_service(
|
| + channel_id_service_.get());
|
| + safe_browsing_cookie_store_->SetChannelIDServiceID(
|
| + channel_id_service_->GetUniqueID());
|
| +
|
| + // Rebuild the HttpNetworkSession and the HttpTransactionFactory to use the
|
| + // new ChannelIDService.
|
| + if (safe_browsing_request_context_->http_transaction_factory() &&
|
| + safe_browsing_request_context_->http_transaction_factory()
|
| + ->GetSession()) {
|
| + net::HttpNetworkSession::Params safe_browsing_params =
|
| + safe_browsing_request_context_->http_transaction_factory()
|
| + ->GetSession()
|
| + ->params();
|
| + safe_browsing_params.channel_id_service = channel_id_service_.get();
|
| + http_network_session_.reset(
|
| + new net::HttpNetworkSession(safe_browsing_params));
|
| + http_transaction_factory_.reset(
|
| + new net::HttpNetworkLayer(http_network_session_.get()));
|
| + safe_browsing_request_context_->set_http_transaction_factory(
|
| + http_transaction_factory_.get());
|
| + }
|
| + safe_browsing_request_context_->set_name("safe_browsing");
|
| + }
|
| +
|
| + return safe_browsing_request_context_.get();
|
| +}
|
| +
|
| +scoped_refptr<base::SingleThreadTaskRunner>
|
| +SafeBrowsingURLRequestContextGetter::GetNetworkTaskRunner() const {
|
| + return network_task_runner_;
|
| +}
|
| +
|
| +void SafeBrowsingURLRequestContextGetter::ServiceShuttingDown() {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| +
|
| + shut_down_ = true;
|
| + URLRequestContextGetter::NotifyContextShuttingDown();
|
| + safe_browsing_request_context_.reset();
|
| +}
|
| +
|
| +void SafeBrowsingURLRequestContextGetter::DisableQuicOnIOThread() {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| +
|
| + if (http_network_session_)
|
| + http_network_session_->DisableQuic();
|
| +}
|
| +
|
| +base::FilePath SafeBrowsingURLRequestContextGetter::GetBaseFilename() {
|
| + base::FilePath path(user_data_dir_);
|
| + return path.Append(kSafeBrowsingBaseFilename);
|
| +}
|
| +
|
| +base::FilePath SafeBrowsingURLRequestContextGetter::CookieFilePath() {
|
| + return base::FilePath(GetBaseFilename().value() + kCookiesFile);
|
| +}
|
| +
|
| +base::FilePath SafeBrowsingURLRequestContextGetter::ChannelIDFilePath() {
|
| + return base::FilePath(GetBaseFilename().value() + kChannelIDFile);
|
| +}
|
| +
|
| +SafeBrowsingURLRequestContextGetter::~SafeBrowsingURLRequestContextGetter() {}
|
| +
|
| +} // namespace safe_browsing
|
|
|