1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_PLUGINS_PLUGIN_OBSERVER_H_ 6#define CHROME_BROWSER_PLUGINS_PLUGIN_OBSERVER_H_ 7 8#include "base/memory/scoped_ptr.h" 9#include "base/memory/weak_ptr.h" 10#include "content/public/browser/web_contents_observer.h" 11#include "content/public/browser/web_contents_user_data.h" 12 13#if defined(ENABLE_PLUGIN_INSTALLATION) 14#include <map> 15#endif 16 17class GURL; 18class PluginFinder; 19class PluginMetadata; 20 21#if defined(ENABLE_PLUGIN_INSTALLATION) 22class PluginInstaller; 23class PluginPlaceholderHost; 24#endif 25 26namespace content { 27class WebContents; 28} 29 30namespace infobars { 31class InfoBarDelegate; 32} 33 34class PluginObserver : public content::WebContentsObserver, 35 public content::WebContentsUserData<PluginObserver> { 36 public: 37 virtual ~PluginObserver(); 38 39 // content::WebContentsObserver implementation. 40 virtual void RenderFrameCreated( 41 content::RenderFrameHost* render_frame_host) OVERRIDE; 42 virtual void PluginCrashed(const base::FilePath& plugin_path, 43 base::ProcessId plugin_pid) OVERRIDE; 44 virtual bool OnMessageReceived( 45 const IPC::Message& message, 46 content::RenderFrameHost* render_frame_host) OVERRIDE; 47 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 48 49 private: 50 explicit PluginObserver(content::WebContents* web_contents); 51 friend class content::WebContentsUserData<PluginObserver>; 52 53 class PluginPlaceholderHost; 54 55#if defined(ENABLE_PLUGIN_INSTALLATION) 56 void InstallMissingPlugin(PluginInstaller* installer, 57 const PluginMetadata* plugin_metadata); 58#endif 59 60 // Message handlers: 61 void OnBlockedUnauthorizedPlugin(const base::string16& name, 62 const std::string& identifier); 63 void OnBlockedOutdatedPlugin(int placeholder_id, 64 const std::string& identifier); 65#if defined(ENABLE_PLUGIN_INSTALLATION) 66 void OnFindMissingPlugin(int placeholder_id, const std::string& mime_type); 67 68 void OnRemovePluginPlaceholderHost(int placeholder_id); 69#endif 70 void OnOpenAboutPlugins(); 71 void OnCouldNotLoadPlugin(const base::FilePath& plugin_path); 72 void OnNPAPINotSupported(const std::string& identifier); 73 74#if defined(ENABLE_PLUGIN_INSTALLATION) 75 // Stores all PluginPlaceholderHosts, keyed by their routing ID. 76 std::map<int, PluginPlaceholderHost*> plugin_placeholders_; 77#endif 78 79 base::WeakPtrFactory<PluginObserver> weak_ptr_factory_; 80 81 DISALLOW_COPY_AND_ASSIGN(PluginObserver); 82}; 83 84#endif // CHROME_BROWSER_PLUGINS_PLUGIN_OBSERVER_H_ 85