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 EXTENSIONS_SHELL_APP_SHELL_MAIN_DELEGATE_H_
6#define EXTENSIONS_SHELL_APP_SHELL_MAIN_DELEGATE_H_
7
8#include "base/compiler_specific.h"
9#include "base/memory/scoped_ptr.h"
10#include "content/public/app/content_main_delegate.h"
11
12namespace content {
13class BrowserContext;
14class ContentBrowserClient;
15class ContentClient;
16class ContentRendererClient;
17}
18
19namespace extensions {
20class ShellBrowserMainDelegate;
21
22class ShellMainDelegate : public content::ContentMainDelegate {
23 public:
24  ShellMainDelegate();
25  virtual ~ShellMainDelegate();
26
27  // ContentMainDelegate implementation:
28  virtual bool BasicStartupComplete(int* exit_code) OVERRIDE;
29  virtual void PreSandboxStartup() OVERRIDE;
30  virtual content::ContentBrowserClient* CreateContentBrowserClient() OVERRIDE;
31  virtual content::ContentRendererClient* CreateContentRendererClient()
32      OVERRIDE;
33#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
34  virtual void ZygoteStarting(
35      ScopedVector<content::ZygoteForkDelegate>* delegates) OVERRIDE;
36#endif
37
38 protected:
39  // The created object is owned by this object.
40  virtual content::ContentClient* CreateContentClient();
41  virtual content::ContentBrowserClient* CreateShellContentBrowserClient();
42  virtual content::ContentRendererClient* CreateShellContentRendererClient();
43
44  // Initializes the resource bundle and resources.pak.
45  virtual void InitializeResourceBundle();
46
47 private:
48  // |process_type| is zygote, renderer, utility, etc. Returns true if the
49  // process needs data from resources.pak.
50  static bool ProcessNeedsResourceBundle(const std::string& process_type);
51
52  scoped_ptr<content::ContentClient> content_client_;
53  scoped_ptr<content::ContentBrowserClient> browser_client_;
54  scoped_ptr<content::ContentRendererClient> renderer_client_;
55
56  DISALLOW_COPY_AND_ASSIGN(ShellMainDelegate);
57};
58
59}  // namespace extensions
60
61#endif  // EXTENSIONS_SHELL_APP_SHELL_MAIN_DELEGATE_H_
62