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 106
|
// Copyright 2014 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/pdf/chrome_pdf_document_helper_client.h"
#include "chrome/browser/download/download_stats.h"
#include "chrome/browser/pdf/pdf_viewer_stream_manager.h"
#include "chrome/browser/screen_ai/screen_ai_install_state.h"
#include "chrome/browser/ui/tab_contents/core_tab_helper.h"
#include "chrome/browser/ui/user_education/browser_user_education_interface.h"
#include "chrome/common/content_restriction.h"
#include "components/pdf/browser/pdf_frame_util.h"
#include "components/user_education/common/feature_promo/feature_promo_controller.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
#include "pdf/pdf_features.h"
namespace {
content::WebContents* GetWebContentsToUse(
content::RenderFrameHost* render_frame_host) {
// If we're viewing the PDF in a MimeHandlerViewGuest, use its embedder
// WebContents.
auto* guest_view =
extensions::MimeHandlerViewGuest::FromRenderFrameHost(render_frame_host);
return guest_view
? guest_view->embedder_web_contents()
: content::WebContents::FromRenderFrameHost(render_frame_host);
}
void MaybeShowFeaturePromo(content::WebContents* contents) {
BrowserUserEducationInterface* user_education_interface =
BrowserUserEducationInterface::MaybeGetForWebContentsInTab(contents);
if (user_education_interface) {
user_education_interface->MaybeShowFeaturePromo(
user_education::FeaturePromoParams(
feature_engagement::kIPHPdfSearchifyFeature));
}
}
} // namespace
ChromePDFDocumentHelperClient::ChromePDFDocumentHelperClient() = default;
ChromePDFDocumentHelperClient::~ChromePDFDocumentHelperClient() = default;
void ChromePDFDocumentHelperClient::UpdateContentRestrictions(
content::RenderFrameHost* render_frame_host,
int content_restrictions) {
// Speculative short-term-fix while we get at the root of
// https://crbug.com/752822 .
content::WebContents* web_contents_to_use =
GetWebContentsToUse(render_frame_host);
if (!web_contents_to_use) {
return;
}
CoreTabHelper* core_tab_helper =
CoreTabHelper::FromWebContents(web_contents_to_use);
// |core_tab_helper| is null for WebViewGuest.
if (core_tab_helper) {
core_tab_helper->UpdateContentRestrictions(content_restrictions);
}
}
void ChromePDFDocumentHelperClient::OnSaveURL(content::WebContents* contents) {
RecordDownloadSource(DOWNLOAD_INITIATED_BY_PDF_SAVE);
}
void ChromePDFDocumentHelperClient::SetPluginCanSave(
content::RenderFrameHost* render_frame_host,
bool can_save) {
if (chrome_pdf::features::IsOopifPdfEnabled()) {
auto* pdf_viewer_stream_manager =
pdf::PdfViewerStreamManager::FromWebContents(
content::WebContents::FromRenderFrameHost(render_frame_host));
if (!pdf_viewer_stream_manager) {
return;
}
content::RenderFrameHost* embedder_host =
pdf_frame_util::GetEmbedderHost(render_frame_host);
CHECK(embedder_host);
pdf_viewer_stream_manager->SetPluginCanSave(embedder_host, can_save);
return;
}
auto* guest_view =
extensions::MimeHandlerViewGuest::FromRenderFrameHost(render_frame_host);
if (guest_view) {
guest_view->SetPluginCanSave(can_save);
}
}
void ChromePDFDocumentHelperClient::OnSearchifyStarted(
content::WebContents* contents) {
// TODO(crbug.com/360803943): Add test.
// Show the promo only when ScreenAI component is available and OCR can be
// done.
if (screen_ai::ScreenAIInstallState::GetInstance()->IsComponentAvailable()) {
MaybeShowFeaturePromo(contents);
}
}
|