1// Copyright 2013 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#ifndef CONTENT_SHELL_BROWSER_SHELL_BROWSER_CONTEXT_H_
6#define CONTENT_SHELL_BROWSER_SHELL_BROWSER_CONTEXT_H_
7
8#include "base/compiler_specific.h"
9#include "base/files/file_path.h"
10#include "base/memory/ref_counted.h"
11#include "base/memory/scoped_ptr.h"
12#include "content/public/browser/browser_context.h"
13#include "content/public/browser/content_browser_client.h"
14#include "net/url_request/url_request_job_factory.h"
15
16namespace net {
17class NetLog;
18}
19
20namespace content {
21
22class DownloadManagerDelegate;
23class ResourceContext;
24class ShellDownloadManagerDelegate;
25class ShellURLRequestContextGetter;
26
27class ShellBrowserContext : public BrowserContext {
28 public:
29  ShellBrowserContext(bool off_the_record, net::NetLog* net_log);
30  virtual ~ShellBrowserContext();
31
32  void set_guest_manager_for_testing(
33      BrowserPluginGuestManager* guest_manager) {
34    guest_manager_ = guest_manager;
35  }
36
37  // BrowserContext implementation.
38  virtual base::FilePath GetPath() const OVERRIDE;
39  virtual bool IsOffTheRecord() const OVERRIDE;
40  virtual DownloadManagerDelegate* GetDownloadManagerDelegate() OVERRIDE;
41  virtual net::URLRequestContextGetter* GetRequestContext() OVERRIDE;
42  virtual net::URLRequestContextGetter* GetRequestContextForRenderProcess(
43      int renderer_child_id) OVERRIDE;
44  virtual net::URLRequestContextGetter* GetMediaRequestContext() OVERRIDE;
45  virtual net::URLRequestContextGetter* GetMediaRequestContextForRenderProcess(
46      int renderer_child_id) OVERRIDE;
47  virtual net::URLRequestContextGetter*
48      GetMediaRequestContextForStoragePartition(
49          const base::FilePath& partition_path,
50          bool in_memory) OVERRIDE;
51  virtual ResourceContext* GetResourceContext() OVERRIDE;
52  virtual BrowserPluginGuestManager* GetGuestManager() OVERRIDE;
53  virtual storage::SpecialStoragePolicy* GetSpecialStoragePolicy() OVERRIDE;
54  virtual PushMessagingService* GetPushMessagingService() OVERRIDE;
55  virtual SSLHostStateDelegate* GetSSLHostStateDelegate() OVERRIDE;
56
57  net::URLRequestContextGetter* CreateRequestContext(
58      ProtocolHandlerMap* protocol_handlers,
59      URLRequestInterceptorScopedVector request_interceptors);
60  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
61      const base::FilePath& partition_path,
62      bool in_memory,
63      ProtocolHandlerMap* protocol_handlers,
64      URLRequestInterceptorScopedVector request_interceptors);
65
66 private:
67  class ShellResourceContext;
68
69  // Performs initialization of the ShellBrowserContext while IO is still
70  // allowed on the current thread.
71  void InitWhileIOAllowed();
72
73  bool off_the_record_;
74  net::NetLog* net_log_;
75  bool ignore_certificate_errors_;
76  base::FilePath path_;
77  BrowserPluginGuestManager* guest_manager_;
78  scoped_ptr<ShellResourceContext> resource_context_;
79  scoped_ptr<ShellDownloadManagerDelegate> download_manager_delegate_;
80  scoped_refptr<ShellURLRequestContextGetter> url_request_getter_;
81
82  DISALLOW_COPY_AND_ASSIGN(ShellBrowserContext);
83};
84
85}  // namespace content
86
87#endif  // CONTENT_SHELL_BROWSER_SHELL_BROWSER_CONTEXT_H_
88