| // Copyright 2021 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/plugins/plugin_observer_android.h" |
| |
| #include <utility> |
| |
| #include "chrome/browser/plugins/plugin_observer_common.h" |
| #include "content/public/browser/render_frame_host.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/common/referrer.h" |
| |
| void PluginObserverAndroid::BindPluginHost( |
| mojo::PendingAssociatedReceiver<chrome::mojom::PluginHost> receiver, |
| content::RenderFrameHost* rfh) { |
| auto* web_contents = content::WebContents::FromRenderFrameHost(rfh); |
| if (!web_contents) |
| return; |
| auto* plugin_helper = PluginObserverAndroid::FromWebContents(web_contents); |
| if (!plugin_helper) |
| return; |
| plugin_helper->plugin_host_receivers_.Bind(rfh, std::move(receiver)); |
| } |
| |
| PluginObserverAndroid::PluginObserverAndroid(content::WebContents* web_contents) |
| : content::WebContentsUserData<PluginObserverAndroid>(*web_contents), |
| plugin_host_receivers_(web_contents, this) {} |
| |
| PluginObserverAndroid::~PluginObserverAndroid() = default; |
| |
| void PluginObserverAndroid::OpenPDF(const GURL& url) { |
| content::RenderFrameHost* render_frame_host = |
| plugin_host_receivers_.GetCurrentTargetFrame(); |
| |
| content::Referrer referrer; |
| if (!CanOpenPdfUrl(render_frame_host, url, |
| GetWebContents().GetLastCommittedURL(), &referrer)) { |
| return; |
| } |
| |
| content::OpenURLParams open_url_params( |
| url, referrer, WindowOpenDisposition::CURRENT_TAB, |
| ui::PAGE_TRANSITION_AUTO_BOOKMARK, false); |
| // On Android, PDFs downloaded with a user gesture are auto-opened. |
| open_url_params.user_gesture = true; |
| GetWebContents().OpenURL(open_url_params, /*navigation_handle_callback=*/{}); |
| } |
| |
| WEB_CONTENTS_USER_DATA_KEY_IMPL(PluginObserverAndroid); |