15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/pdf/pdf_unsupported_feature.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/version.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/lifetime/application_lifetime.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/plugins/chrome_plugin_service_filter.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/plugins/plugin_finder.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/plugins/plugin_metadata.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/plugins/plugin_prefs.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/renderer_preferences_util.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/tab_contents/tab_util.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/pdf/open_pdf_in_reader_prompt_delegate.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/pdf/pdf_tab_helper.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_content_client.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/interstitial_page.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/interstitial_page_delegate.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_details.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_entry.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/plugin_service.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_process_host.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/user_metrics.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_transition_types.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/browser_resources.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources.h"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image.h"
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/webui/jstemplate_builder.h"
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/metro.h"
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::InterstitialPage;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::OpenURLParams;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::PluginService;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::Referrer;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::UserMetricsAction;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents;
53ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing content::WebPluginInfo;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char kAdobeReaderIdentifier[] = "adobe-reader";
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char kAdobeReaderUpdateUrl[] =
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "http://www.adobe.com/go/getreader_chrome";
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The prompt delegate used to ask the user if they want to use Adobe Reader
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// by default.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PDFEnableAdobeReaderPromptDelegate
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public OpenPDFInReaderPromptDelegate {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit PDFEnableAdobeReaderPromptDelegate(Profile* profile);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~PDFEnableAdobeReaderPromptDelegate();
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OpenPDFInReaderPromptDelegate
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetMessageText() const OVERRIDE;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetAcceptButtonText() const OVERRIDE;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetCancelButtonText() const OVERRIDE;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ShouldExpire(
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::LoadCommittedDetails& details) const OVERRIDE;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Accept() OVERRIDE;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Cancel() OVERRIDE;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnYes();
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnNo();
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_IMPLICIT_CONSTRUCTORS(PDFEnableAdobeReaderPromptDelegate);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PDFEnableAdobeReaderPromptDelegate::PDFEnableAdobeReaderPromptDelegate(
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Profile* profile)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : profile_(profile) {
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("PDF_EnableReaderInfoBarShown"));
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PDFEnableAdobeReaderPromptDelegate::~PDFEnableAdobeReaderPromptDelegate() {
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool PDFEnableAdobeReaderPromptDelegate::ShouldExpire(
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const content::LoadCommittedDetails& details) const {
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::PageTransition transition =
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::PageTransitionStripQualifier(details.entry->GetTransitionType());
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We don't want to expire on a reload, because that is how we open the PDF in
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Reader.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return !details.is_in_page && transition != content::PAGE_TRANSITION_RELOAD;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PDFEnableAdobeReaderPromptDelegate::Accept() {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("PDF_EnableReaderInfoBarOK"));
1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(profile_).get();
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  plugin_prefs->EnablePluginGroup(
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      true, ASCIIToUTF16(PluginMetadata::kAdobeReaderGroupName));
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  plugin_prefs->EnablePluginGroup(
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      false, ASCIIToUTF16(chrome::ChromeContentClient::kPDFPluginName));
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PDFEnableAdobeReaderPromptDelegate::Cancel() {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("PDF_EnableReaderInfoBarCancel"));
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 PDFEnableAdobeReaderPromptDelegate::GetAcceptButtonText() const {
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_PDF_INFOBAR_ALWAYS_USE_READER_BUTTON);
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 PDFEnableAdobeReaderPromptDelegate::GetCancelButtonText() const {
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_DONE);
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 PDFEnableAdobeReaderPromptDelegate::GetMessageText() const {
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_PDF_INFOBAR_QUESTION_ALWAYS_USE_READER);
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Launch the url to get the latest Adbobe Reader installer.
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void OpenReaderUpdateURL(WebContents* web_contents) {
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OpenURLParams params(
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL(kAdobeReaderUpdateUrl), Referrer(), NEW_FOREGROUND_TAB,
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::PAGE_TRANSITION_LINK, false);
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_contents->OpenURL(params);
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Opens the PDF using Adobe Reader.
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OpenUsingReader(WebContents* web_contents,
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     const WebPluginInfo& reader_plugin,
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     OpenPDFInReaderPromptDelegate* delegate) {
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ChromePluginServiceFilter::GetInstance()->OverridePluginForTab(
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_contents->GetRenderProcessHost()->GetID(),
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_contents->GetRenderViewHost()->GetRoutingID(),
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_contents->GetURL(),
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reader_plugin);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_contents->GetRenderViewHost()->ReloadFrame();
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PDFTabHelper* pdf_tab_helper = PDFTabHelper::FromWebContents(web_contents);
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (delegate)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    pdf_tab_helper->ShowOpenInReaderPrompt(make_scoped_ptr(delegate));
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An interstitial to be used when the user chooses to open a PDF using Adobe
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Reader, but it is out of date.
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PDFUnsupportedFeatureInterstitial
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public content::InterstitialPageDelegate {
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PDFUnsupportedFeatureInterstitial(
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      WebContents* web_contents,
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const WebPluginInfo& reader_webplugininfo)
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      : web_contents_(web_contents),
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        reader_webplugininfo_(reader_webplugininfo) {
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(UserMetricsAction("PDF_ReaderInterstitialShown"));
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    interstitial_page_ = InterstitialPage::Create(
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        web_contents, false, web_contents->GetURL(), this);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    interstitial_page_->Show();
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // InterstitialPageDelegate implementation.
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::string GetHTMLContents() OVERRIDE {
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DictionaryValue strings;
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    strings.SetString(
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "title",
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringUTF16(IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_TITLE));
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    strings.SetString(
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "headLine",
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringUTF16(IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_BODY));
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    strings.SetString(
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "update",
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringUTF16(IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_UPDATE));
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    strings.SetString(
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "open_with_reader",
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringUTF16(
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_PROCEED));
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    strings.SetString(
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "ok",
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringUTF16(IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_OK));
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    strings.SetString(
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "cancel",
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringUTF16(IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_CANCEL));
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::StringPiece html(ResourceBundle::GetSharedInstance().
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           GetRawDataResource(IDR_READER_OUT_OF_DATE_HTML));
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return webui::GetI18nTemplateHtml(html, &strings);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void CommandReceived(const std::string& command) OVERRIDE {
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (command == "0") {
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::RecordAction(
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          UserMetricsAction("PDF_ReaderInterstitialCancel"));
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      interstitial_page_->DontProceed();
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (command == "1") {
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::RecordAction(
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          UserMetricsAction("PDF_ReaderInterstitialUpdate"));
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      OpenReaderUpdateURL(web_contents_);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else if (command == "2") {
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::RecordAction(
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          UserMetricsAction("PDF_ReaderInterstitialIgnore"));
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Pretend that the plug-in is up-to-date so that we don't block it.
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reader_webplugininfo_.version = ASCIIToUTF16("11.0.0.0");
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      OpenUsingReader(web_contents_, reader_webplugininfo_, NULL);
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NOTREACHED();
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    interstitial_page_->Proceed();
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OverrideRendererPrefs(
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::RendererPreferences* prefs) OVERRIDE {
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Profile* profile =
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        Profile::FromBrowserContext(web_contents_->GetBrowserContext());
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    renderer_preferences_util::UpdateFromSystemSettings(prefs, profile);
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebContents* web_contents_;
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebPluginInfo reader_webplugininfo_;
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  InterstitialPage* interstitial_page_;  // Owns us.
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PDFUnsupportedFeatureInterstitial);
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The delegate for the bubble used to inform the user that we don't support a
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// feature in the PDF.
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PDFUnsupportedFeaturePromptDelegate
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public OpenPDFInReaderPromptDelegate {
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |reader| is NULL if Adobe Reader isn't installed.
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PDFUnsupportedFeaturePromptDelegate(WebContents* web_contents,
246ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                                      const content::WebPluginInfo* reader,
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      PluginFinder* plugin_finder);
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~PDFUnsupportedFeaturePromptDelegate();
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OpenPDFInReaderPromptDelegate:
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetMessageText() const OVERRIDE;
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetAcceptButtonText() const OVERRIDE;
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetCancelButtonText() const OVERRIDE;
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ShouldExpire(
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::LoadCommittedDetails& details) const OVERRIDE;
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Accept() OVERRIDE;
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Cancel() OVERRIDE;
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebContents* web_contents_;
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool reader_installed_;
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool reader_vulnerable_;
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebPluginInfo reader_webplugininfo_;
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_IMPLICIT_CONSTRUCTORS(PDFUnsupportedFeaturePromptDelegate);
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PDFUnsupportedFeaturePromptDelegate::PDFUnsupportedFeaturePromptDelegate(
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    WebContents* web_contents,
270ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    const content::WebPluginInfo* reader,
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PluginFinder* plugin_finder)
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : web_contents_(web_contents),
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reader_installed_(!!reader),
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reader_vulnerable_(false) {
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!reader_installed_) {
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        UserMetricsAction("PDF_InstallReaderInfoBarShown"));
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("PDF_UseReaderInfoBarShown"));
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  reader_webplugininfo_ = *reader;
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_PLUGIN_INSTALLATION)
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<PluginMetadata> plugin_metadata(
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      plugin_finder->GetPluginMetadata(reader_webplugininfo_));
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  reader_vulnerable_ = plugin_metadata->GetSecurityStatus(*reader) !=
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       PluginMetadata::SECURITY_STATUS_UP_TO_DATE;
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED();
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PDFUnsupportedFeaturePromptDelegate::~PDFUnsupportedFeaturePromptDelegate() {
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 PDFUnsupportedFeaturePromptDelegate::GetMessageText() const {
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_PDF_BUBBLE_MESSAGE);
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 PDFUnsupportedFeaturePromptDelegate::GetAcceptButtonText() const {
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (base::win::IsMetroProcess())
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(IDS_PDF_BUBBLE_METRO_MODE_LINK);
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (reader_installed_)
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(IDS_PDF_BUBBLE_OPEN_IN_READER_LINK);
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_PDF_BUBBLE_INSTALL_READER_LINK);
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 PDFUnsupportedFeaturePromptDelegate::GetCancelButtonText() const {
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_DONE);
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool PDFUnsupportedFeaturePromptDelegate::ShouldExpire(
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const content::LoadCommittedDetails& details) const {
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return !details.is_in_page;
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PDFUnsupportedFeaturePromptDelegate::Accept() {
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (base::win::IsMetroProcess()) {
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    chrome::AttemptRestartWithModeSwitch();
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!reader_installed_) {
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(UserMetricsAction("PDF_InstallReaderInfoBarOK"));
3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    OpenReaderUpdateURL(web_contents_);
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("PDF_UseReaderInfoBarOK"));
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (reader_vulnerable_) {
3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    new PDFUnsupportedFeatureInterstitial(web_contents_, reader_webplugininfo_);
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Profile* profile =
3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      Profile::FromBrowserContext(web_contents_->GetBrowserContext());
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OpenPDFInReaderPromptDelegate* delegate =
3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      new PDFEnableAdobeReaderPromptDelegate(profile);
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  OpenUsingReader(web_contents_, reader_webplugininfo_, delegate);
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PDFUnsupportedFeaturePromptDelegate::Cancel() {
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(reader_installed_ ?
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        UserMetricsAction("PDF_UseReaderInfoBarCancel") :
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        UserMetricsAction("PDF_InstallReaderInfoBarCancel"));
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) && defined(ENABLE_PLUGIN_INSTALLATION)
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GotPluginsCallback(int process_id,
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        int routing_id,
361ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                        const std::vector<content::WebPluginInfo>& plugins) {
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebContents* web_contents =
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      tab_util::GetWebContentsByID(process_id, routing_id);
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!web_contents)
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
367ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  const content::WebPluginInfo* reader = NULL;
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PluginFinder* plugin_finder = PluginFinder::GetInstance();
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < plugins.size(); ++i) {
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<PluginMetadata> plugin_metadata(
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        plugin_finder->GetPluginMetadata(plugins[i]));
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (plugin_metadata->identifier() != kAdobeReaderIdentifier)
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      continue;
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK(!reader);
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    reader = &plugins[i];
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // If the Reader plugin is disabled by policy, don't prompt them.
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Profile* profile =
3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        Profile::FromBrowserContext(web_contents->GetBrowserContext());
3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(profile);
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (plugin_prefs->PolicyStatusForPlugin(plugin_metadata->name()) ==
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        PluginPrefs::POLICY_DISABLED) {
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    break;
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<OpenPDFInReaderPromptDelegate> prompt(
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      new PDFUnsupportedFeaturePromptDelegate(
3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          web_contents, reader, plugin_finder));
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PDFTabHelper* pdf_tab_helper = PDFTabHelper::FromWebContents(web_contents);
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pdf_tab_helper->ShowOpenInReaderPrompt(prompt.Pass());
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_WIN) && defined(ENABLE_PLUGIN_INSTALLATION)
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PDFHasUnsupportedFeature(content::WebContents* web_contents) {
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) && defined(ENABLE_PLUGIN_INSTALLATION)
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Only works for Windows for now.  For Mac, we'll have to launch the file
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // externally since Adobe Reader doesn't work inside Chrome.
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PluginService::GetInstance()->GetPlugins(base::Bind(&GotPluginsCallback,
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_contents->GetRenderProcessHost()->GetID(),
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_contents->GetRenderViewHost()->GetRoutingID()));
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
407