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

Side by Side Diff: third_party/WebKit/Source/web/WebLocalFrameImpl.cpp

Issue 1467123003: Create base class for common functionality of Web{Local,Remote}Frame (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 926 matching lines...) Expand 10 before | Expand all | Expand 10 after
937 937
938 v8::Local<v8::Context> WebLocalFrameImpl::mainWorldScriptContext() const 938 v8::Local<v8::Context> WebLocalFrameImpl::mainWorldScriptContext() const
939 { 939 {
940 ScriptState* scriptState = ScriptState::forMainWorld(frame()); 940 ScriptState* scriptState = ScriptState::forMainWorld(frame());
941 ASSERT(scriptState->contextIsValid()); 941 ASSERT(scriptState->contextIsValid());
942 return scriptState->context(); 942 return scriptState->context();
943 } 943 }
944 944
945 bool WebFrame::scriptCanAccess(WebFrame* target) 945 bool WebFrame::scriptCanAccess(WebFrame* target)
946 { 946 {
947 return BindingSecurity::shouldAllowAccessToFrame(mainThreadIsolate(), callin gDOMWindow(mainThreadIsolate()), toCoreFrame(target), DoNotReportSecurityError); 947 return BindingSecurity::shouldAllowAccessToFrame(mainThreadIsolate(), callin gDOMWindow(mainThreadIsolate()), target->toImplBase()->frame(), DoNotReportSecur ityError);
948 } 948 }
949 949
950 void WebLocalFrameImpl::reload(bool ignoreCache) 950 void WebLocalFrameImpl::reload(bool ignoreCache)
951 { 951 {
952 // TODO(clamy): Remove this function once RenderFrame calls load for all 952 // TODO(clamy): Remove this function once RenderFrame calls load for all
953 // requests. 953 // requests.
954 reloadWithOverrideURL(KURL(), ignoreCache); 954 reloadWithOverrideURL(KURL(), ignoreCache);
955 } 955 }
956 956
957 void WebLocalFrameImpl::reloadWithOverrideURL(const WebURL& overrideUrl, bool ig noreCache) 957 void WebLocalFrameImpl::reloadWithOverrideURL(const WebURL& overrideUrl, bool ig noreCache)
(...skipping 717 matching lines...) Expand 10 before | Expand all | Expand 10 after
1675 DEFINE_TRACE(WebLocalFrameImpl) 1675 DEFINE_TRACE(WebLocalFrameImpl)
1676 { 1676 {
1677 visitor->trace(m_frameLoaderClientImpl); 1677 visitor->trace(m_frameLoaderClientImpl);
1678 visitor->trace(m_frame); 1678 visitor->trace(m_frame);
1679 visitor->trace(m_devToolsAgent); 1679 visitor->trace(m_devToolsAgent);
1680 visitor->trace(m_textFinder); 1680 visitor->trace(m_textFinder);
1681 visitor->trace(m_printContext); 1681 visitor->trace(m_printContext);
1682 visitor->trace(m_geolocationClientProxy); 1682 visitor->trace(m_geolocationClientProxy);
1683 visitor->template registerWeakMembers<WebFrame, &WebFrame::clearWeakFrames>( this); 1683 visitor->template registerWeakMembers<WebFrame, &WebFrame::clearWeakFrames>( this);
1684 WebFrame::traceFrames(visitor, this); 1684 WebFrame::traceFrames(visitor, this);
1685 WebFrameImplBase::trace(visitor);
1685 } 1686 }
1686 #endif 1687 #endif
1687 1688
1688 void WebLocalFrameImpl::setCoreFrame(PassRefPtrWillBeRawPtr<LocalFrame> frame) 1689 void WebLocalFrameImpl::setCoreFrame(PassRefPtrWillBeRawPtr<LocalFrame> frame)
1689 { 1690 {
1690 m_frame = frame; 1691 m_frame = frame;
1691 1692
1692 // FIXME: we shouldn't add overhead to every frame by registering these obje cts when they're not used. 1693 // FIXME: we shouldn't add overhead to every frame by registering these obje cts when they're not used.
1693 if (m_frame) { 1694 if (m_frame) {
1694 if (m_client) 1695 if (m_client)
(...skipping 19 matching lines...) Expand all
1714 USBController::provideTo(*m_frame, m_client ? m_client->usbClient() : nullptr); 1715 USBController::provideTo(*m_frame, m_client ? m_client->usbClient() : nullptr);
1715 if (RuntimeEnabledFeatures::webVREnabled()) 1716 if (RuntimeEnabledFeatures::webVREnabled())
1716 VRController::provideTo(*m_frame, m_client ? m_client->webVRClient() : nullptr); 1717 VRController::provideTo(*m_frame, m_client ? m_client->webVRClient() : nullptr);
1717 if (RuntimeEnabledFeatures::wakeLockEnabled()) 1718 if (RuntimeEnabledFeatures::wakeLockEnabled())
1718 ScreenWakeLock::provideTo(*m_frame, m_client ? m_client->wakeLockCli ent() : nullptr); 1719 ScreenWakeLock::provideTo(*m_frame, m_client ? m_client->wakeLockCli ent() : nullptr);
1719 if (RuntimeEnabledFeatures::audioOutputDevicesEnabled()) 1720 if (RuntimeEnabledFeatures::audioOutputDevicesEnabled())
1720 provideAudioOutputDeviceClientTo(*m_frame, AudioOutputDeviceClientIm pl::create()); 1721 provideAudioOutputDeviceClientTo(*m_frame, AudioOutputDeviceClientIm pl::create());
1721 } 1722 }
1722 } 1723 }
1723 1724
1724 PassRefPtrWillBeRawPtr<LocalFrame> WebLocalFrameImpl::initializeCoreFrame(FrameH ost* host, FrameOwner* owner, const AtomicString& name, const AtomicString& fall backName) 1725 void WebLocalFrameImpl::initializeCoreFrame(FrameHost* host, FrameOwner* owner, const AtomicString& name, const AtomicString& fallbackName)
1725 { 1726 {
1726 RefPtrWillBeRawPtr<LocalFrame> frame = LocalFrame::create(m_frameLoaderClien tImpl.get(), host, owner); 1727 setCoreFrame(LocalFrame::create(m_frameLoaderClientImpl.get(), host, owner)) ;
1727 setCoreFrame(frame); 1728 frame()->tree().setName(name, fallbackName);
1728 frame->tree().setName(name, fallbackName);
1729 // We must call init() after m_frame is assigned because it is referenced 1729 // We must call init() after m_frame is assigned because it is referenced
1730 // during init(). Note that this may dispatch JS events; the frame may be 1730 // during init(). Note that this may dispatch JS events; the frame may be
1731 // detached after init() returns. 1731 // detached after init() returns.
1732 frame->init(); 1732 frame()->init();
1733 return frame;
1734 } 1733 }
1735 1734
1736 PassRefPtrWillBeRawPtr<LocalFrame> WebLocalFrameImpl::createChildFrame(const Fra meLoadRequest& request, 1735 PassRefPtrWillBeRawPtr<LocalFrame> WebLocalFrameImpl::createChildFrame(const Fra meLoadRequest& request,
1737 const AtomicString& name, HTMLFrameOwnerElement* ownerElement) 1736 const AtomicString& name, HTMLFrameOwnerElement* ownerElement)
1738 { 1737 {
1739 ASSERT(m_client); 1738 ASSERT(m_client);
1740 TRACE_EVENT0("blink", "WebLocalFrameImpl::createChildframe"); 1739 TRACE_EVENT0("blink", "WebLocalFrameImpl::createChildframe");
1741 WebTreeScopeType scope = frame()->document() == ownerElement->treeScope() 1740 WebTreeScopeType scope = frame()->document() == ownerElement->treeScope()
1742 ? WebTreeScopeType::Document 1741 ? WebTreeScopeType::Document
1743 : WebTreeScopeType::Shadow; 1742 : WebTreeScopeType::Shadow;
1744 WebFrameOwnerProperties ownerProperties(ownerElement->scrollingMode(), owner Element->marginWidth(), ownerElement->marginHeight()); 1743 WebFrameOwnerProperties ownerProperties(ownerElement->scrollingMode(), owner Element->marginWidth(), ownerElement->marginHeight());
1745 WebLocalFrameImpl* webframeChild = toWebLocalFrameImpl(m_client->createChild Frame(this, scope, name, static_cast<WebSandboxFlags>(ownerElement->sandboxFlags ()), ownerProperties)); 1744 RefPtrWillBeRawPtr<WebLocalFrameImpl> webframeChild = toWebLocalFrameImpl(m_ client->createChildFrame(this, scope, name, static_cast<WebSandboxFlags>(ownerEl ement->sandboxFlags()), ownerProperties));
1746 if (!webframeChild) 1745 if (!webframeChild)
1747 return nullptr; 1746 return nullptr;
1748 1747
1749 // FIXME: Using subResourceAttributeName as fallback is not a perfect 1748 // FIXME: Using subResourceAttributeName as fallback is not a perfect
1750 // solution. subResourceAttributeName returns just one attribute name. The 1749 // solution. subResourceAttributeName returns just one attribute name. The
1751 // element might not have the attribute, and there might be other attributes 1750 // element might not have the attribute, and there might be other attributes
1752 // which can identify the element. 1751 // which can identify the element.
1753 RefPtrWillBeRawPtr<LocalFrame> child = webframeChild->initializeCoreFrame(fr ame()->host(), ownerElement, name, ownerElement->getAttribute(ownerElement->subR esourceAttributeName())); 1752 webframeChild->initializeCoreFrame(frame()->host(), ownerElement, name, owne rElement->getAttribute(ownerElement->subResourceAttributeName()));
1754 // Initializing the core frame may cause the new child to be detached, since 1753 // Initializing the core frame may cause the new child to be detached, since
1755 // it may dispatch a load event in the parent. 1754 // it may dispatch a load event in the parent.
1756 if (!child->tree().parent()) 1755 if (!webframeChild->parent())
1757 return nullptr; 1756 return nullptr;
1758 1757
1759 // If we're moving in the back/forward list, we might want to replace the co ntent 1758 // If we're moving in the back/forward list, we might want to replace the co ntent
1760 // of this child frame with whatever was there at that point. 1759 // of this child frame with whatever was there at that point.
1761 RefPtrWillBeRawPtr<HistoryItem> childItem = nullptr; 1760 RefPtrWillBeRawPtr<HistoryItem> childItem = nullptr;
1762 if (isBackForwardLoadType(frame()->loader().loadType()) && !frame()->documen t()->loadEventFinished()) 1761 if (isBackForwardLoadType(frame()->loader().loadType()) && !frame()->documen t()->loadEventFinished())
1763 childItem = PassRefPtrWillBeRawPtr<HistoryItem>(webframeChild->client()- >historyItemForNewChildFrame(webframeChild)); 1762 childItem = PassRefPtrWillBeRawPtr<HistoryItem>(webframeChild->client()- >historyItemForNewChildFrame(webframeChild.get()));
1764 1763
1765 FrameLoadRequest newRequest = request; 1764 FrameLoadRequest newRequest = request;
1766 FrameLoadType loadType = FrameLoadTypeStandard; 1765 FrameLoadType loadType = FrameLoadTypeStandard;
1767 if (childItem) { 1766 if (childItem) {
1768 newRequest = FrameLoadRequest(request.originDocument(), 1767 newRequest = FrameLoadRequest(request.originDocument(),
1769 FrameLoader::resourceRequestFromHistoryItem(childItem.get(), UseProt ocolCachePolicy)); 1768 FrameLoader::resourceRequestFromHistoryItem(childItem.get(), UseProt ocolCachePolicy));
1770 loadType = FrameLoadTypeInitialHistoryLoad; 1769 loadType = FrameLoadTypeInitialHistoryLoad;
1771 } 1770 }
1772 child->loader().load(newRequest, loadType, childItem.get()); 1771 webframeChild->frame()->loader().load(newRequest, loadType, childItem.get()) ;
1773 1772
1774 // Note a synchronous navigation (about:blank) would have already processed 1773 // Note a synchronous navigation (about:blank) would have already processed
1775 // onload, so it is possible for the child frame to have already been 1774 // onload, so it is possible for the child frame to have already been
1776 // detached by script in the page. 1775 // detached by script in the page.
1777 if (!child->tree().parent()) 1776 if (!webframeChild->parent())
1778 return nullptr; 1777 return nullptr;
1779 return child; 1778 return webframeChild->frame();
1780 } 1779 }
1781 1780
1782 void WebLocalFrameImpl::didChangeContentsSize(const IntSize& size) 1781 void WebLocalFrameImpl::didChangeContentsSize(const IntSize& size)
1783 { 1782 {
1784 // This is only possible on the main frame. 1783 // This is only possible on the main frame.
1785 if (m_textFinder && m_textFinder->totalMatchCount() > 0) { 1784 if (m_textFinder && m_textFinder->totalMatchCount() > 0) {
1786 ASSERT(!parent()); 1785 ASSERT(!parent());
1787 m_textFinder->increaseMarkerVersion(); 1786 m_textFinder->increaseMarkerVersion();
1788 } 1787 }
1789 } 1788 }
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
1977 // Internally, Blink uses CommittedMultipleRealLoads to track whether the 1976 // Internally, Blink uses CommittedMultipleRealLoads to track whether the
1978 // next commit should create a new history item or not. Ensure we have 1977 // next commit should create a new history item or not. Ensure we have
1979 // reached that state. 1978 // reached that state.
1980 if (frameLoader.stateMachine()->committedMultipleRealLoads()) 1979 if (frameLoader.stateMachine()->committedMultipleRealLoads())
1981 return; 1980 return;
1982 frameLoader.stateMachine()->advanceTo(FrameLoaderStateMachine::CommittedMult ipleRealLoads); 1981 frameLoader.stateMachine()->advanceTo(FrameLoaderStateMachine::CommittedMult ipleRealLoads);
1983 } 1982 }
1984 1983
1985 void WebLocalFrameImpl::initializeToReplaceRemoteFrame(WebRemoteFrame* oldWebFra me, const WebString& name, WebSandboxFlags flags, const WebFrameOwnerProperties& frameOwnerProperties) 1984 void WebLocalFrameImpl::initializeToReplaceRemoteFrame(WebRemoteFrame* oldWebFra me, const WebString& name, WebSandboxFlags flags, const WebFrameOwnerProperties& frameOwnerProperties)
1986 { 1985 {
1987 Frame* oldFrame = toCoreFrame(oldWebFrame); 1986 Frame* oldFrame = oldWebFrame->toImplBase()->frame();
1988 // Note: this *always* temporarily sets a frame owner, even for main frames! 1987 // Note: this *always* temporarily sets a frame owner, even for main frames!
1989 // When a core Frame is created with no owner, it attempts to set itself as 1988 // When a core Frame is created with no owner, it attempts to set itself as
1990 // the main frame of the Page. However, this is a provisional frame, and may 1989 // the main frame of the Page. However, this is a provisional frame, and may
1991 // disappear, so Page::m_mainFrame can't be updated just yet. 1990 // disappear, so Page::m_mainFrame can't be updated just yet.
1992 OwnPtrWillBeRawPtr<FrameOwner> tempOwner = RemoteBridgeFrameOwner::create(nu llptr, SandboxNone, WebFrameOwnerProperties()); 1991 OwnPtrWillBeRawPtr<FrameOwner> tempOwner = RemoteBridgeFrameOwner::create(nu llptr, SandboxNone, WebFrameOwnerProperties());
1993 RefPtrWillBeRawPtr<LocalFrame> frame = LocalFrame::create(m_frameLoaderClien tImpl.get(), oldFrame->host(), tempOwner.get()); 1992 RefPtrWillBeRawPtr<LocalFrame> frame = LocalFrame::create(m_frameLoaderClien tImpl.get(), oldFrame->host(), tempOwner.get());
1994 frame->setOwner(oldFrame->owner()); 1993 frame->setOwner(oldFrame->owner());
1995 frame->tree().setName(name); 1994 frame->tree().setName(name);
1996 setParent(oldWebFrame->parent()); 1995 setParent(oldWebFrame->parent());
1997 setOpener(oldWebFrame->opener()); 1996 setOpener(oldWebFrame->opener());
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2033 2032
2034 WebDevToolsAgent* WebLocalFrameImpl::devToolsAgent() 2033 WebDevToolsAgent* WebLocalFrameImpl::devToolsAgent()
2035 { 2034 {
2036 return m_devToolsAgent.get(); 2035 return m_devToolsAgent.get();
2037 } 2036 }
2038 2037
2039 void WebLocalFrameImpl::setFrameOwnerProperties(const WebFrameOwnerProperties& f rameOwnerProperties) 2038 void WebLocalFrameImpl::setFrameOwnerProperties(const WebFrameOwnerProperties& f rameOwnerProperties)
2040 { 2039 {
2041 // At the moment, this is only used to replicate frame owner properties 2040 // At the moment, this is only used to replicate frame owner properties
2042 // for frames with a remote owner. 2041 // for frames with a remote owner.
2043 FrameOwner* owner = toCoreFrame(this)->owner(); 2042 FrameOwner* owner = frame()->owner();
2044 ASSERT(owner); 2043 ASSERT(owner);
2045 toRemoteBridgeFrameOwner(owner)->setScrollingMode(frameOwnerProperties.scrol lingMode); 2044 toRemoteBridgeFrameOwner(owner)->setScrollingMode(frameOwnerProperties.scrol lingMode);
2046 toRemoteBridgeFrameOwner(owner)->setMarginWidth(frameOwnerProperties.marginW idth); 2045 toRemoteBridgeFrameOwner(owner)->setMarginWidth(frameOwnerProperties.marginW idth);
2047 toRemoteBridgeFrameOwner(owner)->setMarginHeight(frameOwnerProperties.margin Height); 2046 toRemoteBridgeFrameOwner(owner)->setMarginHeight(frameOwnerProperties.margin Height);
2048 } 2047 }
2049 2048
2050 void WebLocalFrameImpl::sendPings(const WebNode& contextNode, const WebURL& dest inationURL) 2049 void WebLocalFrameImpl::sendPings(const WebNode& contextNode, const WebURL& dest inationURL)
2051 { 2050 {
2052 ASSERT(frame()); 2051 ASSERT(frame());
2053 Element* anchor = contextNode.constUnwrap<Node>()->enclosingLinkEventParentO rSelf(); 2052 Element* anchor = contextNode.constUnwrap<Node>()->enclosingLinkEventParentO rSelf();
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
2212 } 2211 }
2213 2212
2214 WebSandboxFlags WebLocalFrameImpl::effectiveSandboxFlags() const 2213 WebSandboxFlags WebLocalFrameImpl::effectiveSandboxFlags() const
2215 { 2214 {
2216 if (!frame()) 2215 if (!frame())
2217 return WebSandboxFlags::None; 2216 return WebSandboxFlags::None;
2218 return static_cast<WebSandboxFlags>(frame()->loader().effectiveSandboxFlags( )); 2217 return static_cast<WebSandboxFlags>(frame()->loader().effectiveSandboxFlags( ));
2219 } 2218 }
2220 2219
2221 } // namespace blink 2220 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/web/WebLocalFrameImpl.h ('k') | third_party/WebKit/Source/web/WebRemoteFrameImpl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698