1// Copyright 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#include "extensions/common/extension_builder.h"
6
7#include "extensions/common/extension.h"
8
9namespace extensions {
10
11ExtensionBuilder::ExtensionBuilder()
12    : location_(Manifest::UNPACKED),
13      flags_(Extension::NO_FLAGS) {
14}
15ExtensionBuilder::~ExtensionBuilder() {}
16
17scoped_refptr<Extension> ExtensionBuilder::Build() {
18  std::string error;
19  scoped_refptr<Extension> extension = Extension::Create(
20      path_,
21      location_,
22      *manifest_,
23      flags_,
24      id_,
25      &error);
26  CHECK_EQ("", error);
27  return extension;
28}
29
30ExtensionBuilder& ExtensionBuilder::SetPath(const base::FilePath& path) {
31  path_ = path;
32  return *this;
33}
34
35ExtensionBuilder& ExtensionBuilder::SetLocation(Manifest::Location location) {
36  location_ = location;
37  return *this;
38}
39
40ExtensionBuilder& ExtensionBuilder::SetManifest(
41    scoped_ptr<base::DictionaryValue> manifest) {
42  manifest_ = manifest.Pass();
43  return *this;
44}
45
46ExtensionBuilder& ExtensionBuilder::MergeManifest(DictionaryBuilder& builder) {
47  manifest_->MergeDictionary(builder.Build().get());
48  return *this;
49}
50
51ExtensionBuilder& ExtensionBuilder::AddFlags(int init_from_value_flags) {
52  flags_ |= init_from_value_flags;
53  return *this;
54}
55
56ExtensionBuilder& ExtensionBuilder::SetID(const std::string& id) {
57  id_ = id;
58  return *this;
59}
60
61}  // namespace extensions
62