OLD | NEW |
| (Empty) |
1 // Copyright (c) 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/shell/shell_devtools_frontend.h" | |
6 | |
7 #include "base/command_line.h" | |
8 #include "base/path_service.h" | |
9 #include "content/public/browser/devtools_http_handler.h" | |
10 #include "content/public/browser/devtools_manager.h" | |
11 #include "content/public/browser/web_contents.h" | |
12 #include "content/public/browser/web_contents_view.h" | |
13 #include "content/public/common/content_client.h" | |
14 #include "content/shell/common/shell_switches.h" | |
15 #include "content/shell/shell.h" | |
16 #include "content/shell/shell_browser_context.h" | |
17 #include "content/shell/shell_browser_main_parts.h" | |
18 #include "content/shell/shell_content_browser_client.h" | |
19 #include "content/shell/shell_devtools_delegate.h" | |
20 #include "net/base/net_util.h" | |
21 | |
22 namespace content { | |
23 | |
24 namespace { | |
25 | |
26 // DevTools frontend path for inspector LayoutTests. | |
27 GURL GetDevToolsPathAsURL() { | |
28 base::FilePath dir_exe; | |
29 if (!PathService::Get(base::DIR_EXE, &dir_exe)) { | |
30 NOTREACHED(); | |
31 return GURL(); | |
32 } | |
33 #if defined(OS_MACOSX) | |
34 // On Mac, the executable is in | |
35 // out/Release/Content Shell.app/Contents/MacOS/Content Shell. | |
36 // We need to go up 3 directories to get to out/Release. | |
37 dir_exe = dir_exe.AppendASCII("../../.."); | |
38 #endif | |
39 base::FilePath dev_tools_path = dir_exe.AppendASCII( | |
40 "resources/inspector/devtools.html"); | |
41 return net::FilePathToFileURL(dev_tools_path); | |
42 } | |
43 | |
44 } // namespace | |
45 | |
46 // static | |
47 ShellDevToolsFrontend* ShellDevToolsFrontend::Show( | |
48 WebContents* inspected_contents) { | |
49 Shell* shell = Shell::CreateNewWindow(inspected_contents->GetBrowserContext(), | |
50 GURL(), | |
51 NULL, | |
52 MSG_ROUTING_NONE, | |
53 gfx::Size()); | |
54 ShellDevToolsFrontend* devtools_frontend = new ShellDevToolsFrontend( | |
55 shell, | |
56 DevToolsAgentHost::GetOrCreateFor(inspected_contents->GetRenderViewHost()) | |
57 .get()); | |
58 | |
59 ShellDevToolsDelegate* delegate = ShellContentBrowserClient::Get()-> | |
60 shell_browser_main_parts()->devtools_delegate(); | |
61 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree)) | |
62 shell->LoadURL(GetDevToolsPathAsURL()); | |
63 else | |
64 shell->LoadURL(delegate->devtools_http_handler()->GetFrontendURL(NULL)); | |
65 | |
66 return devtools_frontend; | |
67 } | |
68 | |
69 void ShellDevToolsFrontend::Focus() { | |
70 web_contents()->GetView()->Focus(); | |
71 } | |
72 | |
73 void ShellDevToolsFrontend::Close() { | |
74 frontend_shell_->Close(); | |
75 } | |
76 | |
77 ShellDevToolsFrontend::ShellDevToolsFrontend(Shell* frontend_shell, | |
78 DevToolsAgentHost* agent_host) | |
79 : WebContentsObserver(frontend_shell->web_contents()), | |
80 frontend_shell_(frontend_shell), | |
81 agent_host_(agent_host) { | |
82 frontend_host_.reset( | |
83 DevToolsClientHost::CreateDevToolsFrontendHost(web_contents(), this)); | |
84 } | |
85 | |
86 ShellDevToolsFrontend::~ShellDevToolsFrontend() { | |
87 } | |
88 | |
89 void ShellDevToolsFrontend::RenderViewCreated( | |
90 RenderViewHost* render_view_host) { | |
91 DevToolsClientHost::SetupDevToolsFrontendClient( | |
92 web_contents()->GetRenderViewHost()); | |
93 DevToolsManager* manager = DevToolsManager::GetInstance(); | |
94 manager->RegisterDevToolsClientHostFor(agent_host_.get(), | |
95 frontend_host_.get()); | |
96 } | |
97 | |
98 void ShellDevToolsFrontend::WebContentsDestroyed(WebContents* web_contents) { | |
99 DevToolsManager::GetInstance()->ClientHostClosing(frontend_host_.get()); | |
100 delete this; | |
101 } | |
102 | |
103 void ShellDevToolsFrontend::InspectedContentsClosing() { | |
104 frontend_shell_->Close(); | |
105 } | |
106 | |
107 } // namespace content | |
OLD | NEW |