OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/task_manager/task_manager_resource_providers.h" | 5 #include "chrome/browser/task_manager/task_manager_resource_providers.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "chrome/app/chrome_command_ids.h" | 21 #include "chrome/app/chrome_command_ids.h" |
22 #include "chrome/browser/background/background_contents_service.h" | 22 #include "chrome/browser/background/background_contents_service.h" |
23 #include "chrome/browser/background/background_contents_service_factory.h" | 23 #include "chrome/browser/background/background_contents_service_factory.h" |
24 #include "chrome/browser/browser_process.h" | 24 #include "chrome/browser/browser_process.h" |
25 #include "chrome/browser/devtools/devtools_window.h" | 25 #include "chrome/browser/devtools/devtools_window.h" |
26 #include "chrome/browser/extensions/extension_host.h" | 26 #include "chrome/browser/extensions/extension_host.h" |
27 #include "chrome/browser/extensions/extension_process_manager.h" | 27 #include "chrome/browser/extensions/extension_process_manager.h" |
28 #include "chrome/browser/extensions/extension_service.h" | 28 #include "chrome/browser/extensions/extension_service.h" |
29 #include "chrome/browser/extensions/extension_system.h" | 29 #include "chrome/browser/extensions/extension_system.h" |
30 #include "chrome/browser/favicon/favicon_tab_helper.h" | 30 #include "chrome/browser/favicon/favicon_tab_helper.h" |
| 31 #include "chrome/browser/instant/instant_controller.h" |
| 32 #include "chrome/browser/instant/instant_loader.h" |
| 33 #include "chrome/browser/instant/instant_service.h" |
| 34 #include "chrome/browser/instant/instant_service_factory.h" |
31 #include "chrome/browser/prerender/prerender_manager.h" | 35 #include "chrome/browser/prerender/prerender_manager.h" |
32 #include "chrome/browser/prerender/prerender_manager_factory.h" | 36 #include "chrome/browser/prerender/prerender_manager_factory.h" |
33 #include "chrome/browser/printing/background_printing_manager.h" | 37 #include "chrome/browser/printing/background_printing_manager.h" |
34 #include "chrome/browser/profiles/profile.h" | 38 #include "chrome/browser/profiles/profile.h" |
35 #include "chrome/browser/profiles/profile_info_cache.h" | 39 #include "chrome/browser/profiles/profile_info_cache.h" |
36 #include "chrome/browser/profiles/profile_manager.h" | 40 #include "chrome/browser/profiles/profile_manager.h" |
37 #include "chrome/browser/tab_contents/background_contents.h" | 41 #include "chrome/browser/tab_contents/background_contents.h" |
38 #include "chrome/browser/tab_contents/tab_util.h" | 42 #include "chrome/browser/tab_contents/tab_util.h" |
39 #include "chrome/browser/ui/browser.h" | 43 #include "chrome/browser/ui/browser.h" |
40 #include "chrome/browser/ui/browser_finder.h" | 44 #include "chrome/browser/ui/browser_finder.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 using extensions::Extension; | 88 using extensions::Extension; |
85 | 89 |
86 namespace { | 90 namespace { |
87 | 91 |
88 // Returns the appropriate message prefix ID for tabs and extensions, | 92 // Returns the appropriate message prefix ID for tabs and extensions, |
89 // reflecting whether they are apps or in incognito mode. | 93 // reflecting whether they are apps or in incognito mode. |
90 int GetMessagePrefixID(bool is_app, | 94 int GetMessagePrefixID(bool is_app, |
91 bool is_extension, | 95 bool is_extension, |
92 bool is_incognito, | 96 bool is_incognito, |
93 bool is_prerender, | 97 bool is_prerender, |
94 bool is_instant_preview, | 98 bool is_instant_overlay, |
95 bool is_background) { | 99 bool is_background) { |
96 if (is_app) { | 100 if (is_app) { |
97 if (is_background) { | 101 if (is_background) { |
98 return IDS_TASK_MANAGER_BACKGROUND_PREFIX; | 102 return IDS_TASK_MANAGER_BACKGROUND_PREFIX; |
99 } else if (is_incognito) { | 103 } else if (is_incognito) { |
100 return IDS_TASK_MANAGER_APP_INCOGNITO_PREFIX; | 104 return IDS_TASK_MANAGER_APP_INCOGNITO_PREFIX; |
101 } else { | 105 } else { |
102 return IDS_TASK_MANAGER_APP_PREFIX; | 106 return IDS_TASK_MANAGER_APP_PREFIX; |
103 } | 107 } |
104 } else if (is_extension) { | 108 } else if (is_extension) { |
105 if (is_incognito) | 109 if (is_incognito) |
106 return IDS_TASK_MANAGER_EXTENSION_INCOGNITO_PREFIX; | 110 return IDS_TASK_MANAGER_EXTENSION_INCOGNITO_PREFIX; |
107 else | 111 else |
108 return IDS_TASK_MANAGER_EXTENSION_PREFIX; | 112 return IDS_TASK_MANAGER_EXTENSION_PREFIX; |
109 } else if (is_prerender) { | 113 } else if (is_prerender) { |
110 return IDS_TASK_MANAGER_PRERENDER_PREFIX; | 114 return IDS_TASK_MANAGER_PRERENDER_PREFIX; |
111 } else if (is_instant_preview) { | 115 } else if (is_instant_overlay) { |
112 return IDS_TASK_MANAGER_INSTANT_PREVIEW_PREFIX; | 116 return IDS_TASK_MANAGER_INSTANT_OVERLAY_PREFIX; |
113 } else { | 117 } else { |
114 return IDS_TASK_MANAGER_TAB_PREFIX; | 118 return IDS_TASK_MANAGER_TAB_PREFIX; |
115 } | 119 } |
116 } | 120 } |
117 | 121 |
118 string16 GetProfileNameFromInfoCache(Profile* profile) { | 122 string16 GetProfileNameFromInfoCache(Profile* profile) { |
119 ProfileInfoCache& cache = | 123 ProfileInfoCache& cache = |
120 g_browser_process->profile_manager()->GetProfileInfoCache(); | 124 g_browser_process->profile_manager()->GetProfileInfoCache(); |
121 size_t index = cache.GetIndexOfProfileWithPath( | 125 size_t index = cache.GetIndexOfProfileWithPath( |
122 profile->GetOriginalProfile()->GetPath()); | 126 profile->GetOriginalProfile()->GetPath()); |
(...skipping 28 matching lines...) Expand all Loading... |
151 bool IsContentsPrerendering(WebContents* web_contents) { | 155 bool IsContentsPrerendering(WebContents* web_contents) { |
152 Profile* profile = | 156 Profile* profile = |
153 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 157 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
154 prerender::PrerenderManager* prerender_manager = | 158 prerender::PrerenderManager* prerender_manager = |
155 prerender::PrerenderManagerFactory::GetForProfile(profile); | 159 prerender::PrerenderManagerFactory::GetForProfile(profile); |
156 return prerender_manager && | 160 return prerender_manager && |
157 prerender_manager->IsWebContentsPrerendering(web_contents, NULL); | 161 prerender_manager->IsWebContentsPrerendering(web_contents, NULL); |
158 } | 162 } |
159 | 163 |
160 bool IsContentsInstant(WebContents* web_contents) { | 164 bool IsContentsInstant(WebContents* web_contents) { |
| 165 Profile* profile = |
| 166 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
| 167 InstantService* instant_service = |
| 168 InstantServiceFactory::GetForProfile(profile); |
| 169 if (instant_service && instant_service->loader()->contents() == web_contents) |
| 170 return true; |
| 171 |
161 for (chrome::BrowserIterator it; !it.done(); it.Next()) { | 172 for (chrome::BrowserIterator it; !it.done(); it.Next()) { |
162 if (it->instant_controller() && | 173 if (it->instant_controller() && |
163 it->instant_controller()->instant()-> | 174 it->instant_controller()->instant()-> |
164 GetPreviewContents() == web_contents) { | 175 GetOverlayContents() == web_contents) { |
165 return true; | 176 return true; |
166 } | 177 } |
167 } | 178 } |
168 | 179 |
169 return false; | 180 return false; |
170 } | 181 } |
171 | 182 |
172 bool IsContentsBackgroundPrinted(WebContents* web_contents) { | 183 bool IsContentsBackgroundPrinted(WebContents* web_contents) { |
173 printing::BackgroundPrintingManager* printing_manager = | 184 printing::BackgroundPrintingManager* printing_manager = |
174 g_browser_process->background_printing_manager(); | 185 g_browser_process->background_printing_manager(); |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 // static | 309 // static |
299 gfx::ImageSkia* TaskManagerTabContentsResource::prerender_icon_ = NULL; | 310 gfx::ImageSkia* TaskManagerTabContentsResource::prerender_icon_ = NULL; |
300 | 311 |
301 TaskManagerTabContentsResource::TaskManagerTabContentsResource( | 312 TaskManagerTabContentsResource::TaskManagerTabContentsResource( |
302 WebContents* web_contents) | 313 WebContents* web_contents) |
303 : TaskManagerRendererResource( | 314 : TaskManagerRendererResource( |
304 web_contents->GetRenderProcessHost()->GetHandle(), | 315 web_contents->GetRenderProcessHost()->GetHandle(), |
305 web_contents->GetRenderViewHost()), | 316 web_contents->GetRenderViewHost()), |
306 web_contents_(web_contents), | 317 web_contents_(web_contents), |
307 profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())), | 318 profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())), |
308 is_instant_preview_(IsContentsInstant(web_contents)) { | 319 is_instant_overlay_(IsContentsInstant(web_contents)) { |
309 if (!prerender_icon_) { | 320 if (!prerender_icon_) { |
310 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 321 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
311 prerender_icon_ = rb.GetImageSkiaNamed(IDR_PRERENDER); | 322 prerender_icon_ = rb.GetImageSkiaNamed(IDR_PRERENDER); |
312 } | 323 } |
313 } | 324 } |
314 | 325 |
315 TaskManagerTabContentsResource::~TaskManagerTabContentsResource() { | 326 TaskManagerTabContentsResource::~TaskManagerTabContentsResource() { |
316 } | 327 } |
317 | 328 |
318 void TaskManagerTabContentsResource::InstantCommitted() { | 329 void TaskManagerTabContentsResource::InstantCommitted() { |
319 DCHECK(is_instant_preview_); | 330 DCHECK(is_instant_overlay_); |
320 is_instant_preview_ = false; | 331 is_instant_overlay_ = false; |
321 } | 332 } |
322 | 333 |
323 bool TaskManagerTabContentsResource::HostsExtension() const { | 334 bool TaskManagerTabContentsResource::HostsExtension() const { |
324 return web_contents_->GetURL().SchemeIs(extensions::kExtensionScheme); | 335 return web_contents_->GetURL().SchemeIs(extensions::kExtensionScheme); |
325 } | 336 } |
326 | 337 |
327 TaskManager::Resource::Type TaskManagerTabContentsResource::GetType() const { | 338 TaskManager::Resource::Type TaskManagerTabContentsResource::GetType() const { |
328 return HostsExtension() ? EXTENSION : RENDERER; | 339 return HostsExtension() ? EXTENSION : RENDERER; |
329 } | 340 } |
330 | 341 |
331 string16 TaskManagerTabContentsResource::GetTitle() const { | 342 string16 TaskManagerTabContentsResource::GetTitle() const { |
332 // Fall back on the URL if there's no title. | 343 // Fall back on the URL if there's no title. |
333 GURL url = web_contents_->GetURL(); | 344 GURL url = web_contents_->GetURL(); |
334 string16 tab_title = GetTitleFromWebContents(web_contents_); | 345 string16 tab_title = GetTitleFromWebContents(web_contents_); |
335 | 346 |
336 // Only classify as an app if the URL is an app and the tab is hosting an | 347 // Only classify as an app if the URL is an app and the tab is hosting an |
337 // extension process. (It's possible to be showing the URL from before it | 348 // extension process. (It's possible to be showing the URL from before it |
338 // was installed as an app.) | 349 // was installed as an app.) |
339 ExtensionService* extension_service = profile_->GetExtensionService(); | 350 ExtensionService* extension_service = profile_->GetExtensionService(); |
340 extensions::ProcessMap* process_map = extension_service->process_map(); | 351 extensions::ProcessMap* process_map = extension_service->process_map(); |
341 bool is_app = extension_service->IsInstalledApp(url) && | 352 bool is_app = extension_service->IsInstalledApp(url) && |
342 process_map->Contains(web_contents_->GetRenderProcessHost()->GetID()); | 353 process_map->Contains(web_contents_->GetRenderProcessHost()->GetID()); |
343 | 354 |
344 int message_id = GetMessagePrefixID( | 355 int message_id = GetMessagePrefixID( |
345 is_app, | 356 is_app, |
346 HostsExtension(), | 357 HostsExtension(), |
347 profile_->IsOffTheRecord(), | 358 profile_->IsOffTheRecord(), |
348 IsContentsPrerendering(web_contents_), | 359 IsContentsPrerendering(web_contents_), |
349 is_instant_preview_, | 360 is_instant_overlay_, |
350 false); | 361 false); |
351 return l10n_util::GetStringFUTF16(message_id, tab_title); | 362 return l10n_util::GetStringFUTF16(message_id, tab_title); |
352 } | 363 } |
353 | 364 |
354 string16 TaskManagerTabContentsResource::GetProfileName() const { | 365 string16 TaskManagerTabContentsResource::GetProfileName() const { |
355 return GetProfileNameFromInfoCache(profile_); | 366 return GetProfileNameFromInfoCache(profile_); |
356 } | 367 } |
357 | 368 |
358 gfx::ImageSkia TaskManagerTabContentsResource::GetIcon() const { | 369 gfx::ImageSkia TaskManagerTabContentsResource::GetIcon() const { |
359 if (IsContentsPrerendering(web_contents_)) | 370 if (IsContentsPrerendering(web_contents_)) |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
412 return NULL; | 423 return NULL; |
413 } | 424 } |
414 return res_iter->second; | 425 return res_iter->second; |
415 } | 426 } |
416 | 427 |
417 void TaskManagerTabContentsResourceProvider::StartUpdating() { | 428 void TaskManagerTabContentsResourceProvider::StartUpdating() { |
418 DCHECK(!updating_); | 429 DCHECK(!updating_); |
419 updating_ = true; | 430 updating_ = true; |
420 | 431 |
421 // The contents that are tracked by this resource provider are those that | 432 // The contents that are tracked by this resource provider are those that |
422 // are tab contents (WebContents serving as a tab in a Browser), instant | 433 // are tab contents (WebContents serving as a tab in a Browser), Instant |
423 // pages, prerender pages, and background printed pages. | 434 // pages, prerender pages, and background printed pages. |
424 | 435 |
425 // Add all the existing WebContentses. | 436 // Add all the existing WebContentses. |
426 for (TabContentsIterator iterator; !iterator.done(); iterator.Next()) | 437 for (TabContentsIterator iterator; !iterator.done(); iterator.Next()) |
427 Add(*iterator); | 438 Add(*iterator); |
428 | 439 |
429 // Add all the instant pages. | 440 // Add all the Instant pages. |
430 for (chrome::BrowserIterator it; !it.done(); it.Next()) { | 441 for (chrome::BrowserIterator it; !it.done(); it.Next()) { |
431 if (it->instant_controller() && | 442 if (it->instant_controller() && |
432 it->instant_controller()->instant()->GetPreviewContents()) { | 443 it->instant_controller()->instant()->GetOverlayContents()) { |
433 Add(it->instant_controller()->instant()->GetPreviewContents()); | 444 Add(it->instant_controller()->instant()->GetOverlayContents()); |
434 } | 445 } |
435 } | 446 } |
436 | 447 |
437 // Add all the prerender pages. | |
438 std::vector<Profile*> profiles( | 448 std::vector<Profile*> profiles( |
439 g_browser_process->profile_manager()->GetLoadedProfiles()); | 449 g_browser_process->profile_manager()->GetLoadedProfiles()); |
440 for (size_t i = 0; i < profiles.size(); ++i) { | 450 for (size_t i = 0; i < profiles.size(); ++i) { |
| 451 // Add all the prerender pages. |
441 prerender::PrerenderManager* prerender_manager = | 452 prerender::PrerenderManager* prerender_manager = |
442 prerender::PrerenderManagerFactory::GetForProfile(profiles[i]); | 453 prerender::PrerenderManagerFactory::GetForProfile(profiles[i]); |
443 if (prerender_manager) { | 454 if (prerender_manager) { |
444 const std::vector<content::WebContents*> contentses = | 455 const std::vector<content::WebContents*> contentses = |
445 prerender_manager->GetAllPrerenderingContents(); | 456 prerender_manager->GetAllPrerenderingContents(); |
446 for (size_t j = 0; j < contentses.size(); ++j) | 457 for (size_t j = 0; j < contentses.size(); ++j) |
447 Add(contentses[j]); | 458 Add(contentses[j]); |
448 } | 459 } |
| 460 |
| 461 // Add the Instant per-profile page. |
| 462 InstantService* instant_service = |
| 463 InstantServiceFactory::GetForProfile(profiles[i]); |
| 464 if (instant_service && instant_service->loader()->contents()) |
| 465 Add(instant_service->loader()->contents()); |
449 } | 466 } |
450 | 467 |
451 // Add all the pages being background printed. | 468 // Add all the pages being background printed. |
452 printing::BackgroundPrintingManager* printing_manager = | 469 printing::BackgroundPrintingManager* printing_manager = |
453 g_browser_process->background_printing_manager(); | 470 g_browser_process->background_printing_manager(); |
454 for (printing::BackgroundPrintingManager::WebContentsSet::iterator i = | 471 for (printing::BackgroundPrintingManager::WebContentsSet::iterator i = |
455 printing_manager->begin(); | 472 printing_manager->begin(); |
456 i != printing_manager->end(); ++i) { | 473 i != printing_manager->end(); ++i) { |
457 Add(*i); | 474 Add(*i); |
458 } | 475 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
494 new TaskManagerTabContentsResource(web_contents); | 511 new TaskManagerTabContentsResource(web_contents); |
495 resources_[web_contents] = resource; | 512 resources_[web_contents] = resource; |
496 task_manager_->AddResource(resource); | 513 task_manager_->AddResource(resource); |
497 } | 514 } |
498 | 515 |
499 void TaskManagerTabContentsResourceProvider::Add(WebContents* web_contents) { | 516 void TaskManagerTabContentsResourceProvider::Add(WebContents* web_contents) { |
500 if (!updating_) | 517 if (!updating_) |
501 return; | 518 return; |
502 | 519 |
503 // The contents that are tracked by this resource provider are those that | 520 // The contents that are tracked by this resource provider are those that |
504 // are tab contents (WebContents serving as a tab in a Browser), instant | 521 // are tab contents (WebContents serving as a tab in a Browser), Instant |
505 // pages, prerender pages, and background printed pages. | 522 // pages, prerender pages, and background printed pages. |
506 if (!chrome::FindBrowserWithWebContents(web_contents) && | 523 if (!chrome::FindBrowserWithWebContents(web_contents) && |
507 !IsContentsPrerendering(web_contents) && | 524 !IsContentsPrerendering(web_contents) && |
508 !IsContentsInstant(web_contents) && | 525 !IsContentsInstant(web_contents) && |
509 !IsContentsBackgroundPrinted(web_contents)) { | 526 !IsContentsBackgroundPrinted(web_contents)) { |
510 return; | 527 return; |
511 } | 528 } |
512 | 529 |
513 // Don't add dead tabs or tabs that haven't yet connected. | 530 // Don't add dead tabs or tabs that haven't yet connected. |
514 if (!web_contents->GetRenderProcessHost()->GetHandle() || | 531 if (!web_contents->GetRenderProcessHost()->GetHandle() || |
(...skipping 1411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1926 case content::NOTIFICATION_WEB_CONTENTS_CONNECTED: | 1943 case content::NOTIFICATION_WEB_CONTENTS_CONNECTED: |
1927 Add(web_contents->GetRenderViewHost()); | 1944 Add(web_contents->GetRenderViewHost()); |
1928 break; | 1945 break; |
1929 case content::NOTIFICATION_WEB_CONTENTS_DISCONNECTED: | 1946 case content::NOTIFICATION_WEB_CONTENTS_DISCONNECTED: |
1930 Remove(web_contents->GetRenderViewHost()); | 1947 Remove(web_contents->GetRenderViewHost()); |
1931 break; | 1948 break; |
1932 default: | 1949 default: |
1933 NOTREACHED() << "Unexpected notification."; | 1950 NOTREACHED() << "Unexpected notification."; |
1934 } | 1951 } |
1935 } | 1952 } |
OLD | NEW |