Commit b082883a authored by Vadym Doroshenko's avatar Vadym Doroshenko Committed by Commit Bot

Fix function GURLOriginWithWKSecurityOrigin.

SecurityOrigin in WebKit has port=0 for ports that are default for scheme.
But url::SchemeHostPort requires effective port. This CL adds a call to
url::DefaultPortForScheme before creating url::SchemeHostPort.

Bug: 554927
Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet;master.tryserver.chromium.mac:ios-simulator-full-configs
Change-Id: I3e6ccf17d5b8fc221ff954b3ac39a8fb0d195ca9
Reviewed-on: https://chromium-review.googlesource.com/823082Reviewed-by: default avatarEugene But <eugenebut@chromium.org>
Commit-Queue: Vadym Doroshenko <dvadym@chromium.org>
Cr-Commit-Position: refs/heads/master@{#523578}
parent 7fb02368
......@@ -8,10 +8,12 @@
#include "base/numerics/safe_conversions.h"
#include "base/stl_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/sys_string_conversions.h"
#include "net/base/url_util.h"
#include "url/gurl.h"
#include "url/scheme_host_port.h"
#include "url/url_canon.h"
#include "url/url_util.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
......@@ -41,10 +43,18 @@ bool IsOriginSecure(const GURL& url) {
GURL GURLOriginWithWKSecurityOrigin(WKSecurityOrigin* origin) {
if (!origin)
return GURL();
std::string scheme = base::SysNSStringToUTF8(origin.protocol);
std::string host = base::SysNSStringToUTF8(origin.host);
uint16_t port = base::checked_cast<uint16_t>(origin.port);
if (port == 0) {
// WKSecurityOrigin.port is 0 if the effective port of this origin is the
// default for its scheme.
int default_port = url::DefaultPortForScheme(scheme.c_str(), scheme.size());
if (default_port != url::PORT_UNSPECIFIED)
port = base::checked_cast<uint16_t>(default_port);
}
url::SchemeHostPort origin_tuple(base::SysNSStringToUTF8(origin.protocol),
base::SysNSStringToUTF8(origin.host),
base::checked_cast<uint16_t>(origin.port));
url::SchemeHostPort origin_tuple(scheme, host, port);
return origin_tuple.GetURL();
}
......
......@@ -53,4 +53,43 @@ TEST_F(OriginUtilTest, GURLOriginWithValidWKSecurityOrigin) {
EXPECT_TRUE(url.port().empty());
}
// Tests calling GURLOriginWithWKSecurityOrigin with default port.
TEST_F(OriginUtilTest, GURLOriginWithDefaultPort) {
WKSecurityOriginStub* origin = [[WKSecurityOriginStub alloc] init];
[origin setProtocol:@"http"];
[origin setHost:@"chromium.org"];
[origin setPort:0];
GURL url(
GURLOriginWithWKSecurityOrigin(static_cast<WKSecurityOrigin*>(origin)));
EXPECT_EQ("http://chromium.org/", url.spec());
EXPECT_TRUE(url.port().empty());
}
// Tests calling GURLOriginWithWKSecurityOrigin with valid origin.
TEST_F(OriginUtilTest, GURLOriginWithNonDefaultPort) {
WKSecurityOriginStub* origin = [[WKSecurityOriginStub alloc] init];
[origin setProtocol:@"http"];
[origin setHost:@"chromium.org"];
[origin setPort:123];
GURL url(
GURLOriginWithWKSecurityOrigin(static_cast<WKSecurityOrigin*>(origin)));
EXPECT_EQ("http://chromium.org:123/", url.spec());
EXPECT_EQ("123", url.port());
}
// Tests calling GURLOriginWithWKSecurityOrigin with valid origin.
TEST_F(OriginUtilTest, GURLOriginWithChromeProtocol) {
WKSecurityOriginStub* origin = [[WKSecurityOriginStub alloc] init];
[origin setProtocol:@"testwebui"];
[origin setHost:@"version"];
[origin setPort:0];
GURL url(
GURLOriginWithWKSecurityOrigin(static_cast<WKSecurityOrigin*>(origin)));
EXPECT_EQ("testwebui://version/", url.spec());
EXPECT_TRUE(url.port().empty());
}
} // namespace web
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