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