// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_NETWORK_STATUS_VIEW_H__ #define CHROME_BROWSER_NETWORK_STATUS_VIEW_H__ #include "base/basictypes.h" #include "base/ref_counted.h" #include "base/scoped_ptr.h" #include "chrome/common/render_messages.h" #include "chrome/browser/status_view.h" #include "net/url_request/url_request_job_tracker.h" class MessageLoop; class RenderProcessHost; class NavigationPerformanceViewer; class PageLoadView; class NetworkStatusView : public StatusView { public: // button types enum { IDC_CONFIG_TRACKING_BUTTON = 101, IDC_CURRENT_STATUS_BUTTON, IDC_CLEAR, }; NetworkStatusView(); virtual ~NetworkStatusView(); // TabContents overrides virtual const std::wstring GetDefaultTitle(); // StatusView implementation virtual void OnCreate(const CRect& rect); virtual void OnSize(const CRect& rect); BEGIN_MSG_MAP(NetworkStatusView) COMMAND_HANDLER_EX(IDC_CONFIG_TRACKING_BUTTON, BN_CLICKED, OnConfigTrackingClicked) COMMAND_HANDLER_EX(IDC_CURRENT_STATUS_BUTTON, BN_CLICKED, OnCurrentStatusClicked) COMMAND_HANDLER_EX(IDC_CLEAR, BN_CLICKED, OnClearClicked) CHAIN_MSG_MAP(StatusView); END_MSG_MAP() bool is_tracking() const { return is_tracking_; } private: // Event handlers void OnConfigTrackingClicked(UINT code, int button_id, HWND hwnd); void OnCurrentStatusClicked(UINT code, int button_id, HWND hwnd); void OnClearClicked(UINT code, int button_id, HWND hwnd); void AppendText(const std::wstring& text); // Hide/Show tracking output window void HideTrackingResults(); void ShowTrackingResults(); // Clear tracking output void ClearTrackingResults(); // A JobTracker is allocated to monitor network jobs running on the IO // thread. This allows the NetworkStatusView to remain single-threaded. class JobTracker : public URLRequestJobTracker::JobObserver, public base::RefCountedThreadSafe { public: JobTracker(NetworkStatusView* view); // Called by the NetworkStatusView on the main application thread. void StartTracking(); void StopTracking(); void ReportStatus(); // URLRequestJobTracker::JobObserver methods (called on the IO thread): virtual void OnJobAdded(URLRequestJob* job); virtual void OnJobRemoved(URLRequestJob* job); virtual void OnJobDone(URLRequestJob* job, const URLRequestStatus& status); virtual void OnJobRedirect(URLRequestJob* job, const GURL& location, int status_code); virtual void OnBytesRead(URLRequestJob* job, int byte_count); // The JobTracker may be deleted after NetworkStatusView is deleted. void DetachView() { view_ = NULL; } private: void InvokeOnIOThread(void (JobTracker::*method)()); // Called on the IO thread void OnStartTracking(); void OnStopTracking(); void OnReportStatus(); void AppendText(const std::wstring& text); // Called on the main thread void OnAppendText(const std::wstring& text); NetworkStatusView* view_; MessageLoop* view_message_loop_; }; friend class JobTracker; scoped_refptr tracker_; bool is_tracking_; // Textual output of network tracking CEdit text_area_; HFONT monospaced_font_; DISALLOW_COPY_AND_ASSIGN(NetworkStatusView); }; #endif // #ifndef CHROME_BROWSER_NETWORK_STATUS_VIEW_H__