Index: Source/web/WebRemoteFrameImpl.cpp |
diff --git a/Source/web/WebRemoteFrameImpl.cpp b/Source/web/WebRemoteFrameImpl.cpp |
index 243653e6db2035b4655ef44a8a35df25d5004d20..d06b510b246c92fa65573bebdfc337034905cd59 100644 |
--- a/Source/web/WebRemoteFrameImpl.cpp |
+++ b/Source/web/WebRemoteFrameImpl.cpp |
@@ -31,25 +31,40 @@ namespace { |
class RemoteBridgeFrameOwner : public NoBaseWillBeGarbageCollectedFinalized<RemoteBridgeFrameOwner>, public FrameOwner { |
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(RemoteBridgeFrameOwner); |
public: |
- static PassOwnPtrWillBeRawPtr<RemoteBridgeFrameOwner> create(PassRefPtrWillBeRawPtr<WebLocalFrameImpl> frame) |
+ static PassOwnPtrWillBeRawPtr<RemoteBridgeFrameOwner> create(PassRefPtrWillBeRawPtr<WebLocalFrameImpl> frame, SandboxFlags flags) |
{ |
- return adoptPtrWillBeNoop(new RemoteBridgeFrameOwner(frame)); |
+ return adoptPtrWillBeNoop(new RemoteBridgeFrameOwner(frame, flags)); |
+ } |
+ |
+ virtual bool isLocal() const override |
+ { |
+ return false; |
+ } |
+ |
+ virtual SandboxFlags sandboxFlags() const override |
+ { |
+ return m_sandboxFlags; |
+ } |
+ |
+ void setSandboxFlags(SandboxFlags flags) |
+ { |
+ m_sandboxFlags = flags; |
} |
- virtual bool isLocal() const override; |
- virtual SandboxFlags sandboxFlags() const override; |
virtual void dispatchLoad() override; |
virtual void trace(Visitor*); |
private: |
- explicit RemoteBridgeFrameOwner(PassRefPtrWillBeRawPtr<WebLocalFrameImpl>); |
+ explicit RemoteBridgeFrameOwner(PassRefPtrWillBeRawPtr<WebLocalFrameImpl>, SandboxFlags); |
RefPtrWillBeMember<WebLocalFrameImpl> m_frame; |
+ SandboxFlags m_sandboxFlags; |
}; |
-RemoteBridgeFrameOwner::RemoteBridgeFrameOwner(PassRefPtrWillBeRawPtr<WebLocalFrameImpl> frame) |
+RemoteBridgeFrameOwner::RemoteBridgeFrameOwner(PassRefPtrWillBeRawPtr<WebLocalFrameImpl> frame, SandboxFlags flags) |
: m_frame(frame) |
+ , m_sandboxFlags(flags) |
{ |
} |
@@ -59,17 +74,6 @@ void RemoteBridgeFrameOwner::trace(Visitor* visitor) |
FrameOwner::trace(visitor); |
} |
-bool RemoteBridgeFrameOwner::isLocal() const |
-{ |
- return false; |
-} |
- |
-SandboxFlags RemoteBridgeFrameOwner::sandboxFlags() const |
-{ |
- // FIXME: Implement. Most likely grab it from m_frame. |
- return 0; |
-} |
- |
void RemoteBridgeFrameOwner::dispatchLoad() |
{ |
// FIXME: Implement. Most likely goes through m_frame->client(). |
@@ -794,11 +798,17 @@ WebString WebRemoteFrameImpl::layerTreeAsText(bool showDebugInfo) const |
return WebString(); |
} |
+// FIXME(alexmos): This will go away once the Chromium side is updated to pass sandbox flags. |
WebLocalFrame* WebRemoteFrameImpl::createLocalChild(const WebString& name, WebFrameClient* client) |
{ |
+ return createLocalChild(name, WebSandboxFlags::None, client); |
+} |
+ |
+WebLocalFrame* WebRemoteFrameImpl::createLocalChild(const WebString& name, WebSandboxFlags sandboxFlags, WebFrameClient* client) |
+{ |
WebLocalFrameImpl* child = toWebLocalFrameImpl(WebLocalFrame::create(client)); |
- WillBeHeapHashMap<WebFrame*, OwnPtrWillBeMember<FrameOwner>>::AddResult result = |
- m_ownersForChildren.add(child, RemoteBridgeFrameOwner::create(child)); |
+ WillBeHeapHashMap<WebFrame*, OwnPtrWillBeMember<FrameOwner> >::AddResult result = |
+ m_ownersForChildren.add(child, RemoteBridgeFrameOwner::create(child, static_cast<SandboxFlags>(sandboxFlags))); |
appendChild(child); |
// FIXME: currently this calls LocalFrame::init() on the created LocalFrame, which may |
// result in the browser observing two navigations to about:blank (one from the initial |
@@ -854,6 +864,12 @@ void WebRemoteFrameImpl::setReplicatedOrigin(const WebSecurityOrigin& origin) co |
frame()->securityContext()->setReplicatedOrigin(origin); |
} |
+void WebRemoteFrameImpl::setReplicatedSandboxFlags(WebSandboxFlags flags) const |
+{ |
+ ASSERT(frame()); |
+ frame()->securityContext()->enforceSandboxFlags(static_cast<SandboxFlags>(flags)); |
+} |
+ |
void WebRemoteFrameImpl::didStartLoading() |
{ |
frame()->setIsLoading(true); |