shell_extensions_browser_client.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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)#include "extensions/shell/browser/shell_extensions_browser_client.h"
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/prefs/pref_service.h"
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/prefs/pref_service_factory.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/prefs/testing_pref_store.h"
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/user_prefs/user_prefs.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/app_sorting.h"
13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "extensions/browser/extension_function_registry.h"
1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "extensions/browser/extension_host_delegate.h"
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_prefs.h"
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/common/api/generated_api.h"
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/browser/api/shell_extensions_api_client.h"
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/browser/shell_app_sorting.h"
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/browser/shell_extension_system_factory.h"
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/browser/shell_extension_web_contents_observer.h"
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/browser/shell_runtime_api_delegate.h"
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/common/api/generated_api.h"
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using content::BrowserContext;
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace extensions {
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace {
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// See chrome::RegisterProfilePrefs() in chrome/browser/prefs/browser_prefs.cc
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RegisterPrefs(user_prefs::PrefRegistrySyncable* registry) {
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ExtensionPrefs::RegisterProfilePrefs(registry);
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// A minimal ExtensionHostDelegate.
3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class ShellExtensionHostDelegate : public ExtensionHostDelegate {
3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public:
3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  ShellExtensionHostDelegate() {}
3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual ~ShellExtensionHostDelegate() {}
3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // ExtensionHostDelegate implementation.
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void OnExtensionHostCreated(
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      content::WebContents* web_contents) OVERRIDE;
4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void OnRenderViewCreatedForBackgroundPage(
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      ExtensionHost* host) OVERRIDE {}
4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual content::JavaScriptDialogManager* GetJavaScriptDialogManager()
4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      OVERRIDE {
4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    // TODO(jamescook): Create a JavaScriptDialogManager or reuse the one from
5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    // content_shell.
5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    NOTREACHED();
5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    return NULL;
5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual void CreateTab(content::WebContents* web_contents,
5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                         const std::string& extension_id,
5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                         WindowOpenDisposition disposition,
5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                         const gfx::Rect& initial_pos,
5923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                         bool user_gesture) OVERRIDE {
6023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    // TODO(jamescook): Should app_shell support opening popup windows?
6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    NOTREACHED();
6223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual void ProcessMediaAccessRequest(
6523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      content::WebContents* web_contents,
6623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      const content::MediaStreamRequest& request,
6723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      const content::MediaResponseCallback& callback,
6823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      const Extension* extension) OVERRIDE {
6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    // app_shell does not support media capture.
7023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    NOTREACHED();
7123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
7223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)};
7323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
7423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ShellExtensionHostDelegate::OnExtensionHostCreated(
7523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    content::WebContents* web_contents) {
7623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  ShellExtensionWebContentsObserver::CreateForWebContents(web_contents);
7723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
7823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ShellExtensionsBrowserClient::ShellExtensionsBrowserClient(
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    BrowserContext* context)
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    : browser_context_(context), api_client_(new ShellExtensionsAPIClient) {
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Set up the preferences service.
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::PrefServiceFactory factory;
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  factory.set_user_prefs(new TestingPrefStore);
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  factory.set_extension_prefs(new TestingPrefStore);
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // app_shell should not require syncable preferences, but for now we need to
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // recycle some of the RegisterProfilePrefs() code in Chrome.
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // TODO(jamescook): Convert this to PrefRegistrySimple.
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  user_prefs::PrefRegistrySyncable* pref_registry =
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      new user_prefs::PrefRegistrySyncable;
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Prefs should be registered before the PrefService is created.
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  RegisterPrefs(pref_registry);
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  prefs_ = factory.Create(pref_registry).Pass();
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  user_prefs::UserPrefs::Set(browser_context_, prefs_.get());
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ShellExtensionsBrowserClient::~ShellExtensionsBrowserClient() {
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool ShellExtensionsBrowserClient::IsShuttingDown() {
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return false;
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool ShellExtensionsBrowserClient::AreExtensionsDisabled(
107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const base::CommandLine& command_line,
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    BrowserContext* context) {
1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return false;
1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool ShellExtensionsBrowserClient::IsValidContext(BrowserContext* context) {
1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return context == browser_context_;
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool ShellExtensionsBrowserClient::IsSameContext(BrowserContext* first,
1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                 BrowserContext* second) {
1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return first == second;
1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool ShellExtensionsBrowserClient::HasOffTheRecordContext(
1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    BrowserContext* context) {
1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return false;
1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)BrowserContext* ShellExtensionsBrowserClient::GetOffTheRecordContext(
1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    BrowserContext* context) {
1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // app_shell only supports a single context.
1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return NULL;
1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)BrowserContext* ShellExtensionsBrowserClient::GetOriginalContext(
1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    BrowserContext* context) {
1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return context;
1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool ShellExtensionsBrowserClient::IsGuestSession(
138a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    BrowserContext* context) const {
1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return false;
1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool ShellExtensionsBrowserClient::IsExtensionIncognitoEnabled(
1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::string& extension_id,
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    content::BrowserContext* context) const {
1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return false;
1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool ShellExtensionsBrowserClient::CanExtensionCrossIncognito(
1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const Extension* extension,
1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    content::BrowserContext* context) const {
1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return false;
1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochbool ShellExtensionsBrowserClient::IsWebViewRequest(
1550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    net::URLRequest* request) const {
1560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  return false;
1570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
1580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
159a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochnet::URLRequestJob*
160a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochShellExtensionsBrowserClient::MaybeCreateResourceBundleRequestJob(
161a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    net::URLRequest* request,
162a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    net::NetworkDelegate* network_delegate,
163a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::FilePath& directory_path,
164a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const std::string& content_security_policy,
165a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    bool send_cors_header) {
166a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return NULL;
167a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
168a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
169a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool ShellExtensionsBrowserClient::AllowCrossRendererResourceLoad(
170a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    net::URLRequest* request,
171a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    bool is_incognito,
172a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const Extension* extension,
173a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    InfoMap* extension_info_map) {
174a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // Note: This may need to change if app_shell supports webview.
175a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return false;
176a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
177a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PrefService* ShellExtensionsBrowserClient::GetPrefServiceForContext(
1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    BrowserContext* context) {
1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return prefs_.get();
1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
183e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid ShellExtensionsBrowserClient::GetEarlyExtensionPrefsObservers(
184e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    content::BrowserContext* context,
1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    std::vector<ExtensionPrefsObserver*>* observers) const {
1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ProcessManagerDelegate*
1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ShellExtensionsBrowserClient::GetProcessManagerDelegate() const {
1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return NULL;
1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
19323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)scoped_ptr<ExtensionHostDelegate>
19423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)ShellExtensionsBrowserClient::CreateExtensionHostDelegate() {
19523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  return scoped_ptr<ExtensionHostDelegate>(new ShellExtensionHostDelegate);
1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool ShellExtensionsBrowserClient::DidVersionUpdate(BrowserContext* context) {
1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // TODO(jamescook): We might want to tell extensions when app_shell updates.
2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return false;
2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void ShellExtensionsBrowserClient::PermitExternalProtocolHandler() {
2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)scoped_ptr<AppSorting> ShellExtensionsBrowserClient::CreateAppSorting() {
2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return scoped_ptr<AppSorting>(new ShellAppSorting);
2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool ShellExtensionsBrowserClient::IsRunningInForcedAppMode() {
2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return false;
2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ApiActivityMonitor* ShellExtensionsBrowserClient::GetApiActivityMonitor(
2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    BrowserContext* context) {
2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // app_shell doesn't monitor API function calls or events.
2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return NULL;
2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ExtensionSystemProvider*
2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ShellExtensionsBrowserClient::GetExtensionSystemFactory() {
2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return ShellExtensionSystemFactory::GetInstance();
2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
225a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ShellExtensionsBrowserClient::RegisterExtensionFunctions(
226a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    ExtensionFunctionRegistry* registry) const {
227c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Register core extension-system APIs.
2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  core_api::GeneratedFunctionRegistry::RegisterAll(registry);
2294ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
2305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Register chrome.shell APIs.
2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  shell_api::GeneratedFunctionRegistry::RegisterAll(registry);
232a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
233a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
234010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)scoped_ptr<RuntimeAPIDelegate>
235010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)ShellExtensionsBrowserClient::CreateRuntimeAPIDelegate(
236010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    content::BrowserContext* context) const {
2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return scoped_ptr<RuntimeAPIDelegate>(new ShellRuntimeAPIDelegate());
238010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
239010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
2406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)ComponentExtensionResourceManager*
2416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)ShellExtensionsBrowserClient::GetComponentExtensionResourceManager() {
2426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  return NULL;
2436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
2446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)net::NetLog* ShellExtensionsBrowserClient::GetNetLog() {
2465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return NULL;
2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace extensions
250