1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
// Copyright 2024 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/ui/lens/lens_overlay_side_panel_web_view.h"
#include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser_window/public/browser_window_interface.h"
#include "chrome/browser/ui/lens/lens_overlay_controller.h"
#include "chrome/browser/ui/lens/lens_overlay_event_handler.h"
#include "chrome/browser/ui/lens/lens_overlay_side_panel_coordinator.h"
#include "chrome/common/webui_url_constants.h"
#include "chrome/grit/generated_resources.h"
#include "components/input/native_web_keyboard_event.h"
#include "components/web_modal/web_contents_modal_dialog_manager.h"
#include "content/public/browser/file_select_listener.h"
#include "ui/base/metadata/metadata_impl_macros.h"
using SidePanelWebUIViewT_LensSidePanelUntrustedUI =
SidePanelWebUIViewT<lens::LensSidePanelUntrustedUI>;
BEGIN_TEMPLATE_METADATA(SidePanelWebUIViewT_LensSidePanelUntrustedUI,
SidePanelWebUIViewT)
END_METADATA
namespace {} // namespace
LensOverlaySidePanelWebView::LensOverlaySidePanelWebView(
content::BrowserContext* browser_context,
lens::LensOverlaySidePanelCoordinator* coordinator,
SidePanelEntryScope& scope)
: SidePanelWebUIViewT(
scope,
base::RepeatingClosure(),
base::RepeatingClosure(),
std::make_unique<
WebUIContentsWrapperT<lens::LensSidePanelUntrustedUI>>(
GURL(chrome::kChromeUILensUntrustedSidePanelAPIURL),
Profile::FromBrowserContext(browser_context),
/*task_manager_string_id=*/IDS_SIDE_PANEL_COMPANION_TITLE,
/*esc_closes_ui=*/false)),
coordinator_(coordinator) {
CHECK(coordinator);
// Register the modal dialog manager for this side panel web contents so
// browser dialogs can open when requested by the side panel WebUI.
web_modal::WebContentsModalDialogManager::CreateForWebContents(
GetWebContents());
web_modal::WebContentsModalDialogManager::FromWebContents(GetWebContents())
->SetDelegate(coordinator);
}
LensOverlaySidePanelWebView::~LensOverlaySidePanelWebView() {
if (coordinator_) {
coordinator_->WebViewClosing();
ClearCoordinator();
}
}
void LensOverlaySidePanelWebView::ClearCoordinator() {
web_modal::WebContentsModalDialogManager::FromWebContents(GetWebContents())
->SetDelegate(nullptr);
coordinator_ = nullptr;
}
bool LensOverlaySidePanelWebView::HandleContextMenu(
content::RenderFrameHost& render_frame_host,
const content::ContextMenuParams& params) {
return false;
}
content::WebContents* LensOverlaySidePanelWebView::OpenURLFromTab(
content::WebContents* source,
const content::OpenURLParams& params,
base::OnceCallback<void(content::NavigationHandle&)>
navigation_handle_callback) {
coordinator_->GetLensSearchController()
->GetTabInterface()
->GetBrowserWindowInterface()
->OpenURL(params, std::move(navigation_handle_callback));
return nullptr;
}
bool LensOverlaySidePanelWebView::HandleKeyboardEvent(
content::WebContents* source,
const input::NativeWebKeyboardEvent& event) {
if (!coordinator_) {
return false;
}
return coordinator_->GetLensSearchController()
->lens_overlay_event_handler()
->HandleKeyboardEvent(source, event, GetFocusManager());
}
void LensOverlaySidePanelWebView::RequestMediaAccessPermission(
content::WebContents* web_contents,
const content::MediaStreamRequest& request,
content::MediaResponseCallback callback) {
// Note: This is needed for taking screenshots via the feedback form on the
// side panel.
MediaCaptureDevicesDispatcher::GetInstance()->ProcessMediaAccessRequest(
web_contents, request, std::move(callback), /*extension=*/nullptr);
}
BEGIN_METADATA(LensOverlaySidePanelWebView)
END_METADATA
|