| Index: chrome/browser/ui/pdf/pdf_unsupported_feature.cc
|
| diff --git a/chrome/browser/ui/pdf/pdf_unsupported_feature.cc b/chrome/browser/ui/pdf/pdf_unsupported_feature.cc
|
| deleted file mode 100644
|
| index 52a428e0f5466f0e4a357af2831d6ab0e095da8e..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/pdf/pdf_unsupported_feature.cc
|
| +++ /dev/null
|
| @@ -1,366 +0,0 @@
|
| -// Copyright (c) 2012 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 "chrome/browser/ui/pdf/pdf_unsupported_feature.h"
|
| -
|
| -#include <memory>
|
| -#include <utility>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/macros.h"
|
| -#include "base/memory/ptr_util.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "build/build_config.h"
|
| -#include "chrome/browser/lifetime/application_lifetime.h"
|
| -#include "chrome/browser/plugins/chrome_plugin_service_filter.h"
|
| -#include "chrome/browser/plugins/plugin_metadata.h"
|
| -#include "chrome/browser/plugins/plugin_prefs.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/renderer_preferences_util.h"
|
| -#include "chrome/browser/tab_contents/tab_util.h"
|
| -#include "chrome/common/chrome_content_client.h"
|
| -#include "chrome/grit/browser_resources.h"
|
| -#include "chrome/grit/generated_resources.h"
|
| -#include "components/pdf/browser/open_pdf_in_reader_prompt_client.h"
|
| -#include "components/pdf/browser/pdf_web_contents_helper.h"
|
| -#include "components/strings/grit/components_strings.h"
|
| -#include "content/public/browser/interstitial_page.h"
|
| -#include "content/public/browser/interstitial_page_delegate.h"
|
| -#include "content/public/browser/navigation_details.h"
|
| -#include "content/public/browser/navigation_entry.h"
|
| -#include "content/public/browser/page_navigator.h"
|
| -#include "content/public/browser/render_frame_host.h"
|
| -#include "content/public/browser/render_process_host.h"
|
| -#include "content/public/browser/render_view_host.h"
|
| -#include "content/public/browser/user_metrics.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "content/public/common/renderer_preferences.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -#include "ui/base/resource/resource_bundle.h"
|
| -#include "ui/base/webui/jstemplate_builder.h"
|
| -
|
| -#if defined(OS_WIN)
|
| -#include "chrome/browser/ui/pdf/adobe_reader_info_win.h"
|
| -#endif
|
| -
|
| -using base::UserMetricsAction;
|
| -using content::InterstitialPage;
|
| -using content::OpenURLParams;
|
| -using content::Referrer;
|
| -using content::WebContents;
|
| -using content::WebPluginInfo;
|
| -
|
| -#if defined(OS_WIN)
|
| -namespace {
|
| -
|
| -const char kAdobeReaderUpdateUrl[] = "http://www.adobe.com/go/getreader_chrome";
|
| -
|
| -// The prompt delegate used to ask the user if they want to use Adobe Reader
|
| -// by default.
|
| -class PDFEnableAdobeReaderPromptClient
|
| - : public pdf::OpenPDFInReaderPromptClient {
|
| - public:
|
| - explicit PDFEnableAdobeReaderPromptClient(Profile* profile);
|
| - ~PDFEnableAdobeReaderPromptClient() override;
|
| -
|
| - // pdf::OpenPDFInReaderPromptClient
|
| - base::string16 GetMessageText() const override;
|
| - base::string16 GetAcceptButtonText() const override;
|
| - base::string16 GetCancelButtonText() const override;
|
| - bool ShouldExpire(
|
| - const content::LoadCommittedDetails& details) const override;
|
| - void Accept() override;
|
| - void Cancel() override;
|
| -
|
| - private:
|
| - void OnYes();
|
| - void OnNo();
|
| -
|
| - Profile* profile_;
|
| -
|
| - DISALLOW_IMPLICIT_CONSTRUCTORS(PDFEnableAdobeReaderPromptClient);
|
| -};
|
| -
|
| -PDFEnableAdobeReaderPromptClient::PDFEnableAdobeReaderPromptClient(
|
| - Profile* profile)
|
| - : profile_(profile) {
|
| - content::RecordAction(UserMetricsAction("PDF_EnableReaderInfoBarShown"));
|
| -}
|
| -
|
| -PDFEnableAdobeReaderPromptClient::~PDFEnableAdobeReaderPromptClient() {
|
| -}
|
| -
|
| -bool PDFEnableAdobeReaderPromptClient::ShouldExpire(
|
| - const content::LoadCommittedDetails& details) const {
|
| - ui::PageTransition transition =
|
| - ui::PageTransitionStripQualifier(details.entry->GetTransitionType());
|
| - // We don't want to expire on a reload, because that is how we open the PDF in
|
| - // Reader.
|
| - return !details.is_in_page &&
|
| - !ui::PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_RELOAD);
|
| -}
|
| -
|
| -void PDFEnableAdobeReaderPromptClient::Accept() {
|
| - content::RecordAction(UserMetricsAction("PDF_EnableReaderInfoBarOK"));
|
| - PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(profile_).get();
|
| - plugin_prefs->EnablePluginGroup(
|
| - true, base::ASCIIToUTF16(PluginMetadata::kAdobeReaderGroupName));
|
| - plugin_prefs->EnablePluginGroup(
|
| - false, base::ASCIIToUTF16(ChromeContentClient::kPDFPluginName));
|
| -}
|
| -
|
| -void PDFEnableAdobeReaderPromptClient::Cancel() {
|
| - content::RecordAction(UserMetricsAction("PDF_EnableReaderInfoBarCancel"));
|
| -}
|
| -
|
| -base::string16 PDFEnableAdobeReaderPromptClient::GetAcceptButtonText() const {
|
| - return l10n_util::GetStringUTF16(IDS_PDF_INFOBAR_ALWAYS_USE_READER_BUTTON);
|
| -}
|
| -
|
| -base::string16 PDFEnableAdobeReaderPromptClient::GetCancelButtonText() const {
|
| - return l10n_util::GetStringUTF16(IDS_DONE);
|
| -}
|
| -
|
| -base::string16 PDFEnableAdobeReaderPromptClient::GetMessageText() const {
|
| - return l10n_util::GetStringUTF16(IDS_PDF_INFOBAR_QUESTION_ALWAYS_USE_READER);
|
| -}
|
| -
|
| -// Launch the url to get the latest Adbobe Reader installer.
|
| -void OpenReaderUpdateURL(WebContents* web_contents) {
|
| - OpenURLParams params(GURL(kAdobeReaderUpdateUrl), Referrer(),
|
| - WindowOpenDisposition::NEW_FOREGROUND_TAB,
|
| - ui::PAGE_TRANSITION_LINK, false);
|
| - web_contents->OpenURL(params);
|
| -}
|
| -
|
| -// Opens the PDF using Adobe Reader.
|
| -void OpenUsingReader(WebContents* web_contents,
|
| - const WebPluginInfo& reader_plugin,
|
| - pdf::OpenPDFInReaderPromptClient* client) {
|
| - ChromePluginServiceFilter::GetInstance()->OverridePluginForFrame(
|
| - web_contents->GetRenderProcessHost()->GetID(),
|
| - web_contents->GetMainFrame()->GetRoutingID(),
|
| - web_contents->GetURL(),
|
| - reader_plugin);
|
| - web_contents->ReloadFocusedFrame(false);
|
| -
|
| - pdf::PDFWebContentsHelper* pdf_tab_helper =
|
| - pdf::PDFWebContentsHelper::FromWebContents(web_contents);
|
| - if (client)
|
| - pdf_tab_helper->ShowOpenInReaderPrompt(base::WrapUnique(client));
|
| -}
|
| -
|
| -// An interstitial to be used when the user chooses to open a PDF using Adobe
|
| -// Reader, but it is out of date.
|
| -class PDFUnsupportedFeatureInterstitial
|
| - : public content::InterstitialPageDelegate {
|
| - public:
|
| - PDFUnsupportedFeatureInterstitial(
|
| - WebContents* web_contents,
|
| - const WebPluginInfo& reader_webplugininfo)
|
| - : web_contents_(web_contents),
|
| - reader_webplugininfo_(reader_webplugininfo) {
|
| - content::RecordAction(UserMetricsAction("PDF_ReaderInterstitialShown"));
|
| - interstitial_page_ = InterstitialPage::Create(
|
| - web_contents, false, web_contents->GetURL(), this);
|
| - interstitial_page_->Show();
|
| - }
|
| -
|
| - protected:
|
| - // InterstitialPageDelegate implementation.
|
| - std::string GetHTMLContents() override {
|
| - base::DictionaryValue strings;
|
| - strings.SetString(
|
| - "title",
|
| - l10n_util::GetStringUTF16(IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_TITLE));
|
| - strings.SetString(
|
| - "headLine",
|
| - l10n_util::GetStringUTF16(IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_BODY));
|
| - strings.SetString(
|
| - "update",
|
| - l10n_util::GetStringUTF16(IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_UPDATE));
|
| - strings.SetString(
|
| - "open_with_reader",
|
| - l10n_util::GetStringUTF16(
|
| - IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_PROCEED));
|
| - strings.SetString(
|
| - "ok",
|
| - l10n_util::GetStringUTF16(IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_OK));
|
| - strings.SetString(
|
| - "cancel",
|
| - l10n_util::GetStringUTF16(IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_CANCEL));
|
| -
|
| - base::StringPiece html(ResourceBundle::GetSharedInstance().
|
| - GetRawDataResource(IDR_READER_OUT_OF_DATE_HTML));
|
| -
|
| - return webui::GetI18nTemplateHtml(html, &strings);
|
| - }
|
| -
|
| - void CommandReceived(const std::string& command) override {
|
| - if (command == "0") {
|
| - content::RecordAction(
|
| - UserMetricsAction("PDF_ReaderInterstitialCancel"));
|
| - interstitial_page_->DontProceed();
|
| - return;
|
| - }
|
| -
|
| - if (command == "1") {
|
| - content::RecordAction(
|
| - UserMetricsAction("PDF_ReaderInterstitialUpdate"));
|
| - OpenReaderUpdateURL(web_contents_);
|
| - } else if (command == "2") {
|
| - content::RecordAction(
|
| - UserMetricsAction("PDF_ReaderInterstitialIgnore"));
|
| - // Pretend that the plugin is up to date so that we don't block it.
|
| - reader_webplugininfo_.version = base::ASCIIToUTF16("11.0.0.0");
|
| - OpenUsingReader(web_contents_, reader_webplugininfo_, NULL);
|
| - } else {
|
| - NOTREACHED();
|
| - }
|
| - interstitial_page_->Proceed();
|
| - }
|
| -
|
| - void OverrideRendererPrefs(content::RendererPreferences* prefs) override {
|
| - Profile* profile =
|
| - Profile::FromBrowserContext(web_contents_->GetBrowserContext());
|
| - renderer_preferences_util::UpdateFromSystemSettings(
|
| - prefs, profile, web_contents_);
|
| - }
|
| -
|
| - private:
|
| - WebContents* web_contents_;
|
| - WebPluginInfo reader_webplugininfo_;
|
| - InterstitialPage* interstitial_page_; // Owns us.
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(PDFUnsupportedFeatureInterstitial);
|
| -};
|
| -
|
| -// The delegate for the bubble used to inform the user that we don't support a
|
| -// feature in the PDF.
|
| -class PDFUnsupportedFeaturePromptClient
|
| - : public pdf::OpenPDFInReaderPromptClient {
|
| - public:
|
| - PDFUnsupportedFeaturePromptClient(WebContents* web_contents,
|
| - const AdobeReaderPluginInfo& reader_info);
|
| - ~PDFUnsupportedFeaturePromptClient() override;
|
| -
|
| - // pdf::OpenPDFInReaderPromptClient:
|
| - base::string16 GetMessageText() const override;
|
| - base::string16 GetAcceptButtonText() const override;
|
| - base::string16 GetCancelButtonText() const override;
|
| - bool ShouldExpire(
|
| - const content::LoadCommittedDetails& details) const override;
|
| - void Accept() override;
|
| - void Cancel() override;
|
| -
|
| - private:
|
| - WebContents* web_contents_;
|
| - const AdobeReaderPluginInfo reader_info_;
|
| -
|
| - DISALLOW_IMPLICIT_CONSTRUCTORS(PDFUnsupportedFeaturePromptClient);
|
| -};
|
| -
|
| -PDFUnsupportedFeaturePromptClient::PDFUnsupportedFeaturePromptClient(
|
| - WebContents* web_contents,
|
| - const AdobeReaderPluginInfo& reader_info)
|
| - : web_contents_(web_contents), reader_info_(reader_info) {
|
| - content::RecordAction(reader_info_.is_installed ?
|
| - UserMetricsAction("PDF_UseReaderInfoBarShown") :
|
| - UserMetricsAction("PDF_InstallReaderInfoBarShown"));
|
| -}
|
| -
|
| -PDFUnsupportedFeaturePromptClient::~PDFUnsupportedFeaturePromptClient() {
|
| -}
|
| -
|
| -base::string16 PDFUnsupportedFeaturePromptClient::GetMessageText() const {
|
| - return l10n_util::GetStringUTF16(IDS_PDF_BUBBLE_MESSAGE);
|
| -}
|
| -
|
| -base::string16 PDFUnsupportedFeaturePromptClient::GetAcceptButtonText() const {
|
| - return l10n_util::GetStringUTF16(
|
| - reader_info_.is_installed ? IDS_PDF_BUBBLE_OPEN_IN_READER_LINK
|
| - : IDS_PDF_BUBBLE_INSTALL_READER_LINK);
|
| -}
|
| -
|
| -base::string16 PDFUnsupportedFeaturePromptClient::GetCancelButtonText() const {
|
| - return l10n_util::GetStringUTF16(IDS_DONE);
|
| -}
|
| -
|
| -bool PDFUnsupportedFeaturePromptClient::ShouldExpire(
|
| - const content::LoadCommittedDetails& details) const {
|
| - return !details.is_in_page;
|
| -}
|
| -
|
| -void PDFUnsupportedFeaturePromptClient::Accept() {
|
| - if (!reader_info_.is_installed) {
|
| - content::RecordAction(UserMetricsAction("PDF_InstallReaderInfoBarOK"));
|
| - OpenReaderUpdateURL(web_contents_);
|
| - return;
|
| - }
|
| -
|
| - content::RecordAction(UserMetricsAction("PDF_UseReaderInfoBarOK"));
|
| -
|
| - if (!reader_info_.is_secure) {
|
| - new PDFUnsupportedFeatureInterstitial(web_contents_,
|
| - reader_info_.plugin_info);
|
| - return;
|
| - }
|
| -
|
| - Profile* profile =
|
| - Profile::FromBrowserContext(web_contents_->GetBrowserContext());
|
| - pdf::OpenPDFInReaderPromptClient* client =
|
| - new PDFEnableAdobeReaderPromptClient(profile);
|
| -
|
| - OpenUsingReader(web_contents_, reader_info_.plugin_info, client);
|
| -}
|
| -
|
| -void PDFUnsupportedFeaturePromptClient::Cancel() {
|
| - content::RecordAction(reader_info_.is_installed ?
|
| - UserMetricsAction("PDF_UseReaderInfoBarCancel") :
|
| - UserMetricsAction("PDF_InstallReaderInfoBarCancel"));
|
| -}
|
| -
|
| -void MaybeShowOpenPDFInReaderPrompt(WebContents* web_contents,
|
| - const AdobeReaderPluginInfo& reader_info) {
|
| - // If the Reader plugin is disabled by policy, don't prompt them.
|
| - if (!reader_info.is_installed || !reader_info.is_enabled)
|
| - return;
|
| -
|
| - std::unique_ptr<pdf::OpenPDFInReaderPromptClient> prompt(
|
| - new PDFUnsupportedFeaturePromptClient(web_contents, reader_info));
|
| - pdf::PDFWebContentsHelper* pdf_tab_helper =
|
| - pdf::PDFWebContentsHelper::FromWebContents(web_contents);
|
| - pdf_tab_helper->ShowOpenInReaderPrompt(std::move(prompt));
|
| -}
|
| -
|
| -void GotPluginsCallback(int process_id,
|
| - int routing_id,
|
| - const AdobeReaderPluginInfo& reader_info) {
|
| - WebContents* web_contents =
|
| - tab_util::GetWebContentsByID(process_id, routing_id);
|
| - if (web_contents)
|
| - MaybeShowOpenPDFInReaderPrompt(web_contents, reader_info);
|
| -}
|
| -
|
| -} // namespace
|
| -#endif // defined(OS_WIN)
|
| -
|
| -void PDFHasUnsupportedFeature(WebContents* web_contents) {
|
| -#if defined(OS_WIN)
|
| - // Only works for Windows for now. For Mac, we'll have to launch the file
|
| - // externally since Adobe Reader doesn't work inside Chrome.
|
| - Profile* profile =
|
| - Profile::FromBrowserContext(web_contents->GetBrowserContext());
|
| - AdobeReaderPluginInfo reader_info;
|
| - if (GetAdobeReaderPluginInfo(profile, &reader_info)) {
|
| - MaybeShowOpenPDFInReaderPrompt(web_contents, reader_info);
|
| - return;
|
| - }
|
| - GetAdobeReaderPluginInfoAsync(
|
| - profile,
|
| - base::Bind(&GotPluginsCallback,
|
| - web_contents->GetRenderProcessHost()->GetID(),
|
| - web_contents->GetRenderViewHost()->GetRoutingID()));
|
| -#endif // defined(OS_WIN)
|
| -}
|
|
|