Chromium Code Reviews| 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); |