mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			208 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			208 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| diff --git chrome/browser/background_fetch/background_fetch_permission_context.cc chrome/browser/background_fetch/background_fetch_permission_context.cc
 | |
| index 429739d7b8dfe..0f4bff365f62b 100644
 | |
| --- chrome/browser/background_fetch/background_fetch_permission_context.cc
 | |
| +++ chrome/browser/background_fetch/background_fetch_permission_context.cc
 | |
| @@ -4,6 +4,7 @@
 | |
|  
 | |
|  #include "chrome/browser/background_fetch/background_fetch_permission_context.h"
 | |
|  
 | |
| +#include "cef/libcef/features/runtime.h"
 | |
|  #include "chrome/browser/browser_process.h"
 | |
|  #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 | |
|  #include "chrome/browser/download/download_request_limiter.h"
 | |
| @@ -25,7 +26,8 @@ ContentSetting BackgroundFetchPermissionContext::GetPermissionStatusInternal(
 | |
|      const GURL& embedding_origin) const {
 | |
|    DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 | |
|  
 | |
| -  if (render_frame_host && !render_frame_host->GetParent()) {
 | |
| +  if (!cef::IsAlloyRuntimeEnabled() &&
 | |
| +      render_frame_host && !render_frame_host->GetParent()) {
 | |
|      DownloadRequestLimiter* limiter =
 | |
|          g_browser_process->download_request_limiter();
 | |
|      DCHECK(limiter);
 | |
| diff --git chrome/browser/background_sync/periodic_background_sync_permission_context.cc chrome/browser/background_sync/periodic_background_sync_permission_context.cc
 | |
| index d63a055919747..8d13959217751 100644
 | |
| --- chrome/browser/background_sync/periodic_background_sync_permission_context.cc
 | |
| +++ chrome/browser/background_sync/periodic_background_sync_permission_context.cc
 | |
| @@ -6,6 +6,7 @@
 | |
|  
 | |
|  #include "base/feature_list.h"
 | |
|  #include "build/build_config.h"
 | |
| +#include "cef/libcef/features/runtime.h"
 | |
|  #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 | |
|  #include "chrome/browser/profiles/profile.h"
 | |
|  #include "chrome/browser/search_engines/template_url_service_factory.h"
 | |
| @@ -89,6 +90,10 @@ PeriodicBackgroundSyncPermissionContext::GetPermissionStatusInternal(
 | |
|      return CONTENT_SETTING_ALLOW;
 | |
|  #endif
 | |
|  
 | |
| +  if (cef::IsAlloyRuntimeEnabled()) {
 | |
| +    return CONTENT_SETTING_BLOCK;
 | |
| +  }
 | |
| +
 | |
|    bool can_bypass_install_requirement =
 | |
|        base::FeatureList::IsEnabled(
 | |
|            features::kPeriodicSyncPermissionForDefaultSearchEngine) &&
 | |
| diff --git chrome/browser/permissions/chrome_permissions_client.cc chrome/browser/permissions/chrome_permissions_client.cc
 | |
| index 7f14b48feedf6..cfcf4554c1d4d 100644
 | |
| --- chrome/browser/permissions/chrome_permissions_client.cc
 | |
| +++ chrome/browser/permissions/chrome_permissions_client.cc
 | |
| @@ -14,6 +14,7 @@
 | |
|  #include "base/time/time.h"
 | |
|  #include "build/build_config.h"
 | |
|  #include "build/chromeos_buildflags.h"
 | |
| +#include "cef/libcef/features/runtime.h"
 | |
|  #include "chrome/browser/ash/shimless_rma/chrome_shimless_rma_delegate.h"
 | |
|  #include "chrome/browser/bluetooth/bluetooth_chooser_context_factory.h"
 | |
|  #include "chrome/browser/browser_process.h"
 | |
| @@ -190,6 +191,9 @@ ChromePermissionsClient::GetPermissionDecisionAutoBlocker(
 | |
|  double ChromePermissionsClient::GetSiteEngagementScore(
 | |
|      content::BrowserContext* browser_context,
 | |
|      const GURL& origin) {
 | |
| +  // No SiteEngagementService with the Alloy runtime.
 | |
| +  if (cef::IsAlloyRuntimeEnabled())
 | |
| +    return 0.0;
 | |
|    return site_engagement::SiteEngagementService::Get(
 | |
|               Profile::FromBrowserContext(browser_context))
 | |
|        ->GetScore(origin);
 | |
| @@ -360,8 +364,10 @@ ChromePermissionsClient::CreatePermissionUiSelectors(
 | |
|        std::make_unique<ContextualNotificationPermissionUiSelector>());
 | |
|    selectors.emplace_back(std::make_unique<PrefBasedQuietPermissionUiSelector>(
 | |
|        Profile::FromBrowserContext(browser_context)));
 | |
| +  if (!cef::IsAlloyRuntimeEnabled()) {
 | |
|    selectors.emplace_back(std::make_unique<PredictionBasedPermissionUiSelector>(
 | |
|        Profile::FromBrowserContext(browser_context)));
 | |
| +  }
 | |
|    return selectors;
 | |
|  }
 | |
|  
 | |
| diff --git chrome/browser/permissions/permission_manager_factory.cc chrome/browser/permissions/permission_manager_factory.cc
 | |
| index 1ad4009827a9d..ca054482954f9 100644
 | |
| --- chrome/browser/permissions/permission_manager_factory.cc
 | |
| +++ chrome/browser/permissions/permission_manager_factory.cc
 | |
| @@ -6,6 +6,7 @@
 | |
|  
 | |
|  #include "build/build_config.h"
 | |
|  #include "build/chromeos_buildflags.h"
 | |
| +#include "cef/libcef/features/runtime.h"
 | |
|  #include "chrome/browser/background_fetch/background_fetch_permission_context.h"
 | |
|  #include "chrome/browser/background_sync/periodic_background_sync_permission_context.h"
 | |
|  #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 | |
| @@ -64,9 +65,11 @@ permissions::PermissionManager::PermissionContextMap CreatePermissionContexts(
 | |
|        std::make_unique<GeolocationPermissionContextDelegate>(profile);
 | |
|  #endif  // BUILDFLAG(IS_ANDROID)
 | |
|  #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_CHROMEOS)
 | |
| +  if (!cef::IsAlloyRuntimeEnabled()) {
 | |
|    delegates.geolocation_system_permission_manager =
 | |
|        device::GeolocationSystemPermissionManager::GetInstance();
 | |
|    DCHECK(delegates.geolocation_system_permission_manager);
 | |
| +  }
 | |
|  #endif
 | |
|    delegates.media_stream_device_enumerator =
 | |
|        MediaCaptureDevicesDispatcher::GetInstance();
 | |
| diff --git chrome/browser/storage/durable_storage_permission_context.cc chrome/browser/storage/durable_storage_permission_context.cc
 | |
| index 9934727f31a59..765b822241e4d 100644
 | |
| --- chrome/browser/storage/durable_storage_permission_context.cc
 | |
| +++ chrome/browser/storage/durable_storage_permission_context.cc
 | |
| @@ -8,6 +8,7 @@
 | |
|  
 | |
|  #include "base/check_op.h"
 | |
|  #include "base/containers/contains.h"
 | |
| +#include "cef/libcef/features/runtime.h"
 | |
|  #include "chrome/browser/bookmarks/bookmark_model_factory.h"
 | |
|  #include "chrome/browser/content_settings/cookie_settings_factory.h"
 | |
|  #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 | |
| @@ -56,7 +57,10 @@ void DurableStoragePermissionContext::DecidePermission(
 | |
|  
 | |
|    // Durable is only allowed to be granted to the top-level origin. Embedding
 | |
|    // origin is the last committed navigation origin to the web contents.
 | |
| -  if (request_data.requesting_origin != request_data.embedding_origin) {
 | |
| +  // Permission depends on PWA and site engagement subsystems which are not
 | |
| +  // supported by the Alloy runtime (see issue #3379).
 | |
| +  if (cef::IsAlloyRuntimeEnabled() ||
 | |
| +      request_data.requesting_origin != request_data.embedding_origin) {
 | |
|      NotifyPermissionSet(request_data.id, request_data.requesting_origin,
 | |
|                          request_data.embedding_origin, std::move(callback),
 | |
|                          /*persist=*/false, CONTENT_SETTING_DEFAULT,
 | |
| diff --git chrome/browser/ui/permission_bubble/permission_prompt.h chrome/browser/ui/permission_bubble/permission_prompt.h
 | |
| index fbce13c16ad10..0512b2f09937e 100644
 | |
| --- chrome/browser/ui/permission_bubble/permission_prompt.h
 | |
| +++ chrome/browser/ui/permission_bubble/permission_prompt.h
 | |
| @@ -11,6 +11,13 @@ namespace content {
 | |
|  class WebContents;
 | |
|  }
 | |
|  
 | |
| +using CreatePermissionPromptFunctionPtr =
 | |
| +    std::unique_ptr<permissions::PermissionPrompt> (*)(
 | |
| +        content::WebContents* web_contents,
 | |
| +        permissions::PermissionPrompt::Delegate* delegate,
 | |
| +        bool* default_handling);
 | |
| +void SetCreatePermissionPromptFunction(CreatePermissionPromptFunctionPtr);
 | |
| +
 | |
|  // Factory function to create permission prompts for chrome.
 | |
|  std::unique_ptr<permissions::PermissionPrompt> CreatePermissionPrompt(
 | |
|      content::WebContents* web_contents,
 | |
| diff --git chrome/browser/ui/views/permissions/permission_prompt_factory.cc chrome/browser/ui/views/permissions/permission_prompt_factory.cc
 | |
| index 613500ba8c3d3..36c9aa0d2ea71 100644
 | |
| --- chrome/browser/ui/views/permissions/permission_prompt_factory.cc
 | |
| +++ chrome/browser/ui/views/permissions/permission_prompt_factory.cc
 | |
| @@ -202,11 +202,28 @@ std::unique_ptr<permissions::PermissionPrompt> CreateQuietPrompt(
 | |
|    }
 | |
|  }
 | |
|  
 | |
| +CreatePermissionPromptFunctionPtr g_create_permission_prompt_ptr = nullptr;
 | |
| +
 | |
|  }  // namespace
 | |
|  
 | |
| +void SetCreatePermissionPromptFunction(
 | |
| +    CreatePermissionPromptFunctionPtr ptr) {
 | |
| +  g_create_permission_prompt_ptr = ptr;
 | |
| +}
 | |
| +
 | |
|  std::unique_ptr<permissions::PermissionPrompt> CreatePermissionPrompt(
 | |
|      content::WebContents* web_contents,
 | |
|      permissions::PermissionPrompt::Delegate* delegate) {
 | |
| +  if (g_create_permission_prompt_ptr) {
 | |
| +    bool default_handling = true;
 | |
| +    auto prompt = g_create_permission_prompt_ptr(web_contents, delegate,
 | |
| +                                                 &default_handling);
 | |
| +    if (prompt)
 | |
| +      return prompt;
 | |
| +    if (!default_handling)
 | |
| +      return nullptr;
 | |
| +  }
 | |
| +
 | |
|    Browser* browser = chrome::FindBrowserWithTab(web_contents);
 | |
|    if (!browser) {
 | |
|      DLOG(WARNING) << "Permission prompt suppressed because the WebContents is "
 | |
| diff --git components/embedder_support/permission_context_utils.cc components/embedder_support/permission_context_utils.cc
 | |
| index 9c0ec651d494f..e5c6126adeea7 100644
 | |
| --- components/embedder_support/permission_context_utils.cc
 | |
| +++ components/embedder_support/permission_context_utils.cc
 | |
| @@ -5,6 +5,7 @@
 | |
|  #include "components/embedder_support/permission_context_utils.h"
 | |
|  
 | |
|  #include "build/build_config.h"
 | |
| +#include "cef/libcef/features/runtime.h"
 | |
|  #include "components/background_sync/background_sync_permission_context.h"
 | |
|  #include "components/permissions/contexts/accessibility_permission_context.h"
 | |
|  #include "components/permissions/contexts/camera_pan_tilt_zoom_permission_context.h"
 | |
| @@ -79,10 +80,17 @@ CreateDefaultPermissionContexts(content::BrowserContext* browser_context,
 | |
|            std::move(delegates.geolocation_permission_context_delegate),
 | |
|            is_regular_profile);
 | |
|  #elif BUILDFLAG(IS_MAC) || BUILDFLAG(IS_CHROMEOS)
 | |
| +  if (cef::IsAlloyRuntimeEnabled()) {
 | |
| +    permission_contexts[ContentSettingsType::GEOLOCATION] =
 | |
| +        std::make_unique<permissions::GeolocationPermissionContext>(
 | |
| +            browser_context,
 | |
| +            std::move(delegates.geolocation_permission_context_delegate));
 | |
| +  } else {
 | |
|    permission_contexts[ContentSettingsType::GEOLOCATION] =
 | |
|        std::make_unique<permissions::GeolocationPermissionContextSystem>(
 | |
|            browser_context,
 | |
|            std::move(delegates.geolocation_permission_context_delegate));
 | |
| +  }
 | |
|  #else
 | |
|    permission_contexts[ContentSettingsType::GEOLOCATION] =
 | |
|        std::make_unique<permissions::GeolocationPermissionContext>(
 |