165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/* 265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2010 Apple Inc. All rights reserved. 365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without 565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions 665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met: 765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright 865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer. 965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer in the 1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * documentation and/or other materials provided with the distribution. 1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE. 2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */ 2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "config.h" 2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebFrameProxy.h" 2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebCertificateInfo.h" 3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebContext.h" 3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebFormSubmissionListenerProxy.h" 3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebFramePolicyListenerProxy.h" 33ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include "WebPageMessages.h" 3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPageProxy.h" 3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/DOMImplementation.h> 3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/Image.h> 3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/text/WTFString.h> 3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebCore; 4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace std; 4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit { 4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebFrameProxy::WebFrameProxy(WebPageProxy* page, uint64_t frameID) 4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch : m_page(page) 4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_parentFrame(0) 4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_nextSibling(0) 4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_previousSibling(0) 4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_firstChild(0) 5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_lastChild(0) 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_loadState(LoadStateFinished) 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_isFrameSet(false) 5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_frameID(frameID) 5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebContext::statistics().wkFrameCount++; 5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebFrameProxy::~WebFrameProxy() 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebContext::statistics().wkFrameCount--; 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameProxy::disconnect() 6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_page = 0; 6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_parentFrame = 0; 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_nextSibling = 0; 6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_previousSibling = 0; 6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_firstChild = 0; 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_lastChild = 0; 7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_activeListener) { 7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_activeListener->invalidate(); 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_activeListener = 0; 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameProxy::isMainFrame() const 7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_page) 8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return this == m_page->mainFrame(); 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 86ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid WebFrameProxy::stopLoading() const 87ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 88ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (!m_page) 89ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return; 90ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 91ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (!m_page->isValid()) 92ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return; 93ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 94ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch m_page->process()->send(Messages::WebPage::StopLoadingFrame(m_frameID), m_page->pageID()); 95ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 96ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameProxy::canProvideSource() const 9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return isDisplayingMarkupDocument(); 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameProxy::canShowMIMEType(const String& mimeType) const 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_page) 10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_page->canShowMIMEType(mimeType)) 10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return true; 10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC) 11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // On Mac, we can show PDFs in the main frame. 11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (isMainFrame() && !mimeType.isEmpty()) 11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return WebContext::pdfAndPostScriptMIMETypes().contains(mimeType); 11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameProxy::isDisplayingStandaloneImageDocument() const 12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return Image::supportsType(m_MIMEType); 12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameProxy::isDisplayingMarkupDocument() const 12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: This check should be moved to somewhere in WebCore. 12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: This returns false when displaying a web archive. 12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_MIMEType == "text/html" || m_MIMEType == "image/svg+xml" || DOMImplementation::isXMLMIMEType(m_MIMEType); 12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameProxy::didStartProvisionalLoad(const String& url) 13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_loadState == LoadStateFinished); 13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_provisionalURL.isEmpty()); 13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_loadState = LoadStateProvisional; 13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_provisionalURL = url; 13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameProxy::didReceiveServerRedirectForProvisionalLoad(const String& url) 14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_loadState == LoadStateProvisional); 14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_provisionalURL = url; 14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameProxy::didFailProvisionalLoad() 14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_loadState == LoadStateProvisional); 14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_loadState = LoadStateFinished; 14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_provisionalURL = String(); 15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameProxy::didCommitLoad(const String& contentType, const PlatformCertificateInfo& certificateInfo) 15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_loadState == LoadStateProvisional); 15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_loadState = LoadStateCommitted; 15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_url = m_provisionalURL; 15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_provisionalURL = String(); 15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_title = String(); 15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_MIMEType = contentType; 16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_isFrameSet = false; 16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_certificateInfo = WebCertificateInfo::create(certificateInfo); 16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameProxy::didFinishLoad() 16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 16665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_loadState == LoadStateCommitted); 16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_provisionalURL.isEmpty()); 16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_loadState = LoadStateFinished; 16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameProxy::didFailLoad() 17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_loadState == LoadStateCommitted); 17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_provisionalURL.isEmpty()); 17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_loadState = LoadStateFinished; 17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_title = String(); 17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameProxy::didSameDocumentNavigation(const String& url) 18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_url = url; 18265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameProxy::didChangeTitle(const String& title) 18565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_title = title; 18765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 18865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameProxy::appendChild(WebFrameProxy* child) 19065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 19165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(child->page() == page()); 19265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!child->m_parentFrame); 19365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!child->m_nextSibling); 19465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!child->m_previousSibling); 19565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch child->m_parentFrame = this; 19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebFrameProxy* oldLast = m_lastChild; 19965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_lastChild = child; 20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (oldLast) { 20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!oldLast->m_nextSibling); 20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch child->m_previousSibling = oldLast; 20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch oldLast->m_nextSibling = child; 20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } else 20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_firstChild = child; 20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 20865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameProxy::removeChild(WebFrameProxy* child) 21065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 21165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch child->m_parentFrame = 0; 21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebFrameProxy*& newLocationForNext = m_firstChild == child ? m_firstChild : child->m_previousSibling->m_nextSibling; 21465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebFrameProxy*& newLocationForPrevious = m_lastChild == child ? m_lastChild : child->m_nextSibling->m_previousSibling; 21565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch swap(newLocationForNext, child->m_nextSibling); 21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch swap(newLocationForPrevious, child->m_previousSibling); 21765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch child->m_previousSibling = 0; 21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch child->m_nextSibling = 0; 21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameProxy::isDescendantOf(const WebFrameProxy* ancestor) const 22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!ancestor) 22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_page != ancestor->m_page) 22765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (const WebFrameProxy* frame = this; frame; frame = frame->m_parentFrame) { 23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (frame == ancestor) 23165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return true; 23265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 23565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 23665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameProxy::dumpFrameTreeToSTDOUT(unsigned indent) 23865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 23965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!indent && m_parentFrame) 24065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch printf("NOTE: Printing subtree.\n"); 24165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (unsigned i = 0; i < indent; ++i) 24365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch printf(" "); 24465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch printf("| FRAME %d %s\n", (int)m_frameID, m_url.utf8().data()); 24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (WebFrameProxy* child = m_firstChild; child; child = child->m_nextSibling) 24765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch child->dumpFrameTreeToSTDOUT(indent + 4); 24865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 24965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameProxy::didRemoveFromHierarchy() 25165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 25265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_parentFrame) 25365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_parentFrame->removeChild(this); 25465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 25565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassRefPtr<ImmutableArray> WebFrameProxy::childFrames() 25765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 25865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_firstChild) 25965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return ImmutableArray::create(); 26065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<RefPtr<APIObject> > vector; 26265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (WebFrameProxy* child = m_firstChild; child; child = child->m_nextSibling) 26365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch vector.append(child); 26465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return ImmutableArray::adopt(vector); 26665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 26765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameProxy::receivedPolicyDecision(WebCore::PolicyAction action, uint64_t listenerID) 26965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 27065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_page) 27165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 27265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 27365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_activeListener); 27465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_activeListener->listenerID() == listenerID); 27565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_page->receivedPolicyDecision(action, this, listenerID); 27665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 27765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 27865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebFramePolicyListenerProxy* WebFrameProxy::setUpPolicyListenerProxy(uint64_t listenerID) 27965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 28065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_activeListener) 28165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_activeListener->invalidate(); 28265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_activeListener = WebFramePolicyListenerProxy::create(this, listenerID); 28365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return static_cast<WebFramePolicyListenerProxy*>(m_activeListener.get()); 28465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 28565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 28665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebFormSubmissionListenerProxy* WebFrameProxy::setUpFormSubmissionListenerProxy(uint64_t listenerID) 28765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 28865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_activeListener) 28965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_activeListener->invalidate(); 29065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_activeListener = WebFormSubmissionListenerProxy::create(this, listenerID); 29165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return static_cast<WebFormSubmissionListenerProxy*>(m_activeListener.get()); 29265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 29365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 29465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameProxy::getWebArchive(PassRefPtr<DataCallback> callback) 29565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 29665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_page) { 29765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch callback->invalidate(); 29865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 29965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 30065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_page->getWebArchiveOfFrame(this, callback); 30265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 30365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameProxy::getMainResourceData(PassRefPtr<DataCallback> callback) 30565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 30665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_page) { 30765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch callback->invalidate(); 30865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 30965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 31065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 31165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_page->getMainResourceDataOfFrame(this, callback); 31265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 31365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 314ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid WebFrameProxy::getResourceData(WebURL* resourceURL, PassRefPtr<DataCallback> callback) 315ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 316ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (!m_page) { 317ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch callback->invalidate(); 318ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return; 319ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } 320ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 321ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch m_page->getResourceDataFromFrame(this, resourceURL, callback); 322ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 323ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 32465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit 325