15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef EXTENSIONS_SHELL_BROWSER_SHELL_CONTENT_BROWSER_CLIENT_H_
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define EXTENSIONS_SHELL_BROWSER_SHELL_CONTENT_BROWSER_CLIENT_H_
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/compiler_specific.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/content_browser_client.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class GURL;
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace base {
1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class CommandLine;
1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace content {
18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass BrowserContext;
19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace extensions {
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class Extension;
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class ShellBrowserMainDelegate;
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ShellBrowserMainParts;
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Content module browser process support for app_shell.
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ShellContentBrowserClient : public content::ContentBrowserClient {
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  explicit ShellContentBrowserClient(
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ShellBrowserMainDelegate* browser_main_delegate);
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ~ShellContentBrowserClient();
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Returns the single instance.
34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  static ShellContentBrowserClient* Get();
35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Returns the single browser context for app_shell.
37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content::BrowserContext* GetBrowserContext();
38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // content::ContentBrowserClient overrides.
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual content::BrowserMainParts* CreateBrowserMainParts(
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const content::MainFunctionParams& parameters) OVERRIDE;
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void RenderProcessWillLaunch(
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      content::RenderProcessHost* host) OVERRIDE;
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual bool ShouldUseProcessPerSite(content::BrowserContext* browser_context,
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                       const GURL& effective_url) OVERRIDE;
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual net::URLRequestContextGetter* CreateRequestContext(
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      content::BrowserContext* browser_context,
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers,
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector request_interceptors) OVERRIDE;
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // TODO(jamescook): Quota management?
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // TODO(jamescook): Speech recognition?
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool IsHandledURL(const GURL& url) OVERRIDE;
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void SiteInstanceGotProcess(
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      content::SiteInstance* site_instance) OVERRIDE;
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void SiteInstanceDeleting(
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      content::SiteInstance* site_instance) OVERRIDE;
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                              int child_process_id) OVERRIDE;
5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual content::BrowserPpapiHost* GetExternalBrowserPpapiHost(
6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      int plugin_process_id) OVERRIDE;
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void GetAdditionalAllowedSchemesForFileSystem(
62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      std::vector<std::string>* additional_schemes) OVERRIDE;
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual content::DevToolsManagerDelegate*
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GetDevToolsManagerDelegate() OVERRIDE;
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Appends command line switches for a renderer process.
6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void AppendRendererSwitches(base::CommandLine* command_line);
6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Returns the extension or app associated with |site_instance| or NULL.
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const Extension* GetExtension(content::SiteInstance* site_instance);
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Owned by content::BrowserMainLoop.
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ShellBrowserMainParts* browser_main_parts_;
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Owned by ShellBrowserMainParts.
77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ShellBrowserMainDelegate* browser_main_delegate_;
78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ShellContentBrowserClient);
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace extensions
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // EXTENSIONS_SHELL_BROWSER_SHELL_CONTENT_BROWSER_CLIENT_H_
85