KURL MemoryCache::removeFragmentIdentifierIfNeeded(const KURL& originalURL) { if (!originalURL.hasFragmentIdentifier()) return originalURL; // Strip away fragment identifier from HTTP URLs. // Data URLs must be unmodified. For file and custom URLs clients may expect resources // to be unique even when they differ by the fragment identifier only. if (!originalURL.protocolIsInHTTPFamily()) return originalURL; KURL url = originalURL; url.removeFragmentIdentifier(); return url; }
void SVGUseElement::svgAttributeChanged(const QualifiedName& attrName) { if (attrName == SVGNames::xAttr || attrName == SVGNames::yAttr || attrName == SVGNames::widthAttr || attrName == SVGNames::heightAttr) { SVGElement::InvalidationGuard invalidationGuard(this); if (attrName == SVGNames::xAttr || attrName == SVGNames::yAttr) { invalidateSVGPresentationAttributeStyle(); setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForTracing::fromAttribute(attrName)); } updateRelativeLengthsInformation(); if (m_targetElementInstance) { ASSERT(m_targetElementInstance->correspondingElement()); transferUseWidthAndHeightIfNeeded(*this, m_targetElementInstance.get(), *m_targetElementInstance->correspondingElement()); } LayoutObject* object = this->layoutObject(); if (object) markForLayoutAndParentResourceInvalidation(object); return; } if (SVGURIReference::isKnownAttribute(attrName)) { SVGElement::InvalidationGuard invalidationGuard(this); if (isStructurallyExternal()) { KURL url = document().completeURL(hrefString()); const KURL& existingURL = m_resource ? m_resource->url() : KURL(); if (url.hasFragmentIdentifier() && !equalIgnoringFragmentIdentifier(url, existingURL)) { FetchRequest request(ResourceRequest(url), localName()); setDocumentResource(DocumentResource::fetchSVGDocument(request, document().fetcher())); } } else { setDocumentResource(nullptr); } invalidateShadowTree(); return; } SVGGraphicsElement::svgAttributeChanged(attrName); }
CachedResource::CachedResource(const ResourceRequest& request, Type type) : m_resourceRequest(request) , m_loadPriority(defaultPriorityForResourceType(type)) , m_responseTimestamp(currentTime()) , m_decodedDataDeletionTimer(this, &CachedResource::decodedDataDeletionTimerFired) , m_lastDecodedAccessTime(0) , m_loadFinishTime(0) , m_encodedSize(0) , m_decodedSize(0) , m_accessCount(0) , m_handleCount(0) , m_preloadCount(0) , m_preloadResult(PreloadNotReferenced) , m_inLiveDecodedResourcesList(false) , m_requestedFromNetworkingLayer(false) , m_inCache(false) , m_loading(false) , m_switchingClientsToRevalidatedResource(false) , m_type(type) , m_status(Pending) #ifndef NDEBUG , m_deleted(false) , m_lruIndex(0) #endif , m_nextInAllResourcesList(0) , m_prevInAllResourcesList(0) , m_nextInLiveResourcesList(0) , m_prevInLiveResourcesList(0) , m_owningCachedResourceLoader(0) , m_resourceToRevalidate(0) , m_proxyResource(0) { ASSERT(m_type == unsigned(type)); // m_type is a bitfield, so this tests careless updates of the enum. #ifndef NDEBUG cachedResourceLeakCounter.increment(); #endif if (!m_resourceRequest.url().hasFragmentIdentifier()) return; KURL urlForCache = MemoryCache::removeFragmentIdentifierIfNeeded(m_resourceRequest.url()); if (urlForCache.hasFragmentIdentifier()) return; m_fragmentIdentifierForRequest = m_resourceRequest.url().fragmentIdentifier(); m_resourceRequest.setURL(urlForCache); }
Resource::Resource(const ResourceRequest& request, Type type) : m_resourceRequest(request) , m_responseTimestamp(currentTime()) , m_cancelTimer(this, &Resource::cancelTimerFired) , m_loadFinishTime(0) , m_identifier(0) , m_encodedSize(0) , m_decodedSize(0) , m_handleCount(0) , m_preloadCount(0) , m_protectorCount(0) , m_cacheIdentifier(MemoryCache::defaultCacheIdentifier()) , m_preloadResult(PreloadNotReferenced) , m_requestedFromNetworkingLayer(false) , m_loading(false) , m_switchingClientsToRevalidatedResource(false) , m_type(type) , m_status(Pending) , m_wasPurged(false) , m_needsSynchronousCacheHit(false) #ifdef ENABLE_RESOURCE_IS_DELETED_CHECK , m_deleted(false) #endif , m_resourceToRevalidate(nullptr) , m_proxyResource(nullptr) { ASSERT(m_type == unsigned(type)); // m_type is a bitfield, so this tests careless updates of the enum. InstanceCounters::incrementCounter(InstanceCounters::ResourceCounter); #ifndef NDEBUG cachedResourceLeakCounter.increment(); #endif memoryCache()->registerLiveResource(*this); // Currently we support the metadata caching only for HTTP family. if (m_resourceRequest.url().protocolIsInHTTPFamily()) m_cacheHandler = CacheHandler::create(this); if (!m_resourceRequest.url().hasFragmentIdentifier()) return; KURL urlForCache = MemoryCache::removeFragmentIdentifierIfNeeded(m_resourceRequest.url()); if (urlForCache.hasFragmentIdentifier()) return; m_fragmentIdentifierForRequest = m_resourceRequest.url().fragmentIdentifier(); m_resourceRequest.setURL(urlForCache); }
void PrintContext::collectLinkedDestinations(Node* node) { for (Node* i = node->firstChild(); i; i = i->nextSibling()) collectLinkedDestinations(i); if (!node->isLink() || !node->isElementNode()) return; const AtomicString& href = toElement(node)->getAttribute(HTMLNames::hrefAttr); if (href.isNull()) return; KURL url = node->document().completeURL(href); if (!url.isValid()) return; if (url.hasFragmentIdentifier() && equalIgnoringFragmentIdentifier(url, node->document().baseURL())) { String name = url.fragmentIdentifier(); Element* element = node->document().findAnchor(name); if (element) m_linkedDestinations.set(name, element); } }
static void openFileSystem(ScriptExecutionContext* context, const String& basePath, FileSystemType type, long long size, bool create, PassOwnPtr<AsyncFileSystemCallbacks> callbacks, FileSystemSynchronousType synchronousType) { ASSERT(context); ASSERT(type != FileSystemTypeIsolated); if (type == FileSystemTypeIsolated) return; KURL url = context->url(); if (url.hasFragmentIdentifier()) url.removeFragmentIdentifier(); url.setQuery(String()); url.setPath("/"); StringBuilder builder; builder.append("filesystem:"); builder.append(url.string()); builder.append(fileSystemTypeString(type)); KURL rootURL = context->completeURL(builder.toString()); ASSERT(rootURL.isValid()); // TODO: Ask user for file system permission. if (context->isDocument()) { int playerId = 0; Page* page = static_cast<Document*>(context)->page(); if (page) playerId = page->chrome().client()->platformPageClient()->playerID(); AsyncFileSystemBlackBerry::openFileSystem(rootURL, basePath, context->securityOrigin()->databaseIdentifier(), type, size, create, playerId, callbacks); } else { #if ENABLE(WORKERS) WorkerContext* workerContext = static_cast<WorkerContext*>(context); String mode = openFileSystemMode; mode.append(String::number(workerContext->thread()->runLoop().createUniqueId())); WorkerAsyncFileSystemBlackBerry::openFileSystem(workerContext, rootURL, mode, basePath, context->securityOrigin()->databaseIdentifier(), type, size, create, callbacks); if (synchronousType == SynchronousFileSystem) workerContext->thread()->runLoop().runInMode(workerContext, mode); #else ASSERT_NOT_REACHED(); #endif } }
void WMLGoElement::executeTask() { ASSERT(document()->isWMLDocument()); WMLDocument* document = static_cast<WMLDocument*>(this->document()); WMLPageState* pageState = wmlPageStateForDocument(document); if (!pageState) return; WMLCardElement* card = document->activeCard(); if (!card) return; Frame* frame = document->frame(); if (!frame) return; FrameLoader* loader = frame->loader(); if (!loader) return; String href = getAttribute(HTMLNames::hrefAttr); if (href.isEmpty()) return; // Substitute variables within target url attribute value KURL url = document->completeURL(substituteVariableReferences(href, document, WMLVariableEscapingEscape)); if (url.isEmpty()) return; storeVariableState(pageState); // Stop the timer of the current card if it is active if (WMLTimerElement* eventTimer = card->eventTimer()) eventTimer->stop(); // FIXME: 'newcontext' handling not implemented for external cards bool inSameDeck = document->url().path() == url.path(); if (inSameDeck && url.hasFragmentIdentifier()) { if (WMLCardElement* card = WMLCardElement::findNamedCardInDocument(document, url.fragmentIdentifier())) { if (card->isNewContext()) pageState->reset(); } } // Prepare loading the destination url ResourceRequest request(url); if (getAttribute(sendrefererAttr) == "true") request.setHTTPReferrer(loader->outgoingReferrer()); String cacheControl = getAttribute(cache_controlAttr); if (m_formAttributes.method() == FormSubmission::PostMethod) preparePOSTRequest(request, inSameDeck, cacheControl); else prepareGETRequest(request, url); // Set HTTP cache-control header if needed if (!cacheControl.isEmpty()) { request.setHTTPHeaderField("cache-control", cacheControl); if (cacheControl == "no-cache") request.setCachePolicy(ReloadIgnoringCacheData); } loader->load(request, false); }