15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_CHROME_CONTENT_BROWSER_CLIENT_EXTENSIONS_PART_H_
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_CHROME_CONTENT_BROWSER_CLIENT_EXTENSIONS_PART_H_
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/compiler_specific.h"
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/macros.h"
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chrome_content_browser_client_parts.h"
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace content {
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class ResourceContext;
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace extensions {
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class BrowserPermissionsPolicyDelegate;
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Implements the extensions portion of ChromeContentBrowserClient.
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class ChromeContentBrowserClientExtensionsPart
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    : public ChromeContentBrowserClientParts {
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public:
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ChromeContentBrowserClientExtensionsPart();
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ~ChromeContentBrowserClientExtensionsPart();
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Corresponds to the ChromeContentBrowserClient function of the same name.
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static GURL GetEffectiveURL(Profile* profile, const GURL& url);
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static bool ShouldUseProcessPerSite(Profile* profile,
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                      const GURL& effective_url);
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static bool CanCommitURL(content::RenderProcessHost* process_host,
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                           const GURL& url);
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static bool IsSuitableHost(Profile* profile,
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                             content::RenderProcessHost* process_host,
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                             const GURL& site_url);
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static bool ShouldTryToUseExistingProcessHost(Profile* profile,
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                const GURL& url);
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static bool ShouldSwapBrowsingInstancesForNavigation(
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      content::SiteInstance* site_instance,
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const GURL& current_url,
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const GURL& new_url);
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static bool ShouldSwapProcessesForRedirect(
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      content::ResourceContext* resource_context,
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const GURL& current_url,
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const GURL& new_url);
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Similiar to ChromeContentBrowserClient::ShouldAllowOpenURL(), but the
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // return value indicates whether to use |result| or not.
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static bool ShouldAllowOpenURL(content::SiteInstance* site_instance,
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 const GURL& from_url,
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 const GURL& to_url,
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 bool* result);
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Helper function to call InfoMap::SetSigninProcess().
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static void SetSigninProcess(content::SiteInstance* site_instance);
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private:
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // ChromeContentBrowserClientParts:
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void RenderProcessWillLaunch(
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      content::RenderProcessHost* host) OVERRIDE;
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void SiteInstanceGotProcess(
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      content::SiteInstance* site_instance) OVERRIDE;
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void SiteInstanceDeleting(
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      content::SiteInstance* site_instance) OVERRIDE;
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void OverrideWebkitPrefs(content::RenderViewHost* rvh,
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                   const GURL& url,
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                   content::WebPreferences* web_prefs) OVERRIDE;
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void BrowserURLHandlerCreated(
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      content::BrowserURLHandler* handler) OVERRIDE;
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void GetAdditionalAllowedSchemesForFileSystem(
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      std::vector<std::string>* additional_allowed_schemes) OVERRIDE;
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void GetURLRequestAutoMountHandlers(
7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      std::vector<storage::URLRequestAutoMountHandler>* handlers) OVERRIDE;
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void GetAdditionalFileSystemBackends(
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      content::BrowserContext* browser_context,
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const base::FilePath& storage_partition_path,
7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      ScopedVector<storage::FileSystemBackend>* additional_backends) OVERRIDE;
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void AppendExtraRendererCommandLineSwitches(
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::CommandLine* command_line,
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      content::RenderProcessHost* process,
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      Profile* profile) OVERRIDE;
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<BrowserPermissionsPolicyDelegate> permissions_policy_delegate_;
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChromeContentBrowserClientExtensionsPart);
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace extensions
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // CHROME_BROWSER_EXTENSIONS_CHROME_CONTENT_BROWSER_CLIENT_EXTENSIONS_PART_H_
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
92