| 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) {
|
| -}
|
| -
|
|
|