Updating trunk VERSION from 2139.0 to 2140.0
[chromium-blink-merge.git] / extensions / common / manifest_handlers / externally_connectable.h
blob960904e01a13665726fa47af0711c4b7de302b4e
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.
5 #ifndef EXTENSIONS_COMMON_MANIFEST_HANDLERS_EXTERNALLY_CONNECTABLE_H_
6 #define EXTENSIONS_COMMON_MANIFEST_HANDLERS_EXTERNALLY_CONNECTABLE_H_
8 #include <string>
9 #include <vector>
11 #include "base/memory/scoped_ptr.h"
12 #include "extensions/common/extension.h"
13 #include "extensions/common/install_warning.h"
14 #include "extensions/common/manifest_handler.h"
15 #include "extensions/common/url_pattern_set.h"
17 class GURL;
19 namespace base {
20 class Value;
23 namespace extensions {
25 // Error constants used when parsing the externally_connectable manifest entry.
26 namespace externally_connectable_errors {
27 extern const char kErrorInvalid[];
28 extern const char kErrorInvalidMatchPattern[];
29 extern const char kErrorInvalidId[];
30 extern const char kErrorNothingSpecified[];
31 extern const char kErrorTopLevelDomainsNotAllowed[];
32 extern const char kErrorWildcardHostsNotAllowed[];
33 } // namespace externally_connectable_errors
35 // Parses the externally_connectable manifest entry.
36 class ExternallyConnectableHandler : public ManifestHandler {
37 public:
38 ExternallyConnectableHandler();
39 virtual ~ExternallyConnectableHandler();
41 virtual bool Parse(Extension* extension, base::string16* error) OVERRIDE;
43 private:
44 virtual const std::vector<std::string> Keys() const OVERRIDE;
46 DISALLOW_COPY_AND_ASSIGN(ExternallyConnectableHandler);
49 // The parsed form of the externally_connectable manifest entry.
50 struct ExternallyConnectableInfo : public Extension::ManifestData {
51 public:
52 // Gets the ExternallyConnectableInfo for |extension|, or NULL if none was
53 // specified.
54 static ExternallyConnectableInfo* Get(const Extension* extension);
56 // Tries to construct the info based on |value|, as it would have appeared in
57 // the manifest. Sets |error| and returns an empty scoped_ptr on failure.
58 static scoped_ptr<ExternallyConnectableInfo> FromValue(
59 const base::Value& value,
60 std::vector<InstallWarning>* install_warnings,
61 base::string16* error);
63 virtual ~ExternallyConnectableInfo();
65 // The URL patterns that are allowed to connect/sendMessage.
66 const URLPatternSet matches;
68 // The extension IDs that are allowed to connect/sendMessage. Sorted.
69 const std::vector<std::string> ids;
71 // True if any extension is allowed to connect. This would have corresponded
72 // to an ID of "*" in |ids|.
73 const bool all_ids;
75 // True if extension accepts the TLS channel ID, when requested by the
76 // connecting origin.
77 const bool accepts_tls_channel_id;
79 // Returns true if |ids| contains |id| or if |all_ids| is true.
81 // More convenient for callers than checking each individually, and it makes
82 // use of the sortedness of |ids|.
83 bool IdCanConnect(const std::string& id);
85 // Public only for testing. Use FromValue in production.
86 ExternallyConnectableInfo(const URLPatternSet& matches,
87 const std::vector<std::string>& ids,
88 bool all_ids,
89 bool accepts_tls_channel_id);
91 private:
92 DISALLOW_COPY_AND_ASSIGN(ExternallyConnectableInfo);
95 } // namespace extensions
97 #endif // EXTENSIONS_COMMON_MANIFEST_HANDLERS_EXTERNALLY_CONNECTABLE_H_