Changeset 204014 in webkit
- Timestamp:
- Aug 1, 2016 11:46:57 PM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 34 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r204013 r204014 1 2016-08-01 Youenn Fablet <youenn@apple.com> 2 3 [Fetch API] Pass directly FetchRequest fetch options to ThreadableLoader 4 https://bugs.webkit.org/show_bug.cgi?id=160407 5 6 Reviewed by Sam Weinig. 7 8 No change of behavior. 9 10 Added a ResourceLoaderOptions constructor that takes a FetchOptions as input. 11 Removed setters and getters of ResourceLoaderOptions as it is a struct. 12 Updated member fields accordingly. 13 14 Updated code accordingly. 15 Removed explicit option setting if it is the same as the default value. 16 17 * Modules/fetch/FetchLoader.cpp: 18 (WebCore::FetchLoader::start): 19 * css/CSSFontFaceSrcValue.cpp: 20 (WebCore::CSSFontFaceSrcValue::cachedFont): 21 * css/CSSImageSetValue.cpp: 22 (WebCore::CSSImageSetValue::cachedImageSet): 23 * css/CSSImageValue.cpp: 24 (WebCore::CSSImageValue::cachedImage): 25 * dom/ScriptElement.cpp: 26 (WebCore::ScriptElement::requestScript): 27 * fileapi/FileReaderLoader.cpp: 28 (WebCore::FileReaderLoader::start): 29 * html/HTMLLinkElement.cpp: 30 (WebCore::HTMLLinkElement::process): 31 * inspector/InspectorNetworkAgent.cpp: 32 (WebCore::InspectorNetworkAgent::loadResource): 33 * loader/CrossOriginPreflightChecker.cpp: 34 (WebCore::CrossOriginPreflightChecker::validatePreflightResponse): 35 (WebCore::CrossOriginPreflightChecker::startPreflight): 36 * loader/DocumentThreadableLoader.cpp: 37 (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): 38 (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequest): 39 (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest): 40 (WebCore::DocumentThreadableLoader::redirectReceived): 41 (WebCore::DocumentThreadableLoader::didReceiveResponse): 42 (WebCore::DocumentThreadableLoader::preflightSuccess): 43 (WebCore::DocumentThreadableLoader::loadRequest): 44 * loader/ImageLoader.cpp: 45 (WebCore::ImageLoader::updateFromElement): 46 * loader/ResourceLoader.cpp: 47 (WebCore::ResourceLoader::ResourceLoader): 48 (WebCore::ResourceLoader::init): 49 (WebCore::ResourceLoader::start): 50 (WebCore::ResourceLoader::setDefersLoading): 51 (WebCore::ResourceLoader::setDataBufferingPolicy): 52 (WebCore::ResourceLoader::addDataOrBuffer): 53 (WebCore::ResourceLoader::willSendRequestInternal): 54 (WebCore::ResourceLoader::didReceiveResponse): 55 (WebCore::ResourceLoader::didReceiveDataOrBuffer): 56 (WebCore::ResourceLoader::didFinishLoadingOnePart): 57 (WebCore::ResourceLoader::cleanupForError): 58 (WebCore::ResourceLoader::shouldUseCredentialStorage): 59 (WebCore::ResourceLoader::didReceiveAuthenticationChallenge): 60 * loader/ResourceLoader.h: 61 (WebCore::ResourceLoader::shouldSendResourceLoadCallbacks): 62 (WebCore::ResourceLoader::setSendCallbackPolicy): 63 (WebCore::ResourceLoader::shouldSniffContent): 64 (WebCore::ResourceLoader::shouldIncludeCertificateInfo): 65 * loader/ResourceLoaderOptions.h: 66 (WebCore::ResourceLoaderOptions::ResourceLoaderOptions): 67 (WebCore::ResourceLoaderOptions::sendLoadCallbacks): Deleted. 68 (WebCore::ResourceLoaderOptions::setSendLoadCallbacks): Deleted. 69 (WebCore::ResourceLoaderOptions::sniffContent): Deleted. 70 (WebCore::ResourceLoaderOptions::setSniffContent): Deleted. 71 (WebCore::ResourceLoaderOptions::dataBufferingPolicy): Deleted. 72 (WebCore::ResourceLoaderOptions::setDataBufferingPolicy): Deleted. 73 (WebCore::ResourceLoaderOptions::allowCredentials): Deleted. 74 (WebCore::ResourceLoaderOptions::setAllowCredentials): Deleted. 75 (WebCore::ResourceLoaderOptions::securityCheck): Deleted. 76 (WebCore::ResourceLoaderOptions::setSecurityCheck): Deleted. 77 (WebCore::ResourceLoaderOptions::certificateInfoPolicy): Deleted. 78 (WebCore::ResourceLoaderOptions::setCertificateInfoPolicy): Deleted. 79 (WebCore::ResourceLoaderOptions::contentSecurityPolicyImposition): Deleted. 80 (WebCore::ResourceLoaderOptions::setContentSecurityPolicyImposition): Deleted. 81 (WebCore::ResourceLoaderOptions::defersLoadingPolicy): Deleted. 82 (WebCore::ResourceLoaderOptions::setDefersLoadingPolicy): Deleted. 83 (WebCore::ResourceLoaderOptions::cachingPolicy): Deleted. 84 (WebCore::ResourceLoaderOptions::setCachingPolicy): Deleted. 85 * loader/SubresourceLoader.cpp: 86 (WebCore::SubresourceLoader::checkRedirectionCrossOriginAccessControl): 87 * loader/TextTrackLoader.cpp: 88 (WebCore::TextTrackLoader::load): 89 * loader/cache/CachedRawResource.cpp: 90 (WebCore::CachedRawResource::setDataBufferingPolicy): 91 * loader/cache/CachedResource.cpp: 92 (WebCore::CachedResource::load): 93 * loader/cache/CachedResource.h: 94 (WebCore::CachedResource::shouldSendResourceLoadCallbacks): 95 (WebCore::CachedResource::dataBufferingPolicy): 96 (WebCore::CachedResource::allowsCaching): 97 * loader/cache/CachedResourceLoader.cpp: 98 (WebCore::CachedResourceLoader::canRequest): 99 * loader/cache/CachedResourceRequest.cpp: 100 (WebCore::CachedResourceRequest::setAsPotentiallyCrossOrigin): 101 * loader/cache/CachedResourceRequest.h: 102 (WebCore::CachedResourceRequest::allowsCaching): 103 * loader/cache/CachedResourceRequestInitiators.cpp: 104 (WebCore::CachedResourceRequestInitiators::CachedResourceRequestInitiators): 105 * loader/cache/CachedResourceRequestInitiators.h: 106 * loader/mac/ResourceLoaderMac.mm: 107 (WebCore::ResourceLoader::willCacheResponse): 108 (WebCore::ResourceLoader::didReceiveDataArray): 109 * page/EventSource.cpp: 110 (WebCore::EventSource::connect): 111 * style/StylePendingResources.cpp: 112 (WebCore::Style::loadPendingImage): 113 (WebCore::Style::loadPendingSVGFilters): 114 * svg/SVGFEImageElement.cpp: 115 (WebCore::SVGFEImageElement::requestImageResource): 116 * svg/SVGFontFaceUriElement.cpp: 117 (WebCore::SVGFontFaceUriElement::loadFont): 118 * svg/SVGUseElement.cpp: 119 (WebCore::SVGUseElement::updateExternalDocument): 120 * workers/WorkerScriptLoader.cpp: 121 (WebCore::WorkerScriptLoader::loadSynchronously): 122 (WebCore::WorkerScriptLoader::loadAsynchronously): 123 * xml/XMLHttpRequest.cpp: 124 (WebCore::XMLHttpRequest::createRequest): 125 1 126 2016-08-01 Carlos Garcia Campos <cgarcia@igalia.com> 2 127 -
trunk/Source/WebCore/Modules/fetch/FetchLoader.cpp
r203971 r204014 33 33 34 34 #include "BlobURL.h" 35 #include "CachedResourceRequestInitiators.h" 35 36 #include "FetchBody.h" 36 37 #include "FetchLoaderClient.h" … … 60 61 61 62 ThreadableLoaderOptions options; 62 options.setSendLoadCallbacks(SendCallbacks); 63 options.setSniffContent(DoNotSniffContent); 64 options.setDataBufferingPolicy(DoNotBufferData); 63 options.sendLoadCallbacks = SendCallbacks; 64 options.dataBufferingPolicy = DoNotBufferData; 65 65 options.preflightPolicy = ConsiderPreflight; 66 options. setAllowCredentials(AllowStoredCredentials);66 options.credentials = FetchOptions::Credentials::Include; 67 67 options.mode = FetchOptions::Mode::SameOrigin; 68 68 options.contentSecurityPolicyEnforcement = ContentSecurityPolicyEnforcement::DoNotEnforce; … … 74 74 void FetchLoader::start(ScriptExecutionContext& context, const FetchRequest& request) 75 75 { 76 ThreadableLoaderOptions options; 77 options.setSendLoadCallbacks(SendCallbacks); 78 options.setSniffContent(DoNotSniffContent); 79 options.setDataBufferingPolicy(DoNotBufferData); 80 options.preflightPolicy = ConsiderPreflight; 81 options.contentSecurityPolicyEnforcement = ContentSecurityPolicyEnforcement::DoNotEnforce; 82 83 // FIXME: Pass directly all fetch options to loader options. 84 options.redirect = request.fetchOptions().redirect; 85 options.mode = request.fetchOptions().mode; 86 options.credentials = request.fetchOptions().credentials; 76 ThreadableLoaderOptions options(request.fetchOptions(), ConsiderPreflight, ContentSecurityPolicyEnforcement::DoNotEnforce, String(cachedResourceRequestInitiators().fetch)); 77 options.sendLoadCallbacks = SendCallbacks; 78 options.dataBufferingPolicy = DoNotBufferData; 87 79 88 80 m_loader = ThreadableLoader::create(&context, this, request.internalRequest(), options); -
trunk/Source/WebCore/css/CSSFontFaceSrcValue.cpp
r195452 r204014 105 105 106 106 ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions(); 107 options. setContentSecurityPolicyImposition(isInitiatingElementInUserAgentShadowTree ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck);107 options.contentSecurityPolicyImposition = isInitiatingElementInUserAgentShadowTree ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck; 108 108 109 109 CachedResourceRequest request(ResourceRequest(document->completeURL(m_resource)), options); -
trunk/Source/WebCore/css/CSSImageSetValue.cpp
r202811 r204014 121 121 if (options.mode == FetchOptions::Mode::Cors) { 122 122 ASSERT(document->securityOrigin()); 123 updateRequestForAccessControl(request.mutableResourceRequest(), *document->securityOrigin(), options.allowCredentials ());123 updateRequestForAccessControl(request.mutableResourceRequest(), *document->securityOrigin(), options.allowCredentials); 124 124 } 125 125 if (CachedResourceHandle<CachedImage> cachedImage = loader.requestImage(request)) { -
trunk/Source/WebCore/css/CSSImageValue.cpp
r202811 r204014 85 85 if (options.mode == FetchOptions::Mode::Cors) { 86 86 ASSERT(loader.document()->securityOrigin()); 87 updateRequestForAccessControl(request.mutableResourceRequest(), *loader.document()->securityOrigin(), options.allowCredentials ());87 updateRequestForAccessControl(request.mutableResourceRequest(), *loader.document()->securityOrigin(), options.allowCredentials); 88 88 } 89 89 if (CachedResourceHandle<CachedImage> cachedImage = loader.requestImage(request)) { -
trunk/Source/WebCore/dom/ScriptElement.cpp
r203324 r204014 262 262 bool hasKnownNonce = m_element.document().contentSecurityPolicy()->allowScriptWithNonce(m_element.attributeWithoutSynchronization(HTMLNames::nonceAttr), m_element.isInUserAgentShadowTree()); 263 263 ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions(); 264 options. setContentSecurityPolicyImposition(hasKnownNonce ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck);264 options.contentSecurityPolicyImposition = hasKnownNonce ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck; 265 265 266 266 CachedResourceRequest request(ResourceRequest(m_element.document().completeURL(sourceUrl)), options); -
trunk/Source/WebCore/fileapi/FileReaderLoader.cpp
r203971 r204014 87 87 88 88 ThreadableLoaderOptions options; 89 options.setSendLoadCallbacks(SendCallbacks); 90 options.setSniffContent(DoNotSniffContent); 91 options.setDataBufferingPolicy(DoNotBufferData); 92 options.preflightPolicy = ConsiderPreflight; 89 options.sendLoadCallbacks = SendCallbacks; 90 options.dataBufferingPolicy = DoNotBufferData; 93 91 options.credentials = FetchOptions::Credentials::Include; 94 92 options.mode = FetchOptions::Mode::SameOrigin; -
trunk/Source/WebCore/html/HTMLLinkElement.cpp
r203324 r204014 260 260 if (document().contentSecurityPolicy()->allowStyleWithNonce(attributeWithoutSynchronization(HTMLNames::nonceAttr))) { 261 261 ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions(); 262 options. setContentSecurityPolicyImposition(ContentSecurityPolicyImposition::SkipPolicyCheck);262 options.contentSecurityPolicyImposition = ContentSecurityPolicyImposition::SkipPolicyCheck; 263 263 request.setOptions(options); 264 264 } -
trunk/Source/WebCore/inspector/InspectorNetworkAgent.cpp
r203971 r204014 671 671 672 672 ThreadableLoaderOptions options; 673 options.se tSendLoadCallbacks(SendCallbacks); // So we remove this from m_hiddenRequestIdentifiers on completion.674 options. setDefersLoadingPolicy(DefersLoadingPolicy::DisallowDefersLoading); // So the request is never deferred.673 options.sendLoadCallbacks = SendCallbacks; // So we remove this from m_hiddenRequestIdentifiers on completion. 674 options.defersLoadingPolicy = DefersLoadingPolicy::DisallowDefersLoading; // So the request is never deferred. 675 675 options.mode = FetchOptions::Mode::NoCors; 676 676 options.credentials = FetchOptions::Credentials::SameOrigin; -
trunk/Source/WebCore/loader/CrossOriginPreflightChecker.cpp
r203943 r204014 70 70 71 71 String description; 72 if (!passesAccessControlCheck(response, loader.options().allowCredentials (), loader.securityOrigin(), description)) {72 if (!passesAccessControlCheck(response, loader.options().allowCredentials, loader.securityOrigin(), description)) { 73 73 loader.preflightFailure(identifier, ResourceError(errorDomainWebKitInternal, 0, request.url(), description, ResourceError::Type::AccessControl)); 74 74 return; 75 75 } 76 76 77 auto result = std::make_unique<CrossOriginPreflightResultCacheItem>(loader.options().allowCredentials ());77 auto result = std::make_unique<CrossOriginPreflightResultCacheItem>(loader.options().allowCredentials); 78 78 if (!result->parse(response, description) 79 79 || !result->allowsCrossOriginMethod(request.httpMethod(), description) … … 101 101 void CrossOriginPreflightChecker::startPreflight() 102 102 { 103 auto options = m_loader.options();103 ResourceLoaderOptions options = static_cast<FetchOptions>(m_loader.options()); 104 104 options.credentials = FetchOptions::Credentials::Omit; 105 options.setSecurityCheck(DoSecurityCheck);106 // Don't sniff content or send load callbacks for the preflight request.107 options.setSendLoadCallbacks(DoNotSendCallbacks);108 options.setSniffContent(DoNotSniffContent);109 // Keep buffering the data for the preflight request.110 options.setDataBufferingPolicy(BufferData);111 112 105 options.redirect = FetchOptions::Redirect::Manual; 113 106 -
trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp
r203971 r204014 97 97 ASSERT_WITH_SECURITY_IMPLICATION(isAllowedByContentSecurityPolicy(request.url())); 98 98 99 m_options. setAllowCredentials((m_options.credentials == FetchOptions::Credentials::Include || (m_options.credentials == FetchOptions::Credentials::SameOrigin && m_sameOriginRequest)) ? AllowStoredCredentials : DoNotAllowStoredCredentials);99 m_options.allowCredentials = (m_options.credentials == FetchOptions::Credentials::Include || (m_options.credentials == FetchOptions::Credentials::SameOrigin && m_sameOriginRequest)) ? AllowStoredCredentials : DoNotAllowStoredCredentials; 100 100 101 101 if (m_sameOriginRequest || m_options.mode == FetchOptions::Mode::NoCors) { … … 120 120 else { 121 121 m_simpleRequest = false; 122 if (CrossOriginPreflightResultCache::singleton().canSkipPreflight(securityOrigin().toString(), request.url(), m_options.allowCredentials (), request.httpMethod(), request.httpHeaderFields()))122 if (CrossOriginPreflightResultCache::singleton().canSkipPreflight(securityOrigin().toString(), request.url(), m_options.allowCredentials, request.httpMethod(), request.httpHeaderFields())) 123 123 preflightSuccess(WTFMove(request)); 124 124 else … … 138 138 } 139 139 140 updateRequestForAccessControl(request, securityOrigin(), m_options.allowCredentials ());140 updateRequestForAccessControl(request, securityOrigin(), m_options.allowCredentials); 141 141 loadRequest(WTFMove(request), DoSecurityCheck); 142 142 } … … 228 228 String accessControlErrorDescription; 229 229 allowRedirect = isValidCrossOriginRedirectionURL(request.url()) 230 && (m_sameOriginRequest || passesAccessControlCheck(redirectResponse, m_options.allowCredentials(), securityOrigin(), accessControlErrorDescription));230 && (m_sameOriginRequest || passesAccessControlCheck(redirectResponse, m_options.allowCredentials, securityOrigin(), accessControlErrorDescription)); 231 231 } 232 232 … … 246 246 247 247 if (m_options.credentials == FetchOptions::Credentials::SameOrigin) 248 m_options. setAllowCredentials(DoNotAllowStoredCredentials);248 m_options.allowCredentials = DoNotAllowStoredCredentials; 249 249 250 250 cleanRedirectedRequestForAccessControl(request); … … 278 278 String accessControlErrorDescription; 279 279 if (!m_sameOriginRequest && m_options.mode == FetchOptions::Mode::Cors) { 280 if (!passesAccessControlCheck(response, m_options.allowCredentials (), securityOrigin(), accessControlErrorDescription)) {280 if (!passesAccessControlCheck(response, m_options.allowCredentials, securityOrigin(), accessControlErrorDescription)) { 281 281 m_client->didFail(ResourceError(errorDomainWebKitInternal, 0, response.url(), accessControlErrorDescription, ResourceError::Type::AccessControl)); 282 282 return; … … 335 335 { 336 336 ResourceRequest actualRequest(WTFMove(request)); 337 updateRequestForAccessControl(actualRequest, securityOrigin(), m_options.allowCredentials ());337 updateRequestForAccessControl(actualRequest, securityOrigin(), m_options.allowCredentials); 338 338 339 339 m_preflightChecker = Nullopt; … … 358 358 // Any credential should have been removed from the cross-site requests. 359 359 const URL& requestURL = request.url(); 360 m_options.se tSecurityCheck(securityCheck);360 m_options.securityCheck = securityCheck; 361 361 ASSERT(m_sameOriginRequest || requestURL.user().isEmpty()); 362 362 ASSERT(m_sameOriginRequest || requestURL.pass().isEmpty()); … … 372 372 if (RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled()) 373 373 newRequest.setInitiator(m_options.initiator); 374 newRequest.mutableResourceRequest().setAllowCookies(m_options.allowCredentials ()== AllowStoredCredentials);374 newRequest.mutableResourceRequest().setAllowCookies(m_options.allowCredentials == AllowStoredCredentials); 375 375 376 376 ASSERT(!m_resource); … … 394 394 if (!frameLoader.mixedContentChecker().canRunInsecureContent(m_document.securityOrigin(), requestURL)) 395 395 return; 396 identifier = frameLoader.loadResourceSynchronously(request, m_options.allowCredentials (), m_options.clientCredentialPolicy, error, response, data);396 identifier = frameLoader.loadResourceSynchronously(request, m_options.allowCredentials, m_options.clientCredentialPolicy, error, response, data); 397 397 } 398 398 -
trunk/Source/WebCore/loader/ImageLoader.cpp
r203337 r204014 175 175 if (!attr.isNull() && !stripLeadingAndTrailingHTMLSpaces(attr).isEmpty()) { 176 176 ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions(); 177 options. setContentSecurityPolicyImposition(element().isInUserAgentShadowTree() ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck);177 options.contentSecurityPolicyImposition = element().isInUserAgentShadowTree() ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck; 178 178 179 179 CachedResourceRequest request(ResourceRequest(document.completeURL(sourceURI(attr))), options); -
trunk/Source/WebCore/loader/ResourceLoader.cpp
r203720 r204014 62 62 : m_frame(&frame) 63 63 , m_documentLoader(frame.loader().activeDocumentLoader()) 64 , m_defersLoading(options.defersLoadingPolicy ()== DefersLoadingPolicy::AllowDefersLoading && frame.page()->defersLoading())64 , m_defersLoading(options.defersLoadingPolicy == DefersLoadingPolicy::AllowDefersLoading && frame.page()->defersLoading()) 65 65 , m_options(options) 66 66 { … … 126 126 #endif 127 127 128 m_defersLoading = m_options.defersLoadingPolicy ()== DefersLoadingPolicy::AllowDefersLoading && m_frame->page()->defersLoading();129 130 if (m_options.securityCheck ()== DoSecurityCheck && !m_frame->document()->securityOrigin()->canDisplay(clientRequest.url())) {128 m_defersLoading = m_options.defersLoadingPolicy == DefersLoadingPolicy::AllowDefersLoading && m_frame->page()->defersLoading(); 129 130 if (m_options.securityCheck == DoSecurityCheck && !m_frame->document()->securityOrigin()->canDisplay(clientRequest.url())) { 131 131 FrameLoader::reportLocalLoadFailed(m_frame.get(), clientRequest.url().string()); 132 132 releaseResources(); … … 207 207 } 208 208 209 m_handle = ResourceHandle::create(frameLoader()->networkingContext(), m_request, this, m_defersLoading, m_options.sniffContent ()== SniffContent);209 m_handle = ResourceHandle::create(frameLoader()->networkingContext(), m_request, this, m_defersLoading, m_options.sniffContent == SniffContent); 210 210 } 211 211 212 212 void ResourceLoader::setDefersLoading(bool defers) 213 213 { 214 if (m_options.defersLoadingPolicy ()== DefersLoadingPolicy::DisallowDefersLoading)214 if (m_options.defersLoadingPolicy == DefersLoadingPolicy::DisallowDefersLoading) 215 215 return; 216 216 … … 269 269 270 270 void ResourceLoader::setDataBufferingPolicy(DataBufferingPolicy dataBufferingPolicy) 271 { 272 m_options. setDataBufferingPolicy(dataBufferingPolicy);271 { 272 m_options.dataBufferingPolicy = dataBufferingPolicy; 273 273 274 274 // Reset any already buffered data … … 276 276 m_resourceData = nullptr; 277 277 } 278 278 279 279 void ResourceLoader::willSwitchToSubstituteResource() 280 280 { … … 287 287 void ResourceLoader::addDataOrBuffer(const char* data, unsigned length, SharedBuffer* buffer, DataPayloadType dataPayloadType) 288 288 { 289 if (m_options.dataBufferingPolicy ()== DoNotBufferData)289 if (m_options.dataBufferingPolicy == DoNotBufferData) 290 290 return; 291 291 … … 351 351 } 352 352 353 if (m_options.sendLoadCallbacks ()== SendCallbacks) {353 if (m_options.sendLoadCallbacks == SendCallbacks) { 354 354 if (createdResourceIdentifier) 355 355 frameLoader()->notifier().assignIdentifierToInitialRequest(m_identifier, documentLoader(), request); … … 459 459 if (FormData* data = m_request.httpBody()) 460 460 data->removeGeneratedFilesIfNeeded(); 461 462 if (m_options.sendLoadCallbacks ()== SendCallbacks)461 462 if (m_options.sendLoadCallbacks == SendCallbacks) 463 463 frameLoader()->notifier().didReceiveResponse(this, m_response); 464 464 } … … 490 490 491 491 addDataOrBuffer(data, length, buffer.get(), dataPayloadType); 492 492 493 493 // FIXME: If we get a resource with more than 2B bytes, this code won't do the right thing. 494 494 // However, with today's computers and networking speeds, this won't happen in practice. 495 495 // Could be an issue with a giant local file. 496 if (m_options.sendLoadCallbacks ()== SendCallbacks && m_frame)496 if (m_options.sendLoadCallbacks == SendCallbacks && m_frame) 497 497 frameLoader()->notifier().didReceiveData(this, buffer ? buffer->data() : data, buffer ? buffer->size() : length, static_cast<int>(encodedDataLength)); 498 498 } … … 520 520 return; 521 521 m_notifiedLoadComplete = true; 522 if (m_options.sendLoadCallbacks ()== SendCallbacks)522 if (m_options.sendLoadCallbacks == SendCallbacks) 523 523 frameLoader()->notifier().didFinishLoad(this, finishTime); 524 524 } … … 546 546 return; 547 547 m_notifiedLoadComplete = true; 548 if (m_options.sendLoadCallbacks ()== SendCallbacks && m_identifier)548 if (m_options.sendLoadCallbacks == SendCallbacks && m_identifier) 549 549 frameLoader()->notifier().didFailToLoad(this, error); 550 550 } … … 679 679 bool ResourceLoader::shouldUseCredentialStorage() 680 680 { 681 if (m_options.allowCredentials ()== DoNotAllowStoredCredentials)681 if (m_options.allowCredentials == DoNotAllowStoredCredentials) 682 682 return false; 683 683 684 684 Ref<ResourceLoader> protectedThis(*this); 685 685 return frameLoader()->client().shouldUseCredentialStorage(documentLoader(), identifier()); … … 701 701 Ref<ResourceLoader> protectedThis(*this); 702 702 703 if (m_options.allowCredentials ()== AllowStoredCredentials) {703 if (m_options.allowCredentials == AllowStoredCredentials) { 704 704 if (isAllowedToAskUserForCredentials()) { 705 705 frameLoader()->notifier().didReceiveAuthenticationChallenge(this, challenge); -
trunk/Source/WebCore/loader/ResourceLoader.h
r202410 r204014 126 126 const URL& url() const { return m_request.url(); } 127 127 ResourceHandle* handle() const { return m_handle.get(); } 128 bool shouldSendResourceLoadCallbacks() const { return m_options.sendLoadCallbacks ()== SendCallbacks; }129 void setSendCallbackPolicy(SendCallbackPolicy sendLoadCallbacks) { m_options.se tSendLoadCallbacks(sendLoadCallbacks); }130 bool shouldSniffContent() const { return m_options.sniffContent ()== SniffContent; }128 bool shouldSendResourceLoadCallbacks() const { return m_options.sendLoadCallbacks == SendCallbacks; } 129 void setSendCallbackPolicy(SendCallbackPolicy sendLoadCallbacks) { m_options.sendLoadCallbacks = sendLoadCallbacks; } 130 bool shouldSniffContent() const { return m_options.sniffContent == SniffContent; } 131 131 WEBCORE_EXPORT bool isAllowedToAskUserForCredentials() const; 132 bool shouldIncludeCertificateInfo() const { return m_options.certificateInfoPolicy ()== IncludeCertificateInfo; }132 bool shouldIncludeCertificateInfo() const { return m_options.certificateInfoPolicy == IncludeCertificateInfo; } 133 133 134 134 bool reachedTerminalState() const { return m_reachedTerminalState; } -
trunk/Source/WebCore/loader/ResourceLoaderOptions.h
r203720 r204014 82 82 83 83 struct ResourceLoaderOptions : public FetchOptions { 84 ResourceLoaderOptions() 85 : m_sendLoadCallbacks(DoNotSendCallbacks) 86 , m_sniffContent(DoNotSniffContent) 87 , m_dataBufferingPolicy(BufferData) 88 , m_allowCredentials(DoNotAllowStoredCredentials) 89 , m_securityCheck(DoSecurityCheck) 90 , m_certificateInfoPolicy(DoNotIncludeCertificateInfo) 91 { 92 } 84 ResourceLoaderOptions() { } 85 86 ResourceLoaderOptions(const FetchOptions& options) : FetchOptions(options) { } 93 87 94 88 ResourceLoaderOptions(SendCallbackPolicy sendLoadCallbacks, ContentSniffingPolicy sniffContent, DataBufferingPolicy dataBufferingPolicy, StoredCredentials allowCredentials, ClientCredentialPolicy credentialPolicy, FetchOptions::Credentials credentials, SecurityCheckPolicy securityCheck, FetchOptions::Mode mode, CertificateInfoPolicy certificateInfoPolicy, ContentSecurityPolicyImposition contentSecurityPolicyImposition, DefersLoadingPolicy defersLoadingPolicy, CachingPolicy cachingPolicy) 95 : m_sendLoadCallbacks(sendLoadCallbacks)96 , m_sniffContent(sniffContent)97 , m_dataBufferingPolicy(dataBufferingPolicy)98 , m_allowCredentials(allowCredentials)99 , m_securityCheck(securityCheck)100 , m_certificateInfoPolicy(certificateInfoPolicy)101 , m_contentSecurityPolicyImposition(contentSecurityPolicyImposition)102 , m_defersLoadingPolicy(defersLoadingPolicy)103 , m_cachingPolicy(cachingPolicy)89 : sendLoadCallbacks(sendLoadCallbacks) 90 , sniffContent(sniffContent) 91 , dataBufferingPolicy(dataBufferingPolicy) 92 , allowCredentials(allowCredentials) 93 , securityCheck(securityCheck) 94 , certificateInfoPolicy(certificateInfoPolicy) 95 , contentSecurityPolicyImposition(contentSecurityPolicyImposition) 96 , defersLoadingPolicy(defersLoadingPolicy) 97 , cachingPolicy(cachingPolicy) 104 98 , clientCredentialPolicy(credentialPolicy) 105 99 { … … 108 102 } 109 103 110 SendCallbackPolicy sendLoadCallbacks() const { return static_cast<SendCallbackPolicy>(m_sendLoadCallbacks); } 111 void setSendLoadCallbacks(SendCallbackPolicy allow) { m_sendLoadCallbacks = allow; } 112 ContentSniffingPolicy sniffContent() const { return static_cast<ContentSniffingPolicy>(m_sniffContent); } 113 void setSniffContent(ContentSniffingPolicy policy) { m_sniffContent = policy; } 114 DataBufferingPolicy dataBufferingPolicy() const { return static_cast<DataBufferingPolicy>(m_dataBufferingPolicy); } 115 void setDataBufferingPolicy(DataBufferingPolicy policy) { m_dataBufferingPolicy = policy; } 116 StoredCredentials allowCredentials() const { return static_cast<StoredCredentials>(m_allowCredentials); } 117 void setAllowCredentials(StoredCredentials allow) { m_allowCredentials = allow; } 118 SecurityCheckPolicy securityCheck() const { return static_cast<SecurityCheckPolicy>(m_securityCheck); } 119 void setSecurityCheck(SecurityCheckPolicy check) { m_securityCheck = check; } 120 CertificateInfoPolicy certificateInfoPolicy() const { return static_cast<CertificateInfoPolicy>(m_certificateInfoPolicy); } 121 void setCertificateInfoPolicy(CertificateInfoPolicy policy) { m_certificateInfoPolicy = policy; } 122 ContentSecurityPolicyImposition contentSecurityPolicyImposition() const { return m_contentSecurityPolicyImposition; } 123 void setContentSecurityPolicyImposition(ContentSecurityPolicyImposition imposition) { m_contentSecurityPolicyImposition = imposition; } 124 DefersLoadingPolicy defersLoadingPolicy() const { return m_defersLoadingPolicy; } 125 void setDefersLoadingPolicy(DefersLoadingPolicy defersLoadingPolicy) { m_defersLoadingPolicy = defersLoadingPolicy; } 126 CachingPolicy cachingPolicy() const { return m_cachingPolicy; } 127 void setCachingPolicy(CachingPolicy cachingPolicy) { m_cachingPolicy = cachingPolicy; } 128 129 unsigned m_sendLoadCallbacks : 1; 130 unsigned m_sniffContent : 1; 131 unsigned m_dataBufferingPolicy : 1; 132 unsigned m_allowCredentials : 1; // Whether HTTP credentials and cookies are sent with the request. 133 unsigned m_securityCheck : 1; 134 unsigned m_certificateInfoPolicy : 1; // Whether the response should include certificate info. 135 ContentSecurityPolicyImposition m_contentSecurityPolicyImposition { ContentSecurityPolicyImposition::DoPolicyCheck }; 136 DefersLoadingPolicy m_defersLoadingPolicy { DefersLoadingPolicy::AllowDefersLoading }; 137 CachingPolicy m_cachingPolicy { CachingPolicy::AllowCaching }; 104 SendCallbackPolicy sendLoadCallbacks { DoNotSendCallbacks }; 105 ContentSniffingPolicy sniffContent { DoNotSniffContent }; 106 DataBufferingPolicy dataBufferingPolicy { BufferData }; 107 StoredCredentials allowCredentials { DoNotAllowStoredCredentials }; 108 SecurityCheckPolicy securityCheck { DoSecurityCheck }; 109 CertificateInfoPolicy certificateInfoPolicy { DoNotIncludeCertificateInfo }; 110 ContentSecurityPolicyImposition contentSecurityPolicyImposition { ContentSecurityPolicyImposition::DoPolicyCheck }; 111 DefersLoadingPolicy defersLoadingPolicy { DefersLoadingPolicy::AllowDefersLoading }; 112 CachingPolicy cachingPolicy { CachingPolicy::AllowCaching }; 138 113 139 114 ClientCredentialPolicy clientCredentialPolicy { ClientCredentialPolicy::CannotAskClientForCredentials }; -
trunk/Source/WebCore/loader/SubresourceLoader.cpp
r203815 r204014 416 416 String errorDescription; 417 417 bool responsePassesCORS = m_origin->canRequest(previousRequest.url()) 418 || passesAccessControlCheck(redirectResponse, options().allowCredentials (), *m_origin, errorDescription);418 || passesAccessControlCheck(redirectResponse, options().allowCredentials, *m_origin, errorDescription); 419 419 if (!responsePassesCORS || !isValidCrossOriginRedirectionURL(newRequest.url())) { 420 420 if (m_frame && m_frame->document()) { … … 429 429 m_origin = SecurityOrigin::createUnique(); 430 430 cleanRedirectedRequestForAccessControl(newRequest); 431 updateRequestForAccessControl(newRequest, *m_origin, options().allowCredentials ());431 updateRequestForAccessControl(newRequest, *m_origin, options().allowCredentials); 432 432 433 433 return true; -
trunk/Source/WebCore/loader/TextTrackLoader.cpp
r202674 r204014 154 154 155 155 ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions(); 156 options. setContentSecurityPolicyImposition(isInitiatingElementInUserAgentShadowTree ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck);156 options.contentSecurityPolicyImposition = isInitiatingElementInUserAgentShadowTree ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck; 157 157 158 158 CachedResourceRequest cueRequest(ResourceRequest(document->completeURL(url)), options); -
trunk/Source/WebCore/loader/cache/CachedRawResource.cpp
r200895 r204014 221 221 void CachedRawResource::setDataBufferingPolicy(DataBufferingPolicy dataBufferingPolicy) 222 222 { 223 m_options. setDataBufferingPolicy(dataBufferingPolicy);223 m_options.dataBufferingPolicy = dataBufferingPolicy; 224 224 } 225 225 -
trunk/Source/WebCore/loader/cache/CachedResource.cpp
r203815 r204014 238 238 239 239 FrameLoader& frameLoader = frame.loader(); 240 if (options.securityCheck ()== DoSecurityCheck && (frameLoader.state() == FrameStateProvisional || !frameLoader.activeDocumentLoader() || frameLoader.activeDocumentLoader()->isStopping())) {240 if (options.securityCheck == DoSecurityCheck && (frameLoader.state() == FrameStateProvisional || !frameLoader.activeDocumentLoader() || frameLoader.activeDocumentLoader()->isStopping())) { 241 241 failBeforeStarting(); 242 242 return; -
trunk/Source/WebCore/loader/cache/CachedResource.h
r203815 r204014 227 227 bool loadFailedOrCanceled() const { return !m_error.isNull(); } 228 228 229 bool shouldSendResourceLoadCallbacks() const { return m_options.sendLoadCallbacks ()== SendCallbacks; }230 DataBufferingPolicy dataBufferingPolicy() const { return m_options.dataBufferingPolicy (); }231 232 bool allowsCaching() const { return m_options.cachingPolicy ()== CachingPolicy::AllowCaching; }229 bool shouldSendResourceLoadCallbacks() const { return m_options.sendLoadCallbacks == SendCallbacks; } 230 DataBufferingPolicy dataBufferingPolicy() const { return m_options.dataBufferingPolicy; } 231 232 bool allowsCaching() const { return m_options.cachingPolicy == CachingPolicy::AllowCaching; } 233 233 234 234 virtual void destroyDecodedData() { } -
trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp
r203720 r204014 391 391 } 392 392 393 bool skipContentSecurityPolicyCheck = options.contentSecurityPolicyImposition ()== ContentSecurityPolicyImposition::SkipPolicyCheck;393 bool skipContentSecurityPolicyCheck = options.contentSecurityPolicyImposition == ContentSecurityPolicyImposition::SkipPolicyCheck; 394 394 ContentSecurityPolicy::RedirectResponseReceived redirectResponseReceived = didReceiveRedirectResponse ? ContentSecurityPolicy::RedirectResponseReceived::Yes : ContentSecurityPolicy::RedirectResponseReceived::No; 395 395 -
trunk/Source/WebCore/loader/cache/CachedResourceRequest.cpp
r203971 r204014 101 101 m_options.mode = FetchOptions::Mode::Cors; 102 102 m_options.credentials = equalLettersIgnoringASCIICase(mode, "use-credentials") ? FetchOptions::Credentials::Include : FetchOptions::Credentials::SameOrigin; 103 m_options. setAllowCredentials(equalLettersIgnoringASCIICase(mode, "use-credentials") ? AllowStoredCredentials : DoNotAllowStoredCredentials);103 m_options.allowCredentials = equalLettersIgnoringASCIICase(mode, "use-credentials") ? AllowStoredCredentials : DoNotAllowStoredCredentials; 104 104 105 105 ASSERT(document.securityOrigin()); 106 updateRequestForAccessControl(m_resourceRequest, *document.securityOrigin(), m_options.allowCredentials ());106 updateRequestForAccessControl(m_resourceRequest, *document.securityOrigin(), m_options.allowCredentials); 107 107 } 108 108 -
trunk/Source/WebCore/loader/cache/CachedResourceRequest.h
r203971 r204014 61 61 void setInitiator(const AtomicString& name); 62 62 const AtomicString& initiatorName() const; 63 bool allowsCaching() const { return m_options.cachingPolicy ()== CachingPolicy::AllowCaching; }63 bool allowsCaching() const { return m_options.cachingPolicy == CachingPolicy::AllowCaching; } 64 64 65 65 void setInitiator(DocumentLoader&); -
trunk/Source/WebCore/loader/cache/CachedResourceRequestInitiators.cpp
r165676 r204014 31 31 CachedResourceRequestInitiators::CachedResourceRequestInitiators() 32 32 : css("css", AtomicString::ConstructFromLiteral) 33 , fetch("fetch", AtomicString::ConstructFromLiteral) 33 34 , icon("icon", AtomicString::ConstructFromLiteral) 34 35 , xmlhttprequest("xmlhttprequest", AtomicString::ConstructFromLiteral) -
trunk/Source/WebCore/loader/cache/CachedResourceRequestInitiators.h
r183186 r204014 36 36 37 37 const AtomicString css; 38 const AtomicString fetch; 38 39 const AtomicString icon; 39 40 const AtomicString xmlhttprequest; -
trunk/Source/WebCore/loader/cf/ResourceLoaderCFNet.cpp
r191369 r204014 38 38 bool ResourceLoader::shouldCacheResponse(ResourceHandle*, CFCachedURLResponseRef cachedResponse) 39 39 { 40 if (m_options.sendLoadCallbacks ()== DoNotSendCallbacks)40 if (m_options.sendLoadCallbacks == DoNotSendCallbacks) 41 41 return false; 42 42 -
trunk/Source/WebCore/loader/mac/ResourceLoaderMac.mm
r200895 r204014 52 52 NSCachedURLResponse* ResourceLoader::willCacheResponse(ResourceHandle*, NSCachedURLResponse* response) 53 53 { 54 if (m_options.sendLoadCallbacks ()== DoNotSendCallbacks)54 if (m_options.sendLoadCallbacks == DoNotSendCallbacks) 55 55 return nullptr; 56 56 return frameLoader()->client().willCacheResponse(documentLoader(), identifier(), response); … … 72 72 unsigned dataLen = static_cast<unsigned>(CFDataGetLength(data)); 73 73 74 if (m_options.dataBufferingPolicy ()== BufferData) {74 if (m_options.dataBufferingPolicy == BufferData) { 75 75 if (!m_resourceData) 76 76 m_resourceData = SharedBuffer::create(); … … 81 81 // However, with today's computers and networking speeds, this won't happen in practice. 82 82 // Could be an issue with a giant local file. 83 if (m_options.sendLoadCallbacks ()== SendCallbacks && m_frame)83 if (m_options.sendLoadCallbacks == SendCallbacks && m_frame) 84 84 frameLoader()->notifier().didReceiveData(this, reinterpret_cast<const char*>(CFDataGetBytePtr(data)), dataLen, dataLen); 85 85 } -
trunk/Source/WebCore/page/EventSource.cpp
r203971 r204014 105 105 106 106 ThreadableLoaderOptions options; 107 options.setSendLoadCallbacks(SendCallbacks); 108 options.setSniffContent(DoNotSniffContent); 107 options.sendLoadCallbacks = SendCallbacks; 109 108 options.credentials = m_withCredentials ? FetchOptions::Credentials::Include : FetchOptions::Credentials::SameOrigin; 110 109 options.preflightPolicy = PreventPreflight; 111 110 options.mode = FetchOptions::Mode::Cors; 112 options. setDataBufferingPolicy(DoNotBufferData);111 options.dataBufferingPolicy = DoNotBufferData; 113 112 options.contentSecurityPolicyEnforcement = scriptExecutionContext()->shouldBypassMainWorldContentSecurityPolicy() ? ContentSecurityPolicyEnforcement::DoNotEnforce : ContentSecurityPolicyEnforcement::EnforceConnectSrcDirective; 114 113 -
trunk/Source/WebCore/style/StylePendingResources.cpp
r202811 r204014 49 49 auto& pendingImage = downcast<StylePendingImage>(image); 50 50 ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions(); 51 options. setContentSecurityPolicyImposition(element && element->isInUserAgentShadowTree() ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck);51 options.contentSecurityPolicyImposition = element && element->isInUserAgentShadowTree() ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck; 52 52 53 53 // FIXME: Why does shape-outside have different policy than other properties? 54 54 if (loadPolicy == LoadPolicy::ShapeOutside) { 55 55 options.mode = FetchOptions::Mode::Cors; 56 options. setAllowCredentials(DoNotAllowStoredCredentials);56 options.allowCredentials = DoNotAllowStoredCredentials; 57 57 } 58 58 … … 172 172 173 173 ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions(); 174 options. setContentSecurityPolicyImposition(element && element->isInUserAgentShadowTree() ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck);174 options.contentSecurityPolicyImposition = element && element->isInUserAgentShadowTree() ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck; 175 175 176 176 for (auto& filterOperation : pendingResources.pendingSVGFilters) -
trunk/Source/WebCore/svg/SVGFEImageElement.cpp
r195614 r204014 87 87 { 88 88 ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions(); 89 options. setContentSecurityPolicyImposition(isInUserAgentShadowTree() ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck);89 options.contentSecurityPolicyImposition = isInUserAgentShadowTree() ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck; 90 90 91 91 CachedResourceRequest request(ResourceRequest(document().completeURL(href())), options); -
trunk/Source/WebCore/svg/SVGFontFaceUriElement.cpp
r203324 r204014 102 102 if (!href.isNull()) { 103 103 ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions(); 104 options. setContentSecurityPolicyImposition(isInUserAgentShadowTree() ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck);104 options.contentSecurityPolicyImposition = isInUserAgentShadowTree() ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck; 105 105 106 106 CachedResourceLoader& cachedResourceLoader = document().cachedResourceLoader(); -
trunk/Source/WebCore/svg/SVGUseElement.cpp
r202105 r204014 570 570 else { 571 571 ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions(); 572 options. setContentSecurityPolicyImposition(isInUserAgentShadowTree() ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck);572 options.contentSecurityPolicyImposition = isInUserAgentShadowTree() ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck; 573 573 574 574 CachedResourceRequest request { ResourceRequest { externalDocumentURL }, options }; -
trunk/Source/WebCore/workers/WorkerScriptLoader.cpp
r203971 r204014 71 71 options.credentials = FetchOptions::Credentials::Include; 72 72 options.mode = mode; 73 options.se tSendLoadCallbacks(SendCallbacks);73 options.sendLoadCallbacks = SendCallbacks; 74 74 options.contentSecurityPolicyEnforcement = contentSecurityPolicyEnforcement; 75 75 … … 94 94 options.credentials = FetchOptions::Credentials::SameOrigin; 95 95 options.mode = mode; 96 options.se tSendLoadCallbacks(SendCallbacks);96 options.sendLoadCallbacks = SendCallbacks; 97 97 options.contentSecurityPolicyEnforcement = contentSecurityPolicyEnforcement; 98 98 -
trunk/Source/WebCore/xml/XMLHttpRequest.cpp
r203971 r204014 688 688 689 689 ThreadableLoaderOptions options; 690 options.setSendLoadCallbacks(SendCallbacks); 691 options.setSniffContent(DoNotSniffContent); 690 options.sendLoadCallbacks = SendCallbacks; 692 691 options.preflightPolicy = uploadEvents ? ForcePreflight : ConsiderPreflight; 693 692 options.credentials = m_includeCredentials ? FetchOptions::Credentials::Include : FetchOptions::Credentials::SameOrigin;
Note: See TracChangeset
for help on using the changeset viewer.