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/permissions/manifest_permission.h"
6
7#include "base/json/json_writer.h"
8#include "extensions/common/manifest_handler.h"
9#include "ipc/ipc_message.h"
10#include "ipc/ipc_message_utils.h"
11
12namespace extensions {
13
14ManifestPermission::ManifestPermission() {}
15
16ManifestPermission::~ManifestPermission() { }
17
18ManifestPermission* ManifestPermission::Clone() const {
19  return Union(this);
20}
21
22bool ManifestPermission::Contains(const ManifestPermission* rhs) const {
23  return scoped_ptr<ManifestPermission>(Intersect(rhs))->Equal(rhs);
24}
25
26bool ManifestPermission::Equal(const ManifestPermission* rhs) const {
27  return ToValue()->Equals(rhs->ToValue().get());
28}
29
30void ManifestPermission::Write(IPC::Message* m) const {
31  base::ListValue singleton;
32  base::Value* value = ToValue().release();
33  singleton.Append(value);
34  IPC::WriteParam(m, singleton);
35}
36
37bool ManifestPermission::Read(const IPC::Message* m, PickleIterator* iter) {
38  base::ListValue singleton;
39  if (!IPC::ReadParam(m, iter, &singleton))
40    return false;
41  if (singleton.GetSize() != 1)
42    return false;
43  base::Value* value = NULL;
44  if (!singleton.Get(0, &value))
45    return false;
46  return FromValue(value);
47}
48
49void ManifestPermission::Log(std::string* log) const {
50  base::JSONWriter::WriteWithOptions(
51      ToValue().get(), base::JSONWriter::OPTIONS_PRETTY_PRINT, log);
52}
53
54}  // namespace extensions
55