|  | // 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. | 
|  |  | 
|  | #include "ios/web/content/init/ios_content_browser_client.h" | 
|  |  | 
|  | #import "components/embedder_support/user_agent_utils.h" | 
|  | #import "components/performance_manager/embedder/performance_manager_registry.h" | 
|  | #import "components/version_info/version_info.h" | 
|  | #import "content/public/browser/browser_context.h" | 
|  | #import "content/public/browser/devtools_manager_delegate.h" | 
|  | #import "content/public/browser/web_contents_view_delegate.h" | 
|  | #import "content/public/common/url_constants.h" | 
|  | #import "ios/web/content/init/ios_browser_main_parts.h" | 
|  | #import "ios/web/content/ui/web_contents_view_delegate_impl.h" | 
|  | #include "third_party/blink/public/common/switches.h" | 
|  |  | 
|  | namespace web { | 
|  |  | 
|  | bool IOSContentBrowserClient::IsHandledURL(const GURL& url) { | 
|  | if (!url.is_valid()) { | 
|  | return false; | 
|  | } | 
|  | static const char* const kProtocolList[] = { | 
|  | url::kHttpScheme, | 
|  | url::kHttpsScheme, | 
|  | url::kWsScheme, | 
|  | url::kWssScheme, | 
|  | url::kBlobScheme, | 
|  | url::kFileSystemScheme, | 
|  | content::kChromeUIScheme, | 
|  | content::kChromeUIUntrustedScheme, | 
|  | content::kChromeDevToolsScheme, | 
|  | url::kDataScheme, | 
|  | url::kFileScheme, | 
|  | }; | 
|  | for (const char* supported_protocol : kProtocolList) { | 
|  | if (url.scheme() == supported_protocol) { | 
|  | return true; | 
|  | } | 
|  | } | 
|  | return false; | 
|  | } | 
|  |  | 
|  | std::unique_ptr<content::BrowserMainParts> | 
|  | IOSContentBrowserClient::CreateBrowserMainParts(bool is_integration_test) { | 
|  | return std::make_unique<IOSBrowserMainParts>(); | 
|  | } | 
|  |  | 
|  | std::string IOSContentBrowserClient::GetAcceptLangs( | 
|  | content::BrowserContext* context) { | 
|  | return "en-us,en"; | 
|  | } | 
|  |  | 
|  | std::string IOSContentBrowserClient::GetProduct() { | 
|  | return std::string(version_info::GetProductNameAndVersionForUserAgent()); | 
|  | } | 
|  |  | 
|  | std::string IOSContentBrowserClient::GetUserAgent() { | 
|  | return embedder_support::GetUserAgent(); | 
|  | } | 
|  |  | 
|  | std::string IOSContentBrowserClient::GetUserAgentBasedOnPolicy( | 
|  | content::BrowserContext* context) { | 
|  | return GetUserAgent(); | 
|  | } | 
|  |  | 
|  | blink::UserAgentMetadata IOSContentBrowserClient::GetUserAgentMetadata() { | 
|  | blink::UserAgentMetadata metadata; | 
|  |  | 
|  | metadata.brand_version_list.emplace_back( | 
|  | std::string(version_info::GetProductName()), "113"); | 
|  | metadata.brand_full_version_list.emplace_back( | 
|  | std::string(version_info::GetProductName()), | 
|  | std::string(version_info::GetVersionNumber())); | 
|  | metadata.full_version = std::string(version_info::GetVersionNumber()); | 
|  | metadata.platform = "Unknown"; | 
|  | metadata.architecture = embedder_support::GetCpuArchitecture(); | 
|  | metadata.model = embedder_support::BuildModelInfo(); | 
|  |  | 
|  | metadata.bitness = embedder_support::GetCpuBitness(); | 
|  | metadata.wow64 = embedder_support::IsWoW64(); | 
|  |  | 
|  | return metadata; | 
|  | } | 
|  |  | 
|  | std::unique_ptr<content::WebContentsViewDelegate> | 
|  | IOSContentBrowserClient::GetWebContentsViewDelegate( | 
|  | content::WebContents* web_contents) { | 
|  | if (auto* registry = | 
|  | performance_manager::PerformanceManagerRegistry::GetInstance()) { | 
|  | registry->MaybeCreatePageNodeForWebContents(web_contents); | 
|  | } | 
|  | return CreateWebContentsViewDelegate(web_contents); | 
|  | } | 
|  |  | 
|  | bool IOSContentBrowserClient::IsSharedStorageAllowed( | 
|  | content::BrowserContext* browser_context, | 
|  | content::RenderFrameHost* rfh, | 
|  | const url::Origin& top_frame_origin, | 
|  | const url::Origin& accessing_origin, | 
|  | std::string* out_debug_message, | 
|  | bool* out_block_is_site_setting_specific) { | 
|  | return true; | 
|  | } | 
|  |  | 
|  | bool IOSContentBrowserClient::IsSharedStorageSelectURLAllowed( | 
|  | content::BrowserContext* browser_context, | 
|  | const url::Origin& top_frame_origin, | 
|  | const url::Origin& accessing_origin, | 
|  | std::string* out_debug_message, | 
|  | bool* out_block_is_site_setting_specific) { | 
|  | return true; | 
|  | } | 
|  |  | 
|  | content::GeneratedCodeCacheSettings | 
|  | IOSContentBrowserClient::GetGeneratedCodeCacheSettings( | 
|  | content::BrowserContext* context) { | 
|  | // If we pass 0 for size, disk_cache will pick a default size using the | 
|  | // heuristics based on available disk size. These are implemented in | 
|  | // disk_cache::PreferredCacheSize in net/disk_cache/cache_util.cc. | 
|  | return content::GeneratedCodeCacheSettings(true, 0, context->GetPath()); | 
|  | } | 
|  |  | 
|  | std::unique_ptr<content::DevToolsManagerDelegate> | 
|  | IOSContentBrowserClient::CreateDevToolsManagerDelegate() { | 
|  | return std::make_unique<content::DevToolsManagerDelegate>(); | 
|  | } | 
|  |  | 
|  | }  // namespace web |