• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 CONTENT_BROWSER_RENDERER_HOST_RENDER_VIEW_HOST_FACTORY_H_
6 #define CONTENT_BROWSER_RENDERER_HOST_RENDER_VIEW_HOST_FACTORY_H_
7 
8 #include "base/basictypes.h"
9 #include "content/common/content_export.h"
10 
11 namespace content {
12 class RenderFrameHostDelegate;
13 class RenderViewHost;
14 class RenderViewHostDelegate;
15 class RenderWidgetHostDelegate;
16 class SessionStorageNamespace;
17 class SiteInstance;
18 
19 // A factory for creating RenderViewHosts. There is a global factory function
20 // that can be installed for the purposes of testing to provide a specialized
21 // RenderViewHost class.
22 class RenderViewHostFactory {
23  public:
24   // Creates a RenderViewHost using the currently registered factory, or the
25   // default one if no factory is registered. Ownership of the returned
26   // pointer will be passed to the caller.
27   static RenderViewHost* Create(
28       SiteInstance* instance,
29       RenderViewHostDelegate* delegate,
30       RenderWidgetHostDelegate* widget_delegate,
31       int routing_id,
32       int main_frame_routing_id,
33       bool swapped_out,
34       bool hidden);
35 
36   // Returns true if there is currently a globally-registered factory.
has_factory()37   static bool has_factory() {
38     return !!factory_;
39   }
40 
41  protected:
RenderViewHostFactory()42   RenderViewHostFactory() {}
~RenderViewHostFactory()43   virtual ~RenderViewHostFactory() {}
44 
45   // You can derive from this class and specify an implementation for this
46   // function to create a different kind of RenderViewHost for testing.
47   virtual RenderViewHost* CreateRenderViewHost(
48       SiteInstance* instance,
49       RenderViewHostDelegate* delegate,
50       RenderWidgetHostDelegate* widget_delegate,
51       int routing_id,
52       int main_frame_routing_id,
53       bool swapped_out) = 0;
54 
55   // Registers your factory to be called when new RenderViewHosts are created.
56   // We have only one global factory, so there must be no factory registered
57   // before the call. This class does NOT take ownership of the pointer.
58   CONTENT_EXPORT static void RegisterFactory(RenderViewHostFactory* factory);
59 
60   // Unregister the previously registered factory. With no factory registered,
61   // the default RenderViewHosts will be created.
62   CONTENT_EXPORT static void UnregisterFactory();
63 
64  private:
65   // The current globally registered factory. This is NULL when we should
66   // create the default RenderViewHosts.
67   CONTENT_EXPORT static RenderViewHostFactory* factory_;
68 
69   DISALLOW_COPY_AND_ASSIGN(RenderViewHostFactory);
70 };
71 
72 }  // namespace content
73 
74 #endif  // CONTENT_BROWSER_RENDERER_HOST_RENDER_VIEW_HOST_FACTORY_H_
75