Commit 79a343c0 authored by Eric Robinson's avatar Eric Robinson Committed by Commit Bot

Adding mojo for initiating frame in NetworkIsolationKey.

This adds the initiating frame into the mojo structure for the
NetworkIsolationKey.

Bug: 950069
Change-Id: I32c1369f631e7cc62499a8b32212e2fbec404cd1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1669417Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarMatt Menke <mmenke@chromium.org>
Reviewed-by: default avatarShivani Sharma <shivanisha@chromium.org>
Commit-Queue: Eric Robinson <ericrobinson@chromium.org>
Cr-Commit-Position: refs/heads/master@{#672556}
parent 83f96dba
...@@ -21,7 +21,7 @@ class NET_EXPORT NetworkIsolationKey { ...@@ -21,7 +21,7 @@ class NET_EXPORT NetworkIsolationKey {
// Full constructor. When a request is initiated by the top frame, it must // Full constructor. When a request is initiated by the top frame, it must
// also populate the initiating frame parameter when calling this constructor. // also populate the initiating frame parameter when calling this constructor.
explicit NetworkIsolationKey( explicit NetworkIsolationKey(
// TODO(crbug.com/963476): Make the arguments non-optional once all call // TODO(crbug.com/950069): Make the arguments non-optional once all call
// sites are updated to include the initiating_frame_origin. // sites are updated to include the initiating_frame_origin.
const base::Optional<url::Origin>& top_frame_origin, const base::Optional<url::Origin>& top_frame_origin,
const base::Optional<url::Origin>& initiating_frame_origin = const base::Optional<url::Origin>& initiating_frame_origin =
...@@ -76,13 +76,15 @@ class NET_EXPORT NetworkIsolationKey { ...@@ -76,13 +76,15 @@ class NET_EXPORT NetworkIsolationKey {
const base::Optional<url::Origin>& GetTopFrameOrigin() const { const base::Optional<url::Origin>& GetTopFrameOrigin() const {
return top_frame_origin_; return top_frame_origin_;
} }
const base::Optional<url::Origin>& GetInitiatingFrameOrigin() const {
return initiating_frame_origin_;
}
// Returns true if all parts of the key are empty. // Returns true if all parts of the key are empty.
bool IsEmpty() const; bool IsEmpty() const;
private: private:
// TODO(crbug.com/963476): Add use_initiating_frame_origin_ and
// initiating_frame_origin_ to network_isolation_key_mojom_traits.h.
// Whether or not to use the initiating frame origin as part of the key. // Whether or not to use the initiating frame origin as part of the key.
bool use_initiating_frame_origin_; bool use_initiating_frame_origin_;
......
...@@ -117,6 +117,7 @@ jumbo_component("cpp_base") { ...@@ -117,6 +117,7 @@ jumbo_component("cpp_base") {
"net_ipc_param_traits.h", "net_ipc_param_traits.h",
"network_ipc_param_traits.cc", "network_ipc_param_traits.cc",
"network_ipc_param_traits.h", "network_ipc_param_traits.h",
"network_isolation_key_mojom_traits.cc",
"network_isolation_key_mojom_traits.h", "network_isolation_key_mojom_traits.h",
"p2p_param_traits.cc", "p2p_param_traits.cc",
"p2p_param_traits.h", "p2p_param_traits.h",
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "services/network/public/cpp/network_isolation_key_mojom_traits.h"
namespace mojo {
bool StructTraits<network::mojom::NetworkIsolationKeyDataView,
net::NetworkIsolationKey>::
Read(network::mojom::NetworkIsolationKeyDataView data,
net::NetworkIsolationKey* out) {
base::Optional<url::Origin> top_frame_origin, initiating_frame_origin;
if (!data.ReadTopFrameOrigin(&top_frame_origin))
return false;
if (!data.ReadInitiatingFrameOrigin(&initiating_frame_origin))
return false;
// A key is either fully empty or fully populated (for all fields relevant
// given the flags set). The constructor verifies this, so if the top-frame
// origin is populated, we call the full constructor, otherwise, the empty.
if (top_frame_origin.has_value()) {
*out = net::NetworkIsolationKey(top_frame_origin, initiating_frame_origin);
} else {
*out = net::NetworkIsolationKey();
}
return true;
}
} // namespace mojo
...@@ -14,8 +14,9 @@ ...@@ -14,8 +14,9 @@
namespace mojo { namespace mojo {
template <> template <>
struct StructTraits<network::mojom::NetworkIsolationKeyDataView, struct COMPONENT_EXPORT(NETWORK_CPP_BASE)
net::NetworkIsolationKey> { StructTraits<network::mojom::NetworkIsolationKeyDataView,
net::NetworkIsolationKey> {
static bool IsNull(const net::NetworkIsolationKey& input) { static bool IsNull(const net::NetworkIsolationKey& input) {
return input.IsEmpty(); return input.IsEmpty();
} }
...@@ -29,14 +30,13 @@ struct StructTraits<network::mojom::NetworkIsolationKeyDataView, ...@@ -29,14 +30,13 @@ struct StructTraits<network::mojom::NetworkIsolationKeyDataView,
return input.GetTopFrameOrigin(); return input.GetTopFrameOrigin();
} }
static bool Read(network::mojom::NetworkIsolationKeyDataView data, static const base::Optional<url::Origin>& initiating_frame_origin(
net::NetworkIsolationKey* out) { const net::NetworkIsolationKey& input) {
base::Optional<url::Origin> top_frame_origin; return input.GetInitiatingFrameOrigin();
if (!data.ReadTopFrameOrigin(&top_frame_origin))
return false;
*out = net::NetworkIsolationKey(top_frame_origin);
return true;
} }
static bool Read(network::mojom::NetworkIsolationKeyDataView data,
net::NetworkIsolationKey* out);
}; };
} // namespace mojo } // namespace mojo
......
...@@ -5,7 +5,9 @@ ...@@ -5,7 +5,9 @@
#include "services/network/public/cpp/network_isolation_key_mojom_traits.h" #include "services/network/public/cpp/network_isolation_key_mojom_traits.h"
#include "base/stl_util.h" #include "base/stl_util.h"
#include "base/test/scoped_feature_list.h"
#include "mojo/public/cpp/test_support/test_utils.h" #include "mojo/public/cpp/test_support/test_utils.h"
#include "net/base/features.h"
#include "services/network/public/mojom/network_isolation_key.mojom.h" #include "services/network/public/mojom/network_isolation_key.mojom.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h" #include "url/gurl.h"
...@@ -16,7 +18,35 @@ namespace mojo { ...@@ -16,7 +18,35 @@ namespace mojo {
TEST(NetworkIsolationKeyMojomTraitsTest, SerializeAndDeserialize) { TEST(NetworkIsolationKeyMojomTraitsTest, SerializeAndDeserialize) {
std::vector<net::NetworkIsolationKey> keys = { std::vector<net::NetworkIsolationKey> keys = {
net::NetworkIsolationKey(), net::NetworkIsolationKey(),
net::NetworkIsolationKey(url::Origin::Create(GURL("http://a.test/")))}; net::NetworkIsolationKey(url::Origin::Create(GURL("http://a.test/")),
url::Origin::Create(GURL("http://b.test/")))};
for (auto original : keys) {
net::NetworkIsolationKey copied;
EXPECT_TRUE(mojo::test::SerializeAndDeserialize<
network::mojom::NetworkIsolationKey>(&original, &copied));
EXPECT_EQ(original, copied);
}
}
class NetworkIsolationKeyMojomTraitsWithInitiatingFrameOriginTest
: public testing::Test {
public:
NetworkIsolationKeyMojomTraitsWithInitiatingFrameOriginTest() {
feature_list_.InitAndEnableFeature(
net::features::kAppendInitiatingFrameOriginToNetworkIsolationKey);
}
private:
base::test::ScopedFeatureList feature_list_;
};
TEST_F(NetworkIsolationKeyMojomTraitsWithInitiatingFrameOriginTest,
SerializeAndDeserialize) {
std::vector<net::NetworkIsolationKey> keys = {
net::NetworkIsolationKey(),
net::NetworkIsolationKey(url::Origin::Create(GURL("http://a.test/")),
url::Origin::Create(GURL("http://b.test/")))};
for (auto original : keys) { for (auto original : keys) {
net::NetworkIsolationKey copied; net::NetworkIsolationKey copied;
......
...@@ -11,4 +11,5 @@ struct NetworkIsolationKey { ...@@ -11,4 +11,5 @@ struct NetworkIsolationKey {
// Keeping optional to allow clients that do not populate top frame origin. // Keeping optional to allow clients that do not populate top frame origin.
// TODO(crbug.com/910721): This will eventually always be populated. // TODO(crbug.com/910721): This will eventually always be populated.
url.mojom.Origin? top_frame_origin; url.mojom.Origin? top_frame_origin;
url.mojom.Origin? initiating_frame_origin;
}; };
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment