| Index: chrome/common/extensions/manifest.h
|
| diff --git a/chrome/common/extensions/manifest.h b/chrome/common/extensions/manifest.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fb372708d5415301944c1a737570f139bf414128
|
| --- /dev/null
|
| +++ b/chrome/common/extensions/manifest.h
|
| @@ -0,0 +1,112 @@
|
| +// Copyright (c) 2011 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 CHROME_COMMON_EXTENSIONS_MANIFEST_H_
|
| +#define CHROME_COMMON_EXTENSIONS_MANIFEST_H_
|
| +#pragma once
|
| +
|
| +#include <map>
|
| +#include <string>
|
| +#include <set>
|
| +
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/string16.h"
|
| +
|
| +namespace base {
|
| +class DictionaryValue;
|
| +class ListValue;
|
| +class Value;
|
| +}
|
| +
|
| +namespace extensions {
|
| +
|
| +// Lightweight wrapper around a DictionaryValue representing an extension's
|
| +// manifest. Currently enforces access to properties of the manifest based
|
| +// on manifest type.
|
| +//
|
| +// TODO(aa): Move more smarts about mmanifest into this class over time.
|
| +class Manifest {
|
| + public:
|
| + // Flags for matching types of extension manifests.
|
| + enum Type {
|
| + kTypeNone = 0,
|
| +
|
| + // Extension::TYPE_EXTENSION and Extension::TYPE_USER_SCRIPT
|
| + kTypeExtension = 1 << 0,
|
| +
|
| + // Extension::TYPE_THEME
|
| + kTypeTheme = 1 << 1,
|
| +
|
| + // Extension::TYPE_HOSTED_APP
|
| + kTypeHostedApp = 1 << 2,
|
| +
|
| + // Extension::TYPE_PACKAGED_APP
|
| + kTypePackagedApp = 1 << 3,
|
| +
|
| + // Extension::TYPE_PLATFORM_APP
|
| + kTypePlatformApp = 1 << 4,
|
| +
|
| + // All types
|
| + kTypeAll = (1 << 5) - 1,
|
| + };
|
| +
|
| + // Returns all known keys (this is used for testing).
|
| + static std::set<std::string> GetAllKnownKeys();
|
| +
|
| + // Takes over ownership of |value|.
|
| + explicit Manifest(base::DictionaryValue* value);
|
| + virtual ~Manifest();
|
| +
|
| + // Returns true if all keys in the manifest can be specified by
|
| + // the extension type.
|
| + bool ValidateManifest(std::string* error) const;
|
| +
|
| + // Returns the manifest type.
|
| + Type GetType() const;
|
| +
|
| + // Returns true if the manifest represents an Extension::TYPE_THEME.
|
| + bool IsTheme() const;
|
| +
|
| + // Returns true for Extension::TYPE_PLATFORM_APP
|
| + bool IsPlatformApp() const;
|
| +
|
| + // Returns true for Extension::TYPE_PACKAGED_APP.
|
| + bool IsPackagedApp() const;
|
| +
|
| + // Returns true for Extension::TYPE_HOSTED_APP.
|
| + bool IsHostedApp() const;
|
| +
|
| + // These access the wrapped manifest value, returning false when the property
|
| + // does not exist or if the manifest type can't access it.
|
| + bool HasKey(const std::string& key) const;
|
| + bool Get(const std::string& path, base::Value** out_value) const;
|
| + bool GetBoolean(const std::string& path, bool* out_value) const;
|
| + bool GetInteger(const std::string& path, int* out_value) const;
|
| + bool GetString(const std::string& path, std::string* out_value) const;
|
| + bool GetString(const std::string& path, string16* out_value) const;
|
| + bool GetDictionary(const std::string& path,
|
| + base::DictionaryValue** out_value) const;
|
| + bool GetList(const std::string& path, base::ListValue** out_value) const;
|
| +
|
| + // Returns a new Manifest equal to this one, passing ownership to
|
| + // the caller.
|
| + Manifest* DeepCopy() const;
|
| +
|
| + // Returns true if this equals the |other| manifest.
|
| + bool Equals(const Manifest* other) const;
|
| +
|
| + // Gets the underlying DictionaryValue representing the manifest.
|
| + // Note: only know this when you KNOW you don't need the validation.
|
| + base::DictionaryValue* value() const { return value_.get(); }
|
| +
|
| + private:
|
| + // Returns true if the extension can specify the given |path|.
|
| + bool CanAccessPath(const std::string& path) const;
|
| +
|
| + scoped_ptr<base::DictionaryValue> value_;
|
| +};
|
| +
|
| +} // namespace extensions
|
| +
|
| +#endif // CHROME_COMMON_EXTENSIONS_MANIFEST_H_
|
|
|