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