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.
5 #ifndef CHROME_COMMON_EXTENSIONS_MANIFEST_HANDLERS_EXTERNALLY_CONNECTABLE_H_
6 #define CHROME_COMMON_EXTENSIONS_MANIFEST_HANDLERS_EXTERNALLY_CONNECTABLE_H_
11 #include "base/memory/scoped_ptr.h"
12 #include "chrome/common/extensions/extension.h"
13 #include "chrome/common/extensions/manifest_handler.h"
14 #include "extensions/common/install_warning.h"
15 #include "extensions/common/url_pattern_set.h"
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 {
38 ExternallyConnectableHandler();
39 virtual ~ExternallyConnectableHandler();
41 virtual bool Parse(Extension* extension, string16* error) OVERRIDE;
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 {
52 // Gets the ExternallyConnectableInfo for |extension|, or NULL if none was
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,
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|.
75 // True if extension accepts the TLS channel ID, when requested by the
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,
89 bool accepts_tls_channel_id);
92 DISALLOW_COPY_AND_ASSIGN(ExternallyConnectableInfo);
95 } // namespace extensions
97 #endif // CHROME_COMMON_EXTENSIONS_MANIFEST_HANDLERS_EXTERNALLY_CONNECTABLE_H_