Index: android_webview/browser/aw_dev_tools_manager_delegate.cc |
diff --git a/android_webview/browser/aw_dev_tools_manager_delegate.cc b/android_webview/browser/aw_dev_tools_manager_delegate.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6e9f0ce0fa47cea0646ca71496991ff273932990 |
--- /dev/null |
+++ b/android_webview/browser/aw_dev_tools_manager_delegate.cc |
@@ -0,0 +1,134 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "android_webview/browser/aw_dev_tools_manager_delegate.h" |
+ |
+#include "android_webview/native/aw_contents.h" |
+#include "base/bind.h" |
+#include "base/json/json_writer.h" |
+#include "base/strings/stringprintf.h" |
+#include "base/strings/utf_string_conversions.h" |
+#include "base/values.h" |
+#include "content/public/browser/devtools_agent_host.h" |
+#include "content/public/browser/devtools_target.h" |
+#include "content/public/browser/web_contents.h" |
+ |
+using content::DevToolsAgentHost; |
+using content::RenderViewHost; |
+using content::WebContents; |
+ |
+namespace { |
+ |
+const char kTargetTypePage[] = "page"; |
pfeldman
2014/09/11 17:42:35
Should we define those in the content/public?
dgozman
2014/09/11 17:48:09
We discussed this with Vlad when he did recent ref
|
+const char kTargetTypeServiceWorker[] = "service_worker"; |
+const char kTargetTypeOther[] = "other"; |
+ |
+std::string GetViewDescription(WebContents* web_contents); |
+ |
+class Target : public content::DevToolsTarget { |
+ public: |
+ explicit Target(scoped_refptr<DevToolsAgentHost> agent_host); |
+ |
+ virtual std::string GetId() const OVERRIDE { return agent_host_->GetId(); } |
+ virtual std::string GetParentId() const OVERRIDE { return std::string(); } |
+ virtual std::string GetType() const OVERRIDE { |
+ switch (agent_host_->GetType()) { |
+ case DevToolsAgentHost::TYPE_WEB_CONTENTS: |
+ return kTargetTypePage; |
+ case DevToolsAgentHost::TYPE_SERVICE_WORKER: |
+ return kTargetTypeServiceWorker; |
+ default: |
+ break; |
+ } |
+ return kTargetTypeOther; |
+ } |
+ virtual std::string GetTitle() const OVERRIDE { |
+ return agent_host_->GetTitle(); |
+ } |
+ virtual std::string GetDescription() const OVERRIDE { return description_; } |
+ virtual GURL GetURL() const OVERRIDE { return agent_host_->GetURL(); } |
+ virtual GURL GetFaviconURL() const OVERRIDE { return GURL(); } |
+ virtual base::TimeTicks GetLastActivityTime() const OVERRIDE { |
+ return last_activity_time_; |
+ } |
+ virtual bool IsAttached() const OVERRIDE { |
+ return agent_host_->IsAttached(); |
+ } |
+ virtual scoped_refptr<DevToolsAgentHost> GetAgentHost() const OVERRIDE { |
+ return agent_host_; |
+ } |
+ virtual bool Activate() const OVERRIDE { return agent_host_->Activate(); } |
+ virtual bool Close() const OVERRIDE { return agent_host_->Close(); } |
+ |
+ private: |
+ scoped_refptr<DevToolsAgentHost> agent_host_; |
+ std::string description_; |
+ base::TimeTicks last_activity_time_; |
+}; |
+ |
+Target::Target(scoped_refptr<DevToolsAgentHost> agent_host) |
+ : agent_host_(agent_host) { |
+ if (WebContents* web_contents = agent_host->GetWebContents()) { |
+ description_ = GetViewDescription(web_contents); |
+ last_activity_time_ = web_contents->GetLastActiveTime(); |
+ } |
+} |
+ |
+std::string GetViewDescription(WebContents* web_contents) { |
+ const android_webview::BrowserViewRenderer* bvr = |
+ android_webview::AwContents::FromWebContents(web_contents) |
+ ->GetBrowserViewRenderer(); |
+ if (!bvr) return ""; |
+ base::DictionaryValue description; |
+ description.SetBoolean("attached", bvr->attached_to_window()); |
+ description.SetBoolean("visible", bvr->IsVisible()); |
+ gfx::Rect screen_rect = bvr->GetScreenRect(); |
+ description.SetInteger("screenX", screen_rect.x()); |
+ description.SetInteger("screenY", screen_rect.y()); |
+ description.SetBoolean("empty", screen_rect.size().IsEmpty()); |
+ if (!screen_rect.size().IsEmpty()) { |
+ description.SetInteger("width", screen_rect.width()); |
+ description.SetInteger("height", screen_rect.height()); |
+ } |
+ std::string json; |
+ base::JSONWriter::Write(&description, &json); |
+ return json; |
+} |
+ |
+} // namespace |
+ |
+namespace android_webview { |
+ |
+AwDevToolsManagerDelegate::AwDevToolsManagerDelegate() { |
+} |
+ |
+AwDevToolsManagerDelegate::~AwDevToolsManagerDelegate() { |
+} |
+ |
+base::DictionaryValue* AwDevToolsManagerDelegate::HandleCommand( |
+ content::DevToolsAgentHost* agent_host, |
+ base::DictionaryValue* command_dict) { |
+ return NULL; |
+} |
+ |
+void AwDevToolsManagerDelegate::EnumerateTargets(TargetCallback callback) { |
+ TargetList targets; |
+ DevToolsAgentHost::List agents = DevToolsAgentHost::GetOrCreateAll(); |
+ for (DevToolsAgentHost::List::iterator it = agents.begin(); |
+ it != agents.end(); ++it) { |
+ targets.push_back(new Target(*it)); |
+ } |
+ callback.Run(targets); |
+} |
+ |
+std::string AwDevToolsManagerDelegate::GetPageThumbnailData(const GURL&) { |
+ return ""; |
+} |
+ |
+scoped_ptr<content::DevToolsTarget> AwDevToolsManagerDelegate::CreateNewTarget( |
+ const GURL&) { |
+ return scoped_ptr<content::DevToolsTarget>(); |
+} |
+ |
+} // namespace android_webview |