1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chromecast/common/cast_extensions_client.h"
6
7 #include <memory>
8 #include <string>
9
10 #include "base/check.h"
11 #include "base/macros.h"
12 #include "base/no_destructor.h"
13 #include "base/notreached.h"
14 #include "chromecast/common/cast_extensions_api_provider.h"
15 #include "extensions/common/api/api_features.h"
16 #include "extensions/common/api/behavior_features.h"
17 #include "extensions/common/api/generated_schemas.h"
18 #include "extensions/common/api/manifest_features.h"
19 #include "extensions/common/api/permission_features.h"
20 #include "extensions/common/core_extensions_api_provider.h"
21 #include "extensions/common/extension_urls.h"
22 #include "extensions/common/features/feature_provider.h"
23 #include "extensions/common/features/manifest_feature.h"
24 #include "extensions/common/features/simple_feature.h"
25 #include "extensions/common/permissions/permission_message_provider.h"
26 #include "extensions/common/url_pattern_set.h"
27
28 namespace extensions {
29
30 namespace {
31
32 // TODO(jamescook): Refactor ChromePermissionsMessageProvider so we can share
33 // code. For now, this implementation does nothing.
34 class ShellPermissionMessageProvider : public PermissionMessageProvider {
35 public:
ShellPermissionMessageProvider()36 ShellPermissionMessageProvider() {}
~ShellPermissionMessageProvider()37 ~ShellPermissionMessageProvider() override {}
38
39 // PermissionMessageProvider implementation.
GetPermissionMessages(const PermissionIDSet & permissions) const40 PermissionMessages GetPermissionMessages(
41 const PermissionIDSet& permissions) const override {
42 return PermissionMessages();
43 }
44
IsPrivilegeIncrease(const PermissionSet & granted_permissions,const PermissionSet & requested_permissions,Manifest::Type extension_type) const45 bool IsPrivilegeIncrease(const PermissionSet& granted_permissions,
46 const PermissionSet& requested_permissions,
47 Manifest::Type extension_type) const override {
48 // Ensure we implement this before shipping.
49 CHECK(false);
50 return false;
51 }
52
GetAllPermissionIDs(const PermissionSet & permissions,Manifest::Type extension_type) const53 PermissionIDSet GetAllPermissionIDs(
54 const PermissionSet& permissions,
55 Manifest::Type extension_type) const override {
56 return PermissionIDSet();
57 }
58
59 private:
60 DISALLOW_COPY_AND_ASSIGN(ShellPermissionMessageProvider);
61 };
62
63 } // namespace
64
CastExtensionsClient()65 CastExtensionsClient::CastExtensionsClient()
66 : webstore_base_url_(extension_urls::kChromeWebstoreBaseURL),
67 webstore_update_url_(extension_urls::kChromeWebstoreUpdateURL) {
68 AddAPIProvider(std::make_unique<CoreExtensionsAPIProvider>());
69 AddAPIProvider(std::make_unique<CastExtensionsAPIProvider>());
70 }
71
~CastExtensionsClient()72 CastExtensionsClient::~CastExtensionsClient() {}
73
Initialize()74 void CastExtensionsClient::Initialize() {
75 // TODO(jamescook): Do we need to whitelist any extensions?
76 }
77
InitializeWebStoreUrls(base::CommandLine * command_line)78 void CastExtensionsClient::InitializeWebStoreUrls(
79 base::CommandLine* command_line) {}
80
81 const PermissionMessageProvider&
GetPermissionMessageProvider() const82 CastExtensionsClient::GetPermissionMessageProvider() const {
83 NOTIMPLEMENTED();
84 static base::NoDestructor<ShellPermissionMessageProvider>
85 g_permission_message_provider;
86 return *g_permission_message_provider;
87 }
88
GetProductName()89 const std::string CastExtensionsClient::GetProductName() {
90 return "cast_shell";
91 }
92
FilterHostPermissions(const URLPatternSet & hosts,URLPatternSet * new_hosts,PermissionIDSet * permissions) const93 void CastExtensionsClient::FilterHostPermissions(
94 const URLPatternSet& hosts,
95 URLPatternSet* new_hosts,
96 PermissionIDSet* permissions) const {
97 NOTIMPLEMENTED();
98 }
99
SetScriptingAllowlist(const ScriptingAllowlist & allowlist)100 void CastExtensionsClient::SetScriptingAllowlist(
101 const ScriptingAllowlist& allowlist) {
102 scripting_allowlist_ = allowlist;
103 }
104
105 const ExtensionsClient::ScriptingAllowlist&
GetScriptingAllowlist() const106 CastExtensionsClient::GetScriptingAllowlist() const {
107 // TODO(jamescook): Real allowlist.
108 return scripting_allowlist_;
109 }
110
GetPermittedChromeSchemeHosts(const Extension * extension,const APIPermissionSet & api_permissions) const111 URLPatternSet CastExtensionsClient::GetPermittedChromeSchemeHosts(
112 const Extension* extension,
113 const APIPermissionSet& api_permissions) const {
114 NOTIMPLEMENTED();
115 return URLPatternSet();
116 }
117
IsScriptableURL(const GURL & url,std::string * error) const118 bool CastExtensionsClient::IsScriptableURL(const GURL& url,
119 std::string* error) const {
120 NOTIMPLEMENTED();
121 return true;
122 }
123
GetWebstoreBaseURL() const124 const GURL& CastExtensionsClient::GetWebstoreBaseURL() const {
125 return webstore_base_url_;
126 }
127
GetWebstoreUpdateURL() const128 const GURL& CastExtensionsClient::GetWebstoreUpdateURL() const {
129 return webstore_update_url_;
130 }
131
IsBlacklistUpdateURL(const GURL & url) const132 bool CastExtensionsClient::IsBlacklistUpdateURL(const GURL& url) const {
133 return true;
134 }
135
136 } // namespace extensions
137