17242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
27242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Use of this source code is governed by a BSD-style license that can be
37242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// found in the LICENSE file.
47242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
57242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "config.h"
67242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "modules/presentation/NavigatorPresentation.h"
77242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
87242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/dom/Document.h"
97242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/frame/LocalFrame.h"
107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/frame/Navigator.h"
117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "modules/presentation/Presentation.h"
127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "platform/heap/Handle.h"
137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccinamespace blink {
157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciNavigatorPresentation::NavigatorPresentation(LocalFrame* frame)
177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    : DOMWindowProperty(frame)
187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciNavigatorPresentation::~NavigatorPresentation()
227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// static
267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciconst char* NavigatorPresentation::supplementName()
277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    return "NavigatorPresentation";
297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// static
327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciNavigatorPresentation& NavigatorPresentation::from(Navigator& navigator)
337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    NavigatorPresentation* supplement = static_cast<NavigatorPresentation*>(WillBeHeapSupplement<Navigator>::from(navigator, supplementName()));
357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    if (!supplement) {
367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        supplement = new NavigatorPresentation(navigator.frame());
377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        provideTo(navigator, supplementName(), adoptPtrWillBeNoop(supplement));
387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    }
397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    return *supplement;
407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// static
437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciPresentation* NavigatorPresentation::presentation(Navigator& navigator)
447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    return NavigatorPresentation::from(navigator).presentation();
467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciPresentation* NavigatorPresentation::presentation()
497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    if (!m_presentation) {
517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        if (!frame())
527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            return 0;
537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        m_presentation = Presentation::create(frame()->document());
547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    }
557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    return m_presentation.get();
567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid NavigatorPresentation::trace(Visitor* visitor)
597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    visitor->trace(m_presentation);
617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    WillBeHeapSupplement<Navigator>::trace(visitor);
627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    DOMWindowProperty::trace(visitor);
637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} // namespace blink
66