blob: 9f6675ce25c7edf0342149115e8eaa91d6be2864 [file] [log] [blame]
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/guest_view/chrome_guest_view_manager_delegate.h"
#include "build/build_config.h"
#include "chrome/browser/task_manager/web_contents_tags.h"
#include "chrome/common/buildflags.h"
#include "components/captive_portal/core/buildflags.h"
#if BUILDFLAG(IS_CHROMEOS)
#include "chrome/browser/ash/app_mode/kiosk_chrome_app_manager.h"
#include "chrome/browser/ash/app_mode/kiosk_controller.h"
#include "chrome/browser/ash/app_mode/kiosk_system_session.h"
#endif // BUILDFLAG(IS_CHROMEOS)
#if BUILDFLAG(ENABLE_GLIC)
#include "chrome/browser/glic/host/guest_util.h"
#endif
#if BUILDFLAG(ENABLE_CAPTIVE_PORTAL_DETECTION)
#include "chrome/browser/captive_portal/captive_portal_service_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ssl/chrome_security_blocking_page_factory.h"
#include "components/captive_portal/content/captive_portal_tab_helper.h"
#endif
namespace extensions {
ChromeGuestViewManagerDelegate::ChromeGuestViewManagerDelegate() = default;
ChromeGuestViewManagerDelegate::~ChromeGuestViewManagerDelegate() = default;
void ChromeGuestViewManagerDelegate::OnGuestAdded(
content::WebContents* guest_web_contents) const {
ExtensionsGuestViewManagerDelegate::OnGuestAdded(guest_web_contents);
// Attaches the task-manager-specific tag for the GuestViews to its
// `guest_web_contents` so that their corresponding tasks show up in the task
// manager.
task_manager::WebContentsTags::CreateForGuestContents(guest_web_contents);
#if BUILDFLAG(IS_CHROMEOS)
// Notifies Kiosk controller about the added guest.
ash::KioskController::Get().OnGuestAdded(guest_web_contents);
#endif
#if BUILDFLAG(ENABLE_GLIC)
// Check if guest belongs to glic and apply specific customizations if so.
glic::OnGuestAdded(guest_web_contents);
#endif
#if BUILDFLAG(ENABLE_CAPTIVE_PORTAL_DETECTION)
// Attach Captive Portal helper to the WebView.
// TODO(crbug.com/40202416): update CaptivePortalTabHelper to handle MPArch
// guest pages.
Profile* profile =
Profile::FromBrowserContext(guest_web_contents->GetBrowserContext());
captive_portal::CaptivePortalTabHelper::CreateForWebContents(
guest_web_contents, CaptivePortalServiceFactory::GetForProfile(profile),
// tab_focus is false, because opening logging page here happens
// without user gesture.
base::BindRepeating(&ChromeSecurityBlockingPageFactory::
OpenLoginPageInAnyTabbedBrowserOrCreateOne,
profile, /*tab_focus=*/false));
#endif
}
// ExtensionsGuestViewManagerDelegate::IsGuestAvailableToContextWithFeature()
// will check for the availability of the feature provided by |guest|. If the
// API feature provided is "controlledFrameInternal", the controlled_frame.cc's
// AvailabilityCheck will be run to verify the associated RenderFrameHost is
// isolated and that it's only exposed in the expected schemes / feature modes.
bool ChromeGuestViewManagerDelegate::IsOwnedByControlledFrameEmbedder(
const guest_view::GuestViewBase* guest) {
return ExtensionsGuestViewManagerDelegate::
IsGuestAvailableToContextWithFeature(guest, "controlledFrameInternal");
}
} // namespace extensions