Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "android_webview/native/aw_dev_tools_server.h" | 5 #include "android_webview/native/aw_dev_tools_server.h" |
| 6 | 6 |
| 7 #include "android_webview/browser/in_process_view_renderer.h" | 7 #include "android_webview/browser/in_process_view_renderer.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" |
| 10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
| 11 #include "base/strings/utf_string_conversions.h" | |
| 11 #include "base/values.h" | 12 #include "base/values.h" |
| 12 #include "content/public/browser/android/devtools_auth.h" | 13 #include "content/public/browser/android/devtools_auth.h" |
| 14 #include "content/public/browser/devtools_agent_host.h" | |
| 13 #include "content/public/browser/devtools_http_handler.h" | 15 #include "content/public/browser/devtools_http_handler.h" |
| 14 #include "content/public/browser/devtools_http_handler_delegate.h" | 16 #include "content/public/browser/devtools_http_handler_delegate.h" |
| 17 #include "content/public/browser/favicon_status.h" | |
| 18 #include "content/public/browser/navigation_entry.h" | |
|
mnaganov (inactive)
2013/10/01 16:15:02
Do we really need these two includes? I can't see
Vladislav Kaznacheev
2013/10/02 10:28:29
We do not. That was copypasta.
On 2013/10/01 16:1
| |
| 15 #include "content/public/browser/web_contents.h" | 19 #include "content/public/browser/web_contents.h" |
| 16 #include "jni/AwDevToolsServer_jni.h" | 20 #include "jni/AwDevToolsServer_jni.h" |
| 21 #include "net/base/escape.h" | |
| 17 #include "net/socket/unix_domain_socket_posix.h" | 22 #include "net/socket/unix_domain_socket_posix.h" |
| 18 #include "webkit/common/user_agent/user_agent_util.h" | 23 #include "webkit/common/user_agent/user_agent_util.h" |
| 19 | 24 |
| 25 using content::DevToolsAgentHost; | |
| 26 using content::RenderViewHost; | |
| 27 using content::WebContents; | |
| 28 | |
| 20 namespace { | 29 namespace { |
| 21 | 30 |
| 22 const char kFrontEndURL[] = | 31 const char kFrontEndURL[] = |
| 23 "http://chrome-devtools-frontend.appspot.com/serve_rev/%s/devtools.html"; | 32 "http://chrome-devtools-frontend.appspot.com/serve_rev/%s/devtools.html"; |
| 24 const char kSocketNameFormat[] = "webview_devtools_remote_%d"; | 33 const char kSocketNameFormat[] = "webview_devtools_remote_%d"; |
| 25 | 34 |
| 35 const char kTargetTypePage[] = "page"; | |
| 36 | |
| 37 std::string GetViewDescription(WebContents* web_contents); | |
| 38 | |
| 39 class Target : public content::DevToolsTarget { | |
| 40 public: | |
| 41 explicit Target(WebContents* web_contents); | |
| 42 | |
| 43 virtual std::string GetId() const OVERRIDE { return id_; } | |
| 44 virtual std::string GetType() const OVERRIDE { return kTargetTypePage; } | |
| 45 virtual std::string GetTitle() const OVERRIDE { return title_; } | |
| 46 virtual std::string GetDescription() const OVERRIDE { return description_; } | |
| 47 virtual GURL GetUrl() const OVERRIDE { return url_; } | |
| 48 virtual GURL GetFaviconUrl() const OVERRIDE { return GURL(); } | |
| 49 virtual base::TimeTicks GetLastActivityTime() const OVERRIDE { | |
| 50 return last_activity_time_; | |
| 51 } | |
| 52 virtual bool IsAttached() const OVERRIDE { | |
| 53 return agent_host_->IsAttached(); | |
| 54 } | |
| 55 virtual scoped_refptr<DevToolsAgentHost> GetAgentHost() const OVERRIDE { | |
| 56 return agent_host_; | |
| 57 } | |
| 58 virtual bool Activate() const OVERRIDE { return false; } | |
| 59 virtual bool Close() const OVERRIDE { return false; } | |
| 60 | |
| 61 private: | |
| 62 virtual ~Target() {} | |
| 63 | |
| 64 scoped_refptr<DevToolsAgentHost> agent_host_; | |
| 65 std::string id_; | |
| 66 std::string title_; | |
| 67 std::string description_; | |
| 68 GURL url_; | |
| 69 base::TimeTicks last_activity_time_; | |
| 70 }; | |
| 71 | |
| 72 Target::Target(WebContents* web_contents) { | |
| 73 agent_host_ = | |
| 74 DevToolsAgentHost::GetOrCreateFor(web_contents->GetRenderViewHost()); | |
| 75 id_ = agent_host_->GetId(); | |
| 76 description_ = GetViewDescription(web_contents); | |
| 77 title_ = UTF16ToUTF8(net::EscapeForHTML(web_contents->GetTitle())); | |
| 78 url_ = web_contents->GetURL(); | |
| 79 last_activity_time_ = web_contents->GetLastSelectedTime(); | |
| 80 } | |
| 81 | |
| 26 // Delegate implementation for the devtools http handler for WebView. A new | 82 // Delegate implementation for the devtools http handler for WebView. A new |
| 27 // instance of this gets created each time web debugging is enabled. | 83 // instance of this gets created each time web debugging is enabled. |
| 28 class AwDevToolsServerDelegate : public content::DevToolsHttpHandlerDelegate { | 84 class AwDevToolsServerDelegate : public content::DevToolsHttpHandlerDelegate { |
| 29 public: | 85 public: |
| 30 AwDevToolsServerDelegate() {} | 86 AwDevToolsServerDelegate() {} |
| 31 virtual ~AwDevToolsServerDelegate() {} | 87 virtual ~AwDevToolsServerDelegate() {} |
| 32 | 88 |
| 33 // DevToolsHttpProtocolHandler::Delegate overrides. | 89 // DevToolsHttpProtocolHandler::Delegate overrides. |
| 34 virtual std::string GetDiscoveryPageHTML() OVERRIDE; | 90 virtual std::string GetDiscoveryPageHTML() OVERRIDE; |
| 35 | 91 |
| 36 virtual bool BundlesFrontendResources() OVERRIDE { | 92 virtual bool BundlesFrontendResources() OVERRIDE { |
| 37 return false; | 93 return false; |
| 38 } | 94 } |
| 39 | 95 |
| 40 virtual base::FilePath GetDebugFrontendDir() OVERRIDE { | 96 virtual base::FilePath GetDebugFrontendDir() OVERRIDE { |
| 41 return base::FilePath(); | 97 return base::FilePath(); |
| 42 } | 98 } |
| 43 | 99 |
| 44 virtual std::string GetPageThumbnailData(const GURL&) OVERRIDE { | 100 virtual std::string GetPageThumbnailData(const GURL&) OVERRIDE { |
| 45 return ""; | 101 return ""; |
| 46 } | 102 } |
| 47 | 103 |
| 48 virtual content::RenderViewHost* CreateNewTarget() OVERRIDE { | 104 virtual scoped_refptr<content::DevToolsTarget> CreateNewTarget() OVERRIDE { |
| 49 return NULL; | 105 return NULL; |
| 50 } | 106 } |
| 51 | 107 |
| 52 virtual TargetType GetTargetType(content::RenderViewHost*) OVERRIDE { | 108 virtual void EnumerateTargets(TargetCallback callback) OVERRIDE { |
| 53 return kTargetTypeTab; | 109 TargetList targets; |
| 110 std::vector<RenderViewHost*> rvh_list = | |
| 111 DevToolsAgentHost::GetValidRenderViewHosts(); | |
| 112 for (std::vector<RenderViewHost*>::iterator it = rvh_list.begin(); | |
| 113 it != rvh_list.end(); ++it) { | |
| 114 WebContents* web_contents = WebContents::FromRenderViewHost(*it); | |
| 115 if (web_contents) | |
| 116 targets.push_back(new Target(web_contents)); | |
| 117 } | |
| 118 callback.Run(targets); | |
| 54 } | 119 } |
| 55 | 120 |
| 56 virtual std::string GetViewDescription(content::RenderViewHost*) OVERRIDE; | |
| 57 | |
| 58 virtual scoped_ptr<net::StreamListenSocket> CreateSocketForTethering( | 121 virtual scoped_ptr<net::StreamListenSocket> CreateSocketForTethering( |
| 59 net::StreamListenSocket::Delegate* delegate, | 122 net::StreamListenSocket::Delegate* delegate, |
| 60 std::string* name) OVERRIDE { | 123 std::string* name) OVERRIDE { |
| 61 return scoped_ptr<net::StreamListenSocket>(); | 124 return scoped_ptr<net::StreamListenSocket>(); |
| 62 } | 125 } |
| 63 | 126 |
| 64 private: | 127 private: |
| 65 DISALLOW_COPY_AND_ASSIGN(AwDevToolsServerDelegate); | 128 DISALLOW_COPY_AND_ASSIGN(AwDevToolsServerDelegate); |
| 66 }; | 129 }; |
| 67 | 130 |
| 68 | 131 |
| 69 std::string AwDevToolsServerDelegate::GetDiscoveryPageHTML() { | 132 std::string AwDevToolsServerDelegate::GetDiscoveryPageHTML() { |
| 70 const char html[] = | 133 const char html[] = |
| 71 "<html>" | 134 "<html>" |
| 72 "<head><title>WebView remote debugging</title></head>" | 135 "<head><title>WebView remote debugging</title></head>" |
| 73 "<body>Please use <a href=\'chrome://inspect\'>chrome://inspect</a>" | 136 "<body>Please use <a href=\'chrome://inspect\'>chrome://inspect</a>" |
| 74 "</body>" | 137 "</body>" |
| 75 "</html>"; | 138 "</html>"; |
| 76 return html; | 139 return html; |
| 77 } | 140 } |
| 78 | 141 |
| 79 std::string AwDevToolsServerDelegate::GetViewDescription( | 142 std::string GetViewDescription(WebContents* web_contents) { |
| 80 content::RenderViewHost* rvh) { | |
| 81 content::WebContents* web_contents = | |
| 82 content::WebContents::FromRenderViewHost(rvh); | |
| 83 if (!web_contents) return ""; | |
| 84 | |
| 85 android_webview::BrowserViewRenderer* bvr | 143 android_webview::BrowserViewRenderer* bvr |
| 86 = android_webview::InProcessViewRenderer::FromWebContents(web_contents); | 144 = android_webview::InProcessViewRenderer::FromWebContents(web_contents); |
| 87 if (!bvr) return ""; | 145 if (!bvr) return ""; |
| 88 base::DictionaryValue description; | 146 base::DictionaryValue description; |
| 89 description.SetBoolean("attached", bvr->IsAttachedToWindow()); | 147 description.SetBoolean("attached", bvr->IsAttachedToWindow()); |
| 90 description.SetBoolean("visible", bvr->IsVisible()); | 148 description.SetBoolean("visible", bvr->IsVisible()); |
| 91 gfx::Rect screen_rect = bvr->GetScreenRect(); | 149 gfx::Rect screen_rect = bvr->GetScreenRect(); |
| 92 description.SetInteger("screenX", screen_rect.x()); | 150 description.SetInteger("screenX", screen_rect.x()); |
| 93 description.SetInteger("screenY", screen_rect.y()); | 151 description.SetInteger("screenY", screen_rect.y()); |
| 94 description.SetBoolean("empty", screen_rect.size().IsEmpty()); | 152 description.SetBoolean("empty", screen_rect.size().IsEmpty()); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 161 AwDevToolsServer* devtools_server = | 219 AwDevToolsServer* devtools_server = |
| 162 reinterpret_cast<AwDevToolsServer*>(server); | 220 reinterpret_cast<AwDevToolsServer*>(server); |
| 163 if (enabled) { | 221 if (enabled) { |
| 164 devtools_server->Start(); | 222 devtools_server->Start(); |
| 165 } else { | 223 } else { |
| 166 devtools_server->Stop(); | 224 devtools_server->Stop(); |
| 167 } | 225 } |
| 168 } | 226 } |
| 169 | 227 |
| 170 } // namespace android_webview | 228 } // namespace android_webview |
| OLD | NEW |