1// Copyright 2013 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#include "content/browser/frame_host/render_frame_host_factory.h"
6
7#include "base/logging.h"
8#include "content/browser/frame_host/frame_tree_node.h"
9#include "content/browser/frame_host/render_frame_host_impl.h"
10
11namespace content {
12
13// static
14RenderFrameHostFactory* RenderFrameHostFactory::factory_ = NULL;
15
16// static
17scoped_ptr<RenderFrameHostImpl> RenderFrameHostFactory::Create(
18    RenderViewHostImpl* render_view_host,
19    RenderFrameHostDelegate* delegate,
20    FrameTree* frame_tree,
21    FrameTreeNode* frame_tree_node,
22    int routing_id,
23    bool is_swapped_out) {
24  if (factory_) {
25    return factory_->CreateRenderFrameHost(render_view_host,
26                                           delegate,
27                                           frame_tree,
28                                           frame_tree_node,
29                                           routing_id,
30                                           is_swapped_out).Pass();
31  }
32  return make_scoped_ptr(new RenderFrameHostImpl(
33      render_view_host, delegate, frame_tree, frame_tree_node, routing_id,
34      is_swapped_out));
35}
36
37// static
38void RenderFrameHostFactory::RegisterFactory(RenderFrameHostFactory* factory) {
39  DCHECK(!factory_) << "Can't register two factories at once.";
40  factory_ = factory;
41}
42
43// static
44void RenderFrameHostFactory::UnregisterFactory() {
45  DCHECK(factory_) << "No factory to unregister.";
46  factory_ = NULL;
47}
48
49}  // namespace content
50