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

Unified Diff: third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp

Issue 2746343002: Phase III Step 1: Make ImageResourceContent manage its own ResourceStatus (Closed)
Patch Set: Reflect comments Created 3 years, 7 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
Index: third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp
index 448a4f1b3ed22cfc431f99d7a0508f2cb8d99763..aeec98c26fc917eda8c903f8c4dee6db45c8a5d0 100644
--- a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp
+++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp
@@ -29,6 +29,7 @@
#include "platform/Histogram.h"
#include "platform/RuntimeEnabledFeatures.h"
+#include "platform/ScriptForbiddenScope.h"
#include "platform/instrumentation/tracing/TraceEvent.h"
#include "platform/instrumentation/tracing/TracedValue.h"
#include "platform/loader/fetch/FetchContext.h"
@@ -431,6 +432,8 @@ Resource* ResourceFetcher::ResourceForStaticData(
params.Options(), params.Charset());
resource->SetNeedsSynchronousCacheHit(substitute_data.ForceSynchronousLoad());
// FIXME: We should provide a body stream here.
+ resource->SetStatus(ResourceStatus::kPending);
+ resource->NotifyStartLoad();
resource->ResponseReceived(response, nullptr);
resource->SetDataBufferingPolicy(kBufferData);
if (data->size())
@@ -451,6 +454,8 @@ Resource* ResourceFetcher::ResourceForBlockedRequest(
ResourceRequestBlockedReason blocked_reason) {
Resource* resource = factory.Create(params.GetResourceRequest(),
params.Options(), params.Charset());
+ resource->SetStatus(ResourceStatus::kPending);
+ resource->NotifyStartLoad();
resource->FinishAsError(ResourceError::CancelledDueToAccessCheckError(
params.Url(), blocked_reason));
return resource;
@@ -1333,44 +1338,59 @@ void ResourceFetcher::MoveResourceLoaderToNonBlocking(ResourceLoader* loader) {
bool ResourceFetcher::StartLoad(Resource* resource) {
DCHECK(resource);
DCHECK(resource->StillNeedsLoad());
- if (!Context().ShouldLoadNewResource(resource->GetType())) {
- GetMemoryCache()->Remove(resource);
- return false;
- }
ResourceRequest request(resource->GetResourceRequest());
- ResourceResponse response;
+ ResourceLoader* loader = nullptr;
+
+ {
+ // Forbids JavaScript/addClient/removeClient/revalidation until start()
+ // to prevent unintended state transitions.
+ Resource::ProhibitAddRemoveClientInScope
+ prohibit_add_remove_client_in_scope(resource);
+ Resource::RevalidationStartForbiddenScope
+ revalidation_start_forbidden_scope(resource);
+ ScriptForbiddenScope script_forbidden_scope;
+
+ if (!Context().ShouldLoadNewResource(resource->GetType())) {
+ GetMemoryCache()->Remove(resource);
+ return false;
+ }
- blink::probe::PlatformSendRequest probe(&Context(), resource->Identifier(),
- request, response,
- resource->Options().initiator_info);
+ ResourceResponse response;
- Context().DispatchWillSendRequest(resource->Identifier(), request, response,
- resource->Options().initiator_info);
+ blink::probe::PlatformSendRequest probe(&Context(), resource->Identifier(),
+ request, response,
+ resource->Options().initiator_info);
- // TODO(shaochuan): Saving modified ResourceRequest back to |resource|, remove
- // once dispatchWillSendRequest() takes const ResourceRequest.
- // crbug.com/632580
- resource->SetResourceRequest(request);
-
- // Resource requests from suborigins should not be intercepted by the service
- // worker of the physical origin. This has the effect that, for now,
- // suborigins do not work with service workers. See
- // https://w3c.github.io/webappsec-suborigins/.
- SecurityOrigin* source_origin = Context().GetSecurityOrigin();
- if (source_origin && source_origin->HasSuborigin())
- request.SetServiceWorkerMode(WebURLRequest::ServiceWorkerMode::kNone);
-
- ResourceLoader* loader = ResourceLoader::Create(this, resource);
- if (resource->ShouldBlockLoadEvent())
- loaders_.insert(loader);
- else
- non_blocking_loaders_.insert(loader);
+ Context().DispatchWillSendRequest(resource->Identifier(), request, response,
+ resource->Options().initiator_info);
+
+ // TODO(shaochuan): Saving modified ResourceRequest back to |resource|,
+ // remove once dispatchWillSendRequest() takes const ResourceRequest.
+ // crbug.com/632580
+ resource->SetResourceRequest(request);
+
+ // Resource requests from suborigins should not be intercepted by the
+ // service worker of the physical origin. This has the effect that, for now,
+ // suborigins do not work with service workers. See
+ // https://w3c.github.io/webappsec-suborigins/.
+ SecurityOrigin* source_origin = Context().GetSecurityOrigin();
+ if (source_origin && source_origin->HasSuborigin())
+ request.SetServiceWorkerMode(WebURLRequest::ServiceWorkerMode::kNone);
- StorePerformanceTimingInitiatorInformation(resource);
- resource->SetFetcherSecurityOrigin(source_origin);
+ loader = ResourceLoader::Create(this, resource);
+ if (resource->ShouldBlockLoadEvent())
+ loaders_.insert(loader);
+ else
+ non_blocking_loaders_.insert(loader);
+
+ StorePerformanceTimingInitiatorInformation(resource);
+ resource->SetFetcherSecurityOrigin(source_origin);
+
+ resource->NotifyStartLoad();
+ loader->ActivateCacheAwareLoadingIfNeeded(request);
+ }
- loader->ActivateCacheAwareLoadingIfNeeded(request);
loader->Start(request);
return true;
}
« no previous file with comments | « third_party/WebKit/Source/platform/loader/fetch/Resource.h ('k') | third_party/WebKit/Source/web/tests/WebFrameTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698