1a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// found in the LICENSE file. 4a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 5a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "extensions/test/test_extensions_client.h" 6a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/api/generated_schemas.h" 8a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "extensions/common/common_manifest_handlers.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/extension_urls.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/features/api_feature.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/features/base_feature_provider.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "extensions/common/features/feature_provider.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "extensions/common/features/json_feature_provider_source.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/features/manifest_feature.h" 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/features/permission_feature.h" 16a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "extensions/common/manifest_handler.h" 1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "extensions/common/permissions/extensions_api_permissions.h" 1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "extensions/common/permissions/permissions_info.h" 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "extensions/common/url_pattern_set.h" 20a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "extensions/test/test_permission_message_provider.h" 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "grit/extensions_resources.h" 22a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 23a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochnamespace extensions { 24a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace { 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)template <class FeatureClass> 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)SimpleFeature* CreateFeature() { 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return new FeatureClass; 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 34a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTestExtensionsClient::TestExtensionsClient() { 35a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 37a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTestExtensionsClient::~TestExtensionsClient() { 38a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 39a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 40a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochvoid TestExtensionsClient::Initialize() { 41a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Registration could already be finalized in unit tests, where the utility 42a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // thread runs in-process. 43a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (!ManifestHandler::IsRegistrationFinalized()) { 44a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch RegisterCommonManifestHandlers(); 45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ManifestHandler::FinalizeRegistration(); 46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Allow the core API permissions. 4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) static ExtensionsAPIPermissions extensions_api_permissions; 5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) PermissionsInfo::GetInstance()->AddProvider(extensions_api_permissions); 51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 52a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 53a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochconst PermissionMessageProvider& 54a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTestExtensionsClient::GetPermissionMessageProvider() const { 55a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch static TestPermissionMessageProvider provider; 56a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return provider; 57a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 58a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst std::string TestExtensionsClient::GetProductName() { 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return "extensions_test"; 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuscoped_ptr<FeatureProvider> TestExtensionsClient::CreateFeatureProvider( 64a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& name) const { 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<FeatureProvider> provider; 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<JSONFeatureProviderSource> source( 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CreateFeatureProviderSource(name)); 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (name == "api") { 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) provider.reset(new BaseFeatureProvider(source->dictionary(), 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CreateFeature<APIFeature>)); 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (name == "manifest") { 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) provider.reset(new BaseFeatureProvider(source->dictionary(), 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CreateFeature<ManifestFeature>)); 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (name == "permission") { 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) provider.reset(new BaseFeatureProvider(source->dictionary(), 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CreateFeature<PermissionFeature>)); 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NOTREACHED(); 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return provider.Pass(); 81a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 82a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)scoped_ptr<JSONFeatureProviderSource> 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TestExtensionsClient::CreateFeatureProviderSource( 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& name) const { 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<JSONFeatureProviderSource> source( 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new JSONFeatureProviderSource(name)); 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (name == "api") { 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) source->LoadJSON(IDR_EXTENSION_API_FEATURES); 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (name == "manifest") { 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) source->LoadJSON(IDR_EXTENSION_MANIFEST_FEATURES); 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (name == "permission") { 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) source->LoadJSON(IDR_EXTENSION_PERMISSION_FEATURES); 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NOTREACHED(); 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) source.reset(); 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return source.Pass(); 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 101a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochvoid TestExtensionsClient::FilterHostPermissions( 102a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const URLPatternSet& hosts, 103a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch URLPatternSet* new_hosts, 104a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::set<PermissionMessage>* messages) const { 105a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 106a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 107a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochvoid TestExtensionsClient::SetScriptingWhitelist( 108a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const ExtensionsClient::ScriptingWhitelist& whitelist) { 109a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scripting_whitelist_ = whitelist; 110a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 111a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 112a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochconst ExtensionsClient::ScriptingWhitelist& 113a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTestExtensionsClient::GetScriptingWhitelist() const { 114a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return scripting_whitelist_; 115a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 116a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 117a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochURLPatternSet TestExtensionsClient::GetPermittedChromeSchemeHosts( 118a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const Extension* extension, 119a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const APIPermissionSet& api_permissions) const { 120a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch URLPatternSet hosts; 121a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return hosts; 122a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 123a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 124a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool TestExtensionsClient::IsScriptableURL(const GURL& url, 125a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string* error) const { 126a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return true; 127a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 128a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 129a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool TestExtensionsClient::IsAPISchemaGenerated( 130a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& name) const { 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return core_api::GeneratedSchemas::IsGenerated(name); 132a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 133a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 134a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbase::StringPiece TestExtensionsClient::GetAPISchema( 135a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& name) const { 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return core_api::GeneratedSchemas::Get(name); 137a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 138a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void TestExtensionsClient::RegisterAPISchemaResources(ExtensionAPI* api) const { 140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 142a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool TestExtensionsClient::ShouldSuppressFatalErrors() const { 143a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return true; 144a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 145a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistd::string TestExtensionsClient::GetWebstoreBaseURL() const { 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return extension_urls::kChromeWebstoreBaseURL; 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistd::string TestExtensionsClient::GetWebstoreUpdateURL() const { 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return extension_urls::kChromeWebstoreUpdateURL; 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool TestExtensionsClient::IsBlacklistUpdateURL(const GURL& url) const { 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return true; 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 158a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} // namespace extensions 159