1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/task_management/providers/web_contents/tab_contents_task.h"
7 #include "base/strings/utf_string_conversions.h"
8 #include "chrome/browser/profiles/profile.h"
9 #include "content/public/browser/web_contents.h"
10 #include "extensions/browser/extension_registry.h"
11 #include "extensions/browser/process_map.h"
12 #include "extensions/common/constants.h"
14 namespace task_management
{
18 bool HostsExtension(content::WebContents
* web_contents
) {
20 return web_contents
->GetURL().SchemeIs(extensions::kExtensionScheme
);
26 TabContentsTask::TabContentsTask(content::WebContents
* web_contents
)
27 : RendererTask(base::string16(),
28 RendererTask::GetFaviconFromWebContents(web_contents
),
30 set_title(GetCurrentTitle());
33 TabContentsTask::~TabContentsTask() {
36 void TabContentsTask::OnTitleChanged(content::NavigationEntry
* entry
) {
37 set_title(GetCurrentTitle());
40 void TabContentsTask::OnFaviconChanged() {
41 set_icon(*RendererTask::GetFaviconFromWebContents(web_contents()));
44 Task::Type
TabContentsTask::GetType() const {
45 // A tab that loads an extension URL is considered to be an extension even
46 // though it's tracked as a TabContentsTask.
47 return HostsExtension(web_contents()) ? Task::EXTENSION
: Task::RENDERER
;
50 base::string16
TabContentsTask::GetCurrentTitle() const {
51 // Check if the URL is an app and if the tab is hoisting an extension.
53 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
54 extensions::ProcessMap
* process_map
= extensions::ProcessMap::Get(profile
);
55 extensions::ExtensionRegistry
* extension_registry
=
56 extensions::ExtensionRegistry::Get(profile
);
57 GURL url
= web_contents()->GetURL();
58 base::string16 url_spec
= base::UTF8ToUTF16(url
.spec());
60 bool is_app
= process_map
->Contains(process_id()) &&
61 extension_registry
->enabled_extensions().GetAppByURL(url
) != nullptr;
62 bool is_extension
= HostsExtension(web_contents());
63 bool is_incognito
= profile
->IsOffTheRecord();
65 base::string16 tab_title
=
66 RendererTask::GetTitleFromWebContents(web_contents());
68 // Fall back to the URL if the title is empty.
69 return PrefixRendererTitle(tab_title
.empty() ? url_spec
: tab_title
,
75 } // namespace task_management