Index: chrome/browser/task_management/web_contents_tags.cc |
diff --git a/chrome/browser/task_management/web_contents_tags.cc b/chrome/browser/task_management/web_contents_tags.cc |
index 3fed68aed1badbd094df119d4613f16922aa27c6..58d98761e5ea67fa55cb098de243747c37d70784 100644 |
--- a/chrome/browser/task_management/web_contents_tags.cc |
+++ b/chrome/browser/task_management/web_contents_tags.cc |
@@ -6,6 +6,7 @@ |
#include "chrome/browser/task_management/providers/web_contents/background_contents_tag.h" |
#include "chrome/browser/task_management/providers/web_contents/devtools_tag.h" |
+#include "chrome/browser/task_management/providers/web_contents/extension_tag.h" |
#include "chrome/browser/task_management/providers/web_contents/guest_tag.h" |
#include "chrome/browser/task_management/providers/web_contents/panel_tag.h" |
#include "chrome/browser/task_management/providers/web_contents/prerender_tag.h" |
@@ -13,7 +14,12 @@ |
#include "chrome/browser/task_management/providers/web_contents/tab_contents_tag.h" |
#include "chrome/browser/task_management/providers/web_contents/web_contents_tags_manager.h" |
#include "components/guest_view/browser/guest_view_base.h" |
+#include "content/public/browser/render_view_host.h" |
+#include "content/public/browser/site_instance.h" |
#include "content/public/browser/web_contents.h" |
+#include "extensions/browser/extension_registry.h" |
+#include "extensions/browser/view_type_utils.h" |
+#include "extensions/common/constants.h" |
#if defined(ENABLE_EXTENSIONS) |
#include "chrome/browser/ui/panels/panel.h" |
@@ -37,6 +43,37 @@ void TagWebContents(content::WebContents* contents, |
WebContentsTagsManager::GetInstance()->AddTag(tag); |
} |
+#if defined(ENABLE_EXTENSIONS) |
+ |
+bool IsExtensionWebContents(content::WebContents* contents) { |
+ DCHECK(contents); |
+ |
+ if (guest_view::GuestViewBase::IsGuest(contents)) |
+ return false; |
+ |
+ extensions::ViewType view_type = extensions::GetViewType(contents); |
+ return (view_type != extensions::VIEW_TYPE_INVALID && |
+ view_type != extensions::VIEW_TYPE_TAB_CONTENTS && |
+ view_type != extensions::VIEW_TYPE_BACKGROUND_CONTENTS && |
+ view_type != extensions::VIEW_TYPE_PANEL); |
+} |
+ |
+const extensions::Extension* GetExtensionFromWebContents( |
+ content::WebContents* contents) { |
+ DCHECK(contents); |
+ |
+ const GURL& site = |
+ contents->GetRenderViewHost()->GetSiteInstance()->GetSiteURL(); |
+ |
+ DCHECK(site.SchemeIs(extensions::kExtensionScheme)); |
+ |
+ const std::string extension_id = site.host(); |
+ return extensions::ExtensionRegistry::Get(contents->GetBrowserContext())-> |
+ GetExtensionById(extension_id, extensions::ExtensionRegistry::ENABLED); |
+} |
+ |
+#endif // defined(ENABLE_EXTENSIONS) |
+ |
} // namespace |
#endif // defined(ENABLE_TASK_MANAGER) |
@@ -130,6 +167,22 @@ void WebContentsTags::CreateForGuestContents( |
} |
// static |
+void WebContentsTags::CreateForExtension(content::WebContents* web_contents) { |
+#if defined(ENABLE_TASK_MANAGER) && defined(ENABLE_EXTENSIONS) |
+ DCHECK(IsExtensionWebContents(web_contents)); |
+ |
+ const extensions::Extension* extension = |
+ GetExtensionFromWebContents(web_contents); |
+ |
+ if (!WebContentsTag::FromWebContents(web_contents)) { |
Devlin
2015/08/04 16:05:07
For my own edification, in what circumstance could
afakhry
2015/08/04 18:31:08
Some web_contents change their ownership. For exam
Devlin
2015/08/04 20:22:40
Hmm... so if a web contents *does* change ownershi
afakhry
2015/08/05 17:20:07
Yes, that's why we have WebContentsTags::ClearTag(
|
+ TagWebContents(web_contents, |
+ new ExtensionTag(web_contents, extension), |
+ WebContentsTag::kTagKey); |
+ } |
+#endif // defined(ENABLE_TASK_MANAGER) && defined(ENABLE_EXTENSIONS) |
+} |
+ |
+// static |
void WebContentsTags::ClearTag(content::WebContents* web_contents) { |
#if defined(ENABLE_TASK_MANAGER) |
const WebContentsTag* tag = WebContentsTag::FromWebContents(web_contents); |