| Index: third_party/WebKit/Source/bindings/core/v8/WindowProxyManager.h
|
| diff --git a/third_party/WebKit/Source/bindings/core/v8/WindowProxyManager.h b/third_party/WebKit/Source/bindings/core/v8/WindowProxyManager.h
|
| index e785aff91e4b21695a72637a0407f71273d9c028..a70c384d0242296dd1daa1e7f12bc0ca2fe7d931 100644
|
| --- a/third_party/WebKit/Source/bindings/core/v8/WindowProxyManager.h
|
| +++ b/third_party/WebKit/Source/bindings/core/v8/WindowProxyManager.h
|
| @@ -5,52 +5,101 @@
|
| #ifndef WindowProxyManager_h
|
| #define WindowProxyManager_h
|
|
|
| +#include "bindings/core/v8/LocalWindowProxy.h"
|
| +#include "bindings/core/v8/RemoteWindowProxy.h"
|
| #include "core/CoreExport.h"
|
| +#include "core/frame/LocalFrame.h"
|
| +#include "core/frame/RemoteFrame.h"
|
| #include "platform/heap/Handle.h"
|
| -#include "wtf/Vector.h"
|
| #include <utility>
|
| #include <v8.h>
|
|
|
| namespace blink {
|
|
|
| class DOMWrapperWorld;
|
| -class Frame;
|
| class SecurityOrigin;
|
| -class WindowProxy;
|
| +class ScriptController;
|
|
|
| -class CORE_EXPORT WindowProxyManager final
|
| - : public GarbageCollected<WindowProxyManager> {
|
| +class WindowProxyManagerBase : public GarbageCollected<WindowProxyManagerBase> {
|
| public:
|
| - static WindowProxyManager* create(Frame&);
|
| -
|
| DECLARE_TRACE();
|
|
|
| - Frame* frame() const { return m_frame.get(); }
|
| v8::Isolate* isolate() const { return m_isolate; }
|
| - WindowProxy* mainWorldProxy() const { return m_windowProxy.get(); }
|
|
|
| + void clearForClose();
|
| + void CORE_EXPORT clearForNavigation();
|
| +
|
| + void CORE_EXPORT
|
| + releaseGlobals(HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>&);
|
| + void CORE_EXPORT
|
| + setGlobals(const HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>&);
|
| +
|
| + protected:
|
| + using IsolatedWorldMap = HeapHashMap<int, Member<WindowProxy>>;
|
| +
|
| + explicit WindowProxyManagerBase(Frame&);
|
| +
|
| + Frame* frame() const { return m_frame; }
|
| + WindowProxy* mainWorldProxy() const { return m_windowProxy.get(); }
|
| WindowProxy* windowProxy(DOMWrapperWorld&);
|
|
|
| - void clearForClose();
|
| - void clearForNavigation();
|
| + IsolatedWorldMap& isolatedWorlds() { return m_isolatedWorlds; }
|
| +
|
| + private:
|
| + v8::Isolate* const m_isolate;
|
| + const Member<Frame> m_frame;
|
| + const Member<WindowProxy> m_windowProxy;
|
| + IsolatedWorldMap m_isolatedWorlds;
|
| +};
|
| +
|
| +template <typename FrameType, typename ProxyType>
|
| +class WindowProxyManagerImplHelper : public WindowProxyManagerBase {
|
| + private:
|
| + using Base = WindowProxyManagerBase;
|
| +
|
| + public:
|
| + FrameType* frame() const { return static_cast<FrameType*>(Base::frame()); }
|
| + ProxyType* mainWorldProxy() const {
|
| + return static_cast<ProxyType*>(Base::mainWorldProxy());
|
| + }
|
| + ProxyType* windowProxy(DOMWrapperWorld& world) {
|
| + return static_cast<ProxyType*>(Base::windowProxy(world));
|
| + }
|
| +
|
| + protected:
|
| + explicit WindowProxyManagerImplHelper(Frame& frame)
|
| + : WindowProxyManagerBase(frame) {}
|
| +};
|
| +
|
| +class LocalWindowProxyManager
|
| + : public WindowProxyManagerImplHelper<LocalFrame, LocalWindowProxy> {
|
| + public:
|
| + static LocalWindowProxyManager* create(LocalFrame& frame) {
|
| + return new LocalWindowProxyManager(frame);
|
| + }
|
|
|
| // Sets the given security origin to the main world's context. Also updates
|
| // the security origin of the context for each isolated world.
|
| void updateSecurityOrigin(SecurityOrigin*);
|
|
|
| - void releaseGlobals(HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>&);
|
| - void setGlobals(const HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>&);
|
| -
|
| private:
|
| - typedef HeapHashMap<int, Member<WindowProxy>> IsolatedWorldMap;
|
| + // TODO(dcheng): Merge LocalWindowProxyManager and ScriptController?
|
| + friend class ScriptController;
|
|
|
| - explicit WindowProxyManager(Frame&);
|
| + explicit LocalWindowProxyManager(LocalFrame& frame)
|
| + : WindowProxyManagerImplHelper<LocalFrame, LocalWindowProxy>(frame) {}
|
| +};
|
|
|
| - Member<Frame> m_frame;
|
| - v8::Isolate* const m_isolate;
|
| +class RemoteWindowProxyManager
|
| + : public WindowProxyManagerImplHelper<RemoteFrame, RemoteWindowProxy> {
|
| + public:
|
| + static RemoteWindowProxyManager* create(RemoteFrame& frame) {
|
| + return new RemoteWindowProxyManager(frame);
|
| + }
|
|
|
| - const Member<WindowProxy> m_windowProxy;
|
| - IsolatedWorldMap m_isolatedWorlds;
|
| + private:
|
| + explicit RemoteWindowProxyManager(RemoteFrame& frame)
|
| + : WindowProxyManagerImplHelper<RemoteFrame, RemoteWindowProxy>(frame) {}
|
| };
|
|
|
| } // namespace blink
|
|
|