| 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/net_internals/net_internals_ui.h" | 5 #include "chrome/browser/ui/webui/net_internals/net_internals_ui.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <list> | 8 #include <list> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 239 // Note that the WebUI infrastructure runs on the UI thread, therefore all of | 239 // Note that the WebUI infrastructure runs on the UI thread, therefore all of |
| 240 // this class's methods are expected to run on the UI thread. | 240 // this class's methods are expected to run on the UI thread. |
| 241 // | 241 // |
| 242 // Since the network code we want to run lives on the IO thread, we proxy | 242 // Since the network code we want to run lives on the IO thread, we proxy |
| 243 // almost everything over to NetInternalsMessageHandler::IOThreadImpl, which | 243 // almost everything over to NetInternalsMessageHandler::IOThreadImpl, which |
| 244 // runs on the IO thread. | 244 // runs on the IO thread. |
| 245 // | 245 // |
| 246 // TODO(eroman): Can we start on the IO thread to begin with? | 246 // TODO(eroman): Can we start on the IO thread to begin with? |
| 247 class NetInternalsMessageHandler | 247 class NetInternalsMessageHandler |
| 248 : public WebUIMessageHandler, | 248 : public WebUIMessageHandler, |
| 249 public base::SupportsWeakPtr<NetInternalsMessageHandler>, | 249 public base::SupportsWeakPtr<NetInternalsMessageHandler> { |
| 250 public content::NotificationObserver { | |
| 251 public: | 250 public: |
| 252 NetInternalsMessageHandler(); | 251 NetInternalsMessageHandler(); |
| 253 virtual ~NetInternalsMessageHandler(); | 252 virtual ~NetInternalsMessageHandler(); |
| 254 | 253 |
| 255 // WebUIMessageHandler implementation. | 254 // WebUIMessageHandler implementation. |
| 256 virtual void RegisterMessages() OVERRIDE; | 255 virtual void RegisterMessages() OVERRIDE; |
| 257 | 256 |
| 258 // Calls g_browser.receive in the renderer, passing in |command| and |arg|. | 257 // Calls g_browser.receive in the renderer, passing in |command| and |arg|. |
| 259 // Takes ownership of |arg|. If the renderer is displaying a log file, the | 258 // Takes ownership of |arg|. If the renderer is displaying a log file, the |
| 260 // message will be ignored. | 259 // message will be ignored. |
| 261 void SendJavascriptCommand(const std::string& command, Value* arg); | 260 void SendJavascriptCommand(const std::string& command, Value* arg); |
| 262 | 261 |
| 263 // content::NotificationObserver implementation. | |
| 264 virtual void Observe(int type, | |
| 265 const content::NotificationSource& source, | |
| 266 const content::NotificationDetails& details) OVERRIDE; | |
| 267 | |
| 268 // Javascript message handlers. | 262 // Javascript message handlers. |
| 269 void OnRendererReady(const ListValue* list); | 263 void OnRendererReady(const ListValue* list); |
| 270 void OnEnableHttpThrottling(const ListValue* list); | |
| 271 void OnClearBrowserCache(const ListValue* list); | 264 void OnClearBrowserCache(const ListValue* list); |
| 272 void OnGetPrerenderInfo(const ListValue* list); | 265 void OnGetPrerenderInfo(const ListValue* list); |
| 273 #ifdef OS_CHROMEOS | 266 #ifdef OS_CHROMEOS |
| 274 void OnRefreshSystemLogs(const ListValue* list); | 267 void OnRefreshSystemLogs(const ListValue* list); |
| 275 void OnGetSystemLog(const ListValue* list); | 268 void OnGetSystemLog(const ListValue* list); |
| 276 void OnImportONCFile(const ListValue* list); | 269 void OnImportONCFile(const ListValue* list); |
| 277 void OnStoreDebugLogs(const ListValue* list); | 270 void OnStoreDebugLogs(const ListValue* list); |
| 278 void OnStoreDebugLogsCompleted(const FilePath& log_path, bool succeeded); | 271 void OnStoreDebugLogsCompleted(const FilePath& log_path, bool succeeded); |
| 279 void OnSetNetworkDebugMode(const ListValue* list); | 272 void OnSetNetworkDebugMode(const ListValue* list); |
| 280 void OnSetNetworkDebugModeCompleted(const std::string& subsystem, | 273 void OnSetNetworkDebugModeCompleted(const std::string& subsystem, |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 std::list<SystemLogRequest> requests_; | 325 std::list<SystemLogRequest> requests_; |
| 333 scoped_ptr<chromeos::system::LogDictionaryType> logs_; | 326 scoped_ptr<chromeos::system::LogDictionaryType> logs_; |
| 334 bool logs_received_; | 327 bool logs_received_; |
| 335 bool logs_requested_; | 328 bool logs_requested_; |
| 336 CancelableRequestConsumer consumer_; | 329 CancelableRequestConsumer consumer_; |
| 337 // Libcros request handle. | 330 // Libcros request handle. |
| 338 CancelableRequestProvider::Handle syslogs_request_id_; | 331 CancelableRequestProvider::Handle syslogs_request_id_; |
| 339 }; | 332 }; |
| 340 #endif | 333 #endif |
| 341 | 334 |
| 342 // The pref member about whether HTTP throttling is enabled, which needs to | |
| 343 // be accessed on the UI thread. | |
| 344 BooleanPrefMember http_throttling_enabled_; | |
| 345 | |
| 346 // This is the "real" message handler, which lives on the IO thread. | 335 // This is the "real" message handler, which lives on the IO thread. |
| 347 scoped_refptr<IOThreadImpl> proxy_; | 336 scoped_refptr<IOThreadImpl> proxy_; |
| 348 | 337 |
| 349 base::WeakPtr<prerender::PrerenderManager> prerender_manager_; | 338 base::WeakPtr<prerender::PrerenderManager> prerender_manager_; |
| 350 | 339 |
| 351 #ifdef OS_CHROMEOS | 340 #ifdef OS_CHROMEOS |
| 352 // Class that handles getting and filtering system logs. | 341 // Class that handles getting and filtering system logs. |
| 353 scoped_ptr<SystemLogsGetter> syslogs_getter_; | 342 scoped_ptr<SystemLogsGetter> syslogs_getter_; |
| 354 #endif | 343 #endif |
| 355 | 344 |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 506 // Notify the handler on the IO thread that the renderer is gone. | 495 // Notify the handler on the IO thread that the renderer is gone. |
| 507 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 496 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| 508 base::Bind(&IOThreadImpl::Detach, proxy_.get())); | 497 base::Bind(&IOThreadImpl::Detach, proxy_.get())); |
| 509 } | 498 } |
| 510 } | 499 } |
| 511 | 500 |
| 512 void NetInternalsMessageHandler::RegisterMessages() { | 501 void NetInternalsMessageHandler::RegisterMessages() { |
| 513 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 502 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 514 | 503 |
| 515 Profile* profile = Profile::FromWebUI(web_ui()); | 504 Profile* profile = Profile::FromWebUI(web_ui()); |
| 516 PrefService* pref_service = profile->GetPrefs(); | |
| 517 http_throttling_enabled_.Init( | |
| 518 prefs::kHttpThrottlingEnabled, pref_service, this); | |
| 519 | 505 |
| 520 proxy_ = new IOThreadImpl(this->AsWeakPtr(), g_browser_process->io_thread(), | 506 proxy_ = new IOThreadImpl(this->AsWeakPtr(), g_browser_process->io_thread(), |
| 521 profile->GetRequestContext()); | 507 profile->GetRequestContext()); |
| 522 #ifdef OS_CHROMEOS | 508 #ifdef OS_CHROMEOS |
| 523 syslogs_getter_.reset(new SystemLogsGetter(this, | 509 syslogs_getter_.reset(new SystemLogsGetter(this, |
| 524 chromeos::system::SyslogsProvider::GetInstance())); | 510 chromeos::system::SyslogsProvider::GetInstance())); |
| 525 #endif | 511 #endif |
| 526 | 512 |
| 527 prerender::PrerenderManager* prerender_manager = | 513 prerender::PrerenderManager* prerender_manager = |
| 528 prerender::PrerenderManagerFactory::GetForProfile(profile); | 514 prerender::PrerenderManagerFactory::GetForProfile(profile); |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 617 | 603 |
| 618 web_ui()->RegisterMessageCallback( | 604 web_ui()->RegisterMessageCallback( |
| 619 "getHttpPipeliningStatus", | 605 "getHttpPipeliningStatus", |
| 620 base::Bind(&IOThreadImpl::CallbackHelper, | 606 base::Bind(&IOThreadImpl::CallbackHelper, |
| 621 &IOThreadImpl::OnGetHttpPipeliningStatus, proxy_)); | 607 &IOThreadImpl::OnGetHttpPipeliningStatus, proxy_)); |
| 622 web_ui()->RegisterMessageCallback( | 608 web_ui()->RegisterMessageCallback( |
| 623 "setLogLevel", | 609 "setLogLevel", |
| 624 base::Bind(&IOThreadImpl::CallbackHelper, | 610 base::Bind(&IOThreadImpl::CallbackHelper, |
| 625 &IOThreadImpl::OnSetLogLevel, proxy_)); | 611 &IOThreadImpl::OnSetLogLevel, proxy_)); |
| 626 web_ui()->RegisterMessageCallback( | 612 web_ui()->RegisterMessageCallback( |
| 627 "enableHttpThrottling", | |
| 628 base::Bind(&NetInternalsMessageHandler::OnEnableHttpThrottling, | |
| 629 base::Unretained(this))); | |
| 630 web_ui()->RegisterMessageCallback( | |
| 631 "clearBrowserCache", | 613 "clearBrowserCache", |
| 632 base::Bind(&NetInternalsMessageHandler::OnClearBrowserCache, | 614 base::Bind(&NetInternalsMessageHandler::OnClearBrowserCache, |
| 633 base::Unretained(this))); | 615 base::Unretained(this))); |
| 634 web_ui()->RegisterMessageCallback( | 616 web_ui()->RegisterMessageCallback( |
| 635 "getPrerenderInfo", | 617 "getPrerenderInfo", |
| 636 base::Bind(&NetInternalsMessageHandler::OnGetPrerenderInfo, | 618 base::Bind(&NetInternalsMessageHandler::OnGetPrerenderInfo, |
| 637 base::Unretained(this))); | 619 base::Unretained(this))); |
| 638 #ifdef OS_CHROMEOS | 620 #ifdef OS_CHROMEOS |
| 639 web_ui()->RegisterMessageCallback( | 621 web_ui()->RegisterMessageCallback( |
| 640 "refreshSystemLogs", | 622 "refreshSystemLogs", |
| (...skipping 27 matching lines...) Expand all Loading... |
| 668 if (value.get()) { | 650 if (value.get()) { |
| 669 web_ui()->CallJavascriptFunction("g_browser.receive", | 651 web_ui()->CallJavascriptFunction("g_browser.receive", |
| 670 *command_value.get(), | 652 *command_value.get(), |
| 671 *value.get()); | 653 *value.get()); |
| 672 } else { | 654 } else { |
| 673 web_ui()->CallJavascriptFunction("g_browser.receive", | 655 web_ui()->CallJavascriptFunction("g_browser.receive", |
| 674 *command_value.get()); | 656 *command_value.get()); |
| 675 } | 657 } |
| 676 } | 658 } |
| 677 | 659 |
| 678 void NetInternalsMessageHandler::Observe( | |
| 679 int type, | |
| 680 const content::NotificationSource& source, | |
| 681 const content::NotificationDetails& details) { | |
| 682 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
| 683 DCHECK_EQ(type, chrome::NOTIFICATION_PREF_CHANGED); | |
| 684 | |
| 685 std::string* pref_name = content::Details<std::string>(details).ptr(); | |
| 686 if (*pref_name == prefs::kHttpThrottlingEnabled) { | |
| 687 SendJavascriptCommand( | |
| 688 "receivedHttpThrottlingEnabledPrefChanged", | |
| 689 Value::CreateBooleanValue(*http_throttling_enabled_)); | |
| 690 } | |
| 691 } | |
| 692 | |
| 693 void NetInternalsMessageHandler::OnRendererReady(const ListValue* list) { | 660 void NetInternalsMessageHandler::OnRendererReady(const ListValue* list) { |
| 694 IOThreadImpl::CallbackHelper(&IOThreadImpl::OnRendererReady, proxy_, list); | 661 IOThreadImpl::CallbackHelper(&IOThreadImpl::OnRendererReady, proxy_, list); |
| 695 | |
| 696 SendJavascriptCommand( | |
| 697 "receivedHttpThrottlingEnabledPrefChanged", | |
| 698 Value::CreateBooleanValue(*http_throttling_enabled_)); | |
| 699 } | |
| 700 | |
| 701 void NetInternalsMessageHandler::OnEnableHttpThrottling(const ListValue* list) { | |
| 702 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
| 703 | |
| 704 bool enable = false; | |
| 705 if (!list->GetBoolean(0, &enable)) { | |
| 706 NOTREACHED(); | |
| 707 return; | |
| 708 } | |
| 709 | |
| 710 http_throttling_enabled_.SetValue(enable); | |
| 711 } | 662 } |
| 712 | 663 |
| 713 void NetInternalsMessageHandler::OnClearBrowserCache(const ListValue* list) { | 664 void NetInternalsMessageHandler::OnClearBrowserCache(const ListValue* list) { |
| 714 BrowsingDataRemover* remover = | 665 BrowsingDataRemover* remover = |
| 715 new BrowsingDataRemover(Profile::FromWebUI(web_ui()), | 666 new BrowsingDataRemover(Profile::FromWebUI(web_ui()), |
| 716 BrowsingDataRemover::EVERYTHING, | 667 BrowsingDataRemover::EVERYTHING, |
| 717 base::Time()); | 668 base::Time()); |
| 718 remover->Remove(BrowsingDataRemover::REMOVE_CACHE); | 669 remover->Remove(BrowsingDataRemover::REMOVE_CACHE); |
| 719 // BrowsingDataRemover deletes itself. | 670 // BrowsingDataRemover deletes itself. |
| 720 } | 671 } |
| (...skipping 1002 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1723 | 1674 |
| 1724 NetInternalsUI::NetInternalsUI(content::WebUI* web_ui) | 1675 NetInternalsUI::NetInternalsUI(content::WebUI* web_ui) |
| 1725 : WebUIController(web_ui) { | 1676 : WebUIController(web_ui) { |
| 1726 web_ui->AddMessageHandler(new NetInternalsMessageHandler()); | 1677 web_ui->AddMessageHandler(new NetInternalsMessageHandler()); |
| 1727 | 1678 |
| 1728 // Set up the chrome://net-internals/ source. | 1679 // Set up the chrome://net-internals/ source. |
| 1729 Profile* profile = Profile::FromWebUI(web_ui); | 1680 Profile* profile = Profile::FromWebUI(web_ui); |
| 1730 profile->GetChromeURLDataManager()->AddDataSource( | 1681 profile->GetChromeURLDataManager()->AddDataSource( |
| 1731 CreateNetInternalsHTMLSource()); | 1682 CreateNetInternalsHTMLSource()); |
| 1732 } | 1683 } |
| OLD | NEW |