diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-22 00:05:17 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-22 00:05:17 +0000 |
commit | c8f73aba9f1fd8b2e0a34fcca08a1e968ddd8244 (patch) | |
tree | d2658c6f1da345a1f38531809250c934dd4d73fa /webkit/plugins | |
parent | 090d7108424b5a8600e1b590b2227e52f23d6e7e (diff) | |
download | chromium_src-c8f73aba9f1fd8b2e0a34fcca08a1e968ddd8244.zip chromium_src-c8f73aba9f1fd8b2e0a34fcca08a1e968ddd8244.tar.gz chromium_src-c8f73aba9f1fd8b2e0a34fcca08a1e968ddd8244.tar.bz2 |
When we detect a PDF with an unsupported feature, ask the user if they want to view it with Adobe Reader if it's installed. If it's not, ask them if they want to launch the url to install it. If it's installed and out of date, show an interstitial.
BUG=65339
Review URL: http://codereview.chromium.org/6259008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72240 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/plugins')
-rw-r--r-- | webkit/plugins/npapi/plugin_group.cc | 1 | ||||
-rw-r--r-- | webkit/plugins/npapi/plugin_group.h | 3 | ||||
-rw-r--r-- | webkit/plugins/ppapi/mock_plugin_delegate.cc | 3 | ||||
-rw-r--r-- | webkit/plugins/ppapi/mock_plugin_delegate.h | 1 | ||||
-rw-r--r-- | webkit/plugins/ppapi/plugin_delegate.h | 3 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppapi_plugin_instance.cc | 10 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppapi_plugin_instance.h | 4 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppb_pdf_impl.cc | 15 |
8 files changed, 36 insertions, 4 deletions
diff --git a/webkit/plugins/npapi/plugin_group.cc b/webkit/plugins/npapi/plugin_group.cc index 6323998..dd80652 100644 --- a/webkit/plugins/npapi/plugin_group.cc +++ b/webkit/plugins/npapi/plugin_group.cc @@ -17,6 +17,7 @@ namespace webkit { namespace npapi { const char* PluginGroup::kAdobeReaderGroupName = "Adobe Reader"; +const char* PluginGroup::kAdobeReaderUpdateURL = "http://get.adobe.com/reader/"; /*static*/ std::set<string16>* PluginGroup::policy_disabled_plugin_patterns_; diff --git a/webkit/plugins/npapi/plugin_group.h b/webkit/plugins/npapi/plugin_group.h index 308fee7..d6a2157 100644 --- a/webkit/plugins/npapi/plugin_group.h +++ b/webkit/plugins/npapi/plugin_group.h @@ -78,6 +78,7 @@ class PluginGroup { // Used by about:plugins to disable Reader plugin when internal PDF viewer is // enabled. static const char* kAdobeReaderGroupName; + static const char* kAdobeReaderUpdateURL; PluginGroup(const PluginGroup& other); @@ -145,6 +146,8 @@ class PluginGroup { // in accepting weird version strings than Version::GetFromString(). static Version* CreateVersionFromString(const string16& version_string); + std::vector<WebPluginInfo> web_plugin_infos() { return web_plugin_infos_; } + private: typedef std::map<std::string, PluginGroup*> PluginMap; diff --git a/webkit/plugins/ppapi/mock_plugin_delegate.cc b/webkit/plugins/ppapi/mock_plugin_delegate.cc index 2a96571..e072ebb 100644 --- a/webkit/plugins/ppapi/mock_plugin_delegate.cc +++ b/webkit/plugins/ppapi/mock_plugin_delegate.cc @@ -199,6 +199,9 @@ void MockPluginDelegate::DidStopLoading() { void MockPluginDelegate::SetContentRestriction(int restrictions) { } +void MockPluginDelegate::HasUnsupportedFeature() { +} + } // namespace ppapi } // namespace webkit diff --git a/webkit/plugins/ppapi/mock_plugin_delegate.h b/webkit/plugins/ppapi/mock_plugin_delegate.h index 7037a96..5d652dd 100644 --- a/webkit/plugins/ppapi/mock_plugin_delegate.h +++ b/webkit/plugins/ppapi/mock_plugin_delegate.h @@ -99,6 +99,7 @@ class MockPluginDelegate : public PluginDelegate { virtual void DidStartLoading(); virtual void DidStopLoading(); virtual void SetContentRestriction(int restrictions); + virtual void HasUnsupportedFeature(); }; } // namespace ppapi diff --git a/webkit/plugins/ppapi/plugin_delegate.h b/webkit/plugins/ppapi/plugin_delegate.h index fd73c3a..1a94ea0 100644 --- a/webkit/plugins/ppapi/plugin_delegate.h +++ b/webkit/plugins/ppapi/plugin_delegate.h @@ -335,6 +335,9 @@ class PluginDelegate { // Sets restrictions on how the content can be used (i.e. no print/copy). virtual void SetContentRestriction(int restrictions) = 0; + + // Tells the browser that the PDF has an unsupported feature. + virtual void HasUnsupportedFeature() = 0; }; } // namespace ppapi diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.cc b/webkit/plugins/ppapi/ppapi_plugin_instance.cc index dfe1456..8a9f62a 100644 --- a/webkit/plugins/ppapi/ppapi_plugin_instance.cc +++ b/webkit/plugins/ppapi/ppapi_plugin_instance.cc @@ -250,9 +250,8 @@ void ZoomChanged(PP_Instance instance_id, double factor) { return; // We only want to tell the page to change its zoom if the whole page is the - // PDF. If we're in an iframe, then don't do anything. - WebFrame* frame = instance->container()->element().document().frame(); - if (!frame->view()->mainFrame()->document().isPluginDocument()) + // plugin. If we're in an iframe, then don't do anything. + if (!instance->IsFullPagePlugin()) return; double zoom_level = WebView::zoomFactorToZoomLevel(factor); @@ -1231,5 +1230,10 @@ ObjectVar* PluginInstance::ObjectVarForNPObject(NPObject* np_object) const { return found->second; } +bool PluginInstance::IsFullPagePlugin() const { + WebFrame* frame = container()->element().document().frame(); + return frame->view()->mainFrame()->document().isPluginDocument(); +} + } // namespace ppapi } // namespace webkit diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.h b/webkit/plugins/ppapi/ppapi_plugin_instance.h index ec1bf9c..f80402f 100644 --- a/webkit/plugins/ppapi/ppapi_plugin_instance.h +++ b/webkit/plugins/ppapi/ppapi_plugin_instance.h @@ -203,6 +203,10 @@ class PluginInstance : public base::RefCounted<PluginInstance> { // NPObject for the given module. See AddNPObjectVar above. ObjectVar* ObjectVarForNPObject(NPObject* np_object) const; + // Returns true iff the plugin is a full-page plugin (i.e. not in an iframe or + // embedded in a page). + bool IsFullPagePlugin() const; + private: bool LoadFindInterface(); bool LoadPdfInterface(); diff --git a/webkit/plugins/ppapi/ppb_pdf_impl.cc b/webkit/plugins/ppapi/ppb_pdf_impl.cc index cf0d1d0..2019945 100644 --- a/webkit/plugins/ppapi/ppb_pdf_impl.cc +++ b/webkit/plugins/ppapi/ppb_pdf_impl.cc @@ -268,6 +268,18 @@ void UserMetricsRecordAction(PP_Var action) { webkit_glue::UserMetricsRecordAction(action_str->value()); } +void HasUnsupportedFeature(PP_Instance instance_id) { + PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); + if (!instance) + return; + + // Only want to show an info bar if the pdf is the whole tab. + if (!instance->IsFullPagePlugin()) + return; + + instance->delegate()->HasUnsupportedFeature(); +} + const PPB_PDF ppb_pdf = { &GetLocalizedString, &GetResourceImage, @@ -278,7 +290,8 @@ const PPB_PDF ppb_pdf = { &DidStopLoading, &SetContentRestriction, &HistogramPDFPageCount, - &UserMetricsRecordAction + &UserMetricsRecordAction, + &HasUnsupportedFeature }; } // namespace |