blob: 2170f73fafdb8aa2cb3e4e801bef209613591753 [file] [log] [blame]
license.botbf09a502008-08-24 00:55:551// 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
3// found in the LICENSE file.
initial.commit09911bf2008-07-26 23:55:294
5#ifndef CHROME_BROWSER_NETWORK_STATUS_VIEW_H__
6#define CHROME_BROWSER_NETWORK_STATUS_VIEW_H__
7
8#include "base/basictypes.h"
9#include "base/ref_counted.h"
10#include "base/scoped_ptr.h"
11#include "chrome/common/render_messages.h"
12#include "chrome/browser/status_view.h"
13#include "net/url_request/url_request_job_tracker.h"
14
15class MessageLoop;
16class RenderProcessHost;
17class NavigationPerformanceViewer;
18class PageLoadView;
initial.commit09911bf2008-07-26 23:55:2919
20class NetworkStatusView : public StatusView {
21 public:
22 // button types
23 enum {
24 IDC_CONFIG_TRACKING_BUTTON = 101,
25 IDC_CURRENT_STATUS_BUTTON,
initial.commit09911bf2008-07-26 23:55:2926 IDC_CLEAR,
initial.commit09911bf2008-07-26 23:55:2927 };
28
29 NetworkStatusView();
30 virtual ~NetworkStatusView();
31
32 // TabContents overrides
33 virtual const std::wstring GetDefaultTitle();
34
35 // StatusView implementation
36 virtual void OnCreate(const CRect& rect);
37 virtual void OnSize(const CRect& rect);
38
39 BEGIN_MSG_MAP(NetworkStatusView)
40 COMMAND_HANDLER_EX(IDC_CONFIG_TRACKING_BUTTON, BN_CLICKED, OnConfigTrackingClicked)
41 COMMAND_HANDLER_EX(IDC_CURRENT_STATUS_BUTTON, BN_CLICKED, OnCurrentStatusClicked)
42 COMMAND_HANDLER_EX(IDC_CLEAR, BN_CLICKED, OnClearClicked)
initial.commit09911bf2008-07-26 23:55:2943 CHAIN_MSG_MAP(StatusView);
44 END_MSG_MAP()
45
46 bool is_tracking() const { return is_tracking_; }
[email protected]700bf6202008-08-25 22:18:0647
initial.commit09911bf2008-07-26 23:55:2948 private:
49
50 // Event handlers
51 void OnConfigTrackingClicked(UINT code, int button_id, HWND hwnd);
52 void OnCurrentStatusClicked(UINT code, int button_id, HWND hwnd);
53 void OnClearClicked(UINT code, int button_id, HWND hwnd);
initial.commit09911bf2008-07-26 23:55:2954
55 void AppendText(const std::wstring& text);
56
57 // Hide/Show tracking output window
58 void HideTrackingResults();
59 void ShowTrackingResults();
60
61 // Clear tracking output
62 void ClearTrackingResults();
63
initial.commit09911bf2008-07-26 23:55:2964 // A JobTracker is allocated to monitor network jobs running on the IO
65 // thread. This allows the NetworkStatusView to remain single-threaded.
66 class JobTracker : public URLRequestJobTracker::JobObserver,
67 public base::RefCountedThreadSafe<JobTracker> {
68 public:
69 JobTracker(NetworkStatusView* view);
70
71 // Called by the NetworkStatusView on the main application thread.
72 void StartTracking();
73 void StopTracking();
74 void ReportStatus();
75
76 // URLRequestJobTracker::JobObserver methods (called on the IO thread):
77 virtual void OnJobAdded(URLRequestJob* job);
78 virtual void OnJobRemoved(URLRequestJob* job);
79 virtual void OnJobDone(URLRequestJob* job, const URLRequestStatus& status);
80 virtual void OnJobRedirect(URLRequestJob* job, const GURL& location,
81 int status_code);
82 virtual void OnBytesRead(URLRequestJob* job, int byte_count);
83
84 // The JobTracker may be deleted after NetworkStatusView is deleted.
85 void DetachView() { view_ = NULL; }
86
87 private:
88 void InvokeOnIOThread(void (JobTracker::*method)());
89
90 // Called on the IO thread
91 void OnStartTracking();
92 void OnStopTracking();
93 void OnReportStatus();
94 void AppendText(const std::wstring& text);
95
96 // Called on the main thread
97 void OnAppendText(const std::wstring& text);
98
99 NetworkStatusView* view_;
100 MessageLoop* view_message_loop_;
101 };
102 friend class JobTracker;
103
104 scoped_refptr<JobTracker> tracker_;
105
106 bool is_tracking_;
107
108 // Textual output of network tracking
109 CEdit text_area_;
110
111 HFONT monospaced_font_;
112
[email protected]700bf6202008-08-25 22:18:06113 DISALLOW_COPY_AND_ASSIGN(NetworkStatusView);
initial.commit09911bf2008-07-26 23:55:29114};
115
116#endif // #ifndef CHROME_BROWSER_NETWORK_STATUS_VIEW_H__
license.botbf09a502008-08-24 00:55:55117