blob: b99c80d54ab0d6d5b4bb105d09cf47af59567bbe [file] [log] [blame]
[email protected]314c3e22012-02-21 03:57:421// Copyright (c) 2012 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#include "content/browser/resource_context_impl.h"
6
[email protected]ff1e64e2012-03-23 15:21:517#include "base/logging.h"
[email protected]16dd6e22012-03-01 19:08:208#include "content/browser/fileapi/chrome_blob_storage_context.h"
[email protected]678c0362012-12-05 08:02:449#include "content/browser/loader/resource_dispatcher_host_impl.h"
10#include "content/browser/loader/resource_request_info_impl.h"
[email protected]bb85a8c42013-03-13 04:34:1911#include "content/browser/streams/stream_context.h"
[email protected]33c1c26a2013-01-24 21:56:2612#include "content/browser/webui/url_data_manager_backend.h"
[email protected]314c3e22012-02-21 03:57:4213#include "content/public/browser/browser_context.h"
14#include "content/public/browser/browser_thread.h"
[email protected]99e5e9522013-12-16 13:05:2715#include "net/base/keygen_handler.h"
[email protected]1ccb6992013-10-30 04:46:2016#include "net/ssl/client_cert_store.h"
[email protected]314c3e22012-02-21 03:57:4217
[email protected]314c3e22012-02-21 03:57:4218using base::UserDataAdapter;
[email protected]314c3e22012-02-21 03:57:4219
20namespace content {
21
[email protected]ff1e64e2012-03-23 15:21:5122namespace {
23
[email protected]33c1c26a2013-01-24 21:56:2624// Key names on ResourceContext.
25const char kBlobStorageContextKeyName[] = "content_blob_storage_context";
[email protected]bb85a8c42013-03-13 04:34:1926const char kStreamContextKeyName[] = "content_stream_context";
[email protected]33c1c26a2013-01-24 21:56:2627const char kURLDataManagerBackendKeyName[] = "url_data_manager_backend";
28
[email protected]f9583f82014-02-13 15:34:2129// Used by the default implementation of GetMediaDeviceIDSalt, below.
30std::string ReturnEmptySalt() {
31 return std::string();
32}
33
[email protected]ff1e64e2012-03-23 15:21:5134} // namespace
35
[email protected]314c3e22012-02-21 03:57:4236
[email protected]10848bb2012-05-15 17:40:5237ResourceContext::ResourceContext() {
[email protected]9a3b349b62012-03-26 14:38:1538 if (ResourceDispatcherHostImpl::Get())
[email protected]10848bb2012-05-15 17:40:5239 ResourceDispatcherHostImpl::Get()->AddResourceContext(this);
40}
41
42ResourceContext::~ResourceContext() {
43 ResourceDispatcherHostImpl* rdhi = ResourceDispatcherHostImpl::Get();
44 if (rdhi) {
45 rdhi->CancelRequestsForContext(this);
46 rdhi->RemoveResourceContext(this);
47 }
[email protected]33c1c26a2013-01-24 21:56:2648
49 // In some tests this object is destructed on UI thread.
50 DetachUserDataThread();
[email protected]9a3b349b62012-03-26 14:38:1551}
52
[email protected]f9583f82014-02-13 15:34:2153ResourceContext::SaltCallback ResourceContext::GetMediaDeviceIDSalt() {
54 return base::Bind(&ReturnEmptySalt);
[email protected]cd80cce2013-12-02 15:19:1955}
56
[email protected]1ccb6992013-10-30 04:46:2057scoped_ptr<net::ClientCertStore> ResourceContext::CreateClientCertStore() {
58 return scoped_ptr<net::ClientCertStore>();
59}
60
[email protected]99e5e9522013-12-16 13:05:2761void ResourceContext::CreateKeygenHandler(
62 uint32 key_size_in_bits,
63 const std::string& challenge_string,
64 const GURL& url,
65 const base::Callback<void(scoped_ptr<net::KeygenHandler>)>& callback) {
66 callback.Run(make_scoped_ptr(
67 new net::KeygenHandler(key_size_in_bits, challenge_string, url)));
68}
69
[email protected]314c3e22012-02-21 03:57:4270ChromeBlobStorageContext* GetChromeBlobStorageContextForResourceContext(
horod5560432014-12-12 06:20:1371 const ResourceContext* resource_context) {
mostynb042582e2015-03-16 22:13:4072 DCHECK_CURRENTLY_ON(BrowserThread::IO);
[email protected]314c3e22012-02-21 03:57:4273 return UserDataAdapter<ChromeBlobStorageContext>::Get(
74 resource_context, kBlobStorageContextKeyName);
75}
76
[email protected]bb85a8c42013-03-13 04:34:1977StreamContext* GetStreamContextForResourceContext(
horod5560432014-12-12 06:20:1378 const ResourceContext* resource_context) {
mostynb042582e2015-03-16 22:13:4079 DCHECK_CURRENTLY_ON(BrowserThread::IO);
[email protected]bb85a8c42013-03-13 04:34:1980 return UserDataAdapter<StreamContext>::Get(
81 resource_context, kStreamContextKeyName);
82}
83
[email protected]5bf1646f52013-01-28 03:57:0284URLDataManagerBackend* GetURLDataManagerForResourceContext(
[email protected]33c1c26a2013-01-24 21:56:2685 ResourceContext* context) {
mostynb042582e2015-03-16 22:13:4086 DCHECK_CURRENTLY_ON(BrowserThread::IO);
[email protected]33c1c26a2013-01-24 21:56:2687 if (!context->GetUserData(kURLDataManagerBackendKeyName)) {
88 context->SetUserData(kURLDataManagerBackendKeyName,
[email protected]5bf1646f52013-01-28 03:57:0289 new URLDataManagerBackend());
[email protected]33c1c26a2013-01-24 21:56:2690 }
[email protected]5bf1646f52013-01-28 03:57:0291 return static_cast<URLDataManagerBackend*>(
[email protected]33c1c26a2013-01-24 21:56:2692 context->GetUserData(kURLDataManagerBackendKeyName));
93}
94
[email protected]7e26ac92012-02-27 20:15:0595void InitializeResourceContext(BrowserContext* browser_context) {
[email protected]314c3e22012-02-21 03:57:4296 ResourceContext* resource_context = browser_context->GetResourceContext();
[email protected]38ed59b2012-02-24 17:08:2497
[email protected]314c3e22012-02-21 03:57:4298 resource_context->SetUserData(
[email protected]314c3e22012-02-21 03:57:4299 kBlobStorageContextKeyName,
100 new UserDataAdapter<ChromeBlobStorageContext>(
101 ChromeBlobStorageContext::GetFor(browser_context)));
[email protected]5fe3713a2012-02-22 08:31:56102
[email protected]bb85a8c42013-03-13 04:34:19103 resource_context->SetUserData(
104 kStreamContextKeyName,
105 new UserDataAdapter<StreamContext>(
106 StreamContext::GetFor(browser_context)));
107
[email protected]7d2e5f7622012-09-10 19:18:53108 resource_context->DetachUserDataThread();
[email protected]314c3e22012-02-21 03:57:42109}
110
111} // namespace content