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