Index: mojo/shell/identity.cc |
diff --git a/mojo/shell/identity.cc b/mojo/shell/identity.cc |
index b3d045094ae16f63fa3c8b11a7726b8bad9a60b5..15a2d8f023f1f00e2fd205599ad99bcc5da934c9 100644 |
--- a/mojo/shell/identity.cc |
+++ b/mojo/shell/identity.cc |
@@ -8,22 +8,58 @@ |
namespace mojo { |
namespace shell { |
+namespace { |
-Identity::Identity() {} |
+// It's valid to specify mojo: URLs in the filter either as mojo:foo or |
+// mojo://foo/ - but we store the filter in the latter form. |
+CapabilityFilter CanonicalizeFilter(const CapabilityFilter& filter) { |
+ CapabilityFilter canonicalized; |
+ for (CapabilityFilter::const_iterator it = filter.begin(); |
+ it != filter.end(); |
+ ++it) { |
+ if (it->first == "*") |
+ canonicalized[it->first] = it->second; |
+ else |
+ canonicalized[GURL(it->first).spec()] = it->second; |
+ } |
+ return canonicalized; |
+} |
+ |
+} // namespace |
+ |
+Identity::Identity() : filter_(GetPermissiveCapabilityFilter()) {} |
+ |
+Identity::Identity(const GURL& in_url) |
+ : url(GetBaseURLAndQuery(in_url, nullptr)), |
+ qualifier(url.spec()), |
+ filter_(GetPermissiveCapabilityFilter()) {} |
Identity::Identity(const GURL& in_url, const std::string& in_qualifier) |
: url(GetBaseURLAndQuery(in_url, nullptr)), |
- qualifier(in_qualifier.empty() ? url.spec() : in_qualifier) {} |
+ qualifier(in_qualifier.empty() ? url.spec() : in_qualifier), |
+ filter_(GetPermissiveCapabilityFilter()) {} |
-// explicit |
-Identity::Identity(const GURL& in_url) |
- : url(GetBaseURLAndQuery(in_url, nullptr)), qualifier(url.spec()) {} |
+Identity::Identity(const GURL& in_url, |
+ const std::string& in_qualifier, |
+ CapabilityFilter filter) |
+ : url(GetBaseURLAndQuery(in_url, nullptr)), |
+ qualifier(in_qualifier.empty() ? url.spec() : in_qualifier), |
+ filter_(CanonicalizeFilter(filter)) {} |
+ |
+Identity::~Identity() {} |
bool Identity::operator<(const Identity& other) const { |
+ // We specifically don't include filter in the equivalence check because we |
+ // don't quite know how this should work yet. |
+ // TODO(beng): figure out how it should work. |
if (url != other.url) |
return url < other.url; |
return qualifier < other.qualifier; |
} |
+void Identity::SetFilter(const CapabilityFilter& filter) { |
+ filter_ = CanonicalizeFilter(filter); |
+} |
+ |
} // namespace shell |
} // namespace mojo |