android_webview
apps
ash
base
build
build_overrides
buildtools
cc
chrome
chromecast
chromeos
clank
codelabs
components
content
app
app_shim_remote_cocoa
browser
accessibility
aggregation_service
ai
android
attribution_reporting
audio
background_fetch
background_sync
blob_storage
bluetooth
broadcast_channel
browser_plugin
browsing_data
browsing_topics
btm
buckets
cache_storage
client_hints
closewatcher
cocoa
code_cache
compositor
compute_pressure
contacts
content_index
cookie_deprecation_label
cookie_insight_list
cookie_store
date_time_chooser
device
device_posture
device_sensors
devtools
direct_sockets
display_cutout
dom_storage
download
fenced_frame
file_system
file_system_access
first_party_sets
font_access
font_unique_name_lookup
generic_sensor
geolocation
gpu
handwriting
hid
hyphenation
idle
image_capture
indexed_db
installedapp
interest_group
keyboard_lock
loader
lock_screen
locks
manifest
media
media_session
memory
memory_pressure
metrics
navigation_transitions
network
notifications
origin_trials
payments
performance_manager
permissions
picture_in_picture
preloading
presentation
private_aggregation
process_internals
push_messaging
quota
reduce_accept_language
renderer_host
resources
scheduler
screen_details
screen_orientation
screenlock_monitor
security
serial
service_host
service_worker
shape_detection
shared_storage
smart_card
sms
speech
ssl
storage_access
system_dns_resolution
tpcd_heuristics
tracing
usb
wake_lock
web_contents
web_database
web_package
webauth
webid
webrtc
websockets
webtransport
webui
worker_host
xr
zygote_host
BACK_FORWARD_CACHE_OWNERS
BUILD.gn
CHILD_PROCESS_SECURITY_POLICY_OWNERS
DEPS
OWNERS
PRESUBMIT.py
README.md
about_url_loader_factory.cc
about_url_loader_factory.h
accent_color_browsertest.cc
after_startup_task_utils.cc
after_startup_task_utils.h
agent_cluster_key.cc
agent_cluster_key.h
agent_cluster_key_unittest.cc
back_forward_cache_basics_browsertest.cc
back_forward_cache_browsertest.cc
back_forward_cache_browsertest.h
back_forward_cache_features_browsertest.cc
back_forward_cache_internal_browsertest.cc
back_forward_cache_network_request_browsertest.cc
back_forward_cache_no_store_browsertest.cc
back_forward_cache_not_restored_reasons_browsertest.cc
back_forward_cache_test_util.cc
back_forward_cache_test_util.h
bad_message.cc
bad_message.h
battery_monitor_browsertest.cc
bookmarklet_browsertest.cc
browser_child_process_host_impl.cc
browser_child_process_host_impl.h
browser_child_process_host_impl_receiver_bindings.cc
browser_child_process_observer_browsertest.cc
browser_context.cc
browser_context_impl.cc
browser_context_impl.h
browser_interface_binders.cc
browser_interface_binders.h
browser_interface_broker_impl.h
browser_main.cc
browser_main.h
browser_main_loop.cc
browser_main_loop.h
browser_main_loop_unittest.cc
browser_main_runner_impl.cc
browser_main_runner_impl.h
browser_process_io_thread.cc
browser_process_io_thread.h
browser_task_traits_nocompile.nc
browser_thread_browsertest.cc
browser_thread_impl.cc
browser_thread_impl.h
browser_thread_nocompile.nc
browser_thread_unittest.cc
browser_url_handler_impl.cc
browser_url_handler_impl.h
browser_url_handler_impl_unittest.cc
browsing_instance.cc
browsing_instance.h
byte_stream.cc
byte_stream.h
byte_stream_unittest.cc
can_commit_status.h
child_process_host_impl.cc
child_process_host_impl.h
child_process_launcher.cc
child_process_launcher.h
child_process_launcher_browsertest.cc
child_process_launcher_helper.cc
child_process_launcher_helper.h
child_process_launcher_helper_android.cc
child_process_launcher_helper_fuchsia.cc
child_process_launcher_helper_ios.mm
child_process_launcher_helper_linux.cc
child_process_launcher_helper_mac.cc
child_process_launcher_helper_posix.cc
child_process_launcher_helper_posix.h
child_process_launcher_helper_tvos.mm
child_process_launcher_helper_win.cc
child_process_sandbox_support_win_unittest.cc
child_process_security_policy_browsertest.cc
child_process_security_policy_impl.cc
child_process_security_policy_impl.h
child_process_security_policy_unittest.cc
child_process_task_port_provider_mac.cc
child_process_task_port_provider_mac.h
child_process_task_port_provider_mac_unittest.cc
child_thread_type_switcher_linux.cc
child_thread_type_switcher_linux.h
content_security_policy_browsertest.cc
context_factory.cc
cross_site_transfer_browsertest.cc
data_decoder_browsertest.cc
data_url_loader_factory.cc
data_url_loader_factory.h
database_browsertest.cc
do_not_track_browsertest.cc
eye_dropper_chooser_impl.cc
eye_dropper_chooser_impl.h
feature_observer.cc
feature_observer.h
field_trial_recorder.cc
field_trial_recorder.h
field_trial_synchronizer.cc
field_trial_synchronizer.h
find_in_page_client.cc
find_in_page_client.h
find_request_manager.cc
find_request_manager.h
find_request_manager_browsertest.cc
font_list_async.cc
font_preferences_browsertest.cc
font_service.cc
font_service.h
form_controls_browsertest.cc
framebusting_browsertest.cc
guest_page_holder_impl.cc
guest_page_holder_impl.h
host_zoom_level_context.cc
host_zoom_level_context.h
host_zoom_map_impl.cc
host_zoom_map_impl.h
host_zoom_map_impl_browsertest.cc
host_zoom_map_impl_unittest.cc
in_memory_federated_permission_context.cc
in_memory_federated_permission_context.h
isolated_origin_browsertest.cc
isolated_origin_util.cc
isolated_origin_util.h
isolation_context.cc
isolation_context.h
keyboard_lock_browsertest.cc
keyboard_lock_browsertest.h
keyboard_lock_browsertest_ios.mm
keyboard_lock_browsertest_mac.mm
largest_contentful_paint_browsertests.cc
launch_as_mojo_client_browsertest.cc
log_console_message.cc
log_console_message.h
message_port_close_event_browsertest.cc
message_port_provider.cc
message_port_provider_browsertest.cc
mime_registry_impl.cc
mime_registry_impl.h
mojo_binder_policy_applier.cc
mojo_binder_policy_applier.h
mojo_binder_policy_applier_unittest.cc
mojo_binder_policy_map_impl.cc
mojo_binder_policy_map_impl.h
mojo_binder_policy_map_impl_unittest.cc
mojo_sandbox_browsertest.cc
native_profiling.pdl
navigation_browsertest.cc
navigation_mhtml_browsertest.cc
navigation_or_document_handle.cc
navigation_or_document_handle.h
navigation_subresource_loader_params.cc
navigation_subresource_loader_params.h
net_info_browsertest.cc
network_context_client_base_impl.cc
network_context_client_base_impl.h
network_context_client_base_impl_unittest.cc
network_sandbox.cc
network_sandbox.h
network_sandbox_grant_result.h
network_service_browsertest.cc
network_service_client.cc
network_service_client.h
network_service_instance_impl.cc
network_service_instance_impl.h
network_service_instance_impl_unittest.cc
network_service_restart_browsertest.cc
origin_agent_cluster_isolation_state.cc
origin_agent_cluster_isolation_state.h
per_web_ui_browser_interface_broker.cc
performance_memory_browsertest.cc
performance_timeline_browsertest.cc
plugin_list.cc
plugin_list.h
plugin_list_unittest.cc
plugin_service_impl.cc
plugin_service_impl.h
plugin_service_impl_browsertest.cc
pointer_lock_browsertest.cc
pointer_lock_browsertest.h
pointer_lock_browsertest_ios.mm
pointer_lock_browsertest_mac.mm
posix_file_descriptor_info_impl.cc
posix_file_descriptor_info_impl.h
posix_file_descriptor_info_impl_unittest.cc
power_monitor_browsertest.cc
ppapi_plugin_process_host.cc
ppapi_plugin_process_host.h
ppapi_plugin_process_host_receiver_bindings.cc
ppapi_plugin_sandboxed_process_launcher_delegate.cc
ppapi_plugin_sandboxed_process_launcher_delegate.h
process_lock.cc
process_lock.h
process_reuse_policy.h
process_visibility_util.cc
profiling_utils.cc
resource_context_impl.cc
resource_context_impl.h
resource_coordinator_service.cc
resource_loading_browsertest.cc
sandbox_host_linux.cc
sandbox_host_linux.h
sandbox_ipc_linux.cc
sandbox_ipc_linux.h
sandbox_mac_unittest.mm
sandbox_parameters_mac.h
sandbox_parameters_mac.mm
sandbox_support_impl.h
sandbox_support_mac_impl.mm
sandbox_support_win_impl.cc
scoped_active_url.cc
scoped_active_url.h
security_exploit_browsertest.cc
session_history_browsertest.cc
shareable_file_reference_unittest.cc
site_info.cc
site_info.h
site_instance_group.cc
site_instance_group.h
site_instance_group_browsertest.cc
site_instance_group_unittest.cc
site_instance_impl.cc
site_instance_impl.h
site_instance_impl_unittest.cc
site_isolation_policy_unittest.cc
site_per_process_browsertest.cc
site_per_process_browsertest.h
site_per_process_hit_test_browsertest.cc
site_per_process_layout_browsertest.cc
site_per_process_mac_browsertest.mm
site_per_process_mixed_content_browsertest.cc
site_per_process_oopsif_browsertest.cc
site_per_process_sad_frame_browsertest.cc
site_per_process_scroll_browsertest.cc
site_per_process_unload_browsertest.cc
snapshot_browsertest.cc
ssl_private_key_impl.cc
ssl_private_key_impl.h
startup_data_impl.cc
startup_data_impl.h
startup_helper.cc
startup_helper.h
startup_task_runner.cc
startup_task_runner.h
startup_task_runner_unittest.cc
storage_partition_config_unittest.cc
storage_partition_impl.cc
storage_partition_impl.h
storage_partition_impl_browsertest.cc
storage_partition_impl_map.cc
storage_partition_impl_map.h
storage_partition_impl_map_unittest.cc
storage_partition_impl_unittest.cc
storage_service_restart_browsertest.cc
storage_service_sandbox_browsertest.cc
synthetic_trial_syncer.cc
text_fragment_browsertest.cc
theme_helper.cc
theme_helper.h
theme_helper_mac.h
theme_helper_mac.mm
ukm_internals_ui.cc
ukm_internals_ui.h
url_info.cc
url_info.h
url_loader_factory_params_helper.cc
url_loader_factory_params_helper.h
v8_snapshot_files.cc
v8_snapshot_files.h
vibration_browsertest.cc
video_capture_service_impl.cc
video_capture_service_impl.h
web_exposed_isolation_info.cc
web_exposed_isolation_info.h
web_exposed_isolation_info_nocompile.nc
web_exposed_isolation_info_unittest.cc
web_ui_browser_interface_broker_registry.cc
webkit_browsertest.cc
worker_network_isolation_key_browsertest.cc
zoom_browsertest.cc
child
common
gpu
ppapi_plugin
public
renderer
services
shell
test
utility
web_test
zygote
BUILD.gn
DEPS
DIR_METADATA
OWNERS
README.md
architecture.png
content_resources.grd
crypto
dbus
device
docs
extensions
fuchsia_web
gin
google_apis
gpu
headless
infra
internal
ios
ios_internal
ipc
media
mojo
native_client
native_client_sdk
net
pdf
ppapi
printing
remoting
rlz
sandbox
services
signing_keys
skia
sql
storage
styleguide
testing
third_party
tools
ui
url
v8
webkit
.clang-format
.clang-tidy
.clangd
.git-blame-ignore-revs
.gitallowed
.gitattributes
.gitignore
.gitmodules
.gn
.mailmap
.rustfmt.toml
.vpython3
.yapfignore
ATL_OWNERS
AUTHORS
BUILD.gn
CODE_OF_CONDUCT.md
CPPLINT.cfg
CRYPTO_OWNERS
DEPS
DIR_METADATA
LICENSE
LICENSE.chromium_os
OWNERS
PRESUBMIT.py
PRESUBMIT_test.py
PRESUBMIT_test_mocks.py
README.md
WATCHLISTS
codereview.settings

The changes of this CL are made using the following script. ``` target_directory="content/browser" replace_string_in_files() { old_string="$1" new_string="$2" find "$target_directory" -type f \( -name "*.cc" -o -name "*.h" \) \ -exec sed -i '' "s/$old_string/$new_string/g" {} + } delete_include() { find "$target_directory" \( -name "*.h" -o -name "*.cc" \) -print0 | while IFS= read -r -d '' file; do grep -v '#include "base/strings/string_piece.h"' "$file" > "$file.tmp" && mv "$file.tmp" "$file" done } add_include() { find "$target_directory" \( -name "*.h" -o -name "*.cc" \) -print0 | while IFS= read -r -d '' file; do local include_added=false local tempfile=$(mktemp) if grep -qE 'std::(string|u16string)_view' "$file"; then while IFS= read -r line; do echo "$line" >> "$tempfile" if [[ $line =~ ^\s*#include ]]; then if ! $include_added; then echo "#include <string_view>" >> "$tempfile" include_added=true fi fi done < "$file" mv "$tempfile" "$file" if $include_added; then echo "Added #include <string_view> after the first include line in $file" else echo "No include line found in $file" fi else echo "std::string_view not found in $file" fi done } replace_string_in_files "base::StringPiece16" "std::u16string_view" replace_string_in_files "base::StringPiece" "std::string_view" delete_include add_include ``` Replaced base::StringPiece16 with std::u16string_view Replaced base::StringPiece with std::string_view Removed header "base/strings/string_piece.h" Added header "<string_view>" where applicable Bug: 40506050 Change-Id: I2bc22c79dd9a0c839745afe065123f7a53c4a5ca Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5401117 Reviewed-by: Arthur Sonzogni <arthursonzogni@chromium.org> Commit-Queue: Arthur Sonzogni <arthursonzogni@chromium.org> Reviewed-by: Mike West <mkwst@chromium.org> Reviewed-by: Rakina Zata Amni <rakina@chromium.org> Reviewed-by: Will Harris <wfh@chromium.org> Cr-Commit-Position: refs/heads/main@{#1281746}
123 lines
5.3 KiB
C++
123 lines
5.3 KiB
C++
// Copyright 2017 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
#ifndef CONTENT_BROWSER_ISOLATED_ORIGIN_UTIL_H_
|
|
#define CONTENT_BROWSER_ISOLATED_ORIGIN_UTIL_H_
|
|
|
|
#include <string>
|
|
#include <string_view>
|
|
|
|
#include "base/gtest_prod_util.h"
|
|
#include "base/strings/string_util.h"
|
|
#include "content/common/content_export.h"
|
|
#include "url/origin.h"
|
|
|
|
namespace content {
|
|
|
|
// This class holds isolated origin patterns, providing support for double
|
|
// wildcard origins, e.g. https://[*.]foo.com indicates that all domains under
|
|
// foo.com are to be treated as if they are distinct isolated
|
|
// origins. Non-wildcard origins to be isolated are also supported, e.g.
|
|
// https://bar.com.
|
|
class CONTENT_EXPORT IsolatedOriginPattern {
|
|
public:
|
|
explicit IsolatedOriginPattern(std::string_view pattern);
|
|
explicit IsolatedOriginPattern(const url::Origin& origin);
|
|
~IsolatedOriginPattern();
|
|
|
|
// Copying and moving supported.
|
|
IsolatedOriginPattern(const IsolatedOriginPattern& other);
|
|
IsolatedOriginPattern& operator=(const IsolatedOriginPattern& other);
|
|
|
|
IsolatedOriginPattern(IsolatedOriginPattern&& other);
|
|
IsolatedOriginPattern& operator=(IsolatedOriginPattern&& other);
|
|
|
|
bool operator==(const IsolatedOriginPattern& other) const {
|
|
// |pattern_| is deliberately not considered during equality comparison as
|
|
// it stores the pattern as supplied at construction time, before
|
|
// normalisation. This leads to erroneous cases of mismatch where
|
|
// IsolatedOriginPattern("foo.com") and IsolatedOriginPattern("foo.com/")
|
|
// will fail equality comparison, despite both resolving to the same origin.
|
|
return origin_ == other.origin_ &&
|
|
isolate_all_subdomains_ == other.isolate_all_subdomains_ &&
|
|
is_valid_ == other.is_valid_;
|
|
}
|
|
|
|
// Returns the url::Origin corresponding to the pattern supplied at
|
|
// construction time or via a call to Parse. In the event of parsing failure
|
|
// this oriqin will be opaque.
|
|
const url::Origin& origin() const { return origin_; }
|
|
|
|
// True if the supplied pattern was of the form https://[*.]foo.com,
|
|
// indicating all subdomains of foo.com are to be isolated.
|
|
bool isolate_all_subdomains() const { return isolate_all_subdomains_; }
|
|
|
|
// Return the original pattern used to construct this instance.
|
|
const std::string_view pattern() const { return pattern_; }
|
|
|
|
// Return if this origin is valid for isolation purposes.
|
|
bool is_valid() const { return is_valid_; }
|
|
|
|
private:
|
|
friend class ChildProcessSecurityPolicyTest;
|
|
FRIEND_TEST_ALL_PREFIXES(ChildProcessSecurityPolicyTest,
|
|
IsolatedOriginPattern);
|
|
|
|
// Checks if |pattern| is a wildcard pattern, checks the scheme is one of
|
|
// {http, https} and constructs a url::Origin() that can be retrieved if
|
|
// parsing is successful. Returns true on successful parsing.
|
|
bool Parse(const std::string_view& pattern);
|
|
|
|
std::string pattern_;
|
|
url::Origin origin_;
|
|
bool isolate_all_subdomains_;
|
|
bool is_valid_;
|
|
};
|
|
|
|
class CONTENT_EXPORT IsolatedOriginUtil {
|
|
public:
|
|
// Checks whether |origin| matches the isolated origin specified by
|
|
// |isolated_origin|. Subdomains are considered to match isolated origins,
|
|
// so this will be true if
|
|
// (1) |origin| has the same scheme, host, and port as |isolated_origin|, or
|
|
// (2) |origin| has the same scheme and port as |isolated_origin|, and its
|
|
// host is a subdomain of |isolated_origin|'s host.
|
|
// This does not consider site URLs, which don't care about port.
|
|
//
|
|
// For example, if |isolated_origin| is https://isolated.foo.com, this will
|
|
// return true if |origin| is https://isolated.foo.com or
|
|
// https://bar.isolated.foo.com, but it will return false for an |origin| of
|
|
// https://unisolated.foo.com or https://foo.com.
|
|
static bool DoesOriginMatchIsolatedOrigin(const url::Origin& origin,
|
|
const url::Origin& isolated_origin);
|
|
|
|
// Check if |origin| is a valid isolated origin. Invalid isolated origins
|
|
// include opaque origins, origins that don't have an HTTP or HTTPS scheme,
|
|
// and origins without a valid registry-controlled domain. IP addresses are
|
|
// allowed.
|
|
static bool IsValidIsolatedOrigin(const url::Origin& origin);
|
|
|
|
// Check if |origin| is a valid origin for opt-in origin isolation. Invalid
|
|
// origins for this purpose include opaque origins, origins that don't have a
|
|
// HTTP or HTTPS scheme, and origins that are not secure contexts.
|
|
static bool IsValidOriginForOptInIsolation(const url::Origin& origin);
|
|
|
|
// Check if |origin| is a valid origin for opting out of origin isolation.
|
|
// Invalid origins for this purpose include opaque origins, and origins that
|
|
// don't have a HTTP or HTTPS scheme.
|
|
static bool IsValidOriginForOptOutIsolation(const url::Origin& origin);
|
|
|
|
private:
|
|
// Used to implement both IsValidIsolatedOrigin and
|
|
// IsValidOriginForOptInIsolation. The legacy isolated origin case performs
|
|
// some additional checks that don't apply to the opt-in case: it verifies the
|
|
// origin has a registry domain (for subdomain matching) and disallows
|
|
// trailing dots in the domain.
|
|
static bool IsValidIsolatedOriginImpl(const url::Origin& origin,
|
|
bool is_legacy_isolated_origin_check);
|
|
};
|
|
|
|
} // namespace content
|
|
|
|
#endif // CONTENT_BROWSER_ISOLATED_ORIGIN_UTIL_H_
|