1 // Copyright 2014 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.
5 #include "extensions/shell/browser/shell_browser_context.h"
7 #include "base/command_line.h"
8 #include "components/guest_view/browser/guest_view_manager.h"
9 #include "content/public/browser/browser_thread.h"
10 #include "content/public/common/content_switches.h"
11 #include "extensions/shell/browser/shell_network_delegate.h"
12 #include "extensions/shell/browser/shell_special_storage_policy.h"
13 #include "extensions/shell/browser/shell_url_request_context_getter.h"
15 namespace extensions
{
19 bool IgnoreCertificateErrors() {
20 return base::CommandLine::ForCurrentProcess()->HasSwitch(
21 ::switches::kIgnoreCertificateErrors
);
26 // Create a normal recording browser context. If we used an incognito context
27 // then app_shell would also have to create a normal context and manage both.
28 ShellBrowserContext::ShellBrowserContext()
29 : content::ShellBrowserContext(false /* off_the_record */,
30 nullptr /* net_log */),
31 storage_policy_(new ShellSpecialStoragePolicy
) {
34 ShellBrowserContext::~ShellBrowserContext() {
37 content::BrowserPluginGuestManager
* ShellBrowserContext::GetGuestManager() {
38 return guest_view::GuestViewManager::FromBrowserContext(this);
41 storage::SpecialStoragePolicy
* ShellBrowserContext::GetSpecialStoragePolicy() {
42 return storage_policy_
.get();
45 net::URLRequestContextGetter
* ShellBrowserContext::CreateRequestContext(
46 content::ProtocolHandlerMap
* protocol_handlers
,
47 content::URLRequestInterceptorScopedVector request_interceptors
,
48 InfoMap
* extension_info_map
) {
49 DCHECK(!url_request_context_getter());
50 set_url_request_context_getter(
51 new ShellURLRequestContextGetter(
53 IgnoreCertificateErrors(),
55 content::BrowserThread::UnsafeGetMessageLoopForThread(
56 content::BrowserThread::IO
),
57 content::BrowserThread::UnsafeGetMessageLoopForThread(
58 content::BrowserThread::FILE),
60 request_interceptors
.Pass(),
61 nullptr /* net_log */,
63 resource_context_
->set_url_request_context_getter(
64 url_request_context_getter());
65 content::BrowserThread::PostTask(
66 content::BrowserThread::IO
,
69 &ShellBrowserContext::InitURLRequestContextOnIOThread
,
70 base::Unretained(this)));
71 return url_request_context_getter();
74 void ShellBrowserContext::InitURLRequestContextOnIOThread() {
75 DCHECK_CURRENTLY_ON(content::BrowserThread::IO
);
77 // GetURLRequestContext() will create a URLRequestContext if it isn't
79 url_request_context_getter()->GetURLRequestContext();
82 } // namespace extensions