| Index: webkit/glue/devtools/net_agent_impl.cc
|
| ===================================================================
|
| --- webkit/glue/devtools/net_agent_impl.cc (revision 16977)
|
| +++ webkit/glue/devtools/net_agent_impl.cc (working copy)
|
| @@ -1,325 +0,0 @@
|
| -// Copyright (c) 2009 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 "config.h"
|
| -
|
| -#include "CachedCSSStyleSheet.h"
|
| -#include "CachedResource.h"
|
| -#include "CachedScript.h"
|
| -#include "CachedXSLStyleSheet.h"
|
| -#include "DocLoader.h"
|
| -#include "Document.h"
|
| -#include "DocumentLoader.h"
|
| -#include "FrameLoader.h"
|
| -#include "PlatformString.h"
|
| -#include "ResourceError.h"
|
| -#include "ResourceRequest.h"
|
| -#include "ResourceResponse.h"
|
| -#include "ScriptString.h"
|
| -#include "TextEncoding.h"
|
| -#include <wtf/CurrentTime.h>
|
| -#undef LOG
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/values.h"
|
| -#include "googleurl/src/gurl.h"
|
| -#include "webkit/glue/devtools/net_agent_impl.h"
|
| -#include "webkit/glue/glue_util.h"
|
| -
|
| -using namespace WebCore;
|
| -
|
| -NetAgentImpl::NetAgentImpl(NetAgentDelegate* delegate)
|
| - : delegate_(delegate),
|
| - document_(NULL),
|
| - main_loader_(NULL),
|
| - last_cached_identifier_(-2),
|
| - attached_(false) {
|
| -}
|
| -
|
| -NetAgentImpl::~NetAgentImpl() {
|
| - SetDocument(NULL);
|
| - DidCommitMainResourceLoad();
|
| - deleteAllValues(pending_resources_);
|
| - pending_resources_.clear();
|
| -}
|
| -
|
| -void NetAgentImpl::SetDocument(Document* doc) {
|
| - document_ = doc;
|
| -}
|
| -
|
| -void NetAgentImpl::Attach() {
|
| - for (FinishedResources::iterator it = finished_resources_.begin();
|
| - it != finished_resources_.end(); ++it) {
|
| - DictionaryValue value;
|
| - Serialize(*it->second, &value);
|
| - delegate_->DidFinishLoading(it->first, value);
|
| - }
|
| - attached_ = true;
|
| -}
|
| -
|
| -void NetAgentImpl::Detach() {
|
| - attached_ = false;
|
| - xml_http_sources_.clear();
|
| - ExpireFinishedResourcesCache();
|
| -}
|
| -
|
| -void NetAgentImpl::DidCommitMainResourceLoad() {
|
| - for (FinishedResources::iterator it = finished_resources_.begin();
|
| - it != finished_resources_.end(); ++it) {
|
| - delete it->second;
|
| - }
|
| - finished_resources_.clear();
|
| - main_loader_ = NULL;
|
| -}
|
| -
|
| -void NetAgentImpl::AssignIdentifierToRequest(
|
| - DocumentLoader* loader,
|
| - int identifier,
|
| - const ResourceRequest& request) {
|
| -}
|
| -
|
| -void NetAgentImpl::WillSendRequest(
|
| - DocumentLoader* loader,
|
| - int identifier,
|
| - const ResourceRequest& request) {
|
| - if (pending_resources_.contains(identifier)) {
|
| - // We are going through redirect, nuke old resource.
|
| - delete pending_resources_.get(identifier);
|
| - }
|
| -
|
| - Resource* resource = new Resource();
|
| - pending_resources_.set(identifier, resource);
|
| - KURL url = request.url();
|
| - resource->start_time = WTF::currentTime();
|
| - resource->url = request.url();
|
| - resource->request_headers = request.httpHeaderFields();
|
| -
|
| - if (attached_) {
|
| - DictionaryValue value;
|
| - Serialize(*resource, &value);
|
| - delegate_->WillSendRequest(identifier, value);
|
| - }
|
| -}
|
| -
|
| -void NetAgentImpl::DidReceiveResponse(
|
| - DocumentLoader* loader,
|
| - int identifier,
|
| - const ResourceResponse &response) {
|
| - if (!pending_resources_.contains(identifier)) {
|
| - return;
|
| - }
|
| -
|
| - KURL url = response.url();
|
| - Resource* resource = pending_resources_.get(identifier);
|
| - resource->response_received_time = WTF::currentTime();
|
| - resource->expected_content_length =
|
| - static_cast<int>(response.expectedContentLength());
|
| - resource->http_status_code = response.httpStatusCode();
|
| - resource->mime_type = response.mimeType();
|
| - resource->suggested_filename = response.suggestedFilename();
|
| - resource->response_headers = response.httpHeaderFields();
|
| -
|
| - if (attached_) {
|
| - DictionaryValue value;
|
| - Serialize(*resource, &value);
|
| - delegate_->DidReceiveResponse(identifier, value);
|
| - }
|
| -}
|
| -
|
| -void NetAgentImpl::DidReceiveContentLength(
|
| - DocumentLoader* loader,
|
| - int identifier,
|
| - int length) {
|
| -}
|
| -
|
| -void NetAgentImpl::DidFinishLoading(
|
| - DocumentLoader* loader,
|
| - int identifier) {
|
| - if (!pending_resources_.contains(identifier)) {
|
| - return;
|
| - }
|
| -
|
| - Resource* resource = pending_resources_.get(identifier);
|
| - resource->end_time = WTF::currentTime();
|
| -
|
| - // This is the first command being dispatched after
|
| - // DidCommitMainResourceLoad, we know that the first resource to be reported
|
| - // as loaded is main resource.
|
| - if (!main_loader_.get()) {
|
| - main_loader_ = loader;
|
| - resource->main_resource = true;
|
| - }
|
| -
|
| - pending_resources_.remove(identifier);
|
| - finished_resources_.append(std::make_pair(identifier, resource));
|
| -
|
| - if (attached_) {
|
| - DictionaryValue value;
|
| - Serialize(*resource, &value);
|
| - delegate_->DidFinishLoading(identifier, value);
|
| - } else {
|
| - ExpireFinishedResourcesCache();
|
| - }
|
| -}
|
| -
|
| -void NetAgentImpl::DidFailLoading(
|
| - DocumentLoader* loader,
|
| - int identifier,
|
| - const ResourceError& error) {
|
| - if (!pending_resources_.contains(identifier)) {
|
| - return;
|
| - }
|
| - Resource* resource = pending_resources_.get(identifier);
|
| - resource->error_code = error.errorCode();
|
| - resource->error_description = error.localizedDescription();
|
| - DidFinishLoading(loader, identifier);
|
| -}
|
| -
|
| -void NetAgentImpl::DidLoadResourceFromMemoryCache(
|
| - DocumentLoader* loader,
|
| - const ResourceRequest& request,
|
| - const ResourceResponse& response,
|
| - int length) {
|
| - int identifier = last_cached_identifier_--;
|
| -}
|
| -
|
| -void NetAgentImpl::DidLoadResourceByXMLHttpRequest(
|
| - int identifier,
|
| - const WebCore::ScriptString& source) {
|
| - if (attached_) {
|
| - // Only store XmlHttpRequests data when client is attached.
|
| - xml_http_sources_.set(identifier, source);
|
| - }
|
| -}
|
| -
|
| -void NetAgentImpl::GetResourceContent(
|
| - int call_id,
|
| - int identifier,
|
| - const String& url) {
|
| - if (!document_) {
|
| - return;
|
| - }
|
| -
|
| - String source;
|
| -
|
| - WebCore::ScriptString script = xml_http_sources_.get(identifier);
|
| - if (!script.isNull()) {
|
| - source = String(script);
|
| - } else if (main_loader_.get() && main_loader_->requestURL() == url) {
|
| - RefPtr<SharedBuffer> buffer = main_loader_->mainResourceData();
|
| - String text_encoding_name = document_->inputEncoding();
|
| - if (buffer) {
|
| - WebCore::TextEncoding encoding(text_encoding_name);
|
| - if (!encoding.isValid())
|
| - encoding = WindowsLatin1Encoding();
|
| - source = encoding.decode(buffer->data(), buffer->size());
|
| - }
|
| - } else {
|
| - CachedResource* cached_resource = document_->
|
| - docLoader()->cachedResource(url);
|
| - if (!cached_resource) {
|
| - delegate_->GetResourceContentResult(call_id, "");
|
| - return;
|
| - }
|
| - if (cached_resource->isPurgeable()) {
|
| - // If the resource is purgeable then make it unpurgeable to get its data.
|
| - // This might fail, in which case we return an empty string.
|
| - if (!cached_resource->makePurgeable(false)) {
|
| - delegate_->GetResourceContentResult(call_id, "");
|
| - return;
|
| - }
|
| - }
|
| -
|
| - // Try to get the decoded source. Only applies to some CachedResource
|
| - // types.
|
| - switch (cached_resource->type()) {
|
| - case CachedResource::CSSStyleSheet: {
|
| - CachedCSSStyleSheet *sheet =
|
| - reinterpret_cast<CachedCSSStyleSheet*>(cached_resource);
|
| - source = sheet->sheetText();
|
| - break;
|
| - }
|
| - case CachedResource::Script: {
|
| - CachedScript *script =
|
| - reinterpret_cast<CachedScript*>(cached_resource);
|
| - source = script->script();
|
| - break;
|
| - }
|
| -#if ENABLE(XSLT)
|
| - case CachedResource::XSLStyleSheet: {
|
| - CachedXSLStyleSheet *sheet =
|
| - reinterpret_cast<CachedXSLStyleSheet*>(cached_resource);
|
| - source = sheet->sheet();
|
| - break;
|
| - }
|
| -#endif
|
| - default:
|
| - break;
|
| - }
|
| - }
|
| - delegate_->GetResourceContentResult(call_id,
|
| - webkit_glue::StringToStdString(source));
|
| -}
|
| -
|
| -// static
|
| -Value* NetAgentImpl::BuildValueForHeaders(const HTTPHeaderMap& headers) {
|
| - OwnPtr<DictionaryValue> value(new DictionaryValue());
|
| - HTTPHeaderMap::const_iterator end = headers.end();
|
| - for (HTTPHeaderMap::const_iterator it = headers.begin(); it != end; ++it) {
|
| - value->SetString(webkit_glue::StringToStdWString(it->first),
|
| - webkit_glue::StringToStdString(it->second));
|
| - }
|
| - return value.release();
|
| -}
|
| -
|
| -// static
|
| -void NetAgentImpl::Serialize(const Resource& resource,
|
| - DictionaryValue* value) {
|
| - value->SetReal(L"startTime", resource.start_time);
|
| - value->SetReal(L"responseReceivedTime", resource.response_received_time);
|
| - value->SetReal(L"endTime", resource.end_time);
|
| -
|
| - value->SetString(L"requestURL",
|
| - webkit_glue::StringToStdString(resource.url.string()));
|
| - value->SetString(L"host",
|
| - webkit_glue::StringToStdString(resource.url.host()));
|
| - value->SetString(L"path",
|
| - webkit_glue::StringToStdString(resource.url.path()));
|
| - value->SetString(
|
| - L"lastPathComponent",
|
| - webkit_glue::StringToStdString(resource.url.lastPathComponent()));
|
| -
|
| - value->SetString(L"mimeType",
|
| - webkit_glue::StringToStdWString(resource.mime_type));
|
| - value->SetString(L"suggestedFilename",
|
| - webkit_glue::StringToStdWString(resource.suggested_filename));
|
| -
|
| - value->SetInteger(L"expectedContentLength",
|
| - resource.expected_content_length);
|
| - value->SetInteger(L"responseStatusCode", resource.http_status_code);
|
| -
|
| - value->Set(L"requestHeaders",
|
| - BuildValueForHeaders(resource.request_headers));
|
| - value->Set(L"responseHeaders",
|
| - BuildValueForHeaders(resource.response_headers));
|
| -
|
| - value->SetBoolean(L"isMainResource", resource.main_resource);
|
| - value->SetBoolean(L"cached", false);
|
| -
|
| - if (resource.error_code) {
|
| - value->SetInteger(L"errorCode", resource.error_code);
|
| - value->SetString(L"localizedDescription",
|
| - webkit_glue::StringToStdString(resource.error_description));
|
| - }
|
| -}
|
| -
|
| -void NetAgentImpl::ExpireFinishedResourcesCache() {
|
| - if (finished_resources_.size() > 100) {
|
| - // Preserve main resource.
|
| - for (int i = 1; i < 21; ++i) {
|
| - delete finished_resources_[i].second;
|
| - }
|
| - finished_resources_.remove(1, 21);
|
| - }
|
| -}
|
|
|