| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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/browser_about_handler.h" | 5 #include "chrome/browser/browser_about_handler.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/file_version_info.h" | 10 #include "base/file_version_info.h" |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 if (url->SchemeIs(chrome::kJavaScriptScheme)) | 246 if (url->SchemeIs(chrome::kJavaScriptScheme)) |
| 247 return true; | 247 return true; |
| 248 return WebContents::SupportsURL(url); | 248 return WebContents::SupportsURL(url); |
| 249 } | 249 } |
| 250 | 250 |
| 251 | 251 |
| 252 // static | 252 // static |
| 253 std::string BrowserAboutHandler::AboutVersion() { | 253 std::string BrowserAboutHandler::AboutVersion() { |
| 254 // Strings used in the JsTemplate file. | 254 // Strings used in the JsTemplate file. |
| 255 DictionaryValue localized_strings; | 255 DictionaryValue localized_strings; |
| 256 localized_strings.SetString(L"title", | 256 localized_strings.SetString( |
| 257 l10n_util::GetString(IDS_ABOUT_VERSION_TITLE)); | 257 ASCIIToUTF16("title"), |
| 258 WideToUTF16Hack(l10n_util::GetString(IDS_ABOUT_VERSION_TITLE))); |
| 258 scoped_ptr<FileVersionInfo> version_info( | 259 scoped_ptr<FileVersionInfo> version_info( |
| 259 FileVersionInfo::CreateFileVersionInfoForCurrentModule()); | 260 FileVersionInfo::CreateFileVersionInfoForCurrentModule()); |
| 260 if (version_info == NULL) { | 261 if (version_info == NULL) { |
| 261 DLOG(ERROR) << "Unable to create FileVersionInfo object"; | 262 DLOG(ERROR) << "Unable to create FileVersionInfo object"; |
| 262 return std::string(); | 263 return std::string(); |
| 263 } | 264 } |
| 264 | 265 |
| 265 std::wstring webkit_version = UTF8ToWide(webkit_glue::GetWebKitVersion()); | 266 std::wstring webkit_version = UTF8ToWide(webkit_glue::GetWebKitVersion()); |
| 266 #ifdef CHROME_V8 | 267 #ifdef CHROME_V8 |
| 267 const char* v8_vers = v8::V8::GetVersion(); | 268 const char* v8_vers = v8::V8::GetVersion(); |
| 268 std::wstring js_version = UTF8ToWide(v8_vers); | 269 std::wstring js_version = UTF8ToWide(v8_vers); |
| 269 std::wstring js_engine = L"V8"; | 270 std::wstring js_engine = L"V8"; |
| 270 #else | 271 #else |
| 271 std::wstring js_version = webkit_version; | 272 std::wstring js_version = webkit_version; |
| 272 std::wstring js_engine = L"JavaScriptCore"; | 273 std::wstring js_engine = L"JavaScriptCore"; |
| 273 #endif | 274 #endif |
| 274 | 275 |
| 275 localized_strings.SetString(L"name", | 276 localized_strings.SetString( |
| 276 l10n_util::GetString(IDS_PRODUCT_NAME)); | 277 ASCIIToUTF16("name"), |
| 277 localized_strings.SetString(L"version", version_info->file_version()); | 278 WideToUTF16Hack(l10n_util::GetString(IDS_PRODUCT_NAME))); |
| 278 localized_strings.SetString(L"js_engine", js_engine); | 279 localized_strings.SetString(ASCIIToUTF16("version"), |
| 279 localized_strings.SetString(L"js_version", js_version); | 280 WideToUTF16Hack(version_info->file_version())); |
| 280 localized_strings.SetString(L"webkit_version", webkit_version); | 281 localized_strings.SetString(ASCIIToUTF16("js_engine"), |
| 281 localized_strings.SetString(L"company", | 282 WideToUTF16Hack(js_engine)); |
| 282 l10n_util::GetString(IDS_ABOUT_VERSION_COMPANY_NAME)); | 283 localized_strings.SetString(ASCIIToUTF16("js_version"), |
| 283 localized_strings.SetString(L"copyright", | 284 WideToUTF16Hack(js_version)); |
| 284 l10n_util::GetString(IDS_ABOUT_VERSION_COPYRIGHT)); | 285 localized_strings.SetString(ASCIIToUTF16("webkit_version"), |
| 285 localized_strings.SetString(L"cl", version_info->last_change()); | 286 WideToUTF16Hack(webkit_version)); |
| 287 localized_strings.SetString( |
| 288 ASCIIToUTF16("company"), |
| 289 WideToUTF16Hack(l10n_util::GetString(IDS_ABOUT_VERSION_COMPANY_NAME))); |
| 290 localized_strings.SetString( |
| 291 ASCIIToUTF16("copyright"), |
| 292 WideToUTF16Hack(l10n_util::GetString(IDS_ABOUT_VERSION_COPYRIGHT))); |
| 293 localized_strings.SetString(ASCIIToUTF16("cl"), |
| 294 WideToUTF16Hack(version_info->last_change())); |
| 286 if (version_info->is_official_build()) { | 295 if (version_info->is_official_build()) { |
| 287 localized_strings.SetString(L"official", | 296 localized_strings.SetString( |
| 288 l10n_util::GetString(IDS_ABOUT_VERSION_OFFICIAL)); | 297 ASCIIToUTF16("official"), |
| 298 WideToUTF16Hack(l10n_util::GetString(IDS_ABOUT_VERSION_OFFICIAL))); |
| 289 } else { | 299 } else { |
| 290 localized_strings.SetString(L"official", | 300 localized_strings.SetString( |
| 291 l10n_util::GetString(IDS_ABOUT_VERSION_UNOFFICIAL)); | 301 ASCIIToUTF16("official"), |
| 302 WideToUTF16Hack(l10n_util::GetString(IDS_ABOUT_VERSION_UNOFFICIAL))); |
| 292 } | 303 } |
| 293 localized_strings.SetString(L"useragent", | 304 localized_strings.SetString(ASCIIToUTF16("useragent"), |
| 294 UTF8ToWide(webkit_glue::GetUserAgent(GURL()))); | 305 UTF8ToUTF16(webkit_glue::GetUserAgent(GURL()))); |
| 295 | 306 |
| 296 static const StringPiece version_html( | 307 static const StringPiece version_html( |
| 297 ResourceBundle::GetSharedInstance().GetRawDataResource( | 308 ResourceBundle::GetSharedInstance().GetRawDataResource( |
| 298 IDR_ABOUT_VERSION_HTML)); | 309 IDR_ABOUT_VERSION_HTML)); |
| 299 | 310 |
| 300 return jstemplate_builder::GetTemplateHtml( | 311 return jstemplate_builder::GetTemplateHtml( |
| 301 version_html, &localized_strings, "t" /* template root node id */); | 312 version_html, &localized_strings, "t" /* template root node id */); |
| 302 } | 313 } |
| 303 | 314 |
| 304 // static | 315 // static |
| (...skipping 20 matching lines...) Expand all Loading... |
| 325 ResourceBundle::GetSharedInstance().GetDataResource( | 336 ResourceBundle::GetSharedInstance().GetDataResource( |
| 326 IDR_TERMS_HTML); | 337 IDR_TERMS_HTML); |
| 327 | 338 |
| 328 return terms_html; | 339 return terms_html; |
| 329 } | 340 } |
| 330 | 341 |
| 331 // static | 342 // static |
| 332 std::string BrowserAboutHandler::AboutPlugins() { | 343 std::string BrowserAboutHandler::AboutPlugins() { |
| 333 // Strings used in the JsTemplate file. | 344 // Strings used in the JsTemplate file. |
| 334 DictionaryValue localized_strings; | 345 DictionaryValue localized_strings; |
| 335 localized_strings.SetString(L"title", | 346 localized_strings.SetString( |
| 336 l10n_util::GetString(IDS_ABOUT_PLUGINS_TITLE)); | 347 ASCIIToUTF16("title"), |
| 337 localized_strings.SetString(L"headingPlugs", | 348 WideToUTF16Hack(l10n_util::GetString(IDS_ABOUT_PLUGINS_TITLE))); |
| 338 l10n_util::GetString(IDS_ABOUT_PLUGINS_HEADING_PLUGS)); | 349 localized_strings.SetString( |
| 339 localized_strings.SetString(L"headingNoPlugs", | 350 ASCIIToUTF16("headingPlugs"), |
| 340 l10n_util::GetString(IDS_ABOUT_PLUGINS_HEADING_NOPLUGS)); | 351 WideToUTF16Hack(l10n_util::GetString(IDS_ABOUT_PLUGINS_HEADING_PLUGS))); |
| 341 localized_strings.SetString(L"filename", | 352 localized_strings.SetString( |
| 342 l10n_util::GetString(IDS_ABOUT_PLUGINS_FILENAME_LABEL)); | 353 ASCIIToUTF16("headingNoPlugs"), |
| 343 localized_strings.SetString(L"mimetype", | 354 WideToUTF16Hack(l10n_util::GetString(IDS_ABOUT_PLUGINS_HEADING_NOPLUGS))); |
| 344 l10n_util::GetString(IDS_ABOUT_PLUGINS_MIMETYPE_LABEL)); | 355 localized_strings.SetString( |
| 345 localized_strings.SetString(L"description", | 356 ASCIIToUTF16("filename"), |
| 346 l10n_util::GetString(IDS_ABOUT_PLUGINS_DESCRIPTION_LABEL)); | 357 WideToUTF16Hack(l10n_util::GetString(IDS_ABOUT_PLUGINS_FILENAME_LABEL))); |
| 347 localized_strings.SetString(L"suffixes", | 358 localized_strings.SetString( |
| 348 l10n_util::GetString(IDS_ABOUT_PLUGINS_SUFFIX_LABEL)); | 359 ASCIIToUTF16("mimetype"), |
| 349 localized_strings.SetString(L"enabled", | 360 WideToUTF16Hack(l10n_util::GetString(IDS_ABOUT_PLUGINS_MIMETYPE_LABEL))); |
| 350 l10n_util::GetString(IDS_ABOUT_PLUGINS_ENABLED_LABEL)); | 361 localized_strings.SetString( |
| 351 localized_strings.SetString(L"enabled_yes", | 362 ASCIIToUTF16("description"), |
| 352 l10n_util::GetString(IDS_ABOUT_PLUGINS_ENABLED_YES)); | 363 WideToUTF16Hack( |
| 353 localized_strings.SetString(L"enabled_no", | 364 l10n_util::GetString(IDS_ABOUT_PLUGINS_DESCRIPTION_LABEL))); |
| 354 l10n_util::GetString(IDS_ABOUT_PLUGINS_ENABLED_NO)); | 365 localized_strings.SetString( |
| 366 ASCIIToUTF16("suffixes"), |
| 367 WideToUTF16Hack(l10n_util::GetString(IDS_ABOUT_PLUGINS_SUFFIX_LABEL))); |
| 368 localized_strings.SetString( |
| 369 ASCIIToUTF16("enabled"), |
| 370 WideToUTF16Hack(l10n_util::GetString(IDS_ABOUT_PLUGINS_ENABLED_LABEL))); |
| 371 localized_strings.SetString( |
| 372 ASCIIToUTF16("enabled_yes"), |
| 373 WideToUTF16Hack(l10n_util::GetString(IDS_ABOUT_PLUGINS_ENABLED_YES))); |
| 374 localized_strings.SetString( |
| 375 ASCIIToUTF16("enabled_no"), |
| 376 WideToUTF16Hack(l10n_util::GetString(IDS_ABOUT_PLUGINS_ENABLED_NO))); |
| 355 | 377 |
| 356 static const StringPiece plugins_html( | 378 static const StringPiece plugins_html( |
| 357 ResourceBundle::GetSharedInstance().GetRawDataResource( | 379 ResourceBundle::GetSharedInstance().GetRawDataResource( |
| 358 IDR_ABOUT_PLUGINS_HTML)); | 380 IDR_ABOUT_PLUGINS_HTML)); |
| 359 | 381 |
| 360 return jstemplate_builder::GetTemplateHtml( | 382 return jstemplate_builder::GetTemplateHtml( |
| 361 plugins_html, &localized_strings, "t" /* template root node id */); | 383 plugins_html, &localized_strings, "t" /* template root node id */); |
| 362 } | 384 } |
| 363 | 385 |
| 364 // static | 386 // static |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 // stats computations across runs. | 419 // stats computations across runs. |
| 398 static DictionaryValue root; | 420 static DictionaryValue root; |
| 399 | 421 |
| 400 StatsTable* table = StatsTable::current(); | 422 StatsTable* table = StatsTable::current(); |
| 401 if (!table) | 423 if (!table) |
| 402 return std::string(); | 424 return std::string(); |
| 403 | 425 |
| 404 // We maintain two lists - one for counters and one for timers. | 426 // We maintain two lists - one for counters and one for timers. |
| 405 // Timers actually get stored on both lists. | 427 // Timers actually get stored on both lists. |
| 406 ListValue* counters; | 428 ListValue* counters; |
| 407 if (!root.GetList(L"counters", &counters)) { | 429 if (!root.GetList(ASCIIToUTF16("counters"), &counters)) { |
| 408 counters = new ListValue(); | 430 counters = new ListValue(); |
| 409 root.Set(L"counters", counters); | 431 root.Set(ASCIIToUTF16("counters"), counters); |
| 410 } | 432 } |
| 411 | 433 |
| 412 ListValue* timers; | 434 ListValue* timers; |
| 413 if (!root.GetList(L"timers", &timers)) { | 435 if (!root.GetList(ASCIIToUTF16("timers"), &timers)) { |
| 414 timers = new ListValue(); | 436 timers = new ListValue(); |
| 415 root.Set(L"timers", timers); | 437 root.Set(ASCIIToUTF16("timers"), timers); |
| 416 } | 438 } |
| 417 | 439 |
| 418 // NOTE: Counters start at index 1. | 440 // NOTE: Counters start at index 1. |
| 419 for (int index = 1; index <= table->GetMaxCounters(); index++) { | 441 for (int index = 1; index <= table->GetMaxCounters(); index++) { |
| 420 // Get the counter's full name | 442 // Get the counter's full name |
| 421 std::string full_name = table->GetRowName(index); | 443 std::string full_name = table->GetRowName(index); |
| 422 if (full_name.length() == 0) | 444 if (full_name.length() == 0) |
| 423 break; | 445 break; |
| 424 DCHECK(full_name[1] == ':'); | 446 DCHECK(full_name[1] == ':'); |
| 425 char counter_type = full_name[0]; | 447 char counter_type = full_name[0]; |
| 426 std::string name = full_name.substr(2); | 448 std::string name = full_name.substr(2); |
| 427 | 449 |
| 428 // JSON doesn't allow '.' in names. | 450 // JSON doesn't allow '.' in names. |
| 429 size_t pos; | 451 size_t pos; |
| 430 while ((pos = name.find(".")) != std::string::npos) | 452 while ((pos = name.find(".")) != std::string::npos) |
| 431 name.replace(pos, 1, ":"); | 453 name.replace(pos, 1, ":"); |
| 432 | 454 |
| 433 // Try to see if this name already exists. | 455 // Try to see if this name already exists. |
| 434 DictionaryValue* counter = NULL; | 456 DictionaryValue* counter = NULL; |
| 435 for (size_t scan_index = 0; | 457 for (size_t scan_index = 0; |
| 436 scan_index < counters->GetSize(); scan_index++) { | 458 scan_index < counters->GetSize(); scan_index++) { |
| 437 DictionaryValue* dictionary; | 459 DictionaryValue* dictionary; |
| 438 if (counters->GetDictionary(scan_index, &dictionary)) { | 460 if (counters->GetDictionary(scan_index, &dictionary)) { |
| 439 std::wstring scan_name; | 461 string16 scan_name; |
| 440 if (dictionary->GetString(L"name", &scan_name) && | 462 if (dictionary->GetString(ASCIIToUTF16("name"), &scan_name) && |
| 441 WideToASCII(scan_name) == name) { | 463 UTF16ToUTF8(scan_name) == name) { |
| 442 counter = dictionary; | 464 counter = dictionary; |
| 443 } | 465 } |
| 444 } else { | 466 } else { |
| 445 NOTREACHED(); // Should always be there | 467 NOTREACHED(); // Should always be there |
| 446 } | 468 } |
| 447 } | 469 } |
| 448 | 470 |
| 449 if (counter == NULL) { | 471 if (counter == NULL) { |
| 450 counter = new DictionaryValue(); | 472 counter = new DictionaryValue(); |
| 451 counter->SetString(L"name", ASCIIToWide(name)); | 473 counter->SetString(ASCIIToUTF16("name"), UTF8ToUTF16(name)); |
| 452 counters->Append(counter); | 474 counters->Append(counter); |
| 453 } | 475 } |
| 454 | 476 |
| 455 switch (counter_type) { | 477 switch (counter_type) { |
| 456 case 'c': | 478 case 'c': |
| 457 { | 479 { |
| 458 int new_value = table->GetRowValue(index); | 480 int new_value = table->GetRowValue(index); |
| 459 int prior_value = 0; | 481 int prior_value = 0; |
| 460 int delta = 0; | 482 int delta = 0; |
| 461 if (counter->GetInteger(L"value", &prior_value)) { | 483 if (counter->GetInteger(ASCIIToUTF16("value"), &prior_value)) { |
| 462 delta = new_value - prior_value; | 484 delta = new_value - prior_value; |
| 463 } | 485 } |
| 464 counter->SetInteger(L"value", new_value); | 486 counter->SetInteger(ASCIIToUTF16("value"), new_value); |
| 465 counter->SetInteger(L"delta", delta); | 487 counter->SetInteger(ASCIIToUTF16("delta"), delta); |
| 466 } | 488 } |
| 467 break; | 489 break; |
| 468 case 'm': | 490 case 'm': |
| 469 { | 491 { |
| 470 // TODO(mbelshe): implement me. | 492 // TODO(mbelshe): implement me. |
| 471 } | 493 } |
| 472 break; | 494 break; |
| 473 case 't': | 495 case 't': |
| 474 { | 496 { |
| 475 int time = table->GetRowValue(index); | 497 int time = table->GetRowValue(index); |
| 476 counter->SetInteger(L"time", time); | 498 counter->SetInteger(ASCIIToUTF16("time"), time); |
| 477 | 499 |
| 478 // Store this on the timers list as well. | 500 // Store this on the timers list as well. |
| 479 timers->Append(counter); | 501 timers->Append(counter); |
| 480 } | 502 } |
| 481 break; | 503 break; |
| 482 default: | 504 default: |
| 483 NOTREACHED(); | 505 NOTREACHED(); |
| 484 } | 506 } |
| 485 } | 507 } |
| 486 | 508 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 512 } | 534 } |
| 513 | 535 |
| 514 // Helper for AboutMemory to bind results from a ProcessMetrics object | 536 // Helper for AboutMemory to bind results from a ProcessMetrics object |
| 515 // to a DictionaryValue. Fills ws_usage and comm_usage so that the objects | 537 // to a DictionaryValue. Fills ws_usage and comm_usage so that the objects |
| 516 // can be used in caller's scope (e.g for appending to a net total). | 538 // can be used in caller's scope (e.g for appending to a net total). |
| 517 void AboutMemoryHandler::BindProcessMetrics(DictionaryValue* data, | 539 void AboutMemoryHandler::BindProcessMetrics(DictionaryValue* data, |
| 518 ProcessMemoryInformation* info) { | 540 ProcessMemoryInformation* info) { |
| 519 DCHECK(data && info); | 541 DCHECK(data && info); |
| 520 | 542 |
| 521 // Bind metrics to dictionary. | 543 // Bind metrics to dictionary. |
| 522 data->SetInteger(L"ws_priv", static_cast<int>(info->working_set.priv)); | 544 data->SetInteger(ASCIIToUTF16("ws_priv"), |
| 523 data->SetInteger(L"ws_shareable", | 545 static_cast<int>(info->working_set.priv)); |
| 546 data->SetInteger(ASCIIToUTF16("ws_shareable"), |
| 524 static_cast<int>(info->working_set.shareable)); | 547 static_cast<int>(info->working_set.shareable)); |
| 525 data->SetInteger(L"ws_shared", static_cast<int>(info->working_set.shared)); | 548 data->SetInteger(ASCIIToUTF16("ws_shared"), |
| 526 data->SetInteger(L"comm_priv", static_cast<int>(info->committed.priv)); | 549 static_cast<int>(info->working_set.shared)); |
| 527 data->SetInteger(L"comm_map", static_cast<int>(info->committed.mapped)); | 550 data->SetInteger(ASCIIToUTF16("comm_priv"), |
| 528 data->SetInteger(L"comm_image", static_cast<int>(info->committed.image)); | 551 static_cast<int>(info->committed.priv)); |
| 529 data->SetInteger(L"pid", info->pid); | 552 data->SetInteger(ASCIIToUTF16("comm_map"), |
| 530 data->SetString(L"version", info->version); | 553 static_cast<int>(info->committed.mapped)); |
| 531 data->SetInteger(L"processes", info->num_processes); | 554 data->SetInteger(ASCIIToUTF16("comm_image"), |
| 555 static_cast<int>(info->committed.image)); |
| 556 data->SetInteger(ASCIIToUTF16("pid"), info->pid); |
| 557 data->SetString(ASCIIToUTF16("version"), WideToUTF16Hack(info->version)); |
| 558 data->SetInteger(ASCIIToUTF16("processes"), info->num_processes); |
| 532 } | 559 } |
| 533 | 560 |
| 534 // Helper for AboutMemory to append memory usage information for all | 561 // Helper for AboutMemory to append memory usage information for all |
| 535 // sub-processes (i.e. renderers, plugins) used by Chrome. | 562 // sub-processes (i.e. renderers, plugins) used by Chrome. |
| 536 void AboutMemoryHandler::AppendProcess(ListValue* child_data, | 563 void AboutMemoryHandler::AppendProcess(ListValue* child_data, |
| 537 ProcessMemoryInformation* info) { | 564 ProcessMemoryInformation* info) { |
| 538 DCHECK(child_data && info); | 565 DCHECK(child_data && info); |
| 539 | 566 |
| 540 // Append a new DictionaryValue for this renderer to our list. | 567 // Append a new DictionaryValue for this renderer to our list. |
| 541 DictionaryValue* child = new DictionaryValue(); | 568 DictionaryValue* child = new DictionaryValue(); |
| 542 child_data->Append(child); | 569 child_data->Append(child); |
| 543 BindProcessMetrics(child, info); | 570 BindProcessMetrics(child, info); |
| 544 | 571 |
| 545 std::wstring child_label(ChildProcessInfo::GetTypeNameInEnglish(info->type)); | 572 std::wstring child_label(ChildProcessInfo::GetTypeNameInEnglish(info->type)); |
| 546 if (info->is_diagnostics) | 573 if (info->is_diagnostics) |
| 547 child_label.append(L" (diagnostics)"); | 574 child_label.append(L" (diagnostics)"); |
| 548 child->SetString(L"child_name", child_label); | 575 child->SetString(ASCIIToUTF16("child_name"), WideToUTF16Hack(child_label)); |
| 549 ListValue* titles = new ListValue(); | 576 ListValue* titles = new ListValue(); |
| 550 child->Set(L"titles", titles); | 577 child->Set(ASCIIToUTF16("titles"), titles); |
| 551 for (size_t i = 0; i < info->titles.size(); ++i) | 578 for (size_t i = 0; i < info->titles.size(); ++i) |
| 552 titles->Append(new StringValue(info->titles[i])); | 579 titles->Append(new StringValue(info->titles[i])); |
| 553 } | 580 } |
| 554 | 581 |
| 555 | 582 |
| 556 void AboutMemoryHandler::OnDetailsAvailable() { | 583 void AboutMemoryHandler::OnDetailsAvailable() { |
| 557 // the root of the JSON hierarchy for about:memory jstemplate | 584 // the root of the JSON hierarchy for about:memory jstemplate |
| 558 DictionaryValue root; | 585 DictionaryValue root; |
| 559 ListValue* browsers = new ListValue(); | 586 ListValue* browsers = new ListValue(); |
| 560 root.Set(L"browsers", browsers); | 587 root.Set(ASCIIToUTF16("browsers"), browsers); |
| 561 | 588 |
| 562 ProcessData* browser_processes = processes(); | 589 ProcessData* browser_processes = processes(); |
| 563 | 590 |
| 564 // Aggregate per-process data into browser summary data. | 591 // Aggregate per-process data into browser summary data. |
| 565 std::wstring log_string; | 592 std::wstring log_string; |
| 566 for (int index = 0; index < MemoryDetails::MAX_BROWSERS; index++) { | 593 for (int index = 0; index < MemoryDetails::MAX_BROWSERS; index++) { |
| 567 if (browser_processes[index].processes.size() == 0) | 594 if (browser_processes[index].processes.size() == 0) |
| 568 continue; | 595 continue; |
| 569 | 596 |
| 570 // Sum the information for the processes within this browser. | 597 // Sum the information for the processes within this browser. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 581 aggregate.working_set.shareable += iterator->working_set.shareable; | 608 aggregate.working_set.shareable += iterator->working_set.shareable; |
| 582 aggregate.committed.priv += iterator->committed.priv; | 609 aggregate.committed.priv += iterator->committed.priv; |
| 583 aggregate.committed.mapped += iterator->committed.mapped; | 610 aggregate.committed.mapped += iterator->committed.mapped; |
| 584 aggregate.committed.image += iterator->committed.image; | 611 aggregate.committed.image += iterator->committed.image; |
| 585 aggregate.num_processes++; | 612 aggregate.num_processes++; |
| 586 } | 613 } |
| 587 ++iterator; | 614 ++iterator; |
| 588 } | 615 } |
| 589 DictionaryValue* browser_data = new DictionaryValue(); | 616 DictionaryValue* browser_data = new DictionaryValue(); |
| 590 browsers->Append(browser_data); | 617 browsers->Append(browser_data); |
| 591 browser_data->SetString(L"name", browser_processes[index].name); | 618 browser_data->SetString(ASCIIToUTF16("name"), |
| 619 WideToUTF16Hack(browser_processes[index].name)); |
| 592 | 620 |
| 593 BindProcessMetrics(browser_data, &aggregate); | 621 BindProcessMetrics(browser_data, &aggregate); |
| 594 | 622 |
| 595 // We log memory info as we record it. | 623 // We log memory info as we record it. |
| 596 if (log_string.length() > 0) | 624 if (log_string.length() > 0) |
| 597 log_string.append(L", "); | 625 log_string.append(L", "); |
| 598 log_string.append(browser_processes[index].name); | 626 log_string.append(browser_processes[index].name); |
| 599 log_string.append(L", "); | 627 log_string.append(L", "); |
| 600 log_string.append(Int64ToWString(aggregate.working_set.priv)); | 628 log_string.append(Int64ToWString(aggregate.working_set.priv)); |
| 601 log_string.append(L", "); | 629 log_string.append(L", "); |
| 602 log_string.append(Int64ToWString(aggregate.working_set.shared)); | 630 log_string.append(Int64ToWString(aggregate.working_set.shared)); |
| 603 log_string.append(L", "); | 631 log_string.append(L", "); |
| 604 log_string.append(Int64ToWString(aggregate.working_set.shareable)); | 632 log_string.append(Int64ToWString(aggregate.working_set.shareable)); |
| 605 } | 633 } |
| 606 if (log_string.length() > 0) | 634 if (log_string.length() > 0) |
| 607 LOG(INFO) << "memory: " << log_string; | 635 LOG(INFO) << "memory: " << log_string; |
| 608 | 636 |
| 609 // Set the browser & renderer detailed process data. | 637 // Set the browser & renderer detailed process data. |
| 610 DictionaryValue* browser_data = new DictionaryValue(); | 638 DictionaryValue* browser_data = new DictionaryValue(); |
| 611 root.Set(L"browzr_data", browser_data); | 639 root.Set(ASCIIToUTF16("browzr_data"), browser_data); |
| 612 ListValue* child_data = new ListValue(); | 640 ListValue* child_data = new ListValue(); |
| 613 root.Set(L"child_data", child_data); | 641 root.Set(ASCIIToUTF16("child_data"), child_data); |
| 614 | 642 |
| 615 ProcessData process = browser_processes[0]; // Chrome is the first browser. | 643 ProcessData process = browser_processes[0]; // Chrome is the first browser. |
| 616 for (size_t index = 0; index < process.processes.size(); index++) { | 644 for (size_t index = 0; index < process.processes.size(); index++) { |
| 617 if (process.processes[index].type == ChildProcessInfo::BROWSER_PROCESS) | 645 if (process.processes[index].type == ChildProcessInfo::BROWSER_PROCESS) |
| 618 BindProcessMetrics(browser_data, &process.processes[index]); | 646 BindProcessMetrics(browser_data, &process.processes[index]); |
| 619 else | 647 else |
| 620 AppendProcess(child_data, &process.processes[index]); | 648 AppendProcess(child_data, &process.processes[index]); |
| 621 } | 649 } |
| 622 | 650 |
| 623 // Get about_memory.html | 651 // Get about_memory.html |
| 624 static const StringPiece memory_html( | 652 static const StringPiece memory_html( |
| 625 ResourceBundle::GetSharedInstance().GetRawDataResource( | 653 ResourceBundle::GetSharedInstance().GetRawDataResource( |
| 626 IDR_ABOUT_MEMORY_HTML)); | 654 IDR_ABOUT_MEMORY_HTML)); |
| 627 | 655 |
| 628 // Create jstemplate and return. | 656 // Create jstemplate and return. |
| 629 std::string template_html = jstemplate_builder::GetTemplateHtml( | 657 std::string template_html = jstemplate_builder::GetTemplateHtml( |
| 630 memory_html, &root, "t" /* template root node id */); | 658 memory_html, &root, "t" /* template root node id */); |
| 631 | 659 |
| 632 AboutSource* about_source = static_cast<AboutSource*>(source_); | 660 AboutSource* about_source = static_cast<AboutSource*>(source_); |
| 633 about_source->FinishDataRequest(template_html, request_id_); | 661 about_source->FinishDataRequest(template_html, request_id_); |
| 634 } | 662 } |
| 635 | 663 |
| 636 // static | 664 // static |
| 637 void BrowserAboutHandler::AboutMemory(AboutSource* source, int request_id) { | 665 void BrowserAboutHandler::AboutMemory(AboutSource* source, int request_id) { |
| 638 // The AboutMemoryHandler cleans itself up. | 666 // The AboutMemoryHandler cleans itself up. |
| 639 new AboutMemoryHandler(source, request_id); | 667 new AboutMemoryHandler(source, request_id); |
| 640 } | 668 } |
| OLD | NEW |