Commit d5c7988f authored by sigbjornf@opera.com's avatar sigbjornf@opera.com

Oilpan: move Page's PointerLockController object to the heap.

Move this Page-owned controller object to the heap, allowing a pair
of Persistent<> references to be removed in the process.

R=ager@chromium.org
BUG=340522

Review URL: https://codereview.chromium.org/328133002

git-svn-id: svn://svn.chromium.org/blink/trunk@175957 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 652f39e8
...@@ -586,6 +586,7 @@ void Page::trace(Visitor* visitor) ...@@ -586,6 +586,7 @@ void Page::trace(Visitor* visitor)
{ {
visitor->trace(m_dragCaretController); visitor->trace(m_dragCaretController);
visitor->trace(m_dragController); visitor->trace(m_dragController);
visitor->trace(m_pointerLockController);
visitor->trace(m_multisamplingChangedObservers); visitor->trace(m_multisamplingChangedObservers);
visitor->trace(m_frameHost); visitor->trace(m_frameHost);
WillBeHeapSupplementable<Page>::trace(visitor); WillBeHeapSupplementable<Page>::trace(visitor);
......
...@@ -248,7 +248,7 @@ private: ...@@ -248,7 +248,7 @@ private:
const OwnPtr<FocusController> m_focusController; const OwnPtr<FocusController> m_focusController;
const OwnPtr<ContextMenuController> m_contextMenuController; const OwnPtr<ContextMenuController> m_contextMenuController;
const OwnPtr<InspectorController> m_inspectorController; const OwnPtr<InspectorController> m_inspectorController;
const OwnPtr<PointerLockController> m_pointerLockController; const OwnPtrWillBeMember<PointerLockController> m_pointerLockController;
OwnPtr<ScrollingCoordinator> m_scrollingCoordinator; OwnPtr<ScrollingCoordinator> m_scrollingCoordinator;
const OwnPtr<UndoStack> m_undoStack; const OwnPtr<UndoStack> m_undoStack;
......
...@@ -41,9 +41,9 @@ PointerLockController::PointerLockController(Page* page) ...@@ -41,9 +41,9 @@ PointerLockController::PointerLockController(Page* page)
{ {
} }
PassOwnPtr<PointerLockController> PointerLockController::create(Page* page) PassOwnPtrWillBeRawPtr<PointerLockController> PointerLockController::create(Page* page)
{ {
return adoptPtr(new PointerLockController(page)); return adoptPtrWillBeNoop(new PointerLockController(page));
} }
void PointerLockController::requestPointerLock(Element* target) void PointerLockController::requestPointerLock(Element* target)
...@@ -166,4 +166,11 @@ void PointerLockController::enqueueEvent(const AtomicString& type, Document* doc ...@@ -166,4 +166,11 @@ void PointerLockController::enqueueEvent(const AtomicString& type, Document* doc
document->domWindow()->enqueueDocumentEvent(Event::create(type)); document->domWindow()->enqueueDocumentEvent(Event::create(type));
} }
void PointerLockController::trace(Visitor* visitor)
{
visitor->trace(m_page);
visitor->trace(m_element);
visitor->trace(m_documentOfRemovedElementWhileWaitingForUnlock);
}
} // namespace WebCore } // namespace WebCore
...@@ -37,11 +37,11 @@ class Page; ...@@ -37,11 +37,11 @@ class Page;
class PlatformMouseEvent; class PlatformMouseEvent;
class VoidCallback; class VoidCallback;
class PointerLockController { class PointerLockController FINAL : public NoBaseWillBeGarbageCollected<PointerLockController> {
WTF_MAKE_NONCOPYABLE(PointerLockController); WTF_MAKE_NONCOPYABLE(PointerLockController);
WTF_MAKE_FAST_ALLOCATED; WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED;
public: public:
static PassOwnPtr<PointerLockController> create(Page*); static PassOwnPtrWillBeRawPtr<PointerLockController> create(Page*);
void requestPointerLock(Element* target); void requestPointerLock(Element* target);
void requestPointerUnlock(); void requestPointerUnlock();
...@@ -55,16 +55,18 @@ public: ...@@ -55,16 +55,18 @@ public:
void didLosePointerLock(); void didLosePointerLock();
void dispatchLockedMouseEvent(const PlatformMouseEvent&, const AtomicString& eventType); void dispatchLockedMouseEvent(const PlatformMouseEvent&, const AtomicString& eventType);
void trace(Visitor*);
private: private:
explicit PointerLockController(Page*); explicit PointerLockController(Page*);
void clearElement(); void clearElement();
void enqueueEvent(const AtomicString& type, Element*); void enqueueEvent(const AtomicString& type, Element*);
void enqueueEvent(const AtomicString& type, Document*); void enqueueEvent(const AtomicString& type, Document*);
Page* m_page; RawPtrWillBeMember<Page> m_page;
bool m_lockPending; bool m_lockPending;
RefPtrWillBePersistent<Element> m_element; RefPtrWillBeMember<Element> m_element;
RefPtrWillBePersistent<Document> m_documentOfRemovedElementWhileWaitingForUnlock; RefPtrWillBeMember<Document> m_documentOfRemovedElementWhileWaitingForUnlock;
}; };
} // namespace WebCore } // namespace WebCore
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment