- add sources.
[platform/framework/web/crosswalk.git] / src / content / browser / devtools / devtools_frontend_host.cc
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 #include "content/browser/devtools/devtools_frontend_host.h"
6
7 #include "content/browser/devtools/devtools_manager_impl.h"
8 #include "content/browser/renderer_host/render_view_host_impl.h"
9 #include "content/browser/web_contents/web_contents_impl.h"
10 #include "content/common/devtools_messages.h"
11 #include "content/public/browser/devtools_client_host.h"
12 #include "content/public/browser/devtools_frontend_host_delegate.h"
13
14 namespace content {
15
16 // static
17 DevToolsClientHost* DevToolsClientHost::CreateDevToolsFrontendHost(
18     WebContents* client_web_contents,
19     DevToolsFrontendHostDelegate* delegate) {
20   return new DevToolsFrontendHost(
21       static_cast<WebContentsImpl*>(client_web_contents), delegate);
22 }
23
24 // static
25 void DevToolsClientHost::SetupDevToolsFrontendClient(
26     RenderViewHost* frontend_rvh) {
27   frontend_rvh->Send(new DevToolsMsg_SetupDevToolsClient(
28       frontend_rvh->GetRoutingID()));
29 }
30
31 DevToolsFrontendHost::DevToolsFrontendHost(
32     WebContentsImpl* web_contents,
33     DevToolsFrontendHostDelegate* delegate)
34     : WebContentsObserver(web_contents),
35       delegate_(delegate) {
36 }
37
38 DevToolsFrontendHost::~DevToolsFrontendHost() {
39   DevToolsManager::GetInstance()->ClientHostClosing(this);
40 }
41
42 void DevToolsFrontendHost::DispatchOnInspectorFrontend(
43     const std::string& message) {
44   if (!web_contents())
45     return;
46   RenderViewHostImpl* target_host =
47       static_cast<RenderViewHostImpl*>(web_contents()->GetRenderViewHost());
48   target_host->Send(new DevToolsClientMsg_DispatchOnInspectorFrontend(
49       target_host->GetRoutingID(),
50       message));
51 }
52
53 void DevToolsFrontendHost::InspectedContentsClosing() {
54   delegate_->InspectedContentsClosing();
55 }
56
57 void DevToolsFrontendHost::ReplacedWithAnotherClient() {
58 }
59
60 bool DevToolsFrontendHost::OnMessageReceived(
61     const IPC::Message& message) {
62   bool handled = true;
63   IPC_BEGIN_MESSAGE_MAP(DevToolsFrontendHost, message)
64     IPC_MESSAGE_HANDLER(DevToolsAgentMsg_DispatchOnInspectorBackend,
65                         OnDispatchOnInspectorBackend)
66     IPC_MESSAGE_HANDLER(DevToolsHostMsg_DispatchOnEmbedder,
67                         OnDispatchOnEmbedder)
68     IPC_MESSAGE_UNHANDLED(handled = false)
69   IPC_END_MESSAGE_MAP()
70   return handled;
71 }
72
73 void DevToolsFrontendHost::RenderProcessGone(
74     base::TerminationStatus status) {
75   switch(status) {
76     case base::TERMINATION_STATUS_ABNORMAL_TERMINATION:
77     case base::TERMINATION_STATUS_PROCESS_WAS_KILLED:
78     case base::TERMINATION_STATUS_PROCESS_CRASHED:
79       DevToolsManager::GetInstance()->ClientHostClosing(this);
80       break;
81     default:
82       break;
83   }
84 }
85
86 void DevToolsFrontendHost::OnDispatchOnInspectorBackend(
87     const std::string& message) {
88   DevToolsManagerImpl::GetInstance()->DispatchOnInspectorBackend(this, message);
89 }
90
91 void DevToolsFrontendHost::OnDispatchOnEmbedder(
92     const std::string& message) {
93   delegate_->DispatchOnEmbedder(message);
94 }
95
96 }  // namespace content