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.
5 #ifndef CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_MANAGER_H_
6 #define CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_MANAGER_H_
8 #include "base/id_map.h"
9 #include "base/memory/weak_ptr.h"
10 #include "content/public/renderer/render_process_observer.h"
11 #include "ipc/ipc_sender.h"
20 class BrowserPluginDelegate
;
23 // BrowserPluginManager manages the routing of messages to the appropriate
24 // BrowserPlugin object based on its instance ID. There is one BrowserPlugin
25 // for the RenderThread.
26 class CONTENT_EXPORT BrowserPluginManager
: public RenderProcessObserver
{
28 static BrowserPluginManager
* Get();
30 BrowserPluginManager();
31 ~BrowserPluginManager() override
;
33 // Creates a new BrowserPlugin object.
34 // BrowserPlugin is responsible for associating itself with the
35 // BrowserPluginManager via AddBrowserPlugin. When it is destroyed, it is
36 // responsible for removing its association via RemoveBrowserPlugin.
37 // The |delegate| is expected to manage its own lifetime.
38 // Generally BrowserPlugin calls DidDestroyElement() on the delegate and
39 // right now the delegate destroys itself once it hears that callback.
40 BrowserPlugin
* CreateBrowserPlugin(
41 RenderFrame
* render_frame
,
42 const base::WeakPtr
<BrowserPluginDelegate
>& delegate
);
44 void Attach(int browser_plugin_instance_id
);
46 void Detach(int browser_plugin_instance_id
);
48 void AddBrowserPlugin(int browser_plugin_instance_id
,
49 BrowserPlugin
* browser_plugin
);
50 void RemoveBrowserPlugin(int browser_plugin_instance_id
);
51 BrowserPlugin
* GetBrowserPlugin(int browser_plugin_instance_id
) const;
53 void UpdateFocusState();
55 // Returns a new instance ID to be used by BrowserPlugin. Instance IDs are
56 // unique per process.
57 int GetNextInstanceID();
59 void DidCommitCompositorFrame(int render_frame_routing_id
);
60 bool Send(IPC::Message
* msg
);
62 // RenderProcessObserver override.
63 bool OnControlMessageReceived(const IPC::Message
& message
) override
;
66 // IPC message handlers.
67 void OnCompositorFrameSwappedPluginUnavailable(const IPC::Message
& message
);
69 // This map is keyed by guest instance IDs.
70 IDMap
<BrowserPlugin
> instances_
;
72 DISALLOW_COPY_AND_ASSIGN(BrowserPluginManager
);
75 } // namespace content
77 #endif // CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_MANAGER_H_