| 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
|
|
|