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.
4
5#ifndef CHROMECAST_SHELL_BROWSER_CAST_BROWSER_CONTEXT_H_
6#define CHROMECAST_SHELL_BROWSER_CAST_BROWSER_CONTEXT_H_
7
8#include "base/files/file_path.h"
9#include "base/macros.h"
10#include "content/public/browser/browser_context.h"
11#include "content/public/browser/content_browser_client.h"
12
13namespace chromecast {
14namespace shell {
15
16class CastDownloadManagerDelegate;
17class URLRequestContextFactory;
18
19// Chromecast does not currently support multiple profiles.  So there is a
20// single BrowserContext for all chromecast renderers.
21// There is no support for PartitionStorage.
22class CastBrowserContext : public content::BrowserContext {
23 public:
24  explicit CastBrowserContext(
25      URLRequestContextFactory* url_request_context_factory);
26  virtual ~CastBrowserContext();
27
28  // BrowserContext implementation:
29  virtual base::FilePath GetPath() const OVERRIDE;
30  virtual bool IsOffTheRecord() const OVERRIDE;
31  virtual net::URLRequestContextGetter* GetRequestContext() OVERRIDE;
32  virtual net::URLRequestContextGetter* GetRequestContextForRenderProcess(
33      int renderer_child_id) OVERRIDE;
34  virtual net::URLRequestContextGetter* GetMediaRequestContext() OVERRIDE;
35  virtual net::URLRequestContextGetter* GetMediaRequestContextForRenderProcess(
36      int renderer_child_id) OVERRIDE;
37  virtual net::URLRequestContextGetter*
38      GetMediaRequestContextForStoragePartition(
39          const base::FilePath& partition_path,
40          bool in_memory) OVERRIDE;
41  virtual content::ResourceContext* GetResourceContext() OVERRIDE;
42  virtual content::DownloadManagerDelegate*
43      GetDownloadManagerDelegate() OVERRIDE;
44  virtual content::BrowserPluginGuestManager* GetGuestManager() OVERRIDE;
45  virtual storage::SpecialStoragePolicy* GetSpecialStoragePolicy() OVERRIDE;
46  virtual content::PushMessagingService* GetPushMessagingService() OVERRIDE;
47  virtual content::SSLHostStateDelegate* GetSSLHostStateDelegate() OVERRIDE;
48
49 private:
50  class CastResourceContext;
51
52  // Performs initialization of the CastBrowserContext while IO is still
53  // allowed on the current thread.
54  void InitWhileIOAllowed();
55
56  URLRequestContextFactory* const url_request_context_factory_;
57  base::FilePath path_;
58  scoped_ptr<CastResourceContext> resource_context_;
59  scoped_ptr<CastDownloadManagerDelegate> download_manager_delegate_;
60
61  DISALLOW_COPY_AND_ASSIGN(CastBrowserContext);
62};
63
64}  // namespace shell
65}  // namespace chromecast
66
67#endif  // CHROMECAST_SHELL_BROWSER_CAST_BROWSER_CONTEXT_H_
68