12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- // Copyright 2020 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.
- #include "weblayer/browser/popup_navigation_delegate_impl.h"
- #include "base/callback_helpers.h"
- #include "build/build_config.h"
- #include "components/infobars/content/content_infobar_manager.h"
- #include "content/public/browser/web_contents.h"
- #include "weblayer/browser/host_content_settings_map_factory.h"
- #if BUILDFLAG(IS_ANDROID)
- #include "components/blocked_content/android/popup_blocked_infobar_delegate.h"
- #endif
- namespace weblayer {
- PopupNavigationDelegateImpl::PopupNavigationDelegateImpl(
- const content::OpenURLParams& params,
- content::WebContents* source_contents,
- content::RenderFrameHost* opener)
- : params_(params),
- source_contents_(source_contents),
- opener_(opener),
- original_user_gesture_(params_.user_gesture) {}
- content::RenderFrameHost* PopupNavigationDelegateImpl::GetOpener() {
- return opener_;
- }
- bool PopupNavigationDelegateImpl::GetOriginalUserGesture() {
- return original_user_gesture_;
- }
- const GURL& PopupNavigationDelegateImpl::GetURL() {
- return params_.url;
- }
- blocked_content::PopupNavigationDelegate::NavigateResult
- PopupNavigationDelegateImpl::NavigateWithGesture(
- const blink::mojom::WindowFeatures& window_features,
- absl::optional<WindowOpenDisposition> updated_disposition) {
- // It's safe to mutate |params_| here because NavigateWithGesture() will only
- // be called once, and the user gesture value has already been saved in
- // |original_user_gesture_|.
- params_.user_gesture = true;
- if (updated_disposition)
- params_.disposition = updated_disposition.value();
- content::WebContents* new_contents = source_contents_->OpenURL(params_);
- return NavigateResult{
- new_contents,
- params_.disposition,
- };
- }
- void PopupNavigationDelegateImpl::OnPopupBlocked(
- content::WebContents* web_contents,
- int total_popups_blocked_on_page) {
- #if BUILDFLAG(IS_ANDROID)
- blocked_content::PopupBlockedInfoBarDelegate::Create(
- infobars::ContentInfoBarManager::FromWebContents(web_contents),
- total_popups_blocked_on_page,
- HostContentSettingsMapFactory::GetForBrowserContext(
- web_contents->GetBrowserContext()),
- base::NullCallback());
- #endif
- }
- } // namespace weblayer
|