Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2540)

Unified Diff: content/renderer/browser_plugin/browser_plugin_manager.h

Issue 11416074: Browser Plugin: Simplified BrowserPluginManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed nits Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/browser_plugin/browser_plugin_manager.h
diff --git a/content/renderer/browser_plugin/browser_plugin_manager.h b/content/renderer/browser_plugin/browser_plugin_manager.h
index af950fae62d82b736216fdb778a9f944f870c35d..b6dab830412a29dc61ba2fe355a116ceb27cc21d 100644
--- a/content/renderer/browser_plugin/browser_plugin_manager.h
+++ b/content/renderer/browser_plugin/browser_plugin_manager.h
@@ -6,8 +6,10 @@
#define CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_MANAGER_H_
#include "base/id_map.h"
-#include "base/threading/non_thread_safe.h"
-#include "content/public/renderer/render_process_observer.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
+#include "base/observer_list.h"
+#include "content/public/renderer/render_view_observer.h"
#include "ipc/ipc_sender.h"
namespace WebKit {
@@ -18,21 +20,25 @@ struct WebPluginParams;
namespace content {
class BrowserPlugin;
+class BrowserPluginManagerFactory;
class RenderViewImpl;
// BrowserPluginManager manages the routing of messages to the appropriate
-// BrowserPlugin object based on its instance ID. There is only one
-// BrowserPluginManager per renderer process, and it should only be accessed
-// by the render thread.
-class CONTENT_EXPORT BrowserPluginManager : public IPC::Sender,
- public RenderProcessObserver,
- public base::NonThreadSafe {
+// BrowserPlugin object based on its instance ID.
+class CONTENT_EXPORT BrowserPluginManager
+ : public RenderViewObserver,
+ public base::RefCounted<BrowserPluginManager> {
public:
// Returns the one BrowserPluginManager for this process.
- static BrowserPluginManager* Get();
+ static BrowserPluginManager* Create(RenderViewImpl* render_view);
- BrowserPluginManager();
- virtual ~BrowserPluginManager();
+ // Overrides factory for testing. Default (NULL) value indicates regular
+ // (non-test) environment.
+ static void set_factory_for_testing(BrowserPluginManagerFactory* factory) {
+ BrowserPluginManager::factory_ = factory;
+ }
+
+ BrowserPluginManager(RenderViewImpl* render_view);
// Creates a new BrowserPlugin object with a unique identifier.
// BrowserPlugin is responsible for associating itself with the
@@ -47,9 +53,29 @@ class CONTENT_EXPORT BrowserPluginManager : public IPC::Sender,
void RemoveBrowserPlugin(int instance_id);
BrowserPlugin* GetBrowserPlugin(int instance_id) const;
void SetEmbedderFocus(const RenderViewImpl* embedder, bool focused);
+ RenderViewImpl* render_view() const { return render_view_; }
+
+ // RenderViewObserver implementation.
+
+ // BrowserPluginManager must override the default Send behavior.
+ virtual bool Send(IPC::Message* msg) OVERRIDE = 0;
+
+ // Don't destroy the BrowserPluginManager when the RenderViewImpl goes away.
+ // BrowserPluginManager's lifetime is managed by a reference count. Once
+ // the host RenderViewImpl and all BrowserPlugins release their references,
+ // then the BrowserPluginManager will be destroyed.
+ virtual void OnDestruct() OVERRIDE {}
protected:
+ // Friend RefCounted so that the dtor can be non-public.
+ friend class base::RefCounted<BrowserPluginManager>;
+
+ // Static factory instance (always NULL for non-test).
+ static BrowserPluginManagerFactory* factory_;
+
+ virtual ~BrowserPluginManager();
IDMap<BrowserPlugin> instances_;
+ base::WeakPtr<RenderViewImpl> render_view_;
int browser_plugin_counter_;
};

Powered by Google App Engine
This is Rietveld 408576698