// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "modules/geofencing/WorkerNavigatorGeofencing.h"

#include "core/workers/WorkerNavigator.h"
#include "modules/geofencing/Geofencing.h"

namespace blink {

WorkerNavigatorGeofencing::WorkerNavigatorGeofencing()
{
}

WorkerNavigatorGeofencing::~WorkerNavigatorGeofencing()
{
}

const char* WorkerNavigatorGeofencing::supplementName()
{
    return "WorkerNavigatorGeofencing";
}

WorkerNavigatorGeofencing& WorkerNavigatorGeofencing::from(WorkerNavigator& navigator)
{
    WorkerNavigatorGeofencing* supplement = static_cast<WorkerNavigatorGeofencing*>(Supplement<WorkerNavigator>::from(navigator, supplementName()));
    if (!supplement) {
        supplement = new WorkerNavigatorGeofencing();
        provideTo(navigator, supplementName(), supplement);
    }
    return *supplement;
}

Geofencing* WorkerNavigatorGeofencing::geofencing(WorkerNavigator& navigator)
{
    return WorkerNavigatorGeofencing::from(navigator).geofencing();
}

Geofencing* WorkerNavigatorGeofencing::geofencing()
{
    if (!m_geofencing)
        m_geofencing = Geofencing::create(nullptr);
    return m_geofencing.get();
}

DEFINE_TRACE(WorkerNavigatorGeofencing)
{
    visitor->trace(m_geofencing);
    Supplement<WorkerNavigator>::trace(visitor);
}

} // namespace blink
