1 // Copyright (c) 2012 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_EXTENSION_BUILDER_H_ 6 #define CHROME_COMMON_EXTENSIONS_EXTENSION_BUILDER_H_ 7 8 #include "base/files/file_path.h" 9 #include "base/memory/ref_counted.h" 10 #include "base/memory/scoped_ptr.h" 11 #include "chrome/common/extensions/manifest.h" 12 #include "chrome/common/extensions/value_builder.h" 13 14 namespace extensions { 15 class Extension; 16 17 // An easier way to create extensions than Extension::Create. The 18 // constructor sets up some defaults which are customized using the 19 // methods. The only method that must be called is SetManifest(). 20 class ExtensionBuilder { 21 public: 22 ExtensionBuilder(); 23 ~ExtensionBuilder(); 24 25 // Can only be called once, after which it's invalid to use the builder. 26 // CHECKs that the extension was created successfully. 27 scoped_refptr<Extension> Build(); 28 29 // Workaround to allow you to pass rvalue ExtensionBuilders by reference to 30 // other functions, e.g. UseBuilder(ExtensionBuilder().Pass()) 31 ExtensionBuilder& Pass() { return *this; } 32 33 // Defaults to FilePath(). 34 ExtensionBuilder& SetPath(const base::FilePath& path); 35 36 // Defaults to Manifest::UNPACKED. 37 ExtensionBuilder& SetLocation(Manifest::Location location); 38 39 ExtensionBuilder& SetManifest(scoped_ptr<base::DictionaryValue> manifest); 40 ExtensionBuilder& SetManifest(DictionaryBuilder& manifest_builder) { 41 return SetManifest(manifest_builder.Build()); 42 } 43 44 // Adds the keys from the DictionaryBuilder to the manifest, with new keys 45 // taking precedence. 46 ExtensionBuilder& MergeManifest(DictionaryBuilder& builder); 47 48 ExtensionBuilder& AddFlags(int init_from_value_flags); 49 50 // Defaults to the default extension ID created in Extension::Create. 51 ExtensionBuilder& SetID(const std::string& id); 52 53 private: 54 base::FilePath path_; 55 Manifest::Location location_; 56 scoped_ptr<base::DictionaryValue> manifest_; 57 int flags_; 58 std::string id_; 59 }; 60 61 } // namespace extensions 62 63 #endif // CHROME_COMMON_EXTENSIONS_EXTENSION_BUILDER_H_ 64