| Index: goopdate/worker.h
|
| diff --git a/goopdate/worker.h b/goopdate/worker.h
|
| deleted file mode 100644
|
| index 2bd364f033ca47e824cf9e3dcd278de285fc145f..0000000000000000000000000000000000000000
|
| --- a/goopdate/worker.h
|
| +++ /dev/null
|
| @@ -1,219 +0,0 @@
|
| -// Copyright 2007-2010 Google Inc.
|
| -//
|
| -// Licensed under the Apache License, Version 2.0 (the "License");
|
| -// you may not use this file except in compliance with the License.
|
| -// You may obtain a copy of the License at
|
| -//
|
| -// http://www.apache.org/licenses/LICENSE-2.0
|
| -//
|
| -// Unless required by applicable law or agreed to in writing, software
|
| -// distributed under the License is distributed on an "AS IS" BASIS,
|
| -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -// See the License for the specific language governing permissions and
|
| -// limitations under the License.
|
| -// ========================================================================
|
| -
|
| -#ifndef OMAHA_GOOPDATE_WORKER_H_
|
| -#define OMAHA_GOOPDATE_WORKER_H_
|
| -
|
| -#include <windows.h>
|
| -#include <atlstr.h>
|
| -#include "base/basictypes.h"
|
| -#include "omaha/base/program_instance.h"
|
| -#include "base/scoped_ptr.h"
|
| -#include "omaha/base/shutdown_callback.h"
|
| -#include "omaha/base/shutdown_handler.h"
|
| -#include "omaha/base/wtl_atlapp_wrapper.h"
|
| -#include "third_party/bar/shared_ptr.h"
|
| -
|
| -namespace omaha {
|
| -
|
| -namespace xml {
|
| -
|
| -class UpdateRequest;
|
| -class UpdateResponse;
|
| -
|
| -} // namespace xml
|
| -
|
| -class AppBundle;
|
| -class DownloadManagerInterface;
|
| -class InstallManagerInterface;
|
| -class Model;
|
| -class Package;
|
| -class Reactor;
|
| -
|
| -// Limited subset of Worker interface that the Model needs.
|
| -class WorkerModelInterface {
|
| - public:
|
| - virtual ~WorkerModelInterface() {}
|
| - virtual HRESULT CheckForUpdateAsync(AppBundle* app_bundle) = 0;
|
| - virtual HRESULT DownloadAsync(AppBundle* app_bundle) = 0;
|
| - virtual HRESULT DownloadAndInstallAsync(AppBundle* app_bundle) = 0;
|
| - virtual HRESULT UpdateAllAppsAsync(AppBundle* app_bundle) = 0;
|
| - virtual HRESULT DownloadPackageAsync(Package* package) = 0;
|
| - virtual HRESULT Stop(AppBundle* app_bundle) = 0;
|
| - virtual HRESULT Pause(AppBundle* app_bundle) = 0;
|
| - virtual HRESULT Resume(AppBundle* app_bundle) = 0;
|
| - virtual HRESULT GetPackage(const Package* package, const CString& dir) = 0;
|
| - virtual bool IsPackageAvailable(const Package* package) const = 0;
|
| - virtual HRESULT PurgeAppLowerVersions(const CString& app_id,
|
| - const CString& version) = 0;
|
| - virtual int Lock() = 0;
|
| - virtual int Unlock() = 0;
|
| -};
|
| -
|
| -// Worker is a singleton.
|
| -class Worker : public WorkerModelInterface, public ShutdownCallback {
|
| - public:
|
| - // Instance, Initialize, and DeleteInstance methods below are not thread safe.
|
| - // The caller must initialize and cleanup the instance before going
|
| - // multithreaded.
|
| -
|
| - // Gets the singleton instance of the class.
|
| - static Worker& Instance();
|
| -
|
| - // Initializes the instance.
|
| - HRESULT Initialize(bool is_machine);
|
| -
|
| - // Cleans up the class instance.
|
| - static void DeleteInstance();
|
| -
|
| - HRESULT Run();
|
| -
|
| - HRESULT Shutdown();
|
| - HRESULT InitializeShutDownHandler();
|
| -
|
| - // TODO(omaha): not clear how to make this an atomic operation. Consider
|
| - // making the model instance a bare pointer instead of smart pointer.
|
| - Model* model() { return model_.get(); }
|
| - const Model* model() const { return model_.get(); }
|
| -
|
| - // Initiates an update check for all apps in the bundle.
|
| - virtual HRESULT CheckForUpdateAsync(AppBundle* app_bundle);
|
| -
|
| - // Initiates download of files necessary to install all apps in the bundle.
|
| - virtual HRESULT DownloadAsync(AppBundle* app_bundle);
|
| -
|
| - // Initiates Download, if necessary, and install all app in the bundle.
|
| - virtual HRESULT DownloadAndInstallAsync(AppBundle* app_bundle);
|
| -
|
| - // Initiates an update of all registered apps and performs periodic tasks
|
| - // related to all apps. Primarily for use by Omaha's /ua client. Includes
|
| - // update check, download and install.
|
| - virtual HRESULT UpdateAllAppsAsync(AppBundle* app_bundle);
|
| -
|
| - // Initiates download of a package.
|
| - virtual HRESULT DownloadPackageAsync(Package* package);
|
| -
|
| - virtual HRESULT Stop(AppBundle* app_bundle);
|
| - virtual HRESULT Pause(AppBundle* app_bundle);
|
| - virtual HRESULT Resume(AppBundle* app_bundle);
|
| -
|
| - virtual HRESULT GetPackage(const Package*, const CString& dir);
|
| -
|
| - virtual bool IsPackageAvailable(const Package* package) const;
|
| -
|
| - virtual HRESULT PurgeAppLowerVersions(const CString& app_id,
|
| - const CString& version);
|
| -
|
| - // Locks and unlocks the server module by incrementing or decrementing
|
| - // the lock count of the module.
|
| - virtual int Lock();
|
| - virtual int Unlock();
|
| -
|
| - private:
|
| - Worker();
|
| - ~Worker();
|
| -
|
| - HRESULT DoRun();
|
| -
|
| - // These functions execute code in the thread pool. They hold an outstanding
|
| - // reference to the application bundle to prevent the application bundle
|
| - // object from being deleted before the functions complete.
|
| - void CheckForUpdate(shared_ptr<AppBundle> app_bundle);
|
| - void Download(shared_ptr<AppBundle> app_bundle);
|
| - void DownloadAndInstall(shared_ptr<AppBundle> app_bundle);
|
| - void DownloadPackage(shared_ptr<AppBundle> app_bundle, Package* package);
|
| - void UpdateAllApps(shared_ptr<AppBundle> app_bundle);
|
| -
|
| - // These functions do the work for the corresponding functions but do not call
|
| - // CompleteAsyncCall().
|
| - void CheckForUpdateHelper(AppBundle* app_bundle, bool* is_check_successful);
|
| - void DownloadAndInstallHelper(AppBundle* app_bundle);
|
| -
|
| - // Stops and destroys the Worker and its members.
|
| - // TODO(omaha): rename this as it overloads WorkerModelInterface::Stop.
|
| - void Stop();
|
| -
|
| - bool EnsureSingleInstance();
|
| -
|
| - void CollectAmbientUsageStats();
|
| -
|
| - void DoPreUpdateCheck(AppBundle* app_bundle,
|
| - xml::UpdateRequest* update_request);
|
| -
|
| - HRESULT CacheOfflinePackages(AppBundle* app_bundle);
|
| -
|
| - HRESULT DoUpdateCheck(AppBundle* app_bundle,
|
| - const xml::UpdateRequest* update_request,
|
| - xml::UpdateResponse* update_response);
|
| - void DoPostUpdateCheck(AppBundle* app_bundle,
|
| - HRESULT update_check_result,
|
| - xml::UpdateResponse* update_response);
|
| -
|
| - HRESULT QueueDeferredFunctionCall0(
|
| - AppBundle* app_bundle,
|
| - void (Worker::*deferred_function)(shared_ptr<AppBundle>));
|
| -
|
| - template <typename P1>
|
| - HRESULT QueueDeferredFunctionCall1(
|
| - AppBundle* app_bundle,
|
| - P1 p1,
|
| - void (Worker::*deferred_function)(shared_ptr<AppBundle>, P1));
|
| -
|
| - void WriteEventLog(int event_type,
|
| - int event_id,
|
| - const CString& event_description,
|
| - const CString& event_text);
|
| -
|
| - bool is_machine_;
|
| - scoped_ptr<ProgramInstance> single_instance_;
|
| - scoped_ptr<Reactor> reactor_;
|
| - scoped_ptr<ShutdownHandler> shutdown_handler_;
|
| - scoped_ptr<Model> model_;
|
| - scoped_ptr<DownloadManagerInterface> download_manager_;
|
| - scoped_ptr<InstallManagerInterface> install_manager_;
|
| -
|
| - CMessageLoop message_loop_;
|
| -
|
| - static Worker* const kInvalidInstance;
|
| - static Worker* instance_;
|
| -
|
| - friend class WorkerTest;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(Worker);
|
| -};
|
| -
|
| -// For unittests, where creation and termination of Worker instances may be
|
| -// required, the implementation disables the dead reference detection. This
|
| -// forces an inline of the code below for unit tests, so different behavior
|
| -// can be achieved, even though the rest of the implementation compiles in
|
| -// a library. It is somehow brittle but good enough for now.
|
| -
|
| -#ifdef UNITTEST
|
| -__forceinline
|
| -#else
|
| - inline
|
| -#endif
|
| -void Worker::DeleteInstance() {
|
| - delete instance_;
|
| -#ifdef UNITTEST
|
| - instance_ = NULL;
|
| -#else
|
| - instance_ = kInvalidInstance;
|
| -#endif
|
| -}
|
| -
|
| -} // namespace omaha
|
| -
|
| -#endif // OMAHA_GOOPDATE_WORKER_H_
|
|
|