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

Unified Diff: url/origin.cc

Issue 2714813003: Add an identity component for unique/opaque url::Origins.
Patch Set: . Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
« url/origin.h ('K') | « url/origin.h ('k') | url/origin_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_;
}
« url/origin.h ('K') | « url/origin.h ('k') | url/origin_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698