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

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

Issue 60393005: Revert 232631 - Revert 232499 "Move ManifestHandler to top-level extensions." (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: deps Created 7 years, 1 month 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) 2013 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_HANDLER_H_
6 #define CHROME_COMMON_EXTENSIONS_MANIFEST_HANDLER_H_
7
8 #include <set>
9 #include <string>
10 #include <vector>
11
12 #include "base/lazy_instance.h"
13 #include "base/memory/linked_ptr.h"
14 #include "base/strings/string16.h"
15 #include "extensions/common/manifest.h"
16
17 namespace extensions {
18 class Extension;
19
20 // An interface for clients that recognize and parse keys in extension
21 // manifests.
22 class ManifestHandler {
23 public:
24 ManifestHandler();
25 virtual ~ManifestHandler();
26
27 // Attempts to parse the extension's manifest.
28 // Returns true on success or false on failure; if false, |error| will
29 // be set to a failure message.
30 virtual bool Parse(Extension* extension, string16* error) = 0;
31
32 // Validate that files associated with this manifest key exist.
33 // Validation takes place after parsing. May also append a series of
34 // warning messages to |warnings|.
35 //
36 // Otherwise, returns false, and a description of the error is
37 // returned in |error|.
38 // TODO(yoz): Change error to string16. See crbug.com/71980.
39 virtual bool Validate(const Extension* extension,
40 std::string* error,
41 std::vector<InstallWarning>* warnings) const;
42
43 // If false (the default), only parse the manifest if a registered
44 // key is present in the manifest. If true, always attempt to parse
45 // the manifest for this extension type, even if no registered keys
46 // are present. This allows specifying a default parsed value for
47 // extensions that don't declare our key in the manifest.
48 // TODO(yoz): Use Feature availability instead.
49 virtual bool AlwaysParseForType(Manifest::Type type) const;
50
51 // Same as AlwaysParseForType, but for Validate instead of Parse.
52 virtual bool AlwaysValidateForType(Manifest::Type type) const;
53
54 // The list of keys that, if present, should be parsed before calling our
55 // Parse (typically, because our Parse needs to read those keys).
56 // Defaults to empty.
57 virtual const std::vector<std::string> PrerequisiteKeys() const;
58
59 // Associate us with our keys() in the manifest. A handler can register
60 // for multiple keys. The global registry takes ownership of this;
61 // if it has an existing handler for |key|, it replaces it with this.
62 // Manifest handlers must be registered at process startup in
63 // chrome_manifest_handlers.cc:
64 // (new MyManifestHandler)->Register();
65 void Register();
66
67 // Calling FinalizeRegistration indicates that there are no more
68 // manifest handlers to be registered.
69 static void FinalizeRegistration();
70
71 static bool IsRegistrationFinalized();
72
73 // Call Parse on all registered manifest handlers that should parse
74 // this extension.
75 static bool ParseExtension(Extension* extension, string16* error);
76
77 // Call Validate on all registered manifest handlers for this extension.
78 static bool ValidateExtension(const Extension* extension,
79 std::string* error,
80 std::vector<InstallWarning>* warnings);
81
82 protected:
83 // A convenience method for handlers that only register for 1 key,
84 // so that they can define keys() { return SingleKey(kKey); }
85 static const std::vector<std::string> SingleKey(const std::string& key);
86
87 private:
88 // The keys to register us for (in Register).
89 virtual const std::vector<std::string> Keys() const = 0;
90 };
91
92 // The global registry for manifest handlers.
93 class ManifestHandlerRegistry {
94 private:
95 friend class ManifestHandler;
96 friend class ScopedTestingManifestHandlerRegistry;
97 friend struct base::DefaultLazyInstanceTraits<ManifestHandlerRegistry>;
98
99 ManifestHandlerRegistry();
100 ~ManifestHandlerRegistry();
101
102 void Finalize();
103
104 void RegisterManifestHandler(const std::string& key,
105 linked_ptr<ManifestHandler> handler);
106 bool ParseExtension(Extension* extension, string16* error);
107 bool ValidateExtension(const Extension* extension,
108 std::string* error,
109 std::vector<InstallWarning>* warnings);
110
111 // Overrides the current global ManifestHandlerRegistry with
112 // |registry|, returning the current one.
113 static ManifestHandlerRegistry* SetForTesting(
114 ManifestHandlerRegistry* new_registry);
115
116 typedef std::map<std::string, linked_ptr<ManifestHandler> >
117 ManifestHandlerMap;
118 typedef std::map<ManifestHandler*, int> ManifestHandlerPriorityMap;
119
120 // Puts the manifest handlers in order such that each handler comes after
121 // any handlers for their PrerequisiteKeys. If there is no handler for
122 // a prerequisite key, that dependency is simply ignored.
123 // CHECKs that there are no manifest handlers with circular dependencies.
124 void SortManifestHandlers();
125
126 // All registered manifest handlers.
127 ManifestHandlerMap handlers_;
128
129 // The priority for each manifest handler. Handlers with lower priority
130 // values are evaluated first.
131 ManifestHandlerPriorityMap priority_map_;
132
133 bool is_finalized_;
134 };
135
136 } // namespace extensions
137
138 #endif // CHROME_COMMON_EXTENSIONS_MANIFEST_HANDLER_H_
OLDNEW
« no previous file with comments | « chrome/common/extensions/incognito_handler.h ('k') | chrome/common/extensions/manifest_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698