19fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu/*
29fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu * Copyright 2010, The Android Open Source Project
39fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu *
49fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu * Redistribution and use in source and binary forms, with or without
59fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu * modification, are permitted provided that the following conditions
69fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu * are met:
79fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu *  * Redistributions of source code must retain the above copyright
89fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu *    notice, this list of conditions and the following disclaimer.
99fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu *  * Redistributions in binary form must reproduce the above copyright
109fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu *    notice, this list of conditions and the following disclaimer in the
119fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu *    documentation and/or other materials provided with the distribution.
129fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu *
139fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
149fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
159fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
169fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
179fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
189fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
199fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
209fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
219fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
229fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
239fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
249fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu */
259fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu
269fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#ifndef PackageNotifier_h
279fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#define PackageNotifier_h
289fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu
299fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#if ENABLE(APPLICATION_INSTALLED)
309fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu
319fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#include "PlatformString.h"
329fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#include "Timer.h"
33dd7ee22af4f03672fa823324323466054f19a054Iain Merrick
349fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#include <wtf/HashSet.h>
359fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#include <wtf/Noncopyable.h>
36dd7ee22af4f03672fa823324323466054f19a054Iain Merrick#include <wtf/text/StringHash.h>
379fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu
389fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescunamespace WebCore {
399fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu
400cae2b1e7dd111cf7081b49cf7411c0066b33cc6Ben Murdochclass PackageNotifier {
410cae2b1e7dd111cf7081b49cf7411c0066b33cc6Ben Murdoch    WTF_MAKE_NONCOPYABLE(PackageNotifier);
429fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescupublic:
439fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu    PackageNotifier();
449fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu
459fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu    typedef void (*Callback)();
469fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu    void setOnResultAvailable(Callback);
479fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu
489fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu    void addPackageNames(const HashSet<String>& packageNames);
499fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu    void addPackageName(const String& packageName);
509fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu    void removePackageName(const String& packageName);
519fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu
529fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu    void requestPackageResult();
539fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu    bool isPackageInstalled(const String& packageName);
549fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu
559fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescuprivate:
569fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu    void timerFired(Timer<PackageNotifier>*);
579fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu
589fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu    Callback m_onResultAvailable;
599fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu
609fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu    HashSet<String> m_packageNames;
619fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu    bool m_isInitialized;
629fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu    Timer<PackageNotifier> m_timer;
639fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu};
649fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu
659fed475722a5da7e9fac4d78715b17ca5ed29335Andrei PopescuPackageNotifier& packageNotifier();
669fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu
679fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu}
689fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu
699fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#endif
709fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu
71b940ad181c917c781eaab144ed645b7c85dbc94eBruce Beare#endif // PackageNotifier_h
72