summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chromium/content/browser/renderer_host/render_frame_host_impl.cc3
-rw-r--r--chromium/content/renderer/render_frame_impl.cc4
-rw-r--r--chromium/net/cookies/site_for_cookies.cc16
-rw-r--r--chromium/net/cookies/site_for_cookies.h5
-rw-r--r--chromium/services/network/public/cpp/net_ipc_param_traits.cc13
-rw-r--r--chromium/services/network/public/cpp/site_for_cookies_mojom_traits.cc7
-rw-r--r--chromium/services/network/public/cpp/site_for_cookies_mojom_traits.h5
-rw-r--r--chromium/services/network/public/mojom/site_for_cookies.mojom1
-rw-r--r--chromium/third_party/blink/renderer/platform/weborigin/security_origin.cc13
-rw-r--r--chromium/third_party/blink/renderer/platform/weborigin/security_origin.h5
-rw-r--r--chromium/url/origin.cc16
-rw-r--r--chromium/url/origin.h6
12 files changed, 82 insertions, 12 deletions
diff --git a/chromium/content/browser/renderer_host/render_frame_host_impl.cc b/chromium/content/browser/renderer_host/render_frame_host_impl.cc
index 3c3950ace28..c48863fc9c2 100644
--- a/chromium/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/chromium/content/browser/renderer_host/render_frame_host_impl.cc
@@ -3288,7 +3288,8 @@ net::IsolationInfo RenderFrameHostImpl::ComputeIsolationInfoInternal(
url::Origin top_frame_origin = ComputeTopFrameOrigin(frame_origin);
net::SchemefulSite top_frame_site = net::SchemefulSite(top_frame_origin);
- net::SiteForCookies candidate_site_for_cookies(top_frame_site);
+ net::SiteForCookies candidate_site_for_cookies =
+ net::SiteForCookies::FromOrigin(top_frame_origin);
std::set<net::SchemefulSite> party_context;
diff --git a/chromium/content/renderer/render_frame_impl.cc b/chromium/content/renderer/render_frame_impl.cc
index 6d909758a18..d0a4b0e7b13 100644
--- a/chromium/content/renderer/render_frame_impl.cc
+++ b/chromium/content/renderer/render_frame_impl.cc
@@ -2526,6 +2526,10 @@ void RenderFrameImpl::CommitNavigation(
AssertNavigationCommits assert_navigation_commits(
this, kMayReplaceInitialEmptyDocument);
+ if (commit_params->origin_to_commit) {
+ commit_params->origin_to_commit->SetFullURL(frame_->GetDocumentLoader()->OriginalUrl());
+ }
+
SetOldPageLifecycleStateFromNewPageCommitIfNeeded(
commit_params->old_page_info.get());
diff --git a/chromium/net/cookies/site_for_cookies.cc b/chromium/net/cookies/site_for_cookies.cc
index 977a0b7c7af..afb5a881e35 100644
--- a/chromium/net/cookies/site_for_cookies.cc
+++ b/chromium/net/cookies/site_for_cookies.cc
@@ -31,8 +31,10 @@ SiteForCookies& SiteForCookies::operator=(SiteForCookies&& site_for_cookies) =
// static
bool SiteForCookies::FromWire(const SchemefulSite& site,
bool schemefully_same,
+ GURL first_party_url,
SiteForCookies* out) {
SiteForCookies candidate(site);
+ candidate.first_party_url_ = first_party_url;
if (site != candidate.site_)
return false;
@@ -44,7 +46,12 @@ bool SiteForCookies::FromWire(const SchemefulSite& site,
// static
SiteForCookies SiteForCookies::FromOrigin(const url::Origin& origin) {
- return SiteForCookies(SchemefulSite(origin));
+ SiteForCookies site_for_cookies = SiteForCookies(SchemefulSite(origin));
+ if (!origin.GetFullURL().is_empty())
+ site_for_cookies.first_party_url_ = origin.GetFullURL();
+ else
+ site_for_cookies.first_party_url_ = origin.GetURL();
+ return site_for_cookies;
}
// static
@@ -204,4 +211,11 @@ void SiteForCookies::MarkIfCrossScheme(const SchemefulSite& other) {
schemefully_same_ = false;
}
+GURL SiteForCookies::first_party_url() const {
+ if (first_party_url_.is_empty())
+ return RepresentativeUrl();
+
+ return first_party_url_;
+}
+
} // namespace net
diff --git a/chromium/net/cookies/site_for_cookies.h b/chromium/net/cookies/site_for_cookies.h
index d0379b23522..63acabccabd 100644
--- a/chromium/net/cookies/site_for_cookies.h
+++ b/chromium/net/cookies/site_for_cookies.h
@@ -59,6 +59,7 @@ class NET_EXPORT SiteForCookies {
// did not lie, merely that they are well-formed.
static bool FromWire(const SchemefulSite& site,
bool schemefully_same,
+ GURL first_party_url,
SiteForCookies* out);
// If the origin is opaque, returns SiteForCookies that matches nothing.
@@ -156,6 +157,8 @@ class NET_EXPORT SiteForCookies {
return site_.site_as_origin_.host();
}
+ GURL first_party_url() const;
+
// Used for serialization/deserialization. This value is irrelevant if
// site().opaque() is true.
bool schemefully_same() const { return schemefully_same_; }
@@ -204,6 +207,8 @@ class NET_EXPORT SiteForCookies {
// irrelevant (For tests this value can also be modified by
// SetSchemefullySameForTesting()).
bool schemefully_same_ = false;
+
+ GURL first_party_url_;
};
} // namespace net
diff --git a/chromium/services/network/public/cpp/net_ipc_param_traits.cc b/chromium/services/network/public/cpp/net_ipc_param_traits.cc
index c65f02d1185..d89202efb98 100644
--- a/chromium/services/network/public/cpp/net_ipc_param_traits.cc
+++ b/chromium/services/network/public/cpp/net_ipc_param_traits.cc
@@ -529,17 +529,20 @@ void ParamTraits<net::SiteForCookies>::Write(base::Pickle* m,
const param_type& p) {
WriteParam(m, p.site());
WriteParam(m, p.schemefully_same());
+ WriteParam(m, p.first_party_url().spec());
}
bool ParamTraits<net::SiteForCookies>::Read(const base::Pickle* m,
base::PickleIterator* iter,
param_type* r) {
net::SchemefulSite site;
+ std::string first_party_url;
bool schemefully_same;
- if (!ReadParam(m, iter, &site) || !ReadParam(m, iter, &schemefully_same))
+ if (!ReadParam(m, iter, &site) || !ReadParam(m, iter, &schemefully_same) ||
+ !ReadParam(m, iter, &first_party_url))
return false;
- return net::SiteForCookies::FromWire(site, schemefully_same, r);
+ return net::SiteForCookies::FromWire(site, schemefully_same, GURL(first_party_url), r);
}
void ParamTraits<net::SiteForCookies>::Log(const param_type& p,
@@ -558,6 +561,7 @@ void ParamTraits<url::Origin>::Write(base::Pickle* m, const url::Origin& p) {
WriteParam(m, p.GetTupleOrPrecursorTupleIfOpaque().host());
WriteParam(m, p.GetTupleOrPrecursorTupleIfOpaque().port());
WriteParam(m, p.GetNonceForSerialization());
+ WriteParam(m, p.GetFullURL().spec());
}
bool ParamTraits<url::Origin>::Read(const base::Pickle* m,
@@ -566,9 +570,11 @@ bool ParamTraits<url::Origin>::Read(const base::Pickle* m,
std::string scheme;
std::string host;
uint16_t port;
+ std::string full_url;
absl::optional<base::UnguessableToken> nonce_if_opaque;
if (!ReadParam(m, iter, &scheme) || !ReadParam(m, iter, &host) ||
- !ReadParam(m, iter, &port) || !ReadParam(m, iter, &nonce_if_opaque)) {
+ !ReadParam(m, iter, &port) || !ReadParam(m, iter, &nonce_if_opaque)
+ || !ReadParam(m, iter, &full_url)) {
return false;
}
@@ -582,6 +588,7 @@ bool ParamTraits<url::Origin>::Read(const base::Pickle* m,
return false;
*p = std::move(creation_result.value());
+ p->SetFullURL(GURL(full_url));
return true;
}
diff --git a/chromium/services/network/public/cpp/site_for_cookies_mojom_traits.cc b/chromium/services/network/public/cpp/site_for_cookies_mojom_traits.cc
index 48968f3e5ea..bf3ac45f8b2 100644
--- a/chromium/services/network/public/cpp/site_for_cookies_mojom_traits.cc
+++ b/chromium/services/network/public/cpp/site_for_cookies_mojom_traits.cc
@@ -12,12 +12,17 @@ bool StructTraits<network::mojom::SiteForCookiesDataView, net::SiteForCookies>::
Read(network::mojom::SiteForCookiesDataView data,
net::SiteForCookies* out) {
net::SchemefulSite site;
+ std::string first_party_url;
if (!data.ReadSite(&site)) {
return false;
}
+ if (!data.ReadFirstPartyUrl(&first_party_url)) {
+ return false;
+ }
+
bool result =
- net::SiteForCookies::FromWire(site, data.schemefully_same(), out);
+ net::SiteForCookies::FromWire(site, data.schemefully_same(), GURL(first_party_url), out);
if (!result) {
network::debug::SetDeserializationCrashKeyString("site_for_cookie");
}
diff --git a/chromium/services/network/public/cpp/site_for_cookies_mojom_traits.h b/chromium/services/network/public/cpp/site_for_cookies_mojom_traits.h
index 4e3fccddee5..9e21f030888 100644
--- a/chromium/services/network/public/cpp/site_for_cookies_mojom_traits.h
+++ b/chromium/services/network/public/cpp/site_for_cookies_mojom_traits.h
@@ -24,6 +24,11 @@ struct COMPONENT_EXPORT(NETWORK_CPP_COOKIES)
return input.schemefully_same();
}
+ static std::string first_party_url(
+ const net::SiteForCookies& input) {
+ return input.first_party_url().spec();
+ }
+
static bool Read(network::mojom::SiteForCookiesDataView data,
net::SiteForCookies* out);
};
diff --git a/chromium/services/network/public/mojom/site_for_cookies.mojom b/chromium/services/network/public/mojom/site_for_cookies.mojom
index 1cee8c51b7c..f93b4caf7bc 100644
--- a/chromium/services/network/public/mojom/site_for_cookies.mojom
+++ b/chromium/services/network/public/mojom/site_for_cookies.mojom
@@ -12,4 +12,5 @@ struct SiteForCookies {
// net::SiteForCookies.
SchemefulSite site;
bool schemefully_same;
+ string first_party_url;
};
diff --git a/chromium/third_party/blink/renderer/platform/weborigin/security_origin.cc b/chromium/third_party/blink/renderer/platform/weborigin/security_origin.cc
index 4a4d3e133b8..eb51ce46282 100644
--- a/chromium/third_party/blink/renderer/platform/weborigin/security_origin.cc
+++ b/chromium/third_party/blink/renderer/platform/weborigin/security_origin.cc
@@ -152,14 +152,15 @@ SecurityOrigin::SecurityOrigin(const KURL& url)
// an origin with an effective port of 0.
(url.HasPort() || !url.IsValid() || !url.IsHierarchical())
? url.Port()
- : DefaultPortForProtocol(url.Protocol())) {}
+ : DefaultPortForProtocol(url.Protocol())) {
+ full_url_ = url.Copy();
+}
SecurityOrigin::SecurityOrigin(const String& protocol,
const String& host,
uint16_t port)
: protocol_(protocol), host_(host), domain_(host_), port_(port) {
DCHECK(!IsOpaque());
-
// NOTE(juvaldma)(Chromium 67.0.3396.47)
//
// If DefaultPortForProtocol and IsDefaultPortForProtocol were appropriately
@@ -205,7 +206,8 @@ SecurityOrigin::SecurityOrigin(const SecurityOrigin* other,
agent_cluster_id_(other->agent_cluster_id_),
precursor_origin_(other->precursor_origin_
? other->precursor_origin_->IsolatedCopy()
- : nullptr) {}
+ : nullptr),
+ full_url_(other->full_url_.Copy()) {}
SecurityOrigin::SecurityOrigin(const SecurityOrigin* other,
ConstructSameThreadCopy)
@@ -223,7 +225,8 @@ SecurityOrigin::SecurityOrigin(const SecurityOrigin* other,
other->is_opaque_origin_potentially_trustworthy_),
cross_agent_cluster_access_(other->cross_agent_cluster_access_),
agent_cluster_id_(other->agent_cluster_id_),
- precursor_origin_(other->precursor_origin_) {}
+ precursor_origin_(other->precursor_origin_),
+ full_url_(other->full_url_.Copy()) {}
scoped_refptr<SecurityOrigin> SecurityOrigin::CreateWithReferenceOrigin(
const KURL& url,
@@ -293,6 +296,7 @@ scoped_refptr<SecurityOrigin> SecurityOrigin::CreateFromUrlOrigin(
url::Origin::Nonce(*nonce_if_opaque), tuple_origin.get()));
}
CHECK(tuple_origin);
+ tuple_origin->full_url_ = KURL(origin.GetFullURL());
return tuple_origin;
}
@@ -309,6 +313,7 @@ url::Origin SecurityOrigin::ToUrlOrigin() const {
}
url::Origin result = url::Origin::CreateFromNormalizedTuple(
std::move(scheme), std::move(host), port);
+ result.SetFullURL(full_url_);
CHECK(!result.opaque());
return result;
}
diff --git a/chromium/third_party/blink/renderer/platform/weborigin/security_origin.h b/chromium/third_party/blink/renderer/platform/weborigin/security_origin.h
index bdb02e52815..ecf73684675 100644
--- a/chromium/third_party/blink/renderer/platform/weborigin/security_origin.h
+++ b/chromium/third_party/blink/renderer/platform/weborigin/security_origin.h
@@ -35,6 +35,7 @@
#include "base/gtest_prod_util.h"
#include "base/macros.h"
#include "third_party/blink/renderer/platform/platform_export.h"
+#include "third_party/blink/renderer/platform/weborigin/kurl.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "third_party/blink/renderer/platform/wtf/thread_safe_ref_counted.h"
@@ -421,7 +422,7 @@ class PLATFORM_EXPORT SecurityOrigin : public RefCounted<SecurityOrigin> {
const String host_ = g_empty_string;
String domain_ = g_empty_string;
uint16_t port_ = 0;
- const absl::Optional<url::Origin::Nonce> nonce_if_opaque_;
+ const absl::optional<url::Origin::Nonce> nonce_if_opaque_;
bool universal_access_ = false;
bool domain_was_set_in_dom_ = false;
bool can_load_local_resources_ = false;
@@ -437,6 +438,8 @@ class PLATFORM_EXPORT SecurityOrigin : public RefCounted<SecurityOrigin> {
// origin is derived.
const scoped_refptr<const SecurityOrigin> precursor_origin_;
+ KURL full_url_;
+
DISALLOW_COPY_AND_ASSIGN(SecurityOrigin);
};
diff --git a/chromium/url/origin.cc b/chromium/url/origin.cc
index 0fda176b48c..dd8fd5ae0b1 100644
--- a/chromium/url/origin.cc
+++ b/chromium/url/origin.cc
@@ -56,7 +56,10 @@ Origin Origin::Create(const GURL& url) {
if (!tuple.IsValid())
return Origin();
- return Origin(std::move(tuple));
+
+ Origin origin = Origin(std::move(tuple));
+ origin.full_url_ = url;
+ return origin;
}
Origin Origin::Resolve(const GURL& url, const Origin& base_origin) {
@@ -150,6 +153,17 @@ GURL Origin::GetURL() const {
return tuple_.GetURL();
}
+GURL Origin::GetFullURL() const {
+ if (opaque())
+ return GURL();
+
+ return full_url_;
+}
+
+void Origin::SetFullURL(const GURL &url) {
+ full_url_ = url;
+}
+
absl::optional<base::UnguessableToken> Origin::GetNonceForSerialization()
const {
// TODO(nasko): Consider not making a copy here, but return a reference to
diff --git a/chromium/url/origin.h b/chromium/url/origin.h
index 17cadf356b9..222f1d290f1 100644
--- a/chromium/url/origin.h
+++ b/chromium/url/origin.h
@@ -20,6 +20,7 @@
#include "ipc/ipc_param_traits.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h"
+#include "url/gurl.h"
#include "url/scheme_host_port.h"
#include "url/third_party/mozilla/url_parse.h"
#include "url/url_canon.h"
@@ -259,6 +260,9 @@ class COMPONENT_EXPORT(URL) Origin {
// URL (e.g. with a path component).
GURL GetURL() const;
+ GURL GetFullURL() const;
+ void SetFullURL(const GURL &url);
+
// Same as GURL::DomainIs. If |this| origin is opaque, then returns false.
bool DomainIs(base::StringPiece canonical_domain) const;
@@ -422,6 +426,8 @@ class COMPONENT_EXPORT(URL) Origin {
// nonce is preserved when an opaque origin is copied or moved. An Origin
// is considered opaque if and only if |nonce_| holds a value.
absl::optional<Nonce> nonce_;
+
+ GURL full_url_;
};
// Pretty-printers for logging. These expose the internal state of the nonce.