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