Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(55)

Side by Side Diff: chrome/common/extensions/manifest.h

Issue 8654001: Reland restrict extension features based on the extension type. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 #ifndef CHROME_COMMON_EXTENSIONS_MANIFEST_H_
6 #define CHROME_COMMON_EXTENSIONS_MANIFEST_H_
7 #pragma once
8
9 #include <map>
10 #include <string>
11 #include <set>
12
13 #include "base/memory/scoped_ptr.h"
14 #include "base/string16.h"
15
16 namespace base {
17 class DictionaryValue;
18 class ListValue;
19 class Value;
20 }
21
22 namespace extensions {
23
24 // Lightweight wrapper around a DictionaryValue representing an extension's
25 // manifest. Currently enforces access to properties of the manifest based
26 // on manifest type.
27 //
28 // TODO(aa): Move more smarts about mmanifest into this class over time.
29 class Manifest {
30 public:
31 // Flags for matching types of extension manifests.
32 enum Type {
33 kTypeNone = 0,
34
35 // Extension::TYPE_EXTENSION and Extension::TYPE_USER_SCRIPT
36 kTypeExtension = 1 << 0,
37
38 // Extension::TYPE_THEME
39 kTypeTheme = 1 << 1,
40
41 // Extension::TYPE_HOSTED_APP
42 kTypeHostedApp = 1 << 2,
43
44 // Extension::TYPE_PACKAGED_APP
45 kTypePackagedApp = 1 << 3,
46
47 // Extension::TYPE_PLATFORM_APP
48 kTypePlatformApp = 1 << 4,
49
50 // All types
51 kTypeAll = (1 << 5) - 1,
52 };
53
54 // Returns all known keys (this is used for testing).
55 static std::set<std::string> GetAllKnownKeys();
56
57 // Takes over ownership of |value|.
58 explicit Manifest(base::DictionaryValue* value);
59 virtual ~Manifest();
60
61 // Returns true if all keys in the manifest can be specified by
62 // the extension type.
63 bool ValidateManifest(std::string* error) const;
64
65 // Returns the manifest type.
66 Type GetType() const;
67
68 // Returns true if the manifest represents an Extension::TYPE_THEME.
69 bool IsTheme() const;
70
71 // Returns true for Extension::TYPE_PLATFORM_APP
72 bool IsPlatformApp() const;
73
74 // Returns true for Extension::TYPE_PACKAGED_APP.
75 bool IsPackagedApp() const;
76
77 // Returns true for Extension::TYPE_HOSTED_APP.
78 bool IsHostedApp() const;
79
80 // These access the wrapped manifest value, returning false when the property
81 // does not exist or if the manifest type can't access it.
82 bool HasKey(const std::string& key) const;
83 bool Get(const std::string& path, base::Value** out_value) const;
84 bool GetBoolean(const std::string& path, bool* out_value) const;
85 bool GetInteger(const std::string& path, int* out_value) const;
86 bool GetString(const std::string& path, std::string* out_value) const;
87 bool GetString(const std::string& path, string16* out_value) const;
88 bool GetDictionary(const std::string& path,
89 base::DictionaryValue** out_value) const;
90 bool GetList(const std::string& path, base::ListValue** out_value) const;
91
92 // Returns a new Manifest equal to this one, passing ownership to
93 // the caller.
94 Manifest* DeepCopy() const;
95
96 // Returns true if this equals the |other| manifest.
97 bool Equals(const Manifest* other) const;
98
99 // Gets the underlying DictionaryValue representing the manifest.
100 // Note: only know this when you KNOW you don't need the validation.
101 base::DictionaryValue* value() const { return value_.get(); }
102
103 private:
104 // Returns true if the extension can specify the given |path|.
105 bool CanAccessPath(const std::string& path) const;
106
107 scoped_ptr<base::DictionaryValue> value_;
108 };
109
110 } // namespace extensions
111
112 #endif // CHROME_COMMON_EXTENSIONS_MANIFEST_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698