OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/ui/webui/about_ui.h" | 5 #include "chrome/browser/ui/webui/about_ui.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
(...skipping 11 matching lines...) Expand all Loading... | |
22 #include "base/strings/string_piece.h" | 22 #include "base/strings/string_piece.h" |
23 #include "base/strings/string_util.h" | 23 #include "base/strings/string_util.h" |
24 #include "base/strings/stringprintf.h" | 24 #include "base/strings/stringprintf.h" |
25 #include "base/strings/utf_string_conversions.h" | 25 #include "base/strings/utf_string_conversions.h" |
26 #include "base/threading/thread.h" | 26 #include "base/threading/thread.h" |
27 #include "base/values.h" | 27 #include "base/values.h" |
28 #include "chrome/browser/about_flags.h" | 28 #include "chrome/browser/about_flags.h" |
29 #include "chrome/browser/browser_process.h" | 29 #include "chrome/browser/browser_process.h" |
30 #include "chrome/browser/defaults.h" | 30 #include "chrome/browser/defaults.h" |
31 #include "chrome/browser/memory/oom_priority_manager.h" | 31 #include "chrome/browser/memory/oom_priority_manager.h" |
32 #include "chrome/browser/memory/tab_stats.h" | |
32 #include "chrome/browser/memory_details.h" | 33 #include "chrome/browser/memory_details.h" |
33 #include "chrome/browser/net/predictor.h" | 34 #include "chrome/browser/net/predictor.h" |
34 #include "chrome/browser/profiles/profile.h" | 35 #include "chrome/browser/profiles/profile.h" |
35 #include "chrome/browser/profiles/profile_manager.h" | 36 #include "chrome/browser/profiles/profile_manager.h" |
36 #include "chrome/browser/ui/browser_dialogs.h" | 37 #include "chrome/browser/ui/browser_dialogs.h" |
37 #include "chrome/common/chrome_paths.h" | 38 #include "chrome/common/chrome_paths.h" |
38 #include "chrome/common/render_messages.h" | 39 #include "chrome/common/render_messages.h" |
39 #include "chrome/common/url_constants.h" | 40 #include "chrome/common/url_constants.h" |
40 #include "chrome/grit/chromium_strings.h" | 41 #include "chrome/grit/chromium_strings.h" |
41 #include "chrome/grit/generated_resources.h" | 42 #include "chrome/grit/generated_resources.h" |
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
482 return WrapWithTR(row); | 483 return WrapWithTR(row); |
483 } | 484 } |
484 | 485 |
485 void AddContentSecurityPolicy(std::string* output) { | 486 void AddContentSecurityPolicy(std::string* output) { |
486 output->append("<meta http-equiv='Content-Security-Policy' " | 487 output->append("<meta http-equiv='Content-Security-Policy' " |
487 "content='default-src 'none';'>"); | 488 "content='default-src 'none';'>"); |
488 } | 489 } |
489 | 490 |
490 // TODO(stevenjb): L10N AboutDiscards. | 491 // TODO(stevenjb): L10N AboutDiscards. |
491 | 492 |
492 std::string AboutDiscardsRun() { | 493 std::string BuildAboutDiscardsRunPage() { |
493 std::string output; | 494 std::string output; |
494 AppendHeader(&output, 0, "About discards"); | 495 AppendHeader(&output, 0, "About discards"); |
495 output.append( | 496 output.append( |
496 base::StringPrintf("<meta http-equiv='refresh' content='2;%s'>", | 497 base::StringPrintf("<meta http-equiv='refresh' content='2;%s'>", |
497 chrome::kChromeUIDiscardsURL)); | 498 chrome::kChromeUIDiscardsURL)); |
498 AddContentSecurityPolicy(&output); | 499 AddContentSecurityPolicy(&output); |
499 output.append(WrapWithTag("p", "Discarding a tab...")); | 500 output.append(WrapWithTag("p", "Discarding a tab...")); |
500 g_browser_process->GetOomPriorityManager()->LogMemoryAndDiscardTab(); | |
501 AppendFooter(&output); | 501 AppendFooter(&output); |
502 return output; | 502 return output; |
503 } | 503 } |
504 | 504 |
505 std::string AboutDiscardsRun(int64 web_content_id) { | |
Georges Khalil
2015/07/21 18:13:37
Let's give this a different name. How about AboutD
proberge
2015/07/21 18:29:07
I don't think that's a good name for it either. Do
Georges Khalil
2015/07/21 18:38:29
Yes, if possible. In that case, there's no reason
proberge
2015/07/21 18:55:09
Done.
| |
506 g_browser_process->GetOomPriorityManager()->DiscardTabById(web_content_id); | |
507 return BuildAboutDiscardsRunPage(); | |
508 } | |
509 | |
510 std::string AboutDiscardsRun() { | |
511 g_browser_process->GetOomPriorityManager()->DiscardTab(); | |
512 return BuildAboutDiscardsRunPage(); | |
513 } | |
514 | |
515 std::vector<std::string> GetTabLines() { | |
516 const char kRunCommand[] = "run"; | |
517 memory::OomPriorityManager* oom = g_browser_process->GetOomPriorityManager(); | |
518 memory::TabStatsList stats = oom->GetTabStats(); | |
519 std::vector<std::string> titles; | |
520 titles.reserve(stats.size()); | |
521 memory::TabStatsList::iterator it = stats.begin(); | |
522 for (; it != stats.end(); ++it) { | |
523 base::string16 str; | |
524 str.reserve(4096); | |
525 str += base::ASCIIToUTF16("<b>"); | |
526 str += base::ASCIIToUTF16(it->is_app ? "[App] " : ""); | |
527 str += base::ASCIIToUTF16(it->is_internal_page ? "[Internal] " : ""); | |
528 str += base::ASCIIToUTF16(it->is_playing_audio ? "[Audio] " : ""); | |
529 str += base::ASCIIToUTF16(it->is_pinned ? "[Pinned] " : ""); | |
530 str += base::ASCIIToUTF16(it->is_discarded ? "[Discarded] " : ""); | |
531 str += base::ASCIIToUTF16("</b>"); | |
532 str += net::EscapeForHTML(it->title); | |
533 #if defined(OS_CHROMEOS) | |
534 str += base::ASCIIToUTF16(base::StringPrintf(" %d ", it->oom_score)); | |
Georges Khalil
2015/07/21 18:13:37
Let's wrap this in parenthesis for better clarity.
proberge
2015/07/21 18:29:07
I don't understand what to wrap - this is an #if,
Georges Khalil
2015/07/21 18:38:29
Should have been more specific. Let's wrap the sco
proberge
2015/07/21 18:55:09
Done.
| |
535 #endif | |
536 if (!it->is_discarded) { | |
537 str += base::ASCIIToUTF16( | |
538 base::StringPrintf(" <a href='%s%s/%ld'>Discard</a>", | |
539 chrome::kChromeUIDiscardsURL, | |
540 kRunCommand, | |
541 it->tab_contents_id)); | |
542 } | |
543 titles.push_back(base::UTF16ToUTF8((str))); | |
544 } | |
545 return titles; | |
546 } | |
547 | |
505 std::string AboutDiscards(const std::string& path) { | 548 std::string AboutDiscards(const std::string& path) { |
506 std::string output; | 549 std::string output; |
550 std::vector<std::string> path_split; | |
551 int64 web_content_id; | |
507 const char kRunCommand[] = "run"; | 552 const char kRunCommand[] = "run"; |
Georges Khalil
2015/07/21 18:13:37
Let's dedupe this and put it higher up and give it
proberge
2015/07/21 18:29:07
Done.
| |
508 if (path == kRunCommand) | 553 |
554 base::SplitString(path, '/', &path_split); | |
555 if (path_split.size() == 2 && path_split[0] == kRunCommand && | |
556 base::StringToInt64(path_split[1], &web_content_id)) { | |
557 return AboutDiscardsRun(web_content_id); | |
558 } else if (path_split.size() == 1 && path_split[0] == kRunCommand) { | |
509 return AboutDiscardsRun(); | 559 return AboutDiscardsRun(); |
560 } | |
561 | |
510 AppendHeader(&output, 0, "About discards"); | 562 AppendHeader(&output, 0, "About discards"); |
511 AddContentSecurityPolicy(&output); | 563 AddContentSecurityPolicy(&output); |
512 AppendBody(&output); | 564 AppendBody(&output); |
513 output.append("<h3>About discards</h3>"); | 565 output.append("<h3>Discarded Tabs</h3>"); |
514 output.append( | 566 output.append( |
515 "<p>Tabs sorted from most interesting to least interesting. The least " | 567 "<p>Tabs sorted from most interesting to least interesting. The least " |
516 "interesting tab may be discarded if we run out of physical memory.</p>"); | 568 "interesting tab may be discarded if we run out of physical memory.</p>"); |
517 | 569 |
518 memory::OomPriorityManager* oom = g_browser_process->GetOomPriorityManager(); | 570 memory::OomPriorityManager* oom = g_browser_process->GetOomPriorityManager(); |
519 std::vector<base::string16> titles = oom->GetTabTitles(); | 571 std::vector<std::string> titles = GetTabLines(); |
520 if (!titles.empty()) { | 572 if (!titles.empty()) { |
521 output.append("<ul>"); | 573 output.append("<ul>"); |
522 std::vector<base::string16>::iterator it = titles.begin(); | 574 std::vector<std::string>::iterator it = titles.begin(); |
523 for ( ; it != titles.end(); ++it) { | 575 for ( ; it != titles.end(); ++it) { |
524 std::string title = base::UTF16ToUTF8(*it); | 576 output.append(WrapWithTag("li", *it)); |
525 title = net::EscapeForHTML(title); | |
526 output.append(WrapWithTag("li", title)); | |
527 } | 577 } |
528 output.append("</ul>"); | 578 output.append("</ul>"); |
529 } else { | 579 } else { |
530 output.append("<p>None found. Wait 10 seconds, then refresh.</p>"); | 580 output.append("<p>None found. Wait 10 seconds, then refresh.</p>"); |
531 } | 581 } |
532 output.append(base::StringPrintf("%d discards this session. ", | 582 output.append( |
533 oom->discard_count())); | 583 base::StringPrintf("%d discards this session. ", oom->discard_count())); |
534 output.append(base::StringPrintf("<a href='%s%s'>Discard tab now</a>", | 584 output.append(base::StringPrintf("<a href='%s%s'>Discard tab now</a>", |
535 chrome::kChromeUIDiscardsURL, | 585 chrome::kChromeUIDiscardsURL, kRunCommand)); |
536 kRunCommand)); | 586 |
537 #if defined(OS_CHROMEOS) | 587 #if defined(OS_CHROMEOS) |
538 base::SystemMemoryInfoKB meminfo; | 588 base::SystemMemoryInfoKB meminfo; |
539 base::GetSystemMemoryInfo(&meminfo); | 589 base::GetSystemMemoryInfo(&meminfo); |
540 output.append("<h3>System memory information in MB</h3>"); | 590 output.append("<h3>System memory information in MB</h3>"); |
541 output.append("<table>"); | 591 output.append("<table>"); |
542 // Start with summary statistics. | 592 // Start with summary statistics. |
543 output.append(AddStringRow( | 593 output.append(AddStringRow( |
544 "Total", base::IntToString(meminfo.total / 1024))); | 594 "Total", base::IntToString(meminfo.total / 1024))); |
545 output.append(AddStringRow( | 595 output.append(AddStringRow( |
546 "Free", base::IntToString(meminfo.free / 1024))); | 596 "Free", base::IntToString(meminfo.free / 1024))); |
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
986 Profile* profile = Profile::FromWebUI(web_ui); | 1036 Profile* profile = Profile::FromWebUI(web_ui); |
987 | 1037 |
988 #if defined(ENABLE_THEMES) | 1038 #if defined(ENABLE_THEMES) |
989 // Set up the chrome://theme/ source. | 1039 // Set up the chrome://theme/ source. |
990 ThemeSource* theme = new ThemeSource(profile); | 1040 ThemeSource* theme = new ThemeSource(profile); |
991 content::URLDataSource::Add(profile, theme); | 1041 content::URLDataSource::Add(profile, theme); |
992 #endif | 1042 #endif |
993 | 1043 |
994 content::URLDataSource::Add(profile, new AboutUIHTMLSource(name, profile)); | 1044 content::URLDataSource::Add(profile, new AboutUIHTMLSource(name, profile)); |
995 } | 1045 } |
OLD | NEW |