Update googleurl from upstream
This updates googleurl to use the Chromium upstream version
70f03f8a864da80522f06826d9a985af57699b5e from
Wed Feb 8 00:23:59 2023 +0000.
Change-Id: I951d632f26d01f3226d2f2a34487804f5592ea8f
diff --git a/AUTHORS b/AUTHORS
index a2016b0..ac46f9f 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -232,7 +232,6 @@
Charles Vaughn <cvaughn@gmail.com>
Cheng Zhao <zcbenz@gmail.com>
Cheng Yu <yuzichengcode@gmail.com>
-Cheung Ho <uioptt24@gmail.com>
Choongwoo Han <cwhan.tunz@gmail.com>
Choudhury M. Shamsujjoha <choudhury.s@samsung.com>
Chris Greene <cwgreene@amazon.com>
@@ -278,6 +277,7 @@
Dániel Bátyai <dbatyai@inf.u-szeged.hu>
Dániel Vince <vinced@inf.u-szeged.hu>
Daniil Suvorov <severecloud@gmail.com>
+Danny Weiss <danny.weiss.fr@gmail.com>
Daoming Qiu <daoming.qiu@intel.com>
Darik Harter <darik.harter@gmail.com>
Darshan Sen <raisinten@gmail.com>
@@ -377,6 +377,7 @@
Felipe Erias Morandeira <felipeerias@gmail.com>
Felix H. Dahlke <fhd@ubercode.de>
Felix Weilbach <feweilbach@gmail.com>
+Feng Shengyuan <fengshengyuan@agora.io>
Feng Yu <f3n67u@gmail.com>
Fengrong Fang <fr.fang@samsung.com>
Fernando Jiménez Moreno <ferjmoreno@gmail.com>
@@ -449,8 +450,10 @@
Henrique de Carvalho <decarv.henrique@gmail.com>
Henrique Limas <henrique.ramos.limas@gmail.com>
Himanshu Joshi <h.joshi@samsung.com>
+Himanshu Nayak <himanshu.nayak@amd.corp-partner.google.com>
Hiroki Oshima <hiroki.oshima@gmail.com>
Hiroyuki Matsuda <gsittyz@gmail.com>
+Ho Cheung <uioptt24@gmail.com>
Hodol Han <bab6ting@gmail.com>
Holger Kraus <kraush@amazon.com>
Hong Zheng <hong.zheng@intel.com>
@@ -604,6 +607,7 @@
John Yani <vanuan@gmail.com>
John Yoo <nearbyh13@gmail.com>
Johnson Lin <johnson.lin@intel.com>
+Jon Jensen <jonj@netflix.com>
Jonathan Frazer <listedegarde@gmail.com>
Jonathan Garbee <jonathan@garbee.me>
Jonathan Hacker <jhacker@arcanefour.com>
@@ -718,6 +722,7 @@
Kyungsun Lee <kyungsuny.lee@gmail.com>
Kyungtae Kim <ktf.kim@samsung.com>
Kyungyoung Heo <bbvch13531@gmail.com>
+Kyutae Lee <gorisanson@gmail.com>
Lalit Chandivade <lalit.chandivade@einfochips.com>
Lam Lu <lamlu@amazon.com>
Laszlo Gombos <l.gombos@samsung.com>
@@ -760,7 +765,7 @@
Luke Zarko <lukezarko@gmail.com>
Luoxi Pan <l.panpax@gmail.com>
Lu Yahan <yahan@iscas.ac.cn>
-Ma Aiguo <maaiguo@uniontech.com>
+Ma Aiguo <imaiguo@gmail.com>
Maarten Lankhorst <m.b.lankhorst@gmail.com>
Maciej Pawlowski <m.pawlowski@eyeo.com>
Magnus Danielsson <fuzzac@gmail.com>
@@ -855,6 +860,7 @@
Mingeun Park <mindal99546@gmail.com>
Minggang Wang <minggang.wang@intel.com>
Mingmin Xie <melvinxie@gmail.com>
+Mingming Xu <mingming1.xu@intel.com>
Minjeong Kim <deoxyribonucleicacid150@gmail.com>
Minjeong Lee <apenr1234@gmail.com>
Minseok Koo <kei98301@gmail.com>
@@ -1196,6 +1202,7 @@
Suyash Sengar <suyash.s@samsung.com>
Swarali Raut <swarali.sr@samsung.com>
Swati Jaiswal <swa.jaiswal@samsung.com>
+Syed Wajid <syed.wajid@samsung.com>
Sylvain Zimmer <sylvinus@gmail.com>
Sylvestre Ledru <sylvestre.ledru@gmail.com>
Synthia Islam <synthia.is@samsung.com>
@@ -1327,7 +1334,9 @@
Yang Liu <jd9668954@gmail.com>
Yannic Bonenberger <yannic.bonenberger@gmail.com>
Yarin Kaul <yarin.kaul@gmail.com>
+Yash Joshi <yashjoshimail@gmail.com>
Yash Vempati <vempatiy@amazon.com>
+Yash Vinayak <yash.vinayak@samsung.com>
Ye Liu <cbakgly@gmail.com>
Yeol Park <peary2@gmail.com>
Yeonwoo Jo <yeonwoo.jo.92@gmail.com>
@@ -1378,6 +1387,7 @@
Zeqin Chen <talonchen@tencent.com>
Zhang Hao <zhanghao.m@bytedance.com>
Zhang Hao <15686357310a@gmail.com>
+Zhaoming Jiang <zhaoming.jiang@intel.com>
Zhaoze Zhou <zhaoze.zhou@partner.samsung.com>
Zheda Chen <zheda.chen@intel.com>
Zheng Chuang <zhengchuangscu@gmail.com>
diff --git a/base/compiler_specific.h b/base/compiler_specific.h
index 0174b6d..8085338 100644
--- a/base/compiler_specific.h
+++ b/base/compiler_specific.h
@@ -64,7 +64,7 @@
// folding of multiple identical caller functions into a single signature. To
// prevent code folding, see NO_CODE_FOLDING() in base/debug/alias.h.
// Use like:
-// void NOT_TAIL_CALLED FooBar();
+// NOT_TAIL_CALLED void FooBar();
#if defined(__clang__) && HAS_ATTRIBUTE(not_tail_called)
#define NOT_TAIL_CALLED __attribute__((not_tail_called))
#else
diff --git a/base/containers/checked_iterators.h b/base/containers/checked_iterators.h
index dc8d2ba..0cd2832 100644
--- a/base/containers/checked_iterators.h
+++ b/base/containers/checked_iterators.h
@@ -11,6 +11,7 @@
#include "polyfills/base/check_op.h"
#include "base/containers/util.h"
+#include "polyfills/base/memory/raw_ptr_exclusion.h"
#include "build/build_config.h"
namespace gurl_base {
@@ -207,9 +208,15 @@
GURL_CHECK_EQ(end_, other.end_);
}
- const T* start_ = nullptr;
- T* current_ = nullptr;
- const T* end_ = nullptr;
+ // This field is not a raw_ptr<> because it was filtered by the rewriter for:
+ // #union, #constexpr-ctor-field-initializer
+ RAW_PTR_EXCLUSION const T* start_ = nullptr;
+ // This field is not a raw_ptr<> because it was filtered by the rewriter for:
+ // #union, #constexpr-ctor-field-initializer
+ RAW_PTR_EXCLUSION T* current_ = nullptr;
+ // This field is not a raw_ptr<> because it was filtered by the rewriter for:
+ // #union, #constexpr-ctor-field-initializer
+ RAW_PTR_EXCLUSION const T* end_ = nullptr;
};
template <typename T>
diff --git a/base/containers/span.h b/base/containers/span.h
index 40e325f..1496611 100644
--- a/base/containers/span.h
+++ b/base/containers/span.h
@@ -18,6 +18,7 @@
#include "base/containers/checked_iterators.h"
#include "base/containers/contiguous_iterator.h"
#include "base/cxx20_to_address.h"
+#include "base/numerics/safe_math.h"
namespace gurl_base {
@@ -256,16 +257,16 @@
template <typename It,
typename = internal::EnableIfCompatibleContiguousIterator<It, T>>
- constexpr span(It first, size_t count) noexcept
+ constexpr span(It first, StrictNumeric<size_t> count) noexcept
: ExtentStorage(count),
// The use of to_address() here is to handle the case where the iterator
// `first` is pointing to the container's `end()`. In that case we can
// not use the address returned from the iterator, or dereference it
- // through the iterator's `operator*`, but we can store it. We must assume
- // in this case that `count` is 0, since the iterator does not point to
- // valid data. Future hardening of iterators may disallow pulling the
- // address from `end()`, as demonstrated by asserts() in libstdc++:
- // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93960.
+ // through the iterator's `operator*`, but we can store it. We must
+ // assume in this case that `count` is 0, since the iterator does not
+ // point to valid data. Future hardening of iterators may disallow
+ // pulling the address from `end()`, as demonstrated by asserts() in
+ // libstdc++: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93960.
//
// The span API dictates that the `data()` is accessible when size is 0,
// since the pointer may be valid, so we cannot prevent storing and
@@ -473,7 +474,7 @@
// Type-deducing helpers for constructing a span.
template <int&... ExplicitArgumentBarrier, typename It>
-constexpr auto make_span(It it, size_t size) noexcept {
+constexpr auto make_span(It it, StrictNumeric<size_t> size) noexcept {
using T = std::remove_reference_t<iter_reference_t<It>>;
return span<T>(it, size);
}
@@ -508,7 +509,7 @@
//
// Usage: auto static_span = gurl_base::make_span<N>(...);
template <size_t N, int&... ExplicitArgumentBarrier, typename It>
-constexpr auto make_span(It it, size_t size) noexcept {
+constexpr auto make_span(It it, StrictNumeric<size_t> size) noexcept {
using T = std::remove_reference_t<iter_reference_t<It>>;
return span<T, N>(it, size);
}
diff --git a/base/cxx17_backports.h b/base/cxx17_backports.h
index ce59af0..a784f84 100644
--- a/base/cxx17_backports.h
+++ b/base/cxx17_backports.h
@@ -5,27 +5,13 @@
#ifndef BASE_CXX17_BACKPORTS_H_
#define BASE_CXX17_BACKPORTS_H_
-#include <functional>
-
-#include "polyfills/base/check.h"
+#include <algorithm>
namespace gurl_base {
-// C++14 implementation of C++17's std::clamp():
-// https://en.cppreference.com/w/cpp/algorithm/clamp
-// Please note that the C++ spec makes it undefined behavior to call std::clamp
-// with a value of `lo` that compares greater than the value of `hi`. This
-// implementation uses a GURL_CHECK to enforce this as a hard restriction.
-template <typename T, typename Compare>
-constexpr const T& clamp(const T& v, const T& lo, const T& hi, Compare comp) {
- GURL_CHECK(!comp(hi, lo));
- return comp(v, lo) ? lo : comp(hi, v) ? hi : v;
-}
-
-template <typename T>
-constexpr const T& clamp(const T& v, const T& lo, const T& hi) {
- return gurl_base::clamp(v, lo, hi, std::less<T>{});
-}
+// TODO(crbug.com/1373621): Rewrite all uses of gurl_base::clamp as std::clamp and
+// remove this file.
+using std::clamp;
} // namespace base
diff --git a/base/memory/raw_ptr_exclusion.h b/base/memory/raw_ptr_exclusion.h
index 2a30e26..3ce1d60 100644
--- a/base/memory/raw_ptr_exclusion.h
+++ b/base/memory/raw_ptr_exclusion.h
@@ -1,27 +1,13 @@
-// Copyright 2022 The Chromium Authors
+// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BASE_MEMORY_RAW_PTR_EXCLUSION_H_
#define BASE_MEMORY_RAW_PTR_EXCLUSION_H_
-#include "polyfills/base/allocator/buildflags.h"
-#include "base/compiler_specific.h"
-#include "build/build_config.h"
-
-#if HAS_ATTRIBUTE(annotate)
-#if defined(OFFICIAL_BUILD) && !BUILDFLAG(FORCE_ENABLE_RAW_PTR_EXCLUSION)
-// The annotation changed compiler output and increased binary size so disable
-// for official builds.
-// TODO(crbug.com/1320670): Remove when issue is resolved.
-#define RAW_PTR_EXCLUSION
-#else
-// Marks a field as excluded from the raw_ptr usage enforcement clang plugin.
-// Example: RAW_PTR_EXCLUSION Foo* foo_;
-#define RAW_PTR_EXCLUSION __attribute__((annotate("raw_ptr_exclusion")))
-#endif
-#else
-#define RAW_PTR_EXCLUSION
-#endif
+// Although `raw_ptr` is part of the standalone PA distribution, it is
+// easier to use the shorter path in `//base/memory`. We retain this
+// facade header for ease of typing.
+#include "base/allocator/partition_allocator/pointers/raw_ptr_exclusion.h" // IWYU pragma: export
#endif // BASE_MEMORY_RAW_PTR_EXCLUSION_H_
diff --git a/base/numerics/safe_conversions.h b/base/numerics/safe_conversions.h
index 4a9494e..3e04bf4 100644
--- a/base/numerics/safe_conversions.h
+++ b/base/numerics/safe_conversions.h
@@ -20,10 +20,6 @@
#define BASE_HAS_OPTIMIZED_SAFE_CONVERSIONS (0)
#endif
-#if !BASE_NUMERICS_DISABLE_OSTREAM_OPERATORS
-#include <ostream>
-#endif
-
namespace gurl_base {
namespace internal {
diff --git a/base/strings/safe_sprintf.cc b/base/strings/safe_sprintf.cc
index 0b53dff..f30360b 100644
--- a/base/strings/safe_sprintf.cc
+++ b/base/strings/safe_sprintf.cc
@@ -418,18 +418,19 @@
}
} while (num || padding || (reverse_prefix > prefix));
- // Conversion to ASCII actually resulted in the digits being in reverse
- // order. We can't easily generate them in forward order, as we can't tell
- // the number of characters needed until we are done converting.
- // So, now, we reverse the string (except for the possible '-' sign).
- char* front = buffer_ + start;
- char* back = GetInsertionPoint();
- while (--back > front) {
- char ch = *back;
- *back = *front;
- *front++ = ch;
+ if (start < size_) {
+ // Conversion to ASCII actually resulted in the digits being in reverse
+ // order. We can't easily generate them in forward order, as we can't tell
+ // the number of characters needed until we are done converting.
+ // So, now, we reverse the string (except for the possible '-' sign).
+ char* front = buffer_ + start;
+ char* back = GetInsertionPoint();
+ while (--back > front) {
+ char ch = *back;
+ *back = *front;
+ *front++ = ch;
+ }
}
-
IncrementCount(discarded);
return !discarded;
}
diff --git a/base/strings/safe_sprintf.h b/base/strings/safe_sprintf.h
index de4f06a..2948712 100644
--- a/base/strings/safe_sprintf.h
+++ b/base/strings/safe_sprintf.h
@@ -9,6 +9,7 @@
#include <stdint.h>
#include <stdlib.h>
+#include "polyfills/base/memory/raw_ptr_exclusion.h"
#include "build/build_config.h"
#if BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)
@@ -197,7 +198,9 @@
const char* str;
// A pointer to an arbitrary object.
- const void* ptr;
+ // This field is not a raw_ptr<> because it was filtered by the rewriter
+ // for: #union
+ RAW_PTR_EXCLUSION const void* ptr;
};
const enum Type type;
};
diff --git a/base/strings/safe_sprintf_unittest.cc b/base/strings/safe_sprintf_unittest.cc
index 76d72b2..af52d1c 100644
--- a/base/strings/safe_sprintf_unittest.cc
+++ b/base/strings/safe_sprintf_unittest.cc
@@ -483,14 +483,7 @@
} // anonymous namespace
-// TODO(crbug.com/1369007): Fails when OOB protection is turned on.
-#if BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) || \
- BUILDFLAG(ENABLE_MTE_CHECKED_PTR_SUPPORT)
-#define MAYBE_Truncation DISABLED_Truncation
-#else
-#define MAYBE_Truncation Truncation
-#endif
-TEST(SafeSPrintfTest, MAYBE_Truncation) {
+TEST(SafeSPrintfTest, Truncation) {
// We use PrintLongString() to print a complex long string and then
// truncate to all possible lengths. This ends up exercising a lot of
// different code paths in SafeSPrintf() and IToASCII(), as truncation can
diff --git a/base/strings/string_util.cc b/base/strings/string_util.cc
index f92029f..f345244 100644
--- a/base/strings/string_util.cc
+++ b/base/strings/string_util.cc
@@ -29,6 +29,7 @@
#include "base/strings/utf_string_conversions.h"
#include "base/third_party/icu/icu_utf.h"
#include "build/build_config.h"
+#include "absl/types/optional.h"
namespace gurl_base {
@@ -391,13 +392,29 @@
StringPiece16 format_string,
const std::vector<std::u16string>& subst,
std::vector<size_t>* offsets) {
- return internal::DoReplaceStringPlaceholders(format_string, subst, offsets);
+ absl::optional<std::u16string> replacement =
+ internal::DoReplaceStringPlaceholders(
+ format_string, subst,
+ /*placeholder_prefix*/ u'$',
+ /*should_escape_multiple_placeholder_prefixes*/ true,
+ /*is_strict_mode*/ false, offsets);
+
+ GURL_DCHECK(replacement);
+ return replacement.value();
}
std::string ReplaceStringPlaceholders(StringPiece format_string,
const std::vector<std::string>& subst,
std::vector<size_t>* offsets) {
- return internal::DoReplaceStringPlaceholders(format_string, subst, offsets);
+ absl::optional<std::string> replacement =
+ internal::DoReplaceStringPlaceholders(
+ format_string, subst,
+ /*placeholder_prefix*/ '$',
+ /*should_escape_multiple_placeholder_prefixes*/ true,
+ /*is_strict_mode*/ false, offsets);
+
+ GURL_DCHECK(replacement);
+ return replacement.value();
}
std::u16string ReplaceStringPlaceholders(const std::u16string& format_string,
diff --git a/base/strings/string_util_impl_helpers.h b/base/strings/string_util_impl_helpers.h
index 4cd9a3b..9578477 100644
--- a/base/strings/string_util_impl_helpers.h
+++ b/base/strings/string_util_impl_helpers.h
@@ -14,6 +14,7 @@
#include "base/ranges/algorithm.h"
#include "base/strings/string_piece.h"
#include "base/third_party/icu/icu_utf.h"
+#include "absl/types/optional.h"
namespace gurl_base::internal {
@@ -494,56 +495,90 @@
return result;
}
+// Replaces placeholders in `format_string` with values from `subst`.
+// * `placeholder_prefix`: Allows using a specific character as the placeholder
+// prefix. `gurl_base::ReplaceStringPlaceholders` uses '$'.
+// * `should_escape_multiple_placeholder_prefixes`:
+// * If this parameter is `true`, which is the case with
+// `gurl_base::ReplaceStringPlaceholders`, `placeholder_prefix` characters are
+// replaced by that number less one. Eg $$->$, $$$->$$, etc.
+// * If this parameter is `false`, each literal `placeholder_prefix` character
+// in `format_string` is escaped with another `placeholder_prefix`. For
+// instance, with `%` as the `placeholder_prefix`: %%->%, %%%%->%%, etc.
+// * `is_strict_mode`:
+// * If this parameter is `true`, error handling is stricter. The function
+// returns `absl::nullopt` if:
+// * a placeholder %N is encountered where N > substitutions.size().
+// * a literal `%` is not escaped with a `%`.
template <typename T, typename CharT = typename T::value_type>
-std::basic_string<CharT> DoReplaceStringPlaceholders(
+absl::optional<std::basic_string<CharT>> DoReplaceStringPlaceholders(
T format_string,
const std::vector<std::basic_string<CharT>>& subst,
+ const CharT placeholder_prefix,
+ const bool should_escape_multiple_placeholder_prefixes,
+ const bool is_strict_mode,
std::vector<size_t>* offsets) {
size_t substitutions = subst.size();
GURL_DCHECK_LT(substitutions, 11U);
size_t sub_length = 0;
- for (const auto& cur : subst)
+ for (const auto& cur : subst) {
sub_length += cur.length();
+ }
std::basic_string<CharT> formatted;
formatted.reserve(format_string.length() + sub_length);
std::vector<ReplacementOffset> r_offsets;
for (auto i = format_string.begin(); i != format_string.end(); ++i) {
- if ('$' == *i) {
+ if (placeholder_prefix == *i) {
if (i + 1 != format_string.end()) {
++i;
- if ('$' == *i) {
- while (i != format_string.end() && '$' == *i) {
- formatted.push_back('$');
+ if (placeholder_prefix == *i) {
+ do {
+ formatted.push_back(placeholder_prefix);
++i;
- }
+ } while (should_escape_multiple_placeholder_prefixes &&
+ i != format_string.end() && placeholder_prefix == *i);
--i;
} else {
if (*i < '1' || *i > '9') {
- GURL_DLOG(ERROR) << "Invalid placeholder: $"
- << std::basic_string<CharT>(1, *i);
+ if (is_strict_mode) {
+ GURL_DLOG(ERROR) << "Invalid placeholder after placeholder prefix: "
+ << std::basic_string<CharT>(1, placeholder_prefix)
+ << std::basic_string<CharT>(1, *i);
+ return absl::nullopt;
+ }
+
continue;
}
- size_t index = static_cast<size_t>(*i - '1');
+ const size_t index = static_cast<size_t>(*i - '1');
if (offsets) {
ReplacementOffset r_offset(index, formatted.size());
r_offsets.insert(
ranges::upper_bound(r_offsets, r_offset, &CompareParameter),
r_offset);
}
- if (index < substitutions)
+ if (index < substitutions) {
formatted.append(subst.at(index));
+ } else if (is_strict_mode) {
+ GURL_DLOG(ERROR) << "index out of range: " << index << ": "
+ << substitutions;
+ return absl::nullopt;
+ }
}
+ } else if (is_strict_mode) {
+ GURL_DLOG(ERROR) << "unexpected placeholder prefix at end of string";
+ return absl::nullopt;
}
} else {
formatted.push_back(*i);
}
}
if (offsets) {
- for (const auto& cur : r_offsets)
+ for (const auto& cur : r_offsets) {
offsets->push_back(cur.offset);
+ }
}
return formatted;
}
diff --git a/base/strings/string_util_win.cc b/base/strings/string_util_win.cc
index c3569b3..ea84d0b 100644
--- a/base/strings/string_util_win.cc
+++ b/base/strings/string_util_win.cc
@@ -6,6 +6,7 @@
#include "base/ranges/algorithm.h"
#include "base/strings/string_util_impl_helpers.h"
+#include "absl/types/optional.h"
namespace gurl_base {
@@ -128,7 +129,15 @@
std::wstring ReplaceStringPlaceholders(WStringPiece format_string,
const std::vector<std::wstring>& subst,
std::vector<size_t>* offsets) {
- return internal::DoReplaceStringPlaceholders(format_string, subst, offsets);
+ absl::optional<std::wstring> replacement =
+ internal::DoReplaceStringPlaceholders(
+ format_string, subst,
+ /*placeholder_prefix*/ L'$',
+ /*should_escape_multiple_placeholder_prefixes*/ true,
+ /*is_strict_mode*/ false, offsets);
+
+ GURL_DCHECK(replacement);
+ return replacement.value();
}
} // namespace base
diff --git a/build/build_config.h b/build/build_config.h
index 6811872..6db5d9b 100644
--- a/build/build_config.h
+++ b/build/build_config.h
@@ -26,6 +26,9 @@
// This file also adds defines specific to the platform, architecture etc.
//
+// Platform:
+// IS_OZONE
+//
// Compiler:
// COMPILER_MSVC / COMPILER_GCC
//
diff --git a/copy.bara.sky b/copy.bara.sky
index a586cea..6c374ad 100644
--- a/copy.bara.sky
+++ b/copy.bara.sky
@@ -21,7 +21,7 @@
"base/containers/util.h",
"base/cxx17_backports.h",
"base/cxx20_to_address.h",
- "base/cxx20_is_constant_evaluated.h",
+ "base/cxx20_is_constant_evaluated.h",
"base/debug/crash_logging.cc",
"base/debug/crash_logging.h",
"base/debug/leak_annotations.h",
@@ -69,7 +69,7 @@
# Those headers are pulled from //polyfill instead of copied from Chromium.
# Should be in sync with //polyfill/BUILD.
polyfilled_headers = [
- "base/allocator/buildflags.h",
+ #"base/allocator/buildflags.h",
"base/base_export.h",
"base/check.h",
"base/check_op.h",
@@ -81,6 +81,7 @@
"base/feature_list.h",
"base/logging.h",
"base/memory/raw_ptr.h",
+ "base/memory/raw_ptr_exclusion.h",
"base/notreached.h",
"base/trace_event/memory_usage_estimator.h",
"third_party/perfetto/include/perfetto/tracing/traced_value.h",
@@ -109,7 +110,6 @@
# Fix some Perfetto includes.
core.replace("perfetto/tracing/traced_value_forward.h", "perfetto/tracing/traced_value.h"),
-
core.replace("#include \"base/strings/string_number_conversions_win.h\"", ""),
core.replace("#include \"base/allocator/partition_allocator/partition_alloc_config.h\"", ""),
diff --git a/polyfills/BUILD b/polyfills/BUILD
index 7e887e3..6bd0565 100644
--- a/polyfills/BUILD
+++ b/polyfills/BUILD
@@ -18,6 +18,7 @@
"base/feature_list.h",
"base/logging.h",
"base/memory/raw_ptr.h",
+ "base/memory/raw_ptr_exclusion.h",
"base/metrics/histogram_macros.h",
"base/notreached.h",
"base/trace_event/memory_usage_estimator.h",
diff --git a/polyfills/base/memory/raw_ptr_exclusion.h b/polyfills/base/memory/raw_ptr_exclusion.h
new file mode 100644
index 0000000..2ef3a8b
--- /dev/null
+++ b/polyfills/base/memory/raw_ptr_exclusion.h
@@ -0,0 +1,10 @@
+// Copyright 2022 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 POLYFILLS_BASE_MEMORY_RAW_PTR_EXCLUSION_H_
+#define POLYFILLS_BASE_MEMORY_RAW_PTR_EXCLUSION_H_
+
+#define RAW_PTR_EXCLUSION
+
+#endif // POLYFILLS_BASE_MEMORY_RAW_PTR_EXCLUSION_H_
diff --git a/url/gurl.cc b/url/gurl.cc
index c5e3f19..87097a9 100644
--- a/url/gurl.cc
+++ b/url/gurl.cc
@@ -362,7 +362,7 @@
}
bool GURL::SchemeIsHTTPOrHTTPS() const {
- return SchemeIs(url::kHttpScheme) || SchemeIs(url::kHttpsScheme);
+ return SchemeIs(url::kHttpsScheme) || SchemeIs(url::kHttpScheme);
}
bool GURL::SchemeIsWSOrWSS() const {
diff --git a/url/origin.cc b/url/origin.cc
index 1b416a9..b16d3df 100644
--- a/url/origin.cc
+++ b/url/origin.cc
@@ -375,11 +375,13 @@
if (!reader.ReadUInt64(&nonce_low))
return absl::nullopt;
+ absl::optional<gurl_base::UnguessableToken> nonce_token =
+ gurl_base::UnguessableToken::Deserialize(nonce_high, nonce_low);
+
Origin::Nonce nonce;
- if (nonce_high != 0 && nonce_low != 0) {
+ if (nonce_token.has_value()) {
// The serialized nonce wasn't empty, so copy it here.
- nonce = Origin::Nonce(
- gurl_base::UnguessableToken::Deserialize(nonce_high, nonce_low));
+ nonce = Origin::Nonce(nonce_token.value());
}
Origin origin;
origin.nonce_ = std::move(nonce);
diff --git a/url/origin.h b/url/origin.h
index 5da5d84..292d8d4 100644
--- a/url/origin.h
+++ b/url/origin.h
@@ -13,6 +13,7 @@
#include "polyfills/base/component_export.h"
#include "polyfills/base/debug/alias.h"
#include "base/debug/crash_logging.h"
+#include "base/gtest_prod_util.h"
#include "base/strings/string_piece_forward.h"
#include "base/strings/string_util.h"
#include "base/unguessable_token.h"
@@ -40,6 +41,8 @@
namespace blink {
class SecurityOrigin;
class SecurityOriginTest;
+class StorageKey;
+class StorageKeyTest;
} // namespace blink
namespace IPC {
@@ -329,6 +332,7 @@
private:
friend class blink::SecurityOrigin;
friend class blink::SecurityOriginTest;
+ friend class blink::StorageKey;
// SchemefulSite needs access to the serialization/deserialization logic which
// includes the nonce.
friend class net::SchemefulSite;
@@ -339,6 +343,7 @@
friend IPC::ParamTraits<url::Origin>;
friend COMPONENT_EXPORT(URL) std::ostream& operator<<(std::ostream& out,
const Origin& origin);
+ friend class blink::StorageKeyTest;
// Origin::Nonce is a wrapper around gurl_base::UnguessableToken that generates
// the random value only when the value is first accessed. The lazy generation
diff --git a/url/run_all_perftests.cc b/url/run_all_perftests.cc
index 47aeae2..7560e83 100644
--- a/url/run_all_perftests.cc
+++ b/url/run_all_perftests.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "base/bind.h"
+#include "base/functional/bind.h"
#include "base/test/launcher/unit_test_launcher.h"
#include "base/test/perf_test_suite.h"
diff --git a/url/run_all_unittests.cc b/url/run_all_unittests.cc
index 0e339bd..159e236 100644
--- a/url/run_all_unittests.cc
+++ b/url/run_all_unittests.cc
@@ -4,7 +4,7 @@
#include <memory>
-#include "base/bind.h"
+#include "base/functional/bind.h"
#include "base/test/launcher/unit_test_launcher.h"
#include "base/test/test_io_thread.h"
#include "base/test/test_suite.h"
diff --git a/url/url_canon.h b/url/url_canon.h
index 1eed379..bb90c4a 100644
--- a/url/url_canon.h
+++ b/url/url_canon.h
@@ -10,7 +10,7 @@
#include "polyfills/base/component_export.h"
#include "polyfills/base/export_template.h"
-#include "base/memory/raw_ptr_exclusion.h"
+#include "polyfills/base/memory/raw_ptr_exclusion.h"
#include "base/numerics/clamped_math.h"
#include "url/third_party/mozilla/url_parse.h"
diff --git a/url/url_canon_icu_unittest.cc b/url/url_canon_icu_unittest.cc
index fc3fb67..46b7ae0 100644
--- a/url/url_canon_icu_unittest.cc
+++ b/url/url_canon_icu_unittest.cc
@@ -32,7 +32,7 @@
~UConvScoper() {
if (converter_)
- ucnv_close(converter_);
+ ucnv_close(converter_.ExtractAsDangling());
}
// Returns the converter object, may be NULL.
diff --git a/url/url_canon_stdstring.h b/url/url_canon_stdstring.h
index c9e2a1b..c8f9500 100644
--- a/url/url_canon_stdstring.h
+++ b/url/url_canon_stdstring.h
@@ -13,7 +13,7 @@
#include "base/compiler_specific.h"
#include "polyfills/base/component_export.h"
-#include "base/memory/raw_ptr_exclusion.h"
+#include "polyfills/base/memory/raw_ptr_exclusion.h"
#include "base/strings/string_piece.h"
#include "url/url_canon.h"