Home | History | Annotate | Download | only in renderer_host
      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.
     37   static bool has_factory() {
     38     return !!factory_;
     39   }
     40 
     41  protected:
     42   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