1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/* 2643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Google Inc. All rights reserved. 3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without 5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions are 6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * met: 7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions of source code must retain the above copyright 9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer. 10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions in binary form must reproduce the above 11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * copyright notice, this list of conditions and the following disclaimer 12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * in the documentation and/or other materials provided with the 13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * distribution. 14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Neither the name of Google Inc. nor the names of its 15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * contributors may be used to endorse or promote products derived from 16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * this software without specific prior written permission. 17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */ 30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "config.h" 32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebDataSourceImpl.h" 33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 34d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "ApplicationCacheHostInternal.h" 35643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebURL.h" 36643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebURLError.h" 37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebVector.h" 38643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 39643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockusing namespace WebCore; 40643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 41643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit { 42643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 43643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebPluginLoadObserver* WebDataSourceImpl::m_nextPluginLoadObserver = 0; 44643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 45643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockPassRefPtr<WebDataSourceImpl> WebDataSourceImpl::create(const ResourceRequest& request, const SubstituteData& data) 46643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 47643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return adoptRef(new WebDataSourceImpl(request, data)); 48643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 49643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 50643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockconst WebURLRequest& WebDataSourceImpl::originalRequest() const 51643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 52643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_originalRequestWrapper.bind(DocumentLoader::originalRequest()); 53643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return m_originalRequestWrapper; 54643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 55643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 56643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockconst WebURLRequest& WebDataSourceImpl::request() const 57643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 58643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_requestWrapper.bind(DocumentLoader::request()); 59643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return m_requestWrapper; 60643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 61643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 62643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockconst WebURLResponse& WebDataSourceImpl::response() const 63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_responseWrapper.bind(DocumentLoader::response()); 65643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return m_responseWrapper; 66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 67643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 68643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebDataSourceImpl::hasUnreachableURL() const 69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return !DocumentLoader::unreachableURL().isEmpty(); 71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 73643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebURL WebDataSourceImpl::unreachableURL() const 74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return DocumentLoader::unreachableURL(); 76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 78643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebDataSourceImpl::redirectChain(WebVector<WebURL>& result) const 79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 80643ca7872b450ea4efacab6188849e5aac2ba161Steve Block result.assign(m_redirectChain); 81643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 83643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebString WebDataSourceImpl::pageTitle() const 84643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // FIXME: use direction of title as well. 862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return title().string(); 87643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 89643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebNavigationType WebDataSourceImpl::navigationType() const 90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 91643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return toWebNavigationType(triggeringAction().type()); 92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockdouble WebDataSourceImpl::triggeringEventTime() const 95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!triggeringAction().event()) 97643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return 0.0; 98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // DOMTimeStamp uses units of milliseconds. 1006b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return convertDOMTimeStampToSeconds(triggeringAction().event()->timeStamp()); 101643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 102643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 103643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebDataSource::ExtraData* WebDataSourceImpl::extraData() const 104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 105643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return m_extraData.get(); 106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 108643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebDataSourceImpl::setExtraData(ExtraData* extraData) 109643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 110643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_extraData.set(extraData); 111643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 112643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 11368513a70bcd92384395513322f1b801e7bf9c729Steve BlockWebApplicationCacheHost* WebDataSourceImpl::applicationCacheHost() 11468513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 115d0825bca7fe65beaee391d30da42e937db621564Steve Block#if ENABLE(OFFLINE_WEB_APPLICATIONS) 116d0825bca7fe65beaee391d30da42e937db621564Steve Block return ApplicationCacheHostInternal::toWebApplicationCacheHost(DocumentLoader::applicationCacheHost()); 117d0825bca7fe65beaee391d30da42e937db621564Steve Block#else 118d0825bca7fe65beaee391d30da42e937db621564Steve Block return 0; 119d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 120d0825bca7fe65beaee391d30da42e937db621564Steve Block} 121d0825bca7fe65beaee391d30da42e937db621564Steve Block 12268513a70bcd92384395513322f1b801e7bf9c729Steve Blockvoid WebDataSourceImpl::setDeferMainResourceDataLoad(bool defer) 12368513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 12468513a70bcd92384395513322f1b801e7bf9c729Steve Block DocumentLoader::setDeferMainResourceDataLoad(defer); 12568513a70bcd92384395513322f1b801e7bf9c729Steve Block} 12668513a70bcd92384395513322f1b801e7bf9c729Steve Block 127643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebNavigationType WebDataSourceImpl::toWebNavigationType(NavigationType type) 128643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 129643ca7872b450ea4efacab6188849e5aac2ba161Steve Block switch (type) { 130643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case NavigationTypeLinkClicked: 131643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return WebNavigationTypeLinkClicked; 132643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case NavigationTypeFormSubmitted: 133643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return WebNavigationTypeFormSubmitted; 134643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case NavigationTypeBackForward: 135643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return WebNavigationTypeBackForward; 136643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case NavigationTypeReload: 137643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return WebNavigationTypeReload; 138643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case NavigationTypeFormResubmitted: 139643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return WebNavigationTypeFormResubmitted; 140643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case NavigationTypeOther: 141643ca7872b450ea4efacab6188849e5aac2ba161Steve Block default: 142643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return WebNavigationTypeOther; 143643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 144643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 145643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 146643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockconst KURL& WebDataSourceImpl::endOfRedirectChain() const 147643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 148643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ASSERT(!m_redirectChain.isEmpty()); 149643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return m_redirectChain.last(); 150643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 151643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 152643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebDataSourceImpl::clearRedirectChain() 153643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 154643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_redirectChain.clear(); 155643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 156643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 157643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebDataSourceImpl::appendRedirect(const KURL& url) 158643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 159643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_redirectChain.append(url); 160643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 161643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 162643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebDataSourceImpl::setNextPluginLoadObserver(PassOwnPtr<WebPluginLoadObserver> observer) 163643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 164643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // This call should always be followed up with the creation of a 165643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // WebDataSourceImpl, so we should never leak this object. 166e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke m_nextPluginLoadObserver = observer.leakPtr(); 167643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 168643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 169643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebDataSourceImpl::WebDataSourceImpl(const ResourceRequest& request, const SubstituteData& data) 170643ca7872b450ea4efacab6188849e5aac2ba161Steve Block : DocumentLoader(request, data) 171643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 172643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_nextPluginLoadObserver) { 173643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // When a new frame is created, it initially gets a data source for an 174643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // empty document. Then it is navigated to the source URL of the 175643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // frame, which results in a second data source being created. We want 176643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // to wait to attach the WebPluginLoadObserver to that data source. 177643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!request.url().isEmpty()) { 1782bde8e466a4451c7319e3a072d118917957d6554Steve Block ASSERT(m_nextPluginLoadObserver->url() == WebURL(request.url())); 179643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_pluginLoadObserver.set(m_nextPluginLoadObserver); 180643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_nextPluginLoadObserver = 0; 181643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 182643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 183643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 184643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 185643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebDataSourceImpl::~WebDataSourceImpl() 186643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 187643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 188643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 189643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit 190