Commit f07ac3c6 authored by csharrison's avatar csharrison Committed by Commit bot

Add std::string constructors for Origin/SchemeHostPort to reduce copies

WebSecurityOrigin forwards temporaries to Origin. We should just use
these, rather than consider them opaque StringPieces and copying data
out of them.

This CL also removes some dead code.

BUG=672877

Review-Url: https://codereview.chromium.org/2561363002
Cr-Commit-Position: refs/heads/master@{#438054}
parent 38f4a834
...@@ -21,8 +21,10 @@ void CheckCastedOriginsAlreadyNormalized( ...@@ -21,8 +21,10 @@ void CheckCastedOriginsAlreadyNormalized(
url::Origin::UnsafelyCreateOriginWithoutNormalization( url::Origin::UnsafelyCreateOriginWithoutNormalization(
origin.protocol().utf8(), origin.host().utf8(), origin.protocol().utf8(), origin.host().utf8(),
origin.effectivePort()); origin.effectivePort());
url::Origin non_checked_origin = url::Origin::CreateFromNormalizedTuple( url::Origin non_checked_origin =
origin.protocol().utf8(), origin.host().utf8(), origin.effectivePort()); url::Origin::CreateFromNormalizedTupleWithSuborigin(
origin.protocol().utf8(), origin.host().utf8(),
origin.effectivePort(), origin.suborigin().utf8());
EXPECT_EQ(checked_origin.scheme(), non_checked_origin.scheme()); EXPECT_EQ(checked_origin.scheme(), non_checked_origin.scheme());
EXPECT_EQ(checked_origin.host(), non_checked_origin.host()); EXPECT_EQ(checked_origin.host(), non_checked_origin.host());
EXPECT_EQ(checked_origin.port(), non_checked_origin.port()); EXPECT_EQ(checked_origin.port(), non_checked_origin.port());
...@@ -144,7 +146,7 @@ TEST(BlinkPlatformTest, CastWebSecurityOrigin) { ...@@ -144,7 +146,7 @@ TEST(BlinkPlatformTest, CastWebSecurityOrigin) {
} }
// This test ensures that WebSecurityOrigins can safely use // This test ensures that WebSecurityOrigins can safely use
// url::Origin::CreateFromNormalizedTuple when doing conversions. // url::Origin::CreateFromNormalizedTupleWithSuborigin when doing conversions.
TEST(BlinkPlatformTest, WebSecurityOriginNormalization) { TEST(BlinkPlatformTest, WebSecurityOriginNormalization) {
struct TestCases { struct TestCases {
const char* url; const char* url;
......
...@@ -85,11 +85,21 @@ Origin::Origin(base::StringPiece scheme, ...@@ -85,11 +85,21 @@ Origin::Origin(base::StringPiece scheme,
uint16_t port, uint16_t port,
base::StringPiece suborigin, base::StringPiece suborigin,
SchemeHostPort::ConstructPolicy policy) SchemeHostPort::ConstructPolicy policy)
: tuple_(scheme, host, port, policy) { : tuple_(scheme.as_string(), host.as_string(), port, policy) {
unique_ = tuple_.IsInvalid(); unique_ = tuple_.IsInvalid();
suborigin_ = suborigin.as_string(); suborigin_ = suborigin.as_string();
} }
Origin::Origin(std::string scheme,
std::string host,
uint16_t port,
std::string suborigin,
SchemeHostPort::ConstructPolicy policy)
: tuple_(std::move(scheme), std::move(host), port, policy) {
unique_ = tuple_.IsInvalid();
suborigin_ = std::move(suborigin);
}
Origin::~Origin() { Origin::~Origin() {
} }
...@@ -101,18 +111,12 @@ Origin Origin::UnsafelyCreateOriginWithoutNormalization( ...@@ -101,18 +111,12 @@ Origin Origin::UnsafelyCreateOriginWithoutNormalization(
return Origin(scheme, host, port, "", SchemeHostPort::CHECK_CANONICALIZATION); return Origin(scheme, host, port, "", SchemeHostPort::CHECK_CANONICALIZATION);
} }
Origin Origin::CreateFromNormalizedTuple(base::StringPiece scheme,
base::StringPiece host,
uint16_t port) {
return CreateFromNormalizedTupleWithSuborigin(scheme, host, port, "");
}
Origin Origin::CreateFromNormalizedTupleWithSuborigin( Origin Origin::CreateFromNormalizedTupleWithSuborigin(
base::StringPiece scheme, std::string scheme,
base::StringPiece host, std::string host,
uint16_t port, uint16_t port,
base::StringPiece suborigin) { std::string suborigin) {
return Origin(scheme, host, port, suborigin, return Origin(std::move(scheme), std::move(host), port, std::move(suborigin),
SchemeHostPort::ALREADY_CANONICALIZED); SchemeHostPort::ALREADY_CANONICALIZED);
} }
......
...@@ -104,18 +104,13 @@ class URL_EXPORT Origin { ...@@ -104,18 +104,13 @@ class URL_EXPORT Origin {
// Creates an origin without sanity checking that the host is canonicalized. // Creates an origin without sanity checking that the host is canonicalized.
// This should only be used when converting between already normalized types, // This should only be used when converting between already normalized types,
// and should NOT be used for IPC. // and should NOT be used for IPC. Method takes std::strings for use with move
static Origin CreateFromNormalizedTuple(base::StringPiece scheme, // operators to avoid copies.
base::StringPiece host,
uint16_t port);
// Same as CreateFromNormalizedTuple() above, but adds a suborigin component
// as well.
static Origin CreateFromNormalizedTupleWithSuborigin( static Origin CreateFromNormalizedTupleWithSuborigin(
base::StringPiece scheme, std::string scheme,
base::StringPiece host, std::string host,
uint16_t port, uint16_t port,
base::StringPiece suborigin); std::string suborigin);
~Origin(); ~Origin();
...@@ -173,6 +168,11 @@ class URL_EXPORT Origin { ...@@ -173,6 +168,11 @@ class URL_EXPORT Origin {
uint16_t port, uint16_t port,
base::StringPiece suborigin, base::StringPiece suborigin,
SchemeHostPort::ConstructPolicy policy); SchemeHostPort::ConstructPolicy policy);
Origin(std::string scheme,
std::string host,
uint16_t port,
std::string suborigin,
SchemeHostPort::ConstructPolicy policy);
SchemeHostPort tuple_; SchemeHostPort tuple_;
bool unique_; bool unique_;
......
...@@ -90,20 +90,11 @@ TEST(OriginTest, ConstructFromTuple) { ...@@ -90,20 +90,11 @@ TEST(OriginTest, ConstructFromTuple) {
<< test_case.port; << test_case.port;
} }
SCOPED_TRACE(scope_message); SCOPED_TRACE(scope_message);
url::Origin origin_without_suborigin =
url::Origin::CreateFromNormalizedTuple(test_case.scheme, test_case.host,
test_case.port);
url::Origin origin_with_suborigin = url::Origin origin_with_suborigin =
url::Origin::CreateFromNormalizedTupleWithSuborigin( url::Origin::CreateFromNormalizedTupleWithSuborigin(
test_case.scheme, test_case.host, test_case.port, test_case.scheme, test_case.host, test_case.port,
test_case.suborigin); test_case.suborigin);
EXPECT_EQ(test_case.scheme, origin_without_suborigin.scheme());
EXPECT_EQ(test_case.host, origin_without_suborigin.host());
EXPECT_EQ(test_case.port, origin_without_suborigin.port());
EXPECT_EQ(test_case.scheme, origin_with_suborigin.scheme()); EXPECT_EQ(test_case.scheme, origin_with_suborigin.scheme());
EXPECT_EQ(test_case.host, origin_with_suborigin.host()); EXPECT_EQ(test_case.host, origin_with_suborigin.host());
EXPECT_EQ(test_case.port, origin_with_suborigin.port()); EXPECT_EQ(test_case.port, origin_with_suborigin.port());
......
...@@ -116,24 +116,24 @@ bool IsValidInput(const base::StringPiece& scheme, ...@@ -116,24 +116,24 @@ bool IsValidInput(const base::StringPiece& scheme,
SchemeHostPort::SchemeHostPort() : port_(0) { SchemeHostPort::SchemeHostPort() : port_(0) {
} }
SchemeHostPort::SchemeHostPort(base::StringPiece scheme, SchemeHostPort::SchemeHostPort(std::string scheme,
base::StringPiece host, std::string host,
uint16_t port, uint16_t port,
ConstructPolicy policy) ConstructPolicy policy)
: port_(0) { : port_(0) {
if (!IsValidInput(scheme, host, port, policy)) if (!IsValidInput(scheme, host, port, policy))
return; return;
scheme.CopyToString(&scheme_); scheme_ = std::move(scheme);
host.CopyToString(&host_); host_ = std::move(host);
port_ = port; port_ = port;
} }
SchemeHostPort::SchemeHostPort(base::StringPiece scheme, SchemeHostPort::SchemeHostPort(base::StringPiece scheme,
base::StringPiece host, base::StringPiece host,
uint16_t port) uint16_t port)
: SchemeHostPort(scheme, : SchemeHostPort(scheme.as_string(),
host, host.as_string(),
port, port,
ConstructPolicy::CHECK_CANONICALIZATION) {} ConstructPolicy::CHECK_CANONICALIZATION) {}
......
...@@ -96,8 +96,8 @@ class URL_EXPORT SchemeHostPort { ...@@ -96,8 +96,8 @@ class URL_EXPORT SchemeHostPort {
// that the host and port are canonicalized. This should only be used when // that the host and port are canonicalized. This should only be used when
// converting between already normalized types, and should NOT be used for // converting between already normalized types, and should NOT be used for
// IPC. // IPC.
SchemeHostPort(base::StringPiece scheme, SchemeHostPort(std::string scheme,
base::StringPiece host, std::string host,
uint16_t port, uint16_t port,
ConstructPolicy policy); ConstructPolicy policy);
......
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