10019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch/*
20019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * Copyright (C) 2008 Apple Inc. All Rights Reserved.
30019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch *
40019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * Redistribution and use in source and binary forms, with or without
50019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * modification, are permitted provided that the following conditions
60019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * are met:
70019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * 1. Redistributions of source code must retain the above copyright
80019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch *    notice, this list of conditions and the following disclaimer.
90019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright
100019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch *    notice, this list of conditions and the following disclaimer in the
110019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch *    documentation and/or other materials provided with the distribution.
120019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch *
130019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
140019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
150019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
160019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
170019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
180019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
190019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
200019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
210019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
220019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
230019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
240019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch *
250019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch */
260019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch
270019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch#include "config.h"
280019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch#include "core/platform/LifecycleObserver.h"
290019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch
300019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch#include "core/platform/LifecycleContext.h"
310019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch
320019e4eead4d990e4304c54a9028aca9122fb256Ben Murdochnamespace WebCore {
330019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch
340019e4eead4d990e4304c54a9028aca9122fb256Ben MurdochLifecycleObserver::LifecycleObserver(LifecycleContext* lifecycleContext, Type type)
350019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch    : m_lifecycleContext(0)
36ede7d0ec43b4c8737d917f2c5ad872a7b36ca9a8Torne (Richard Coles)    , m_observerType(type)
370019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch{
38ede7d0ec43b4c8737d917f2c5ad872a7b36ca9a8Torne (Richard Coles)    observeContext(lifecycleContext);
390019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch}
400019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch
410019e4eead4d990e4304c54a9028aca9122fb256Ben MurdochLifecycleObserver::~LifecycleObserver()
420019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch{
43ede7d0ec43b4c8737d917f2c5ad872a7b36ca9a8Torne (Richard Coles)    observeContext(0);
440019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch}
450019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch
46ede7d0ec43b4c8737d917f2c5ad872a7b36ca9a8Torne (Richard Coles)void LifecycleObserver::observeContext(LifecycleContext* context)
470019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch{
480019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch    if (m_lifecycleContext) {
490019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch        ASSERT(m_lifecycleContext->isContextThread());
50ede7d0ec43b4c8737d917f2c5ad872a7b36ca9a8Torne (Richard Coles)        m_lifecycleContext->wasUnobservedBy(this);
510019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch    }
520019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch
530019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch    m_lifecycleContext = context;
540019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch
550019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch    if (m_lifecycleContext) {
560019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch        ASSERT(m_lifecycleContext->isContextThread());
57ede7d0ec43b4c8737d917f2c5ad872a7b36ca9a8Torne (Richard Coles)        m_lifecycleContext->wasObservedBy(this);
580019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch    }
590019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch}
600019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch
610019e4eead4d990e4304c54a9028aca9122fb256Ben Murdochvoid LifecycleObserver::contextDestroyed()
620019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch{
630019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch    m_lifecycleContext = 0;
640019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch}
650019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch
660019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch} // namespace WebCore
67