| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef EXTENSIONS_COMMON_EXTENSION_BUILDER_H_ |
| #define EXTENSIONS_COMMON_EXTENSION_BUILDER_H_ |
| |
| #include <string> |
| |
| #include "base/files/file_path.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "extensions/common/manifest.h" |
| #include "extensions/common/value_builder.h" |
| |
| namespace extensions { |
| class Extension; |
| |
| // An easier way to create extensions than Extension::Create. The |
| // constructor sets up some defaults which are customized using the |
| // methods. The only method that must be called is SetManifest(). |
| class ExtensionBuilder { |
| public: |
| ExtensionBuilder(); |
| ~ExtensionBuilder(); |
| |
| // Can only be called once, after which it's invalid to use the builder. |
| // CHECKs that the extension was created successfully. |
| scoped_refptr<Extension> Build(); |
| |
| // Workaround to allow you to pass rvalue ExtensionBuilders by reference to |
| // other functions, e.g. UseBuilder(ExtensionBuilder().Pass()) |
| ExtensionBuilder& Pass() { return *this; } |
| |
| // Defaults to FilePath(). |
| ExtensionBuilder& SetPath(const base::FilePath& path); |
| |
| // Defaults to Manifest::UNPACKED. |
| ExtensionBuilder& SetLocation(Manifest::Location location); |
| |
| ExtensionBuilder& SetManifest(scoped_ptr<base::DictionaryValue> manifest); |
| ExtensionBuilder& SetManifest(DictionaryBuilder& manifest_builder) { |
| return SetManifest(manifest_builder.Build()); |
| } |
| |
| // Adds the keys from the DictionaryBuilder to the manifest, with new keys |
| // taking precedence. |
| ExtensionBuilder& MergeManifest(DictionaryBuilder& builder); |
| |
| ExtensionBuilder& AddFlags(int init_from_value_flags); |
| |
| // Defaults to the default extension ID created in Extension::Create. |
| ExtensionBuilder& SetID(const std::string& id); |
| |
| private: |
| base::FilePath path_; |
| Manifest::Location location_; |
| scoped_ptr<base::DictionaryValue> manifest_; |
| int flags_; |
| std::string id_; |
| }; |
| |
| } // namespace extensions |
| |
| #endif // EXTENSIONS_COMMON_EXTENSION_BUILDER_H_ |