1// Copyright 2014 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 EXTENSIONS_COMMON_API_BLUETOOTH_BLUETOOTH_MANIFEST_PERMISSION_H_
6#define EXTENSIONS_COMMON_API_BLUETOOTH_BLUETOOTH_MANIFEST_PERMISSION_H_
7
8#include <set>
9#include <vector>
10
11#include "extensions/common/install_warning.h"
12#include "extensions/common/permissions/manifest_permission.h"
13
14namespace extensions {
15class Extension;
16}
17
18namespace extensions {
19struct BluetoothPermissionRequest;
20}
21
22namespace extensions {
23
24class BluetoothManifestPermission : public ManifestPermission {
25 public:
26  typedef std::set<std::string> BluetoothUuidSet;
27  BluetoothManifestPermission();
28  virtual ~BluetoothManifestPermission();
29
30  // Tries to construct the info based on |value|, as it would have appeared in
31  // the manifest. Sets |error| and returns an empty scoped_ptr on failure.
32  static scoped_ptr<BluetoothManifestPermission> FromValue(
33      const base::Value& value,
34      base::string16* error);
35
36  bool CheckRequest(const Extension* extension,
37                    const BluetoothPermissionRequest& request) const;
38  bool CheckSocketPermitted(const Extension* extension) const;
39  bool CheckLowEnergyPermitted(const Extension* extension) const;
40
41  void AddPermission(const std::string& uuid);
42
43  // extensions::ManifestPermission overrides.
44  virtual std::string name() const OVERRIDE;
45  virtual std::string id() const OVERRIDE;
46  virtual bool HasMessages() const OVERRIDE;
47  virtual PermissionMessages GetMessages() const OVERRIDE;
48  virtual bool FromValue(const base::Value* value) OVERRIDE;
49  virtual scoped_ptr<base::Value> ToValue() const OVERRIDE;
50  virtual ManifestPermission* Diff(const ManifestPermission* rhs)
51      const OVERRIDE;
52  virtual ManifestPermission* Union(const ManifestPermission* rhs)
53      const OVERRIDE;
54  virtual ManifestPermission* Intersect(const ManifestPermission* rhs)
55      const OVERRIDE;
56
57  const BluetoothUuidSet& uuids() const {
58    return uuids_;
59  }
60
61 private:
62  BluetoothUuidSet uuids_;
63  bool socket_;
64  bool low_energy_;
65};
66
67}  // namespace extensions
68
69#endif  // EXTENSIONS_COMMON_API_BLUETOOTH_BLUETOOTH_MANIFEST_PERMISSION_H_
70