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_SOCKETS_SOCKETS_MANIFEST_DATA_H_
6#define EXTENSIONS_COMMON_API_SOCKETS_SOCKETS_MANIFEST_DATA_H_
7
8#include <vector>
9
10#include "base/strings/string16.h"
11#include "extensions/common/extension.h"
12#include "extensions/common/manifest_handler.h"
13
14namespace content {
15struct SocketPermissionRequest;
16}
17
18namespace extensions {
19class SocketsManifestPermission;
20}
21
22namespace extensions {
23
24// The parsed form of the "sockets" manifest entry.
25class SocketsManifestData : public Extension::ManifestData {
26 public:
27  explicit SocketsManifestData(
28      scoped_ptr<SocketsManifestPermission> permission);
29  virtual ~SocketsManifestData();
30
31  // Gets the SocketsManifestData for |extension|, or NULL if none was
32  // specified.
33  static SocketsManifestData* Get(const Extension* extension);
34
35  static bool CheckRequest(const Extension* extension,
36                           const content::SocketPermissionRequest& request);
37
38  // Tries to construct the info based on |value|, as it would have appeared in
39  // the manifest. Sets |error| and returns an empty scoped_ptr on failure.
40  static scoped_ptr<SocketsManifestData> FromValue(const base::Value& value,
41                                                   base::string16* error);
42
43  const SocketsManifestPermission* permission() const {
44    return permission_.get();
45  }
46
47 private:
48  scoped_ptr<SocketsManifestPermission> permission_;
49};
50
51}  // namespace extensions
52
53#endif  // EXTENSIONS_COMMON_API_SOCKETS_SOCKETS_MANIFEST_DATA_H_
54