From owner-svn-ports-head@freebsd.org Fri Jul 21 11:14:03 2017 Return-Path: Delivered-To: svn-ports-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2218FDA45A5; Fri, 21 Jul 2017 11:14:03 +0000 (UTC) (envelope-from cpm@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E4B2C6C4FB; Fri, 21 Jul 2017 11:14:02 +0000 (UTC) (envelope-from cpm@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v6LBE2xC078632; Fri, 21 Jul 2017 11:14:02 GMT (envelope-from cpm@FreeBSD.org) Received: (from cpm@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v6LBE15W078624; Fri, 21 Jul 2017 11:14:01 GMT (envelope-from cpm@FreeBSD.org) Message-Id: <201707211114.v6LBE15W078624@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: cpm set sender to cpm@FreeBSD.org using -f From: "Carlos J. Puga Medina" Date: Fri, 21 Jul 2017 11:14:01 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r446307 - in head/www/chromium: . files X-SVN-Group: ports-head X-SVN-Commit-Author: cpm X-SVN-Commit-Paths: in head/www/chromium: . files X-SVN-Commit-Revision: 446307 X-SVN-Commit-Repository: ports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the ports tree for head List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 21 Jul 2017 11:14:03 -0000 Author: cpm Date: Fri Jul 21 11:14:01 2017 New Revision: 446307 URL: https://svnweb.freebsd.org/changeset/ports/446307 Log: - Add network interface implementation for FreeBSD [1] - Backport a patch from upstream to fix DPI settings - Bump PORTREVISION PR: 211036 [1] MFH: 2017Q3 Added: head/www/chromium/files/patch-chrome_browser_ui_libgtkui_gtk_ui.cc (contents, props changed) head/www/chromium/files/patch-net_base_network__interfaces__freebsd.cc (contents, props changed) head/www/chromium/files/patch-net_base_network__interfaces__freebsd.h (contents, props changed) head/www/chromium/files/patch-net_base_network__interfaces__posix.h (contents, props changed) head/www/chromium/files/patch-v8_src_log-utils.h (contents, props changed) Deleted: head/www/chromium/files/patch-net_base_network__interfaces__posix.cc Modified: head/www/chromium/Makefile head/www/chromium/files/patch-net_BUILD.gn Modified: head/www/chromium/Makefile ============================================================================== --- head/www/chromium/Makefile Fri Jul 21 10:56:16 2017 (r446306) +++ head/www/chromium/Makefile Fri Jul 21 11:14:01 2017 (r446307) @@ -3,7 +3,7 @@ PORTNAME= chromium PORTVERSION= 59.0.3071.115 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= www MASTER_SITES= https://commondatastorage.googleapis.com/chromium-browser-official/:source1 \ LOCAL/cpm:source2 Added: head/www/chromium/files/patch-chrome_browser_ui_libgtkui_gtk_ui.cc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/www/chromium/files/patch-chrome_browser_ui_libgtkui_gtk_ui.cc Fri Jul 21 11:14:01 2017 (r446307) @@ -0,0 +1,60 @@ +--- chrome/browser/ui/libgtkui/gtk_ui.cc.orig 2017-07-21 03:22:08.117746000 +0200 ++++ chrome/browser/ui/libgtkui/gtk_ui.cc 2017-07-21 03:25:59.536126000 +0200 +@@ -315,52 +315,15 @@ + return params; + } + +-float GtkDpiToScaleFactor(int dpi) { +- // GTK multiplies the DPI by 1024 before storing it. +- return dpi / (1024 * kDefaultDPI); +-} +- +-gint GetGdkScreenSettingInt(const char* setting_name) { +- GValue value = G_VALUE_INIT; +- g_value_init(&value, G_TYPE_INT); +- if (!gdk_screen_get_setting(gdk_screen_get_default(), setting_name, &value)) +- return -1; +- return g_value_get_int(&value); +-} +- +-float GetScaleFromGdkScreenSettings() { +- gint window_scale = GetGdkScreenSettingInt("gdk-window-scaling-factor"); +- if (window_scale <= 0) +- return -1; +- gint font_dpi = GetGdkScreenSettingInt("gdk-unscaled-dpi"); +- if (font_dpi <= 0) +- return -1; +- return window_scale * GtkDpiToScaleFactor(font_dpi); +-} +- +-float GetScaleFromXftDPI() { +- GtkSettings* gtk_settings = gtk_settings_get_default(); +- CHECK(gtk_settings); +- gint gtk_dpi = -1; +- g_object_get(gtk_settings, "gtk-xft-dpi", >k_dpi, nullptr); +- if (gtk_dpi <= 0) +- return -1; +- return GtkDpiToScaleFactor(gtk_dpi); +-} +- + float GetRawDeviceScaleFactor() { + if (display::Display::HasForceDeviceScaleFactor()) + return display::Display::GetForcedDeviceScaleFactor(); + +- float scale = GetScaleFromGdkScreenSettings(); +- if (scale > 0) +- return scale; +- +- scale = GetScaleFromXftDPI(); +- if (scale > 0) +- return scale; +- +- return 1; ++ GdkScreen* screen = gdk_screen_get_default(); ++ gint scale = gdk_screen_get_monitor_scale_factor( ++ screen, gdk_screen_get_primary_monitor(screen)); ++ gdouble resolution = gdk_screen_get_resolution(screen); ++ return resolution <= 0? scale : resolution * scale / kDefaultDPI; + } + + views::LinuxUI::NonClientMiddleClickAction GetDefaultMiddleClickAction() { Modified: head/www/chromium/files/patch-net_BUILD.gn ============================================================================== --- head/www/chromium/files/patch-net_BUILD.gn Fri Jul 21 10:56:16 2017 (r446306) +++ head/www/chromium/files/patch-net_BUILD.gn Fri Jul 21 11:14:01 2017 (r446307) @@ -1,6 +1,6 @@ ---- net/BUILD.gn.orig 2017-06-05 19:03:09 UTC -+++ net/BUILD.gn -@@ -86,7 +86,7 @@ if (use_glib && use_gconf && !is_chromeos) { +--- net/BUILD.gn.orig 2017-06-26 21:03:20.000000000 +0200 ++++ net/BUILD.gn 2017-07-04 23:12:52.376233000 +0200 +@@ -86,7 +86,7 @@ net_configs += [ "//build/config/linux/gconf" ] } @@ -9,7 +9,7 @@ net_configs += [ "//build/config/linux:libresolv" ] } -@@ -1900,6 +1900,16 @@ component("net") { +@@ -1900,6 +1900,17 @@ sources -= [ "disk_cache/blockfile/file_posix.cc" ] } @@ -21,12 +21,13 @@ + "base/network_change_notifier_linux.h", + "base/network_interfaces_linux.cc", + ] ++ sources += [ "base/network_interfaces_freebsd.cc" ] + } + if (is_ios || is_mac) { sources += [ "base/mac/url_conversions.h", -@@ -2854,7 +2864,7 @@ if (!is_ios && !is_android) { +@@ -2854,7 +2865,7 @@ } } @@ -35,7 +36,7 @@ executable("cachetool") { testonly = true sources = [ -@@ -2883,7 +2893,7 @@ if (is_linux || is_mac) { +@@ -2883,7 +2894,7 @@ } } @@ -44,7 +45,7 @@ static_library("epoll_server") { sources = [ "tools/epoll_server/epoll_server.cc", -@@ -2987,7 +2997,7 @@ if (is_android) { +@@ -2987,7 +2998,7 @@ } } @@ -53,7 +54,7 @@ executable("disk_cache_memory_test") { testonly = true sources = [ -@@ -4874,7 +4884,7 @@ test("net_unittests") { +@@ -4874,7 +4885,7 @@ "third_party/nist-pkits/", ] @@ -62,7 +63,7 @@ deps += [ "//third_party/pyftpdlib/", "//third_party/pywebsocket/", -@@ -4897,7 +4907,7 @@ test("net_unittests") { +@@ -4897,7 +4908,7 @@ if (is_desktop_linux) { deps += [ ":epoll_quic_tools" ] } @@ -71,7 +72,7 @@ sources += [ "tools/quic/chlo_extractor_test.cc", "tools/quic/end_to_end_test.cc", -@@ -4957,6 +4967,10 @@ test("net_unittests") { +@@ -4957,6 +4968,10 @@ if (is_chromeos) { sources -= [ "proxy/proxy_config_service_linux_unittest.cc" ] Added: head/www/chromium/files/patch-net_base_network__interfaces__freebsd.cc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/www/chromium/files/patch-net_base_network__interfaces__freebsd.cc Fri Jul 21 11:14:01 2017 (r446307) @@ -0,0 +1,243 @@ +--- net/base/network_interfaces_freebsd.cc.orig 2017-07-05 18:08:44.779023000 +0200 ++++ net/base/network_interfaces_freebsd.cc 2017-07-05 22:03:18.679624000 +0200 +@@ -0,0 +1,240 @@ ++// Copyright (c) 2014 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 "net/base/network_interfaces_freebsd.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include "base/files/file_path.h" ++#include "base/logging.h" ++#include "base/strings/string_number_conversions.h" ++#include "base/strings/string_tokenizer.h" ++#include "base/strings/string_util.h" ++#include "base/threading/thread_restrictions.h" ++#include "net/base/escape.h" ++#include "net/base/ip_endpoint.h" ++#include "net/base/net_errors.h" ++#include "net/base/network_interfaces_posix.h" ++#include "url/gurl.h" ++ ++namespace net { ++ ++namespace { ++ ++// FreeBSD implementation of IPAttributesGetterFreeBSD which calls ioctl on socket to ++// retrieve IP attributes. ++class IPAttributesGetterFreeBSDImpl : public internal::IPAttributesGetterFreeBSD { ++ public: ++ IPAttributesGetterFreeBSDImpl(); ++ ~IPAttributesGetterFreeBSDImpl() override; ++ bool IsInitialized() const override; ++ bool GetIPAttributes(const char* ifname, ++ const sockaddr* sock_addr, ++ int* native_attributes) override; ++ ++ private: ++ int ioctl_socket_; ++}; ++ ++IPAttributesGetterFreeBSDImpl::IPAttributesGetterFreeBSDImpl() ++ : ioctl_socket_(socket(AF_INET6, SOCK_DGRAM, 0)) { ++ DCHECK_GE(ioctl_socket_, 0); ++} ++ ++bool IPAttributesGetterFreeBSDImpl::IsInitialized() const { ++ return ioctl_socket_ >= 0; ++} ++ ++IPAttributesGetterFreeBSDImpl::~IPAttributesGetterFreeBSDImpl() { ++ if (ioctl_socket_ >= 0) { ++ close(ioctl_socket_); ++ } ++} ++ ++bool IPAttributesGetterFreeBSDImpl::GetIPAttributes(const char* ifname, ++ const sockaddr* sock_addr, ++ int* native_attributes) { ++ struct in6_ifreq ifr = {}; ++ strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name) - 1); ++ memcpy(&ifr.ifr_ifru.ifru_addr, sock_addr, sock_addr->sa_len); ++ int rv = ioctl(ioctl_socket_, SIOCGIFAFLAG_IN6, &ifr); ++ if (rv >= 0) { ++ *native_attributes = ifr.ifr_ifru.ifru_flags; ++ } ++ return (rv >= 0); ++} ++ ++// When returning true, the platform native IPv6 address attributes were ++// successfully converted to net IP address attributes. Otherwise, returning ++// false and the caller should drop the IP address which can't be used by the ++// application layer. ++bool TryConvertNativeToNetIPAttributes(int native_attributes, ++ int* net_attributes) { ++ // For FreeBSD, we disallow addresses with attributes IN6_IFF_ANYCASE, ++ // IN6_IFF_DUPLICATED, IN6_IFF_TENTATIVE, and IN6_IFF_DETACHED as these are ++ // still progressing through duplicated address detection (DAD) or are not ++ // suitable to be used in an one-to-one communication and shouldn't be used ++ // by the application layer. ++ if (native_attributes & (IN6_IFF_ANYCAST | IN6_IFF_DUPLICATED | ++ IN6_IFF_TENTATIVE | IN6_IFF_DETACHED)) { ++ return false; ++ } ++ ++ if (native_attributes & IN6_IFF_DEPRECATED) { ++ *net_attributes |= IP_ADDRESS_ATTRIBUTE_DEPRECATED; ++ } ++ ++ return true; ++} ++ ++NetworkChangeNotifier::ConnectionType GetNetworkInterfaceType( ++ int addr_family, ++ const std::string& interface_name) { ++ NetworkChangeNotifier::ConnectionType type = ++ NetworkChangeNotifier::CONNECTION_UNKNOWN; ++ ++ struct ifmediareq ifmr = {}; ++ strncpy(ifmr.ifm_name, interface_name.c_str(), sizeof(ifmr.ifm_name) - 1); ++ ++ int s = socket(addr_family, SOCK_DGRAM, 0); ++ if (s == -1) { ++ return type; ++ } ++ ++ if (ioctl(s, SIOCGIFMEDIA, &ifmr) != -1) { ++ if (ifmr.ifm_current & IFM_IEEE80211) { ++ type = NetworkChangeNotifier::CONNECTION_WIFI; ++ } else if (ifmr.ifm_current & IFM_ETHER) { ++ type = NetworkChangeNotifier::CONNECTION_ETHERNET; ++ } ++ } ++ close(s); ++ return type; ++} ++ ++} // namespace ++ ++namespace internal { ++ ++bool GetNetworkListImpl(NetworkInterfaceList* networks, ++ int policy, ++ const ifaddrs* interfaces, ++ IPAttributesGetterFreeBSD* ip_attributes_getter) { ++ // Enumerate the addresses assigned to network interfaces which are up. ++ for (const ifaddrs* interface = interfaces; interface != NULL; ++ interface = interface->ifa_next) { ++ // Skip loopback interfaces, and ones which are down. ++ if (!(IFF_RUNNING & interface->ifa_flags)) ++ continue; ++ if (IFF_LOOPBACK & interface->ifa_flags) ++ continue; ++ // Skip interfaces with no address configured. ++ struct sockaddr* addr = interface->ifa_addr; ++ if (!addr) ++ continue; ++ ++ // Skip unspecified addresses (i.e. made of zeroes) and loopback addresses ++ // configured on non-loopback interfaces. ++ if (IsLoopbackOrUnspecifiedAddress(addr)) ++ continue; ++ ++ const std::string& name = interface->ifa_name; ++ // Filter out VMware interfaces, typically named vmnet1 and vmnet8. ++ if (ShouldIgnoreInterface(name, policy)) { ++ continue; ++ } ++ ++ NetworkChangeNotifier::ConnectionType connection_type = ++ NetworkChangeNotifier::CONNECTION_UNKNOWN; ++ ++ int ip_attributes = IP_ADDRESS_ATTRIBUTE_NONE; ++ ++ // Retrieve native ip attributes and convert to net version if a getter is ++ // given. ++ if (ip_attributes_getter && ip_attributes_getter->IsInitialized()) { ++ int native_attributes = 0; ++ if (addr->sa_family == AF_INET6 && ++ ip_attributes_getter->GetIPAttributes( ++ interface->ifa_name, interface->ifa_addr, &native_attributes)) { ++ if (!TryConvertNativeToNetIPAttributes(native_attributes, ++ &ip_attributes)) { ++ continue; ++ } ++ } ++ } ++ ++ connection_type = GetNetworkInterfaceType(addr->sa_family, name); ++ ++ IPEndPoint address; ++ ++ int addr_size = 0; ++ if (addr->sa_family == AF_INET6) { ++ addr_size = sizeof(sockaddr_in6); ++ } else if (addr->sa_family == AF_INET) { ++ addr_size = sizeof(sockaddr_in); ++ } ++ ++ if (address.FromSockAddr(addr, addr_size)) { ++ uint8_t prefix_length = 0; ++ if (interface->ifa_netmask) { ++ // If not otherwise set, assume the same sa_family as ifa_addr. ++ if (interface->ifa_netmask->sa_family == 0) { ++ interface->ifa_netmask->sa_family = addr->sa_family; ++ } ++ IPEndPoint netmask; ++ if (netmask.FromSockAddr(interface->ifa_netmask, addr_size)) { ++ prefix_length = MaskPrefixLength(netmask.address()); ++ } ++ } ++ networks->push_back(NetworkInterface( ++ name, name, if_nametoindex(name.c_str()), connection_type, ++ address.address(), prefix_length, ip_attributes)); ++ } ++ } ++ ++ return true; ++} ++ ++} // namespace internal ++ ++bool GetNetworkList(NetworkInterfaceList* networks, int policy) { ++ if (networks == NULL) ++ return false; ++ ++ // getifaddrs() may require IO operations. ++ base::ThreadRestrictions::AssertIOAllowed(); ++ ++ ifaddrs* interfaces; ++ if (getifaddrs(&interfaces) < 0) { ++ PLOG(ERROR) << "getifaddrs"; ++ return false; ++ } ++ ++ std::unique_ptr ip_attributes_getter; ++ ++ ip_attributes_getter.reset(new IPAttributesGetterFreeBSDImpl()); ++ ++ bool result = internal::GetNetworkListImpl(networks, policy, interfaces, ++ ip_attributes_getter.get()); ++ freeifaddrs(interfaces); ++ return result; ++} ++ ++std::string GetWifiSSID() { ++ NOTIMPLEMENTED(); ++ return ""; ++} ++ ++} // namespace net Added: head/www/chromium/files/patch-net_base_network__interfaces__freebsd.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/www/chromium/files/patch-net_base_network__interfaces__freebsd.h Fri Jul 21 11:14:01 2017 (r446307) @@ -0,0 +1,47 @@ +--- net/base/network_interfaces_freebsd.h.orig 2017-07-04 23:05:05.313339000 +0200 ++++ net/base/network_interfaces_freebsd.h 2017-07-04 23:04:51.039635000 +0200 +@@ -0,0 +1,44 @@ ++// Copyright (c) 2014 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. ++ ++#ifndef NET_BASE_NETWORK_INTERFACES_FREEBSD_H_ ++#define NET_BASE_NETWORK_INTERFACES_FREEBSD_H_ ++ ++// This file is only used to expose some of the internals ++// of network_interfaces_mac.cc to tests. ++ ++#include ++ ++#include "base/macros.h" ++#include "net/base/net_export.h" ++#include "net/base/network_interfaces.h" ++ ++struct ifaddrs; ++struct sockaddr; ++ ++namespace net { ++namespace internal { ++ ++class NET_EXPORT IPAttributesGetterFreeBSD { ++ public: ++ IPAttributesGetterFreeBSD() {} ++ virtual ~IPAttributesGetterFreeBSD() {} ++ virtual bool IsInitialized() const = 0; ++ virtual bool GetIPAttributes(const char* ifname, ++ const sockaddr* sock_addr, ++ int* native_attributes) = 0; ++ ++ private: ++ DISALLOW_COPY_AND_ASSIGN(IPAttributesGetterFreeBSD); ++}; ++ ++NET_EXPORT bool GetNetworkListImpl(NetworkInterfaceList* networks, ++ int policy, ++ const ifaddrs* interfaces, ++ IPAttributesGetterFreeBSD* ip_attributes_getter); ++ ++} // namespace internal ++} // namespace net ++ ++#endif // NET_BASE_NETWORK_INTERFACES_FREEBSD_H_ Added: head/www/chromium/files/patch-net_base_network__interfaces__posix.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/www/chromium/files/patch-net_base_network__interfaces__posix.h Fri Jul 21 11:14:01 2017 (r446307) @@ -0,0 +1,11 @@ +--- net/base/network_interfaces_posix.h.orig 2017-07-04 22:49:41.402276000 +0200 ++++ net/base/network_interfaces_posix.h 2017-07-04 22:49:59.456467000 +0200 +@@ -8,6 +8,8 @@ + // This file is only used to expose some of the internals of + // network_interfaces_posix.cc to network_interfaces_linux.cc and network_interfaces_mac.cc. + ++#include ++ + #include + + struct sockaddr; Added: head/www/chromium/files/patch-v8_src_log-utils.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/www/chromium/files/patch-v8_src_log-utils.h Fri Jul 21 11:14:01 2017 (r446307) @@ -0,0 +1,11 @@ +--- v8/src/log-utils.h.orig 2017-07-04 22:40:30.657540000 +0200 ++++ v8/src/log-utils.h 2017-07-04 22:40:59.090730000 +0200 +@@ -14,6 +14,8 @@ + #include "src/base/platform/mutex.h" + #include "src/flags.h" + ++#include ++ + namespace v8 { + namespace internal { +