Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(374)

Side by Side Diff: chrome/common/extensions/manifest_handlers/externally_connectable.cc

Issue 16174005: Implement externally_connectable! Web pages can now communicate directly with (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: jeffrey review Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/common/extensions/manifest_handlers/externally_connectable.h" 5 #include "chrome/common/extensions/manifest_handlers/externally_connectable.h"
6 6
7 #include <algorithm>
8
9 #include "base/stl_util.h"
7 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
8 #include "chrome/common/extensions/api/manifest_types.h" 11 #include "chrome/common/extensions/api/manifest_types.h"
9 #include "chrome/common/extensions/extension_manifest_constants.h" 12 #include "chrome/common/extensions/extension_manifest_constants.h"
10 #include "extensions/common/error_utils.h" 13 #include "extensions/common/error_utils.h"
11 #include "extensions/common/url_pattern.h" 14 #include "extensions/common/url_pattern.h"
12 #include "googleurl/src/gurl.h" 15 #include "googleurl/src/gurl.h"
13 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" 16 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
14 17
15 namespace rcd = net::registry_controlled_domains; 18 namespace rcd = net::registry_controlled_domains;
16 19
17 namespace extensions { 20 namespace extensions {
18 21
19 namespace externally_connectable_errors { 22 namespace externally_connectable_errors {
20 const char kErrorInvalid[] = "Invalid value for 'externally_connectable'"; 23 const char kErrorInvalid[] = "Invalid value for 'externally_connectable'";
21 const char kErrorInvalidMatchPattern[] = "Invalid match pattern '*'"; 24 const char kErrorInvalidMatchPattern[] = "Invalid match pattern '*'";
22 const char kErrorInvalidId[] = "Invalid ID '*'"; 25 const char kErrorInvalidId[] = "Invalid ID '*'";
23 const char kErrorTopLevelDomainsNotAllowed[] = 26 const char kErrorTopLevelDomainsNotAllowed[] =
24 "\"*\" is an effective top level domain for which wildcard subdomains such " 27 "\"*\" is an effective top level domain for which wildcard subdomains such "
25 "as \"*\" are not allowed"; 28 "as \"*\" are not allowed";
26 const char kErrorWildcardHostsNotAllowed[] = 29 const char kErrorWildcardHostsNotAllowed[] =
27 "Wildcard domain patterns such as \"*\" are not allowed"; 30 "Wildcard domain patterns such as \"*\" are not allowed";
28 } 31 }
29 32
30 namespace keys = extension_manifest_keys; 33 namespace keys = extension_manifest_keys;
31 namespace errors = externally_connectable_errors; 34 namespace errors = externally_connectable_errors;
32 using api::manifest_types::ExternallyConnectable; 35 using api::manifest_types::ExternallyConnectable;
33 36
34 namespace { 37 namespace {
38
35 const char kAllIds[] = "*"; 39 const char kAllIds[] = "*";
40
41 template <typename T>
42 std::vector<T> Sorted(const std::vector<T>& in) {
43 std::vector<T> out = in;
44 std::sort(out.begin(), out.end());
45 return out;
46 }
47
36 } 48 }
37 49
38 ExternallyConnectableHandler::ExternallyConnectableHandler() {} 50 ExternallyConnectableHandler::ExternallyConnectableHandler() {}
39 51
40 ExternallyConnectableHandler::~ExternallyConnectableHandler() {} 52 ExternallyConnectableHandler::~ExternallyConnectableHandler() {}
41 53
42 bool ExternallyConnectableHandler::Parse(Extension* extension, 54 bool ExternallyConnectableHandler::Parse(Extension* extension,
43 string16* error) { 55 string16* error) {
44 const base::Value* externally_connectable = NULL; 56 const base::Value* externally_connectable = NULL;
45 CHECK(extension->manifest()->Get(keys::kExternallyConnectable, 57 CHECK(extension->manifest()->Get(keys::kExternallyConnectable,
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 return make_scoped_ptr( 162 return make_scoped_ptr(
151 new ExternallyConnectableInfo(matches, ids, matches_all_ids)); 163 new ExternallyConnectableInfo(matches, ids, matches_all_ids));
152 } 164 }
153 165
154 ExternallyConnectableInfo::~ExternallyConnectableInfo() {} 166 ExternallyConnectableInfo::~ExternallyConnectableInfo() {}
155 167
156 ExternallyConnectableInfo::ExternallyConnectableInfo( 168 ExternallyConnectableInfo::ExternallyConnectableInfo(
157 const URLPatternSet& matches, 169 const URLPatternSet& matches,
158 const std::vector<std::string>& ids, 170 const std::vector<std::string>& ids,
159 bool matches_all_ids) 171 bool matches_all_ids)
160 : matches(matches), ids(ids), matches_all_ids(matches_all_ids) {} 172 : matches(matches), ids(Sorted(ids)), matches_all_ids(matches_all_ids) {}
173
174 bool ExternallyConnectableInfo::MatchesIdOrAllIds(const std::string& id) {
175 if (matches_all_ids)
176 return true;
177 DCHECK(base::STLIsSorted(ids));
178 return std::binary_search(ids.begin(), ids.end(), id);
179 }
161 180
162 } // namespace extensions 181 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698