Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(79)

Unified Diff: sky/engine/core/fetch/ResourceLoader.cpp

Issue 1223793006: Delete sky/engine/core/fetch (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/engine/core/fetch/ResourceLoader.h ('k') | sky/engine/core/fetch/ResourceLoaderHost.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/engine/core/fetch/ResourceLoader.cpp
diff --git a/sky/engine/core/fetch/ResourceLoader.cpp b/sky/engine/core/fetch/ResourceLoader.cpp
deleted file mode 100644
index a3c0e0f60219e5e17f86d08309d981c85a44fc58..0000000000000000000000000000000000000000
--- a/sky/engine/core/fetch/ResourceLoader.cpp
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2010, 2011 Apple Inc. All rights reserved.
- * (C) 2007 Graham Dennis (graham.dennis@gmail.com)
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "sky/engine/core/fetch/ResourceLoader.h"
-
-#include "sky/engine/core/fetch/Resource.h"
-#include "sky/engine/core/fetch/ResourceLoaderHost.h"
-#include "sky/engine/core/fetch/ResourcePtr.h"
-#include "sky/engine/platform/Logging.h"
-#include "sky/engine/platform/SharedBuffer.h"
-#include "sky/engine/platform/exported/WrappedResourceRequest.h"
-#include "sky/engine/platform/exported/WrappedResourceResponse.h"
-#include "sky/engine/platform/network/ResourceError.h"
-#include "sky/engine/public/platform/Platform.h"
-#include "sky/engine/public/platform/WebData.h"
-#include "sky/engine/public/platform/WebURLError.h"
-#include "sky/engine/public/platform/WebURLRequest.h"
-#include "sky/engine/public/platform/WebURLResponse.h"
-#include "sky/engine/wtf/Assertions.h"
-#include "sky/engine/wtf/CurrentTime.h"
-
-namespace blink {
-
-ResourceLoader::RequestCountTracker::RequestCountTracker(ResourceLoaderHost* host, Resource* resource)
- : m_host(host)
- , m_resource(resource)
-{
- m_host->incrementRequestCount(m_resource);
-}
-
-ResourceLoader::RequestCountTracker::~RequestCountTracker()
-{
- m_host->decrementRequestCount(m_resource);
-}
-
-ResourceLoader::RequestCountTracker::RequestCountTracker(const RequestCountTracker& other)
-{
- m_host = other.m_host;
- m_resource = other.m_resource;
- m_host->incrementRequestCount(m_resource);
-}
-
-PassRefPtr<ResourceLoader> ResourceLoader::create(ResourceLoaderHost* host, Resource* resource, const ResourceRequest& request, const ResourceLoaderOptions& options)
-{
- RefPtr<ResourceLoader> loader(adoptRef(new ResourceLoader(host, resource, options)));
- loader->init(request);
- return loader.release();
-}
-
-ResourceLoader::ResourceLoader(ResourceLoaderHost* host, Resource* resource, const ResourceLoaderOptions& options)
- : m_host(host)
- , m_notifiedLoadComplete(false)
- , m_options(options)
- , m_resource(resource)
- , m_state(Initialized)
- , m_connectionState(ConnectionStateNew)
- , m_requestCountTracker(adoptPtr(new RequestCountTracker(host, resource)))
-{
-}
-
-ResourceLoader::~ResourceLoader()
-{
- ASSERT(m_state == Terminated);
-}
-
-void ResourceLoader::releaseResources()
-{
- ASSERT(m_state != Terminated);
- ASSERT(m_notifiedLoadComplete);
- m_requestCountTracker.clear();
- m_host->didLoadResource(m_resource);
- if (m_state == Terminated)
- return;
- m_resource->clearLoader();
- m_resource->deleteIfPossible();
- m_resource = nullptr;
- m_host->willTerminateResourceLoader(this);
-
- ASSERT(m_state != Terminated);
-
- // It's possible that when we release the loader, it will be
- // deallocated and release the last reference to this object.
- // We need to retain to avoid accessing the object after it
- // has been deallocated and also to avoid reentering this method.
- RefPtr<ResourceLoader> protector(this);
-
- m_host.clear();
- m_state = Terminated;
-
- if (m_loader) {
- m_loader->cancel();
- m_loader.clear();
- }
-}
-
-void ResourceLoader::init(const ResourceRequest& passedRequest)
-{
- ASSERT(m_state != Terminated);
- ResourceRequest request(passedRequest);
- m_host->willSendRequest(m_resource->identifier(), request, ResourceResponse(), m_options.initiatorInfo);
- ASSERT(m_state != Terminated);
- ASSERT(!request.isNull());
- m_request = applyOptions(request);
- m_resource->updateRequest(request);
- ASSERT(m_state != Terminated);
- m_host->didInitializeResourceLoader(this);
-}
-
-void ResourceLoader::start()
-{
- ASSERT(!m_loader);
- ASSERT(!m_request.isNull());
-
- m_host->willStartLoadingResource(m_resource, m_request);
-
- if (m_state == Terminated)
- return;
-
- RELEASE_ASSERT(m_connectionState == ConnectionStateNew);
- m_connectionState = ConnectionStateStarted;
-
- m_loader = adoptPtr(blink::Platform::current()->createURLLoader());
- ASSERT(m_loader);
- blink::WrappedResourceRequest wrappedRequest(m_request);
- m_loader->loadAsynchronously(wrappedRequest, this);
-}
-
-void ResourceLoader::didDownloadData(blink::WebURLLoader*, int length, int encodedDataLength)
-{
- ASSERT(m_state != Terminated);
- RefPtr<ResourceLoader> protect(this);
- RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse);
- m_host->didDownloadData(m_resource, length, encodedDataLength);
- if (m_state == Terminated)
- return;
- m_resource->didDownloadData(length);
-}
-
-void ResourceLoader::didFinishLoadingOnePart(double finishTime, int64 encodedDataLength)
-{
- // If load has been cancelled after finishing (which could happen with a
- // JavaScript that changes the window location), do nothing.
- if (m_state == Terminated)
- return;
-
- if (m_notifiedLoadComplete)
- return;
- m_notifiedLoadComplete = true;
- m_host->didFinishLoading(m_resource, finishTime, encodedDataLength);
-}
-
-void ResourceLoader::didChangePriority(ResourceLoadPriority loadPriority, int intraPriorityValue)
-{
- if (m_loader) {
- m_host->didChangeLoadingPriority(m_resource, loadPriority, intraPriorityValue);
- ASSERT(m_state != Terminated);
- m_loader->didChangePriority(static_cast<blink::WebURLRequest::Priority>(loadPriority), intraPriorityValue);
- }
-}
-
-void ResourceLoader::cancelIfNotFinishing()
-{
- if (m_state != Initialized)
- return;
- cancel();
-}
-
-void ResourceLoader::cancel()
-{
- cancel(ResourceError());
-}
-
-void ResourceLoader::cancel(const ResourceError& error)
-{
- // If the load has already completed - succeeded, failed, or previously cancelled - do nothing.
- if (m_state == Terminated)
- return;
- if (m_state == Finishing) {
- releaseResources();
- return;
- }
-
- ResourceError nonNullError = error.isNull() ? ResourceError::cancelledError(m_request.url()) : error;
-
- // This function calls out to clients at several points that might do
- // something that causes the last reference to this object to go away.
- RefPtr<ResourceLoader> protector(this);
-
- WTF_LOG(ResourceLoading, "Cancelled load of '%s'.\n", m_resource->url().string().latin1().data());
- if (m_state == Initialized)
- m_state = Finishing;
- m_resource->setResourceError(nonNullError);
-
- if (m_loader) {
- m_connectionState = ConnectionStateCanceled;
- m_loader->cancel();
- m_loader.clear();
- }
-
- if (!m_notifiedLoadComplete) {
- m_notifiedLoadComplete = true;
- m_host->didFailLoading(m_resource, nonNullError);
- }
-
- if (m_state == Finishing)
- m_resource->error(Resource::LoadError);
- if (m_state != Terminated)
- releaseResources();
-}
-
-void ResourceLoader::willSendRequest(blink::WebURLLoader*, blink::WebURLRequest& passedRequest, const blink::WebURLResponse& passedRedirectResponse)
-{
- ASSERT(m_state != Terminated);
- RefPtr<ResourceLoader> protect(this);
-
- ResourceRequest& request(applyOptions(passedRequest.toMutableResourceRequest()));
-
- // FIXME: We should have a real context for redirect requests. Currently, we don't: see WebURLLoaderImpl::Context::OnReceivedRedirect in content/.
- request.setRequestContext(blink::WebURLRequest::RequestContextInternal);
-
- ASSERT(!request.isNull());
- const ResourceResponse& redirectResponse(passedRedirectResponse.toResourceResponse());
- ASSERT(!redirectResponse.isNull());
- ASSERT(m_state != Terminated);
-
- applyOptions(request); // canAccessRedirect() can modify m_options so we should re-apply it.
- ASSERT(m_state != Terminated);
- m_resource->willSendRequest(request, redirectResponse);
- if (request.isNull() || m_state == Terminated)
- return;
-
- m_host->willSendRequest(m_resource->identifier(), request, redirectResponse, m_options.initiatorInfo);
- ASSERT(m_state != Terminated);
- ASSERT(!request.isNull());
- m_resource->updateRequest(request);
- m_request = request;
-}
-
-void ResourceLoader::didSendData(blink::WebURLLoader*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent)
-{
- ASSERT(m_state == Initialized);
- RefPtr<ResourceLoader> protect(this);
- m_resource->didSendData(bytesSent, totalBytesToBeSent);
-}
-
-void ResourceLoader::didReceiveResponse(blink::WebURLLoader*, const blink::WebURLResponse& response)
-{
- ASSERT(!response.isNull());
- ASSERT(m_state == Initialized);
-
- bool isMultipartPayload = response.isMultipartPayload();
- bool isValidStateTransition = (m_connectionState == ConnectionStateStarted || m_connectionState == ConnectionStateReceivedResponse);
- // In the case of multipart loads, calls to didReceiveData & didReceiveResponse can be interleaved.
- RELEASE_ASSERT(isMultipartPayload || isValidStateTransition);
- m_connectionState = ConnectionStateReceivedResponse;
-
- const ResourceResponse& resourceResponse = response.toResourceResponse();
-
- // Reference the object in this method since the additional processing can do
- // anything including removing the last reference to this object.
- RefPtr<ResourceLoader> protect(this);
- m_resource->responseReceived(resourceResponse);
- if (m_state == Terminated)
- return;
-
- m_host->didReceiveResponse(m_resource, resourceResponse);
- if (m_state == Terminated)
- return;
-
- if (response.toResourceResponse().isMultipart()) {
- // We don't count multiParts in a ResourceFetcher's request count
- m_requestCountTracker.clear();
- if (!m_resource->isImage()) {
- cancel();
- return;
- }
- } else if (isMultipartPayload) {
- // Since a subresource loader does not load multipart sections progressively, data was delivered to the loader all at once.
- // After the first multipart section is complete, signal to delegates that this load is "finished"
- m_host->subresourceLoaderFinishedLoadingOnePart(this);
- ASSERT(m_state != Terminated);
- didFinishLoadingOnePart(0, blink::WebURLLoaderClient::kUnknownEncodedDataLength);
- }
- if (m_state == Terminated)
- return;
-
- if (m_resource->response().httpStatusCode() < 400 || m_resource->shouldIgnoreHTTPStatusCodeErrors())
- return;
- m_state = Finishing;
-
- if (!m_notifiedLoadComplete) {
- m_notifiedLoadComplete = true;
- m_host->didFailLoading(m_resource, ResourceError::cancelledError(m_request.url()));
- }
-
- ASSERT(m_state != Terminated);
- m_resource->error(Resource::LoadError);
- cancel();
-}
-
-void ResourceLoader::didReceiveData(blink::WebURLLoader*, const char* data, int length, int encodedDataLength)
-{
- ASSERT(m_state != Terminated);
- RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse || m_connectionState == ConnectionStateReceivingData);
- m_connectionState = ConnectionStateReceivingData;
-
- // It is possible to receive data on uninitialized resources if it had an error status code, and we are running a nested message
- // loop. When this occurs, ignoring the data is the correct action.
- if (m_resource->response().httpStatusCode() >= 400 && !m_resource->shouldIgnoreHTTPStatusCodeErrors())
- return;
- ASSERT(m_state == Initialized);
-
- // Reference the object in this method since the additional processing can do
- // anything including removing the last reference to this object.
- RefPtr<ResourceLoader> protect(this);
-
- // FIXME: If we get a resource with more than 2B bytes, this code won't do the right thing.
- // However, with today's computers and networking speeds, this won't happen in practice.
- // Could be an issue with a giant local file.
- m_host->didReceiveData(m_resource, data, length, encodedDataLength);
- if (m_state == Terminated)
- return;
- m_resource->appendData(data, length);
-}
-
-void ResourceLoader::didFinishLoading(blink::WebURLLoader*, double finishTime, int64 encodedDataLength)
-{
- RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse || m_connectionState == ConnectionStateReceivingData);
- m_connectionState = ConnectionStateFinishedLoading;
- if (m_state != Initialized)
- return;
- ASSERT(m_state != Terminated);
- WTF_LOG(ResourceLoading, "Received '%s'.", m_resource->url().string().latin1().data());
-
- RefPtr<ResourceLoader> protect(this);
- ResourcePtr<Resource> protectResource(m_resource);
- m_state = Finishing;
- didFinishLoadingOnePart(finishTime, encodedDataLength);
- if (m_state == Terminated)
- return;
- m_resource->finish(finishTime);
-
- // If the load has been cancelled by a delegate in response to didFinishLoad(), do not release
- // the resources a second time, they have been released by cancel.
- if (m_state == Terminated)
- return;
- releaseResources();
-}
-
-void ResourceLoader::didFail(blink::WebURLLoader*, const blink::WebURLError& error)
-{
- m_connectionState = ConnectionStateFailed;
- ASSERT(m_state != Terminated);
- WTF_LOG(ResourceLoading, "Failed to load '%s'.\n", m_resource->url().string().latin1().data());
-
- RefPtr<ResourceLoader> protect(this);
- RefPtr<ResourceLoaderHost> protectHost(m_host.get());
- ResourcePtr<Resource> protectResource(m_resource);
- m_state = Finishing;
- m_resource->setResourceError(error);
-
- if (!m_notifiedLoadComplete) {
- m_notifiedLoadComplete = true;
- m_host->didFailLoading(m_resource, error);
- }
- if (m_state == Terminated)
- return;
-
- m_resource->error(Resource::LoadError);
-
- if (m_state == Terminated)
- return;
-
- releaseResources();
-}
-
-bool ResourceLoader::isLoadedBy(ResourceLoaderHost* loader) const
-{
- return m_host->isLoadedBy(loader);
-}
-
-ResourceRequest& ResourceLoader::applyOptions(ResourceRequest& request) const
-{
- request.setAllowStoredCredentials(m_options.allowCredentials == AllowStoredCredentials);
- return request;
-}
-
-}
« no previous file with comments | « sky/engine/core/fetch/ResourceLoader.h ('k') | sky/engine/core/fetch/ResourceLoaderHost.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698