Chromium Code Reviews| Index: url/origin.cc |
| diff --git a/url/origin.cc b/url/origin.cc |
| index 53600b1dc96f6c5b2736cb2eb0988b3b34fb715b..28359b8da17e0346fe5273fc793506d1d0b34a4b 100644 |
| --- a/url/origin.cc |
| +++ b/url/origin.cc |
| @@ -8,6 +8,8 @@ |
| #include <string.h> |
| #include "base/logging.h" |
| +// TODO(dcheng): Use crypto's rand util. |
| +#include "base/rand_util.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "url/gurl.h" |
| #include "url/url_canon.h" |
| @@ -34,11 +36,15 @@ GURL AddSuboriginToUrl(const GURL& url, const std::string& suborigin) { |
| } // namespace |
| -Origin::Origin() : unique_(true), suborigin_(std::string()) {} |
| +Origin::Origin() : unique_(true) { |
| + base::RandBytes(unique_origin_id_, sizeof(unique_origin_id_)); |
| +} |
| -Origin::Origin(const GURL& url) : unique_(true), suborigin_(std::string()) { |
| - if (!url.is_valid() || (!url.IsStandard() && !url.SchemeIsBlob())) |
| +Origin::Origin(const GURL& url) : unique_(true) { |
| + if (!url.is_valid() || (!url.IsStandard() && !url.SchemeIsBlob())) { |
| + base::RandBytes(unique_origin_id_, sizeof(unique_origin_id_)); |
| return; |
| + } |
| if (url.SchemeIsFileSystem()) { |
| tuple_ = SchemeHostPort(*url.inner_url()); |
| @@ -78,6 +84,8 @@ Origin::Origin(const GURL& url) : unique_(true), suborigin_(std::string()) { |
| } |
| unique_ = tuple_.IsInvalid(); |
| + if (unique_) |
| + base::RandBytes(unique_origin_id_, sizeof(unique_origin_id_)); |
| } |
| Origin::Origin(base::StringPiece scheme, |
| @@ -85,10 +93,11 @@ Origin::Origin(base::StringPiece scheme, |
| uint16_t port, |
| base::StringPiece suborigin, |
| SchemeHostPort::ConstructPolicy policy) |
| - : tuple_(scheme.as_string(), host.as_string(), port, policy) { |
| - unique_ = tuple_.IsInvalid(); |
| - suborigin_ = suborigin.as_string(); |
| -} |
| + : Origin(scheme.as_string(), |
| + host.as_string(), |
| + port, |
| + suborigin.as_string(), |
| + policy) {} |
| Origin::Origin(std::string scheme, |
| std::string host, |
| @@ -97,7 +106,10 @@ Origin::Origin(std::string scheme, |
| SchemeHostPort::ConstructPolicy policy) |
| : tuple_(std::move(scheme), std::move(host), port, policy) { |
| unique_ = tuple_.IsInvalid(); |
| - suborigin_ = std::move(suborigin); |
| + if (unique_) |
| + base::RandBytes(unique_origin_id_, sizeof(unique_origin_id_)); |
| + else |
| + suborigin_ = std::move(suborigin); |
|
Mike West
2017/02/24 07:58:50
I wonder if suborigins should have an effect on th
|
| } |
| Origin::~Origin() { |
| @@ -158,8 +170,12 @@ GURL Origin::GetURL() const { |
| } |
| bool Origin::IsSameOriginWith(const Origin& other) const { |
| - if (unique_ || other.unique_) |
| - return false; |
| + if (unique_ || other.unique_) { |
| + return unique_ && other.unique_ |
| + ? memcmp(unique_origin_id_, other.unique_origin_id_, |
| + sizeof(unique_origin_id_)) == 0 |
| + : false; |
| + } |
| return tuple_.Equals(other.tuple_) && suborigin_ == other.suborigin_; |
| } |