blob: 01a917647cdb4b4967fd7b7a139cd44fc52c9c55 [file] [log] [blame]
// 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 "build/build_config.h"
#include "content/public/browser/web_contents.h"
#include "weblayer/browser/host_content_settings_map_factory.h"
#include "weblayer/browser/infobar_service.h"
#if defined(OS_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,
base::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 defined(OS_ANDROID)
blocked_content::PopupBlockedInfoBarDelegate::Create(
InfoBarService::FromWebContents(web_contents),
total_popups_blocked_on_page,
HostContentSettingsMapFactory::GetForBrowserContext(
web_contents->GetBrowserContext()),
base::NullCallback());
#endif
}
} // namespace weblayer