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#include "config.h" 279fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#include "PackageNotifier.h" 289fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 299fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#if ENABLE(APPLICATION_INSTALLED) 309fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 319fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#include <wtf/Assertions.h> 329fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#include <wtf/StdLibExtras.h> 339fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 349fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescunamespace WebCore { 359fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 369fed475722a5da7e9fac4d78715b17ca5ed29335Andrei PopescuPackageNotifier::PackageNotifier() 379fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu : m_onResultAvailable(0), m_isInitialized(false), m_timer(this, &PackageNotifier::timerFired) { } 389fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 399fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescuvoid PackageNotifier::setOnResultAvailable(Callback callback) 409fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu{ 419fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu m_onResultAvailable = callback; 429fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu} 439fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 449fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescuvoid PackageNotifier::addPackageNames(const HashSet<String>& packageNames) 459fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu{ 469fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu if (!m_isInitialized) 479fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu m_isInitialized = true; 489fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 499fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu typedef HashSet<String>::const_iterator NamesIterator; 509fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu for (NamesIterator iter = packageNames.begin(); iter != packageNames.end(); ++iter) 519fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu m_packageNames.add(*iter); 529fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 539fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu if (m_onResultAvailable) 549fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu m_onResultAvailable(); 559fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu} 569fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 579fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescuvoid PackageNotifier::addPackageName(const String& packageName) 589fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu{ 599fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu ASSERT(m_isInitialized); 609fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu m_packageNames.add(packageName); 619fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu} 629fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 639fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescuvoid PackageNotifier::removePackageName(const String& packageName) 649fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu{ 659fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu ASSERT(m_isInitialized); 669fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu m_packageNames.remove(packageName); 679fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu} 689fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 699fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescuvoid PackageNotifier::requestPackageResult() 709fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu{ 719fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu if (!m_isInitialized || m_timer.isActive()) 729fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu return; 739fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 749fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu m_timer.startOneShot(0); 759fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu} 769fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 779fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescuvoid PackageNotifier::timerFired(Timer<PackageNotifier>*) 789fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu{ 799fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu m_timer.stop(); 809fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu if (m_onResultAvailable) 819fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu m_onResultAvailable(); 829fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu} 839fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 849fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescubool PackageNotifier::isPackageInstalled(const String& packageName) 859fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu{ 869fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu return m_packageNames.contains(packageName); 879fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu} 889fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 899fed475722a5da7e9fac4d78715b17ca5ed29335Andrei PopescuPackageNotifier& packageNotifier() 909fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu{ 919fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu AtomicallyInitializedStatic(PackageNotifier*, packageNotifier = new PackageNotifier); 929fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu return *packageNotifier; 939fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu} 949fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 959fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu} 969fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 979fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#endif // ENABLE(APPLICATION_INSTALLED) 98