summaryrefslogtreecommitdiffstats
path: root/extensions/common/extension_builder.h
diff options
context:
space:
mode:
authorbenwells@chromium.org <benwells@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-05 22:52:42 +0000
committerbenwells@chromium.org <benwells@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-05 22:52:42 +0000
commit22b7b2cede575642c81042aab307a5afc6a88568 (patch)
tree0c2709ce63902f6250664e7ed2d856565c9b4fee /extensions/common/extension_builder.h
parentae9fafd5dc78e603e6111774cb23fed69ce548b2 (diff)
downloadchromium_src-22b7b2cede575642c81042aab307a5afc6a88568.zip
chromium_src-22b7b2cede575642c81042aab307a5afc6a88568.tar.gz
chromium_src-22b7b2cede575642c81042aab307a5afc6a88568.tar.bz2
Moved extension and value builder code to extensions component.
This is only used by tests but it has no chrome dependencies, and test in extensions use it, so it should move down to. TBR=sky@chromium.org BUG=162530 Review URL: https://codereview.chromium.org/48643003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@233119 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'extensions/common/extension_builder.h')
-rw-r--r--extensions/common/extension_builder.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/extensions/common/extension_builder.h b/extensions/common/extension_builder.h
new file mode 100644
index 0000000..afb7f88
--- /dev/null
+++ b/extensions/common/extension_builder.h
@@ -0,0 +1,63 @@
+// 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 "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_