Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / devtools / devtools_target_impl.cc
index cfcd923..04c7ab6 100644 (file)
@@ -7,9 +7,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/devtools/devtools_window.h"
-#include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_tab_util.h"
-#include "chrome/browser/guest_view/guest_view_base.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/tab_contents/tab_contents_iterator.h"
 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/web_contents.h"
 #include "extensions/browser/extension_host.h"
+#include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
+#include "extensions/browser/guest_view/guest_view_base.h"
+#include "extensions/browser/process_manager.h"
 #include "extensions/common/constants.h"
 
 using content::BrowserThread;
@@ -40,16 +41,16 @@ const char kTargetTypeWebView[] = "webview";
 const char kTargetTypeIFrame[] = "iframe";
 const char kTargetTypeOther[] = "other";
 
-// RenderViewHostTarget --------------------------------------------------------
+// WebContentsTarget --------------------------------------------------------
 
-class RenderViewHostTarget : public DevToolsTargetImpl {
+class WebContentsTarget : public DevToolsTargetImpl {
  public:
-  explicit RenderViewHostTarget(RenderViewHost* rvh, bool is_tab);
+  WebContentsTarget(WebContents* web_contents, bool is_tab);
 
   // DevToolsTargetImpl overrides:
   virtual bool Activate() const OVERRIDE;
   virtual bool Close() const OVERRIDE;
-  virtual RenderViewHost* GetRenderViewHost() const OVERRIDE;
+  virtual WebContents* GetWebContents() const OVERRIDE;
   virtual int GetTabId() const OVERRIDE;
   virtual std::string GetExtensionId() const OVERRIDE;
   virtual void Inspect(Profile* profile) const OVERRIDE;
@@ -59,22 +60,20 @@ class RenderViewHostTarget : public DevToolsTargetImpl {
   std::string extension_id_;
 };
 
-RenderViewHostTarget::RenderViewHostTarget(RenderViewHost* rvh, bool is_tab)
-    : DevToolsTargetImpl(DevToolsAgentHost::GetOrCreateFor(rvh)),
+WebContentsTarget::WebContentsTarget(WebContents* web_contents, bool is_tab)
+    : DevToolsTargetImpl(DevToolsAgentHost::GetOrCreateFor(web_contents)),
       tab_id_(-1) {
   set_type(kTargetTypeOther);
-  WebContents* web_contents = WebContents::FromRenderViewHost(rvh);
-  if (!web_contents)
-    return;  // Orphan RVH will show up with no title/url/icon in clients.
 
-  content::RenderFrameHost* rfh = rvh->GetMainFrame();
+  content::RenderFrameHost* rfh =
+      web_contents->GetRenderViewHost()->GetMainFrame();
   if (rfh->IsCrossProcessSubframe()) {
     set_url(rfh->GetLastCommittedURL());
     set_type(kTargetTypeIFrame);
-    // TODO(kaznacheev) Try setting the title when the frame navigation
-    // refactoring is done.
+    // TODO(pfeldman) Update for out of process iframes.
     RenderViewHost* parent_rvh = rfh->GetParent()->GetRenderViewHost();
-    set_parent_id(DevToolsAgentHost::GetOrCreateFor(parent_rvh)->GetId());
+    set_parent_id(DevToolsAgentHost::GetOrCreateFor(
+                      WebContents::FromRenderViewHost(parent_rvh))->GetId());
     return;
   }
 
@@ -86,84 +85,84 @@ RenderViewHostTarget::RenderViewHostTarget(RenderViewHost* rvh, bool is_tab)
     set_favicon_url(entry->GetFavicon().url);
   set_last_activity_time(web_contents->GetLastActiveTime());
 
-  GuestViewBase* guest = GuestViewBase::FromWebContents(web_contents);
+  extensions::GuestViewBase* guest =
+      extensions::GuestViewBase::FromWebContents(web_contents);
   WebContents* guest_contents = guest ? guest->embedder_web_contents() : NULL;
-  RenderViewHost* guest_parent_rvh =
-      guest_contents ? guest_contents->GetRenderViewHost() : NULL;
-  if (guest_parent_rvh) {
+  if (guest_contents) {
     set_type(kTargetTypeWebView);
-    set_parent_id(DevToolsAgentHost::GetOrCreateFor(guest_parent_rvh)->GetId());
+    set_parent_id(DevToolsAgentHost::GetOrCreateFor(guest_contents)->GetId());
     return;
   }
 
   if (is_tab) {
     set_type(kTargetTypePage);
     tab_id_ = extensions::ExtensionTabUtil::GetTabId(web_contents);
-  } else {
-    Profile* profile =
-        Profile::FromBrowserContext(web_contents->GetBrowserContext());
-    if (profile) {
-      ExtensionService* extension_service = profile->GetExtensionService();
-      const extensions::Extension* extension = extension_service->
-          extensions()->GetByID(GetURL().host());
-      if (extension) {
-        set_title(extension->name());
-        extensions::ExtensionHost* extension_host =
-            extensions::ExtensionSystem::Get(profile)->process_manager()->
-                GetBackgroundHostForExtension(extension->id());
-        if (extension_host &&
-            extension_host->host_contents() == web_contents) {
-          set_type(kTargetTypeBackgroundPage);
-          extension_id_ = extension->id();
-        } else if (extension->is_hosted_app()
-            || extension->is_legacy_packaged_app()
-            || extension->is_platform_app()) {
-          set_type(kTargetTypeApp);
-        }
-        set_favicon_url(extensions::ExtensionIconSource::GetIconURL(
-            extension, extension_misc::EXTENSION_ICON_SMALLISH,
-            ExtensionIconSet::MATCH_BIGGER, false, NULL));
-      }
-    }
+    return;
+  }
+
+  const extensions::Extension* extension = extensions::ExtensionRegistry::Get(
+      web_contents->GetBrowserContext())->enabled_extensions().GetByID(
+          GetURL().host());
+  if (!extension)
+    return;
+
+  Profile* profile =
+      Profile::FromBrowserContext(web_contents->GetBrowserContext());
+  if (!profile)
+    return;
+  extensions::ExtensionSystem* extension_system =
+      extensions::ExtensionSystem::Get(profile);
+  set_title(extension->name());
+  extensions::ExtensionHost* extension_host =
+      extension_system->process_manager()->GetBackgroundHostForExtension(
+          extension->id());
+  if (extension_host &&
+      extension_host->host_contents() == web_contents) {
+    set_type(kTargetTypeBackgroundPage);
+    extension_id_ = extension->id();
+  } else if (extension->is_hosted_app()
+             || extension->is_legacy_packaged_app()
+             || extension->is_platform_app()) {
+    set_type(kTargetTypeApp);
   }
+  set_favicon_url(extensions::ExtensionIconSource::GetIconURL(
+      extension, extension_misc::EXTENSION_ICON_SMALLISH,
+      ExtensionIconSet::MATCH_BIGGER, false, NULL));
 }
 
-bool RenderViewHostTarget::Activate() const {
-  RenderViewHost* rvh = GetRenderViewHost();
-  if (!rvh)
-    return false;
-  WebContents* web_contents = WebContents::FromRenderViewHost(rvh);
+bool WebContentsTarget::Activate() const {
+  WebContents* web_contents = GetWebContents();
   if (!web_contents)
     return false;
   web_contents->GetDelegate()->ActivateContents(web_contents);
   return true;
 }
 
-bool RenderViewHostTarget::Close() const {
-  RenderViewHost* rvh = GetRenderViewHost();
-  if (!rvh)
+bool WebContentsTarget::Close() const {
+  WebContents* web_contents = GetWebContents();
+  if (!web_contents)
     return false;
-  rvh->ClosePage();
+  web_contents->GetRenderViewHost()->ClosePage();
   return true;
 }
 
-RenderViewHost* RenderViewHostTarget::GetRenderViewHost() const {
-  return GetAgentHost()->GetRenderViewHost();
+WebContents* WebContentsTarget::GetWebContents() const {
+  return GetAgentHost()->GetWebContents();
 }
 
-int RenderViewHostTarget::GetTabId() const {
+int WebContentsTarget::GetTabId() const {
   return tab_id_;
 }
 
-std::string RenderViewHostTarget::GetExtensionId() const {
+std::string WebContentsTarget::GetExtensionId() const {
   return extension_id_;
 }
 
-void RenderViewHostTarget::Inspect(Profile* profile) const {
-  RenderViewHost* rvh = GetRenderViewHost();
-  if (!rvh)
+void WebContentsTarget::Inspect(Profile* profile) const {
+  WebContents* web_contents = GetWebContents();
+  if (!web_contents)
     return;
-  DevToolsWindow::OpenDevToolsWindow(rvh);
+  DevToolsWindow::OpenDevToolsWindow(web_contents);
 }
 
 // WorkerTarget ----------------------------------------------------------------
@@ -275,7 +274,7 @@ int DevToolsTargetImpl::GetTabId() const {
   return -1;
 }
 
-RenderViewHost* DevToolsTargetImpl::GetRenderViewHost() const {
+WebContents* DevToolsTargetImpl::GetWebContents() const {
   return NULL;
 }
 
@@ -283,32 +282,35 @@ std::string DevToolsTargetImpl::GetExtensionId() const {
   return std::string();
 }
 
-void DevToolsTargetImpl::Inspect(Profile*) const {
+void DevToolsTargetImpl::Inspect(Profile* /*profile*/) const {
 }
 
 void DevToolsTargetImpl::Reload() const {
 }
 
 // static
-scoped_ptr<DevToolsTargetImpl> DevToolsTargetImpl::CreateForRenderViewHost(
-    content::RenderViewHost* rvh, bool is_tab) {
-  return scoped_ptr<DevToolsTargetImpl>(new RenderViewHostTarget(rvh, is_tab));
+scoped_ptr<DevToolsTargetImpl> DevToolsTargetImpl::CreateForWebContents(
+    content::WebContents* web_contents,
+    bool is_tab) {
+  return scoped_ptr<DevToolsTargetImpl>(
+      new WebContentsTarget(web_contents, is_tab));
 }
 
 // static
-DevToolsTargetImpl::List DevToolsTargetImpl::EnumerateRenderViewHostTargets() {
-  std::set<RenderViewHost*> tab_rvhs;
+DevToolsTargetImpl::List DevToolsTargetImpl::EnumerateWebContentsTargets() {
+  std::set<WebContents*> tab_web_contents;
   for (TabContentsIterator it; !it.done(); it.Next())
-    tab_rvhs.insert(it->GetRenderViewHost());
+    tab_web_contents.insert(*it);
 
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
   DevToolsTargetImpl::List result;
-  std::vector<RenderViewHost*> rvh_list =
-      content::DevToolsAgentHost::GetValidRenderViewHosts();
-  for (std::vector<RenderViewHost*>::iterator it = rvh_list.begin();
-       it != rvh_list.end(); ++it) {
-    bool is_tab = tab_rvhs.find(*it) != tab_rvhs.end();
-    result.push_back(new RenderViewHostTarget(*it, is_tab));
+  std::vector<WebContents*> wc_list =
+      content::DevToolsAgentHost::GetInspectableWebContents();
+  for (std::vector<WebContents*>::iterator it = wc_list.begin();
+       it != wc_list.end();
+       ++it) {
+    bool is_tab = tab_web_contents.find(*it) != tab_web_contents.end();
+    result.push_back(new WebContentsTarget(*it, is_tab));
   }
   return result;
 }
@@ -340,7 +342,7 @@ static void CollectAllTargets(
     const DevToolsTargetImpl::List& worker_targets) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
   DevToolsTargetImpl::List result =
-      DevToolsTargetImpl::EnumerateRenderViewHostTargets();
+      DevToolsTargetImpl::EnumerateWebContentsTargets();
   result.insert(result.begin(), worker_targets.begin(), worker_targets.end());
   callback.Run(result);
 }