pdf_unsupported_feature.cc revision e5d81f57cb97b3b6b7fccc9c5610d21eb81db09d
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"
30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "content/public/browser/render_frame_host.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_process_host.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/user_metrics.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_transition_types.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/browser_resources.h"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources.h"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h"
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/base/webui/jstemplate_builder.h"
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image.h"
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/metro.h"
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::UserMetricsAction;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::InterstitialPage;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::OpenURLParams;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::PluginService;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::Referrer;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents;
54ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing content::WebPluginInfo;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kAdobeReaderUpdateUrl[] = "http://www.adobe.com/go/getreader_chrome";
5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if defined(OS_WIN) && defined(ENABLE_PLUGIN_INSTALLATION)
6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kAdobeReaderIdentifier[] = "adobe-reader";
6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The prompt delegate used to ask the user if they want to use Adobe Reader
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// by default.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PDFEnableAdobeReaderPromptDelegate
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public OpenPDFInReaderPromptDelegate {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit PDFEnableAdobeReaderPromptDelegate(Profile* profile);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~PDFEnableAdobeReaderPromptDelegate();
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OpenPDFInReaderPromptDelegate
73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetMessageText() const OVERRIDE;
74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetAcceptButtonText() const OVERRIDE;
75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetCancelButtonText() const OVERRIDE;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ShouldExpire(
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::LoadCommittedDetails& details) const OVERRIDE;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Accept() OVERRIDE;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Cancel() OVERRIDE;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnYes();
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnNo();
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_IMPLICIT_CONSTRUCTORS(PDFEnableAdobeReaderPromptDelegate);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PDFEnableAdobeReaderPromptDelegate::PDFEnableAdobeReaderPromptDelegate(
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Profile* profile)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : profile_(profile) {
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("PDF_EnableReaderInfoBarShown"));
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PDFEnableAdobeReaderPromptDelegate::~PDFEnableAdobeReaderPromptDelegate() {
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool PDFEnableAdobeReaderPromptDelegate::ShouldExpire(
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const content::LoadCommittedDetails& details) const {
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::PageTransition transition =
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::PageTransitionStripQualifier(details.entry->GetTransitionType());
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We don't want to expire on a reload, because that is how we open the PDF in
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Reader.
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return !details.is_in_page && transition != content::PAGE_TRANSITION_RELOAD;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PDFEnableAdobeReaderPromptDelegate::Accept() {
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("PDF_EnableReaderInfoBarOK"));
1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(profile_).get();
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  plugin_prefs->EnablePluginGroup(
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      true, base::ASCIIToUTF16(PluginMetadata::kAdobeReaderGroupName));
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  plugin_prefs->EnablePluginGroup(
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      false, base::ASCIIToUTF16(ChromeContentClient::kPDFPluginName));
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PDFEnableAdobeReaderPromptDelegate::Cancel() {
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("PDF_EnableReaderInfoBarCancel"));
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 PDFEnableAdobeReaderPromptDelegate::GetAcceptButtonText() const {
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_PDF_INFOBAR_ALWAYS_USE_READER_BUTTON);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 PDFEnableAdobeReaderPromptDelegate::GetCancelButtonText() const {
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_DONE);
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 PDFEnableAdobeReaderPromptDelegate::GetMessageText() const {
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_PDF_INFOBAR_QUESTION_ALWAYS_USE_READER);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Launch the url to get the latest Adbobe Reader installer.
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void OpenReaderUpdateURL(WebContents* web_contents) {
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OpenURLParams params(
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL(kAdobeReaderUpdateUrl), Referrer(), NEW_FOREGROUND_TAB,
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::PAGE_TRANSITION_LINK, false);
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_contents->OpenURL(params);
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Opens the PDF using Adobe Reader.
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OpenUsingReader(WebContents* web_contents,
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     const WebPluginInfo& reader_plugin,
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     OpenPDFInReaderPromptDelegate* delegate) {
145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ChromePluginServiceFilter::GetInstance()->OverridePluginForFrame(
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_contents->GetRenderProcessHost()->GetID(),
147a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      web_contents->GetMainFrame()->GetRoutingID(),
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_contents->GetURL(),
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reader_plugin);
150e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  web_contents->ReloadFocusedFrame(false);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PDFTabHelper* pdf_tab_helper = PDFTabHelper::FromWebContents(web_contents);
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (delegate)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    pdf_tab_helper->ShowOpenInReaderPrompt(make_scoped_ptr(delegate));
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An interstitial to be used when the user chooses to open a PDF using Adobe
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Reader, but it is out of date.
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PDFUnsupportedFeatureInterstitial
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public content::InterstitialPageDelegate {
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PDFUnsupportedFeatureInterstitial(
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      WebContents* web_contents,
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const WebPluginInfo& reader_webplugininfo)
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      : web_contents_(web_contents),
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        reader_webplugininfo_(reader_webplugininfo) {
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(UserMetricsAction("PDF_ReaderInterstitialShown"));
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    interstitial_page_ = InterstitialPage::Create(
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        web_contents, false, web_contents->GetURL(), this);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    interstitial_page_->Show();
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // InterstitialPageDelegate implementation.
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::string GetHTMLContents() OVERRIDE {
1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::DictionaryValue strings;
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    strings.SetString(
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "title",
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringUTF16(IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_TITLE));
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    strings.SetString(
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "headLine",
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringUTF16(IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_BODY));
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    strings.SetString(
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "update",
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringUTF16(IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_UPDATE));
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    strings.SetString(
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "open_with_reader",
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringUTF16(
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_PROCEED));
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    strings.SetString(
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "ok",
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringUTF16(IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_OK));
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    strings.SetString(
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "cancel",
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringUTF16(IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_CANCEL));
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::StringPiece html(ResourceBundle::GetSharedInstance().
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           GetRawDataResource(IDR_READER_OUT_OF_DATE_HTML));
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return webui::GetI18nTemplateHtml(html, &strings);
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void CommandReceived(const std::string& command) OVERRIDE {
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (command == "0") {
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::RecordAction(
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          UserMetricsAction("PDF_ReaderInterstitialCancel"));
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      interstitial_page_->DontProceed();
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (command == "1") {
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::RecordAction(
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          UserMetricsAction("PDF_ReaderInterstitialUpdate"));
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      OpenReaderUpdateURL(web_contents_);
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else if (command == "2") {
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::RecordAction(
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          UserMetricsAction("PDF_ReaderInterstitialIgnore"));
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Pretend that the plug-in is up-to-date so that we don't block it.
2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      reader_webplugininfo_.version = base::ASCIIToUTF16("11.0.0.0");
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      OpenUsingReader(web_contents_, reader_webplugininfo_, NULL);
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NOTREACHED();
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    interstitial_page_->Proceed();
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OverrideRendererPrefs(
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::RendererPreferences* prefs) OVERRIDE {
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Profile* profile =
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        Profile::FromBrowserContext(web_contents_->GetBrowserContext());
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    renderer_preferences_util::UpdateFromSystemSettings(prefs, profile);
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebContents* web_contents_;
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebPluginInfo reader_webplugininfo_;
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  InterstitialPage* interstitial_page_;  // Owns us.
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PDFUnsupportedFeatureInterstitial);
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The delegate for the bubble used to inform the user that we don't support a
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// feature in the PDF.
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PDFUnsupportedFeaturePromptDelegate
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public OpenPDFInReaderPromptDelegate {
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |reader| is NULL if Adobe Reader isn't installed.
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PDFUnsupportedFeaturePromptDelegate(WebContents* web_contents,
249ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                                      const content::WebPluginInfo* reader,
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      PluginFinder* plugin_finder);
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~PDFUnsupportedFeaturePromptDelegate();
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OpenPDFInReaderPromptDelegate:
254a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetMessageText() const OVERRIDE;
255a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetAcceptButtonText() const OVERRIDE;
256a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetCancelButtonText() const OVERRIDE;
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ShouldExpire(
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::LoadCommittedDetails& details) const OVERRIDE;
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Accept() OVERRIDE;
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Cancel() OVERRIDE;
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebContents* web_contents_;
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool reader_installed_;
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool reader_vulnerable_;
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebPluginInfo reader_webplugininfo_;
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_IMPLICIT_CONSTRUCTORS(PDFUnsupportedFeaturePromptDelegate);
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PDFUnsupportedFeaturePromptDelegate::PDFUnsupportedFeaturePromptDelegate(
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    WebContents* web_contents,
273ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    const content::WebPluginInfo* reader,
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PluginFinder* plugin_finder)
2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : web_contents_(web_contents),
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reader_installed_(!!reader),
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reader_vulnerable_(false) {
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!reader_installed_) {
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        UserMetricsAction("PDF_InstallReaderInfoBarShown"));
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("PDF_UseReaderInfoBarShown"));
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  reader_webplugininfo_ = *reader;
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_PLUGIN_INSTALLATION)
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<PluginMetadata> plugin_metadata(
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      plugin_finder->GetPluginMetadata(reader_webplugininfo_));
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  reader_vulnerable_ = plugin_metadata->GetSecurityStatus(*reader) !=
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       PluginMetadata::SECURITY_STATUS_UP_TO_DATE;
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED();
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PDFUnsupportedFeaturePromptDelegate::~PDFUnsupportedFeaturePromptDelegate() {
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 PDFUnsupportedFeaturePromptDelegate::GetMessageText() const {
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_PDF_BUBBLE_MESSAGE);
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 PDFUnsupportedFeaturePromptDelegate::GetAcceptButtonText()
3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const {
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (base::win::IsMetroProcess())
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(IDS_PDF_BUBBLE_METRO_MODE_LINK);
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (reader_installed_)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(IDS_PDF_BUBBLE_OPEN_IN_READER_LINK);
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_PDF_BUBBLE_INSTALL_READER_LINK);
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 PDFUnsupportedFeaturePromptDelegate::GetCancelButtonText()
3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const {
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_DONE);
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool PDFUnsupportedFeaturePromptDelegate::ShouldExpire(
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const content::LoadCommittedDetails& details) const {
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return !details.is_in_page;
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PDFUnsupportedFeaturePromptDelegate::Accept() {
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (base::win::IsMetroProcess()) {
3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    chrome::AttemptRestartWithModeSwitch();
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!reader_installed_) {
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RecordAction(UserMetricsAction("PDF_InstallReaderInfoBarOK"));
3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    OpenReaderUpdateURL(web_contents_);
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("PDF_UseReaderInfoBarOK"));
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (reader_vulnerable_) {
3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    new PDFUnsupportedFeatureInterstitial(web_contents_, reader_webplugininfo_);
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Profile* profile =
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      Profile::FromBrowserContext(web_contents_->GetBrowserContext());
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OpenPDFInReaderPromptDelegate* delegate =
3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      new PDFEnableAdobeReaderPromptDelegate(profile);
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  OpenUsingReader(web_contents_, reader_webplugininfo_, delegate);
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PDFUnsupportedFeaturePromptDelegate::Cancel() {
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(reader_installed_ ?
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        UserMetricsAction("PDF_UseReaderInfoBarCancel") :
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        UserMetricsAction("PDF_InstallReaderInfoBarCancel"));
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) && defined(ENABLE_PLUGIN_INSTALLATION)
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GotPluginsCallback(int process_id,
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        int routing_id,
366ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                        const std::vector<content::WebPluginInfo>& plugins) {
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebContents* web_contents =
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      tab_util::GetWebContentsByID(process_id, routing_id);
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!web_contents)
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
372ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  const content::WebPluginInfo* reader = NULL;
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PluginFinder* plugin_finder = PluginFinder::GetInstance();
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < plugins.size(); ++i) {
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<PluginMetadata> plugin_metadata(
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        plugin_finder->GetPluginMetadata(plugins[i]));
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (plugin_metadata->identifier() != kAdobeReaderIdentifier)
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      continue;
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK(!reader);
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    reader = &plugins[i];
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // If the Reader plugin is disabled by policy, don't prompt them.
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Profile* profile =
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        Profile::FromBrowserContext(web_contents->GetBrowserContext());
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(profile);
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (plugin_prefs->PolicyStatusForPlugin(plugin_metadata->name()) ==
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        PluginPrefs::POLICY_DISABLED) {
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    break;
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<OpenPDFInReaderPromptDelegate> prompt(
3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      new PDFUnsupportedFeaturePromptDelegate(
3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          web_contents, reader, plugin_finder));
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PDFTabHelper* pdf_tab_helper = PDFTabHelper::FromWebContents(web_contents);
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pdf_tab_helper->ShowOpenInReaderPrompt(prompt.Pass());
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_WIN) && defined(ENABLE_PLUGIN_INSTALLATION)
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PDFHasUnsupportedFeature(content::WebContents* web_contents) {
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) && defined(ENABLE_PLUGIN_INSTALLATION)
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Only works for Windows for now.  For Mac, we'll have to launch the file
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // externally since Adobe Reader doesn't work inside Chrome.
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PluginService::GetInstance()->GetPlugins(base::Bind(&GotPluginsCallback,
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_contents->GetRenderProcessHost()->GetID(),
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_contents->GetRenderViewHost()->GetRoutingID()));
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
412