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 bb4d1fec880f8b7acd31d27aa6ed8d02b2b168fd..f5f603437048b8824d061ba3481d8d9c1485ffb2 100644 |
| --- a/chrome/browser/task_management/web_contents_tags.cc |
| +++ b/chrome/browser/task_management/web_contents_tags.cc |
| @@ -6,12 +6,19 @@ |
| #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/panel_tag.h" |
| #include "chrome/browser/task_management/providers/web_contents/prerender_tag.h" |
| #include "chrome/browser/task_management/providers/web_contents/printing_tag.h" |
| #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" |
| @@ -35,6 +42,33 @@ void TagWebContents(content::WebContents* contents, |
| WebContentsTagsManager::GetInstance()->AddTag(tag); |
| } |
| +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(); |
|
ncarter (slow)
2015/08/03 21:12:18
question for devlin -- how well-established is the
afakhry
2015/08/03 23:36:45
This is the exact way followed in this code here:
Devlin
2015/08/04 16:05:07
For better or worse, we get the extension id from
afakhry
2015/08/04 18:31:07
Done.
|
| + |
| + DCHECK(site.SchemeIs(extensions::kExtensionScheme)); |
| + |
| + const std::string extension_id = site.host(); |
| + return extensions::ExtensionRegistry::Get(contents->GetBrowserContext())-> |
| + GetExtensionById(extension_id, extensions::ExtensionRegistry::ENABLED); |
| +} |
| + |
| } // namespace |
| #endif // defined(ENABLE_TASK_MANAGER) |
| @@ -114,6 +148,21 @@ void WebContentsTags::CreateForPrintingContents( |
| #endif // defined(ENABLE_TASK_MANAGER) && defined(ENABLE_PRINT_PREVIEW) |
| } |
| +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)) { |
| + 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) |