summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browser_about_handler.cc
diff options
context:
space:
mode:
authorjamescook@chromium.org <jamescook@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-08 17:06:59 +0000
committerjamescook@chromium.org <jamescook@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-08 17:06:59 +0000
commitb228ecf1a75ba32fd391b603e03cc206fcda6b9a (patch)
tree9068dbb7c4e19010198183ca663a5907ee86e5da /chrome/browser/browser_about_handler.cc
parentda0832b6f6932fa4676a4da641d6ae0fb0764362 (diff)
downloadchromium_src-b228ecf1a75ba32fd391b603e03cc206fcda6b9a.zip
chromium_src-b228ecf1a75ba32fd391b603e03cc206fcda6b9a.tar.gz
chromium_src-b228ecf1a75ba32fd391b603e03cc206fcda6b9a.tar.bz2
CrOS - about:discards shows tab to discard in OOM situations
Added a simple, non-localized debug page to show the output of the OOM-adjust algorithm, in preparation for discarding a tab in low memory situations. See "Out of memory handling" Chrome OS design doc for details. BUG=chromium-os:18375 TEST=open 3 tabs and navigate to web pages, wait 10 seconds, then open a tab to "about:discards". It should list 3 tabs and itself. Order is unimportant for now. Review URL: http://codereview.chromium.org/7754002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@100170 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser_about_handler.cc')
-rw-r--r--chrome/browser/browser_about_handler.cc108
1 files changed, 74 insertions, 34 deletions
diff --git a/chrome/browser/browser_about_handler.cc b/chrome/browser/browser_about_handler.cc
index e460e21..1e37ef36 100644
--- a/chrome/browser/browser_about_handler.cc
+++ b/chrome/browser/browser_about_handler.cc
@@ -77,6 +77,7 @@
#include "chrome/browser/chromeos/customization_document.h"
#include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/chromeos/version_loader.h"
+#include "chrome/browser/oom_priority_manager.h"
#include "content/browser/zygote_host_linux.h"
#elif defined(OS_LINUX)
#include "content/browser/zygote_host_linux.h"
@@ -158,6 +159,7 @@ const char* const kChromePaths[] = {
chrome::kChromeUIActiveDownloadsHost,
chrome::kChromeUIChooseMobileNetworkHost,
chrome::kChromeUICryptohomeHost,
+ chrome::kChromeUIDiscardsHost,
chrome::kChromeUIImageBurnerHost,
chrome::kChromeUIKeyboardOverlayHost,
chrome::kChromeUILoginHost,
@@ -191,8 +193,9 @@ const char* const kAboutSourceNames[] = {
chrome::kChromeUISandboxHost,
#endif
#if defined(OS_CHROMEOS)
- chrome::kChromeUINetworkHost,
chrome::kChromeUICryptohomeHost,
+ chrome::kChromeUIDiscardsHost,
+ chrome::kChromeUINetworkHost,
chrome::kChromeUIOSCreditsHost,
#endif
};
@@ -255,7 +258,7 @@ class AboutMemoryHandler : public MemoryDetails {
request_id_(request_id) {
}
- virtual void OnDetailsAvailable();
+ virtual void OnDetailsAvailable() OVERRIDE;
private:
~AboutMemoryHandler() {}
@@ -443,6 +446,11 @@ std::string ChromeURLs() {
// Html output helper functions
// TODO(stevenjb): L10N this.
+// Helper function to wrap HTML with a tag.
+std::string WrapWithTag(const std::string& tag, const std::string& text) {
+ return "<" + tag + ">" + text + "</" + tag + ">";
+}
+
// Helper function to wrap Html with <th> tag.
std::string WrapWithTH(const std::string& text) {
return "<th>" + text + "</th>";
@@ -670,6 +678,31 @@ std::string AboutCryptohome(const std::string& query) {
return GetCryptohomeHtmlInfo(refresh);
}
+std::string AboutDiscards() {
+ std::string output;
+ AppendHeader(&output, 0, "About discards");
+ AppendBody(&output);
+ output.append("<h3>About discards</h3>");
+ output.append(
+ "<p>Tabs sorted from most interesting to least interesting. The least "
+ "interesting tab may be discarded if we run out of physical memory.</p>");
+
+ std::vector<string16> titles = browser::OomPriorityManager::GetTabTitles();
+ if (!titles.empty()) {
+ output.append("<ol>");
+ std::vector<string16>::iterator it = titles.begin();
+ for ( ; it != titles.end(); ++it) {
+ std::string title = UTF16ToUTF8(*it);
+ output.append(WrapWithTag("li", title));
+ }
+ output.append("</ol>");
+ } else {
+ output.append("<p>None found. Wait 10 seconds, then refresh.</p>");
+ }
+ AppendFooter(&output);
+ return output;
+}
+
#endif // OS_CHROMEOS
// AboutDnsHandler bounces the request back to the IO thread to collect
@@ -1346,26 +1379,62 @@ void AboutSource::StartDataRequest(const std::string& path,
int request_id) {
std::string response;
std::string host = source_name();
- if (host == chrome::kChromeUIDNSHost) {
+ // Add your data source here, in alphabetical order.
+ if (host == chrome::kChromeUIChromeURLsHost) {
+ response = ChromeURLs();
+ } else if (host == chrome::kChromeUICreditsHost) {
+ int idr = (path == kCreditsJsPath) ? IDR_CREDITS_JS : IDR_CREDITS_HTML;
+ response = ResourceBundle::GetSharedInstance().GetRawDataResource(
+ idr).as_string();
+#if defined(OS_CHROMEOS)
+ } else if (host == chrome::kChromeUICryptohomeHost) {
+ response = AboutCryptohome(path);
+ } else if (host == chrome::kChromeUIDiscardsHost) {
+ response = AboutDiscards();
+#endif
+ } else if (host == chrome::kChromeUIDNSHost) {
AboutDnsHandler::Start(this, request_id);
return;
} else if (host == chrome::kChromeUIHistogramsHost) {
response = AboutHistograms(path);
+#if defined(OS_LINUX)
+ } else if (host == chrome::kChromeUILinuxProxyConfigHost) {
+ response = AboutLinuxProxyConfig();
+#endif
} else if (host == chrome::kChromeUIMemoryHost) {
response = GetAboutMemoryRedirectResponse(profile());
} else if (host == chrome::kChromeUIMemoryRedirectHost) {
AboutMemory(path, this, request_id);
return;
+#if defined(OS_CHROMEOS)
+ } else if (host == chrome::kChromeUINetworkHost) {
+ response = AboutNetwork(path);
+ } else if (host == chrome::kChromeUIOSCreditsHost) {
+ response = ResourceBundle::GetSharedInstance().GetRawDataResource(
+ IDR_OS_CREDITS_HTML).as_string();
+#endif
+#if defined(OS_LINUX)
+ } else if (host == chrome::kChromeUISandboxHost) {
+ response = AboutSandbox();
+#endif
+ } else if (host == chrome::kChromeUIStatsHost) {
+ response = AboutStats(path);
#ifdef TRACK_ALL_TASK_OBJECTS
} else if (host == chrome::kChromeUITaskManagerHost) {
response = AboutObjects(path);
#endif
- } else if (host == chrome::kChromeUIStatsHost) {
- response = AboutStats(path);
#if defined(USE_TCMALLOC)
} else if (host == chrome::kChromeUITCMallocHost) {
response = AboutTcmalloc();
#endif
+ } else if (host == chrome::kChromeUITermsHost) {
+#if defined(OS_CHROMEOS)
+ ChromeOSTermsHandler::Start(this, path, request_id);
+ return;
+#else
+ response = ResourceBundle::GetSharedInstance().GetRawDataResource(
+ IDR_TERMS_HTML).as_string();
+#endif
} else if (host == chrome::kChromeUIVersionHost) {
if (path == kStringsJsPath) {
#if defined(OS_CHROMEOS)
@@ -1379,35 +1448,6 @@ void AboutSource::StartDataRequest(const std::string& path,
} else {
response = AboutVersionStaticContent(path);
}
- } else if (host == chrome::kChromeUICreditsHost) {
- int idr = (path == kCreditsJsPath) ? IDR_CREDITS_JS : IDR_CREDITS_HTML;
- response = ResourceBundle::GetSharedInstance().GetRawDataResource(
- idr).as_string();
- } else if (host == chrome::kChromeUIChromeURLsHost) {
- response = ChromeURLs();
-#if defined(OS_CHROMEOS)
- } else if (host == chrome::kChromeUIOSCreditsHost) {
- response = ResourceBundle::GetSharedInstance().GetRawDataResource(
- IDR_OS_CREDITS_HTML).as_string();
- } else if (host == chrome::kChromeUINetworkHost) {
- response = AboutNetwork(path);
- } else if (host == chrome::kChromeUICryptohomeHost) {
- response = AboutCryptohome(path);
-#endif
- } else if (host == chrome::kChromeUITermsHost) {
-#if defined(OS_CHROMEOS)
- ChromeOSTermsHandler::Start(this, path, request_id);
- return;
-#else
- response = ResourceBundle::GetSharedInstance().GetRawDataResource(
- IDR_TERMS_HTML).as_string();
-#endif
-#if defined(OS_LINUX)
- } else if (host == chrome::kChromeUILinuxProxyConfigHost) {
- response = AboutLinuxProxyConfig();
- } else if (host == chrome::kChromeUISandboxHost) {
- response = AboutSandbox();
-#endif
}
FinishDataRequest(response, request_id);