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)
{
visitor->trace(m_dragCaretController);
visitor->trace(m_dragController);
visitor->trace(m_pointerLockController);
visitor->trace(m_multisamplingChangedObservers);
visitor->trace(m_frameHost);
WillBeHeapSupplementable<Page>::trace(visitor);
......
......@@ -248,7 +248,7 @@ private:
const OwnPtr<FocusController> m_focusController;
const OwnPtr<ContextMenuController> m_contextMenuController;
const OwnPtr<InspectorController> m_inspectorController;
const OwnPtr<PointerLockController> m_pointerLockController;
const OwnPtrWillBeMember<PointerLockController> m_pointerLockController;
OwnPtr<ScrollingCoordinator> m_scrollingCoordinator;
const OwnPtr<UndoStack> m_undoStack;
......
......@@ -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)
......@@ -166,4 +166,11 @@ void PointerLockController::enqueueEvent(const AtomicString& type, Document* doc
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
......@@ -37,11 +37,11 @@ class Page;
class PlatformMouseEvent;
class VoidCallback;
class PointerLockController {
class PointerLockController FINAL : public NoBaseWillBeGarbageCollected<PointerLockController> {
WTF_MAKE_NONCOPYABLE(PointerLockController);
WTF_MAKE_FAST_ALLOCATED;
WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED;
public:
static PassOwnPtr<PointerLockController> create(Page*);
static PassOwnPtrWillBeRawPtr<PointerLockController> create(Page*);
void requestPointerLock(Element* target);
void requestPointerUnlock();
......@@ -55,16 +55,18 @@ public:
void didLosePointerLock();
void dispatchLockedMouseEvent(const PlatformMouseEvent&, const AtomicString& eventType);
void trace(Visitor*);
private:
explicit PointerLockController(Page*);
void clearElement();
void enqueueEvent(const AtomicString& type, Element*);
void enqueueEvent(const AtomicString& type, Document*);
Page* m_page;
RawPtrWillBeMember<Page> m_page;
bool m_lockPending;
RefPtrWillBePersistent<Element> m_element;
RefPtrWillBePersistent<Document> m_documentOfRemovedElementWhileWaitingForUnlock;
RefPtrWillBeMember<Element> m_element;
RefPtrWillBeMember<Document> m_documentOfRemovedElementWhileWaitingForUnlock;
};
} // 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