Index: chrome/browser/tab_contents/network_status_view.cc |
=================================================================== |
--- chrome/browser/tab_contents/network_status_view.cc (revision 8567) |
+++ chrome/browser/tab_contents/network_status_view.cc (working copy) |
@@ -1,320 +0,0 @@ |
-// 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. |
- |
-#include "chrome/browser/tab_contents/network_status_view.h" |
- |
-#include <stdio.h> |
- |
-#include "base/string_util.h" |
-#include "base/thread.h" |
-#include "chrome/browser/browser.h" |
-#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/tab_contents/tab_contents_delegate.h" |
-#include "chrome/views/root_view.h" |
-#include "net/url_request/url_request.h" |
-#include "net/url_request/url_request_job.h" |
- |
-namespace { |
-const wchar_t kTitleMsg[] = L"Network Status"; |
-const wchar_t kStartTrackingMsg[] = L"Start I/O Tracking"; |
-const wchar_t kStopTrackingMsg[] = L"Stop I/O Tracking"; |
- |
-const wchar_t kShowIOStatusMsg[] = L"Show Current I/O Status"; |
-const wchar_t kClearOutputMsg[] = L"Clear Output"; |
- |
-// Returns a string representing the URL, handling the case where the spec |
-// is invalid. |
-std::wstring StringForURL(const GURL& url) { |
- if (url.is_valid()) |
- return UTF8ToWide(url.spec()); |
- return UTF8ToWide(url.possibly_invalid_spec()) + L" (invalid)"; |
-} |
- |
-std::wstring URLForJob(URLRequestJob* job) { |
- URLRequest* request = job->request(); |
- if (request) |
- return StringForURL(request->url()); |
- return std::wstring(L"(orphaned)"); |
-} |
- |
-} // namespace |
- |
-NetworkStatusView::NetworkStatusView() |
- : StatusView(TAB_CONTENTS_NETWORK_STATUS_VIEW) { |
- tracker_ = new JobTracker(this); |
-} |
- |
-NetworkStatusView::~NetworkStatusView() { |
- if (monospaced_font_) |
- DeleteObject(monospaced_font_); |
- |
- if (is_tracking_) { |
- tracker_->StopTracking(); |
- is_tracking_ = false; |
- } |
- |
- tracker_->DetachView(); |
-} |
- |
-const std::wstring NetworkStatusView::GetDefaultTitle() { |
- return kTitleMsg; |
-} |
- |
-void NetworkStatusView::OnCreate(const CRect& rect) { |
- CreateButton(IDC_CONFIG_TRACKING_BUTTON, kStartTrackingMsg); |
- CreateButton(IDC_CURRENT_STATUS_BUTTON, kShowIOStatusMsg); |
- CreateButton(IDC_CLEAR, kClearOutputMsg); |
- |
- is_tracking_ = false; |
- |
- // Initialize the text box for network tracking |
- // Don't worry about the size, we'll resize when we get WM_SIZE |
- text_area_.Create(m_hWnd, const_cast<CRect&>(rect), NULL, |
- WS_CHILD | WS_HSCROLL | WS_VSCROLL | |
- ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0); |
- |
- // This raises the maximum number of chars from 32K to some large maximum, |
- // probably 2GB. 32K is not nearly enough for our use-case. |
- text_area_.SendMessageW(EM_SETLIMITTEXT, 0, 0); |
- |
- // make a monospaced font for the edit control |
- LOGFONT lf = {0}; |
- lf.lfHeight = 16; |
- wcscpy_s(lf.lfFaceName, LF_FACESIZE, L"Courier New"); |
- monospaced_font_ = CreateFontIndirect(&lf); |
- text_area_.SetFont(monospaced_font_); |
-} |
- |
-void NetworkStatusView::OnSize(const CRect& rect) { |
- // re-layout the edit control |
- text_area_.MoveWindow(rect); |
- |
- // re-layout the performance view |
- CRect new_rect(rect); |
- int list_width = rect.Width(); |
- int list_height = static_cast<int>(rect.Height() / 5); |
- int page_width = rect.Width() / 2; |
- int page_height = static_cast<int>(rect.Height() * 4 / 5); |
-} |
- |
-void NetworkStatusView::OnConfigTrackingClicked(UINT code, int button_id, |
- HWND hwnd) { |
- if (is_tracking_) { |
- tracker_->StopTracking(); |
- is_tracking_ = false; |
- |
- SetButtonText(IDC_CONFIG_TRACKING_BUTTON, kStartTrackingMsg); |
- } else { |
- tracker_->StartTracking(); |
- is_tracking_ = true; |
- |
- ClearTrackingResults(); |
- ShowTrackingResults(); |
- |
- SetButtonText(IDC_CONFIG_TRACKING_BUTTON, kStopTrackingMsg); |
- } |
-} |
- |
-void NetworkStatusView::OnCurrentStatusClicked(UINT code, int button_id, |
- HWND hwnd) { |
- ShowTrackingResults(); |
- if (is_tracking_) { |
- tracker_->ReportStatus(); |
- } |
-} |
- |
-void NetworkStatusView::OnClearClicked(UINT code, int button_id, HWND hwnd) { |
- ClearTrackingResults(); |
-} |
- |
-void NetworkStatusView::AppendText(const std::wstring& text) { |
- text_area_.AppendText(text.c_str()); |
-} |
- |
-void NetworkStatusView::HideTrackingResults() { |
- text_area_.ShowWindow(SW_HIDE); |
-} |
- |
-void NetworkStatusView::ShowTrackingResults() { |
- text_area_.ShowWindow(SW_SHOW); |
-} |
- |
-void NetworkStatusView::ClearTrackingResults() { |
- text_area_.SetSelAll(); |
- text_area_.Clear(); |
-} |
- |
-//----------------------------------------------------------------------------- |
- |
-// main thread: |
-NetworkStatusView::JobTracker::JobTracker(NetworkStatusView* view) |
- : view_(view), |
- view_message_loop_(MessageLoop::current()) { |
-} |
- |
-// main thread: |
-void NetworkStatusView::JobTracker::InvokeOnIOThread(void (JobTracker::*m)()) { |
- base::Thread* thread = g_browser_process->io_thread(); |
- if (!thread) |
- return; |
- thread->message_loop()->PostTask(FROM_HERE, NewRunnableMethod(this, m)); |
-} |
- |
-// main thread: |
-void NetworkStatusView::JobTracker::StartTracking() { |
- DCHECK(MessageLoop::current() == view_message_loop_); |
- DCHECK(view_); |
- InvokeOnIOThread(&JobTracker::OnStartTracking); |
-} |
- |
-// main thread: |
-void NetworkStatusView::JobTracker::StopTracking() { |
- DCHECK(MessageLoop::current() == view_message_loop_); |
- // The tracker should not be deleted before it is removed from observer |
- // list. |
- AddRef(); |
- InvokeOnIOThread(&JobTracker::OnStopTracking); |
-} |
- |
-// main thread: |
-void NetworkStatusView::JobTracker::ReportStatus() { |
- DCHECK(MessageLoop::current() == view_message_loop_); |
- InvokeOnIOThread(&JobTracker::OnReportStatus); |
-} |
- |
-// main thread: |
-void NetworkStatusView::JobTracker::OnAppendText(const std::wstring& text) { |
- DCHECK(MessageLoop::current() == view_message_loop_); |
- if (view_ && view_->is_tracking_) |
- view_->AppendText(text); |
-} |
- |
-// IO thread: |
-void NetworkStatusView::JobTracker::AppendText(const std::wstring& text) { |
- DCHECK(MessageLoop::current() != view_message_loop_); |
- view_message_loop_->PostTask(FROM_HERE, NewRunnableMethod( |
- this, &JobTracker::OnAppendText, text)); |
-} |
- |
-// IO thread: |
-void NetworkStatusView::JobTracker::OnStartTracking() { |
- DCHECK(MessageLoop::current() != view_message_loop_); |
- g_url_request_job_tracker.AddObserver(this); |
-} |
- |
-// IO thread: |
-void NetworkStatusView::JobTracker::OnStopTracking() { |
- DCHECK(MessageLoop::current() != view_message_loop_); |
- g_url_request_job_tracker.RemoveObserver(this); |
- // Balance the AddRef() in StopTracking() called in main thread. |
- Release(); |
-} |
- |
-// IO thread: |
-void NetworkStatusView::JobTracker::OnReportStatus() { |
- DCHECK(MessageLoop::current() != view_message_loop_); |
- |
- std::wstring text(L"\r\n===== Active Job Summary =====\r\n"); |
- |
- URLRequestJobTracker::JobIterator begin_job = |
- g_url_request_job_tracker.begin(); |
- URLRequestJobTracker::JobIterator end_job = g_url_request_job_tracker.end(); |
- int orphaned_count = 0; |
- int regular_count = 0; |
- for (URLRequestJobTracker::JobIterator cur = begin_job; |
- cur != end_job; ++cur) { |
- URLRequestJob* job = (*cur); |
- URLRequest* request = job->request(); |
- if (!request) { |
- orphaned_count++; |
- continue; |
- } |
- |
- regular_count++; |
- |
- // active state |
- if (job->is_done()) |
- text.append(L" Done: "); |
- else |
- text.append(L" Active: "); |
- |
- // URL |
- text.append(StringForURL(request->url())); |
- text.append(L"\r\n"); |
- } |
- |
- if (regular_count == 0) |
- text.append(L" (No active jobs)\r\n"); |
- |
- if (orphaned_count) { |
- wchar_t buf[64]; |
- swprintf(buf, arraysize(buf), L" %d orphaned jobs\r\n", orphaned_count); |
- text.append(buf); |
- } |
- |
- text.append(L"=====\r\n\r\n"); |
- AppendText(text); |
-} |
- |
-// IO thread: |
-void NetworkStatusView::JobTracker::OnJobAdded(URLRequestJob* job) { |
- DCHECK(MessageLoop::current() != view_message_loop_); |
- |
- std::wstring text(L"+ New job : "); |
- text.append(URLForJob(job)); |
- text.append(L"\r\n"); |
- AppendText(text); |
-} |
- |
-// IO thread: |
-void NetworkStatusView::JobTracker::OnJobRemoved(URLRequestJob* job) { |
- DCHECK(MessageLoop::current() != view_message_loop_); |
-} |
- |
-// IO thread: |
-void NetworkStatusView::JobTracker::OnJobDone(URLRequestJob* job, |
- const URLRequestStatus& status) { |
- DCHECK(MessageLoop::current() != view_message_loop_); |
- |
- std::wstring text; |
- if (status.is_success()) { |
- text.assign(L"- Complete: "); |
- } else if (status.status() == URLRequestStatus::CANCELED) { |
- text.assign(L"- Canceled: "); |
- } else if (status.status() == URLRequestStatus::HANDLED_EXTERNALLY) { |
- text.assign(L"- Handled externally: "); |
- } else { |
- wchar_t buf[32]; |
- swprintf(buf, arraysize(buf), L"Failed with %d: ", status.os_error()); |
- text.assign(buf); |
- } |
- |
- text.append(URLForJob(job)); |
- text.append(L"\r\n"); |
- AppendText(text); |
-} |
- |
-// IO thread: |
-void NetworkStatusView::JobTracker::OnJobRedirect(URLRequestJob* job, |
- const GURL& location, |
- int status_code) { |
- DCHECK(MessageLoop::current() != view_message_loop_); |
- |
- std::wstring text(L"- Redirect: "); |
- text.append(URLForJob(job)); |
- text.append(L"\r\n "); |
- |
- wchar_t buf[16]; |
- swprintf(buf, arraysize(buf), L"(%d) to: ", status_code); |
- text.append(buf); |
- |
- text.append(StringForURL(location)); |
- text.append(L"\r\n"); |
- AppendText(text); |
-} |
- |
-void NetworkStatusView::JobTracker::OnBytesRead(URLRequestJob* job, |
- int byte_count) { |
-} |
- |